Name: series-workflownd558 Phase: Succeeded StartedAt: 2026-07-10 06:14:42 +0000 UTC FinishedAt: 2026-07-10 11:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[0] Phase: Succeeded StartedAt: 2026-07-10 06:14:42 +0000 UTC FinishedAt: 2026-07-10 06:43:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 06:14:42 +0000 UTC FinishedAt: 2026-07-10 06:43:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "6763d3f95456c0850a20c8676a1032c8216eda56", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "6763d3f95456c0850a20c8676a1032c8216eda56", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE" ], "series_id": "da87b656-168c-4c5b-a7bf-18da1eb94602" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memremap_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTdiODZlY2U1NWZiMWY4ZGM2MDQxNWFkMGE3ZjJjNjZhNzdjNDI0M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDA2OjM5OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbmluZGV4IDQ2MzU2MTY4NjNmNTNkLi4xZTYzNDI2NGEzMWJkMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpZmRlZiBfX0tFUk5FTF9fXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiBcbiAvKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqL1xuIFxuQEAgLTgyLDcgJiM0Mzs4MywzNSBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpO1xuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0O1xuJiM0MztcdFx0ICAgICA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O3JcJiMzNDsoKihjb25zdCB1NjQgKilzcmMpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdG1vdm50aV84KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfOChkc3QgJiM0MzsgOCwgc3JjICYjNDM7IDgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDE2LCBzcmMgJiM0MzsgMTYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuIHtcbiBcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4gXHRcdHN3aXRjaCAoY250KSB7XG5AQCAtOTYsMTAgJiM0MzsxMjUsNTcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3RcbiBcdFx0XHRcdGFzbSAoXCYjMzQ7bW92bnRpcSAlMSwgJTBcJiMzNDsgOiBcJiMzNDs9bVwmIzM0OygqKHU2NCAqKWRzdCkgOiBcJiMzNDtyXCYjMzQ7KCoodTY0ICopc3JjKSk7XG4gXHRcdFx0XHRhc20gKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7IDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6IFwmIzM0O3JcJiMzNDsoKih1NjQgKikoc3JjICYjNDM7IDgpKSk7XG4gXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGVcbiYjNDM7XHRcdFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cbiYjNDM7XHRcdFx0ICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuJiM0MztcdFx0XHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemVcbiYjNDM7XHRcdFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRjYXNlIDMyOlxuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRjYXNlIDQ4OlxuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0bW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgNjQ6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgODA6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA5NjpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1xuIFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiB9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIG1lbWNweV9udCBtZW1jcHlfbnRcbiYjNDM7LypcbiYjNDM7ICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG50IGNvcHkgcHJpbWl0aXZlLlxuJiM0MzsgKiBDYWxsZXJzIHBhaXIgaXQgd2l0aCBtZW1jcHlfbnRfZHJhaW4oKSB3aGVuIGxhdGVyIHN0b3JlcyBtdXN0IGJlXG4mIzQzOyAqIG9yZGVyZWQgYWZ0ZXIgdGhlIGNvcHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuJiM0Mzt7XG4mIzQzO1x0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgbWVtY3B5X250X2RyYWluIG1lbWNweV9udF9kcmFpblxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9yZGVyIHRoZSBwcmlvciBNT1ZOVEkgc3RvcmVzIGlzc3VlZCBieSBtZW1jcHlfZmx1c2hjYWNoZSgpXG4mIzQzO1x0ICogYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0d21iKCk7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjQzMzQzYmZjZTQ5MzZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yNTQxLDExICYjNDM7MjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbiB7XG4gXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiB9XG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uYTEwOWIyZjg2Y2E2ZDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgJiM0MzsyNzgsMjkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbnRcbiYjNDM7LypcbiYjNDM7ICogbWVtY3B5X250KCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZSBhcmNoaXRlY3R1cmUgaGFzIGFcbiYjNDM7ICogc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBvdmVycmlkZSBpdCBmYWxsIGJhY2sgdG9cbiYjNDM7ICogbWVtY3B5KCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X250KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuJiM0Mzt7XG4mIzQzO1x0bWVtY3B5KGRzdCwgc3JjLCBjbnQpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbnRfZHJhaW5cbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVycyB1c2UgbWVtY3B5X250X2RyYWluKCkgYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMgdGhhdCBuZWVkIHRvXG4mIzQzOyAqIGJlIG9yZGVyZWQgYWZ0ZXIgbWVtY3B5X250KCkuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhIHNwZWNpYWxpemVkXG4mIzQzOyAqIGJhY2tlbmQgY2FuIGxlYXZlIGl0IGVtcHR5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udF9kcmFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZGRiNDk2OTU4N2VmYSAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSAmIzQzOzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbi1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0cnVlIHdoZW4gdGhlIGZyZWUgcGF0aCBmb3IgdGhpcyBwYWdlbWFwIHR5cGUgcmVzdG9yZXMgdGhlIHBhZ2VcbiYjNDM7ICogcmVmY291bnQgdG8gMSwgc28gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBjYW4ga2VlcCB0aGUgY291bnQgc2V0IGJ5XG4mIzQzOyAqIF9faW5pdF9zaW5nbGVfcGFnZSgpLiBPdGhlcndpc2UgaW5pdGlhbGl6ZSB0aGUgcmVmY291bnQgdG8gMCBhbmQgbGVhdmVcbiYjNDM7ICogaXQgdG8gdGhlIGFsbG9jYXRvciBvciBwZ21hcCBjYWxsYmFja3MgdG8gcmFpc2UgaXQgd2hlbiB0aGUgcGFnZSBpc1xuJiM0MzsgKiBoYW5kZWQgb3V0IGFnYWluLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4mIzQzO1x0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbiYjNDM7XHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuIHtcbi1cbiBcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xuIFxuIFx0LypcbkBAIC0xMDI4LDI3ICYjNDM7MTA1NCw3MyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuJiM0Mzt7XG4mIzQzO1x0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0aWYgKCFwYWdlbWFwX3Jlc2V0c19yZWZjb3VudChwZ21hcCkpXG4mIzQzO1x0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbiYjNDM7fVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKHZvaWQpXG4mIzQzO3tcbiBcdC8qXG4tXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXG4tXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XG4tXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cbi1cdCAqXG4tXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXG4tXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxuLVx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXG4mIzQzO1x0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcbiYjNDM7XHQgKiBpbnN0cnVtZW50ZWQuXG4gXHQgKi9cbi1cdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuLVx0XHRicmVhaztcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxuLVx0XHRicmVhaztcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuXG4mIzQzO1x0ICogU2tpcCBpdCB3aGVuIHRoZSBwYWdlX3JlZl9zZXQgdHJhY2Vwb2ludCBpcyBlbmFibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqICYjMzk7dGVtcGxhdGUmIzM5OyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlXG4mIzQzOyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnlcbiYjNDM7ICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4mIzQzOyAqIG9uIHRoZSBQRk4uIFJlZnJlc2ggdGhvc2UgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZVxuJiM0MzsgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnRlbXBsYXRlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbiYjNDM7XHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbiYjNDM7XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqICYjMzk7dGVtcGxhdGUmIzM5OyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxuJiM0MztcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbiYjNDM7XHQgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbiYjNDM7XHRtZW1jcHlfbnQocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuIH1cbiBcbiAvKlxuQEAgLTEwNzksMTAgJiM0MzsxMTUxLDEyIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4sXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxuLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgdXNlX3RlbXBsYXRlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC1cdTAwM2V2bWVtbWFwX3NoaWZ0O1xuJiM0MztcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMyAmIzQzOzExNjUsMzkgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4gXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXG4gXHQgKi9cbiBcdF9fU2V0UGFnZUhlYWQoaGVhZCk7XG4mIzQzO1xuIFx0Zm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO1x0XHRpZiAoIXVzZV90ZW1wbGF0ZSkge1xuJiM0MztcdFx0XHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHBmbiA9PSBoZWFkX3BmbiAmIzQzOyAxKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxuJiM0MztcdFx0XHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcbiYjNDM7XHRcdFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbiYjNDM7XHRcdFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XG4mIzQzO1x0XHRcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiB0aGUgdGVtcGxhdGUgcGF0aCBpcyBlbmFibGVkLCBvcmRlciB0aGUgcHJlY2VkaW5nIHRhaWwtcGFnZSBjb3BpZXNcbiYjNDM7XHQgKiBiZWZvcmUgcHJlcF9jb21wb3VuZF9oZWFkKCkgdXBkYXRlcyB0aGUgb3ZlcmxhcHBpbmcgY29tcG91bmQgbWV0YWRhdGFcbiYjNDM7XHQgKiBpbiB0aGUgZmlyc3QgdGFpbC1wYWdlIGRlc2NyaXB0b3JzLiBJZiBtZW1jcHlfbnQoKSBmZWxsIGJhY2sgdG9cbiYjNDM7XHQgKiByZWd1bGFyIGNhY2hlZCBzdG9yZXMsIG1lbWNweV9udF9kcmFpbigpIG1heSBiZSBhIG5vLW9wLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1c2VfdGVtcGxhdGUpXG4mIzQzO1x0XHRtZW1jcHlfbnRfZHJhaW4oKTtcbiBcdHByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7XG4gfVxuIFxuQEAgLTExMDYsNiAmIzQzOzEyMDYsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdCAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4ge1xuJiM0MztcdGJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IHN0YXJ0X3BmbiAmIzQzOyBucl9wYWdlcztcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXHRzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCA9IHBnbWFwX2FsdG1hcChwZ21hcCk7XG5AQCAtMTExMyw2ICYjNDM7MTIxNCw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcztcbiBcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuJiM0MztcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTEzMCw3ICYjNDM7MTIzMiwyNCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4gXG4tXHRcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdFx0aWYgKCF1c2VfdGVtcGxhdGUpIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmlkLCBwZ21hcCk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UsIGJlY2F1c2UgdGhlIGV4aXN0aW5nXG4mIzQzO1x0XHRcdCAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbFxuJiM0MztcdFx0XHQgKiBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuJiM0MztcdFx0XHRcdFx0XHQgICBuaWQsIHBnbWFwKTtcbiYjNDM7XHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTEzOCw5ICYjNDM7MTI1NywyNiBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRpZiAocGZuc19wZXJfY29tcG91bmQgPT0gMSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgaGVhZC1wYWdlIGNvcHlcbiYjNDM7XHRcdCAqIGJlZm9yZSBtZW1tYXBfaW5pdF9jb21wb3VuZCgpLCB3aGljaCBpbW1lZGlhdGVseSB1cGRhdGVzIGNvbXBvdW5kLWhlYWRcbiYjNDM7XHRcdCAqIG1ldGFkYXRhLiBJZiBtZW1jcHlfbnQoKSBmZWxsIGJhY2sgdG8gcmVndWxhciBjYWNoZWQgc3RvcmVzLFxuJiM0MztcdFx0ICogbWVtY3B5X250X2RyYWluKCkgbWF5IGJlIGEgbm8tb3AuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh1c2VfdGVtcGxhdGUpXG4mIzQzO1x0XHRcdG1lbWNweV9udF9kcmFpbigpO1xuJiM0MztcbiBcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbi1cdFx0XHRcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XG4mIzQzO1x0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApLFxuJiM0MztcdFx0XHRcdCAgICAgdXNlX3RlbXBsYXRlKTtcbiBcdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSBhbnkgcHJpb3IgdGVtcGxhdGUgY29waWVzIGFyZSBvcmRlcmVkIGJlZm9yZSByZXR1cm5pbmcuXG4mIzQzO1x0ICogT24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBtZW1jcHlfbnQoKSB1c2VkIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcyxcbiYjNDM7XHQgKiBtZW1jcHlfbnRfZHJhaW4oKSBtYXkgYmUgYSBuby1vcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodXNlX3RlbXBsYXRlKVxuJiM0MztcdFx0bWVtY3B5X250X2RyYWluKCk7XG4gXG4gXHRwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZShzdGFydF9wZm4sIG5yX3BhZ2VzLCBNSUdSQVRFX01PVkFCTEUpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxN2I4NmVjZTU1ZmIxZjhkYzYwNDE1YWQwYTdmMmM2NmE3N2M0MjQzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMDY6Mzk6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCmluZGV4IDQ2MzU2MTY4NjNmNTNkLi4xZTYzNDI2NGEzMWJkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgKQEAgLTQsNiAmIzQzOzQsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgJmx0O2xpbnV4L2p1bXBfbGFiZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKIAogLyogV3JpdHRlbiAyMDAyIGJ5IEFuZGkgS2xlZW4gKi8KIApAQCAtODIsNyAmIzQzOzgzLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDEKIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHU2NCAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV84KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzgoZHN0ICYjNDM7IDgsIHNyYyAmIzQzOyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8xNihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQkJCQkgICAgICBzaXplX3QgY250KQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7CiAJCXN3aXRjaCAoY250KSB7CkBAIC05NiwxMCAmIzQzOzEyNSw1NyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdAogCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopc3JjKSk7CiAJCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopKHNyYyAmIzQzOyA4KSkpOwogCQkJCXJldHVybjsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUKJiM0MzsJCQkgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLgomIzQzOwkJCSAqIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGwKJiM0MzsJCQkgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUKJiM0MzsJCQkgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYXNlIDMyOgomIzQzOwkJCQltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA0ODoKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCWNhc2UgNjQ6CiYjNDM7CQkJCW1vdm50aV82NChkc3QsIHNyYyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDgwOgomIzQzOwkJCQltb3ZudGlfNjQoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA5NjoKJiM0MzsJCQkJbW92bnRpXzY0KGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsKJiM0MzsJCQkJcmV0dXJuOwogCQl9CiAJfQomIzQzOwogCV9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiB9CiYjNDM7CiYjNDM7I2RlZmluZSBtZW1jcHlfbnQgbWVtY3B5X250CiYjNDM7LyoKJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbnQgY29weSBwcmltaXRpdmUuCiYjNDM7ICogQ2FsbGVycyBwYWlyIGl0IHdpdGggbWVtY3B5X250X2RyYWluKCkgd2hlbiBsYXRlciBzdG9yZXMgbXVzdCBiZQomIzQzOyAqIG9yZGVyZWQgYWZ0ZXIgdGhlIGNvcHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9udCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCkKJiM0Mzt7CiYjNDM7CW1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIG1lbWNweV9udF9kcmFpbiBtZW1jcHlfbnRfZHJhaW4KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBPcmRlciB0aGUgcHJpb3IgTU9WTlRJIHN0b3JlcyBpc3N1ZWQgYnkgbWVtY3B5X2ZsdXNoY2FjaGUoKQomIzQzOwkgKiBiZWZvcmUgbGF0ZXIgbm9ybWFsIHN0b3Jlcy4KJiM0MzsJICovCiYjNDM7CXdtYigpOwomIzQzO30KICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDQ4NWRmOWMyZGJkZGIzLi40MzM0M2JmY2U0OTM2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjU0MSwxMSAmIzQzOzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbikKIAlwYWdlLSZndDtmbGFncy5mIHw9IChzZWN0aW9uICZhbXA7IFNFQ1RJT05TX01BU0spICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiB7CiAJcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBTRUNUSU9OU19QR1NISUZUKSAmYW1wOyBTRUNUSU9OU19NQVNLOwogfQogI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZikKIHsKIAlyZXR1cm4gMDsKQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsCiB7CiAJc2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTsKIAlzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpOwotI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHUwotCXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7Ci0jZW5kaWYKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDU3MDJkYWNhNDMyNmI3Li5hMTA5YjJmODZjYTZkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0yNzgsNiAmIzQzOzI3OCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgbWVtY3B5X250CiYjNDM7LyoKJiM0MzsgKiBtZW1jcHlfbnQoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBoYXMgYQomIzQzOyAqIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgb3ZlcnJpZGUgaXQgZmFsbCBiYWNrIHRvCiYjNDM7ICogbWVtY3B5KCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCkKJiM0Mzt7CiYjNDM7CW1lbWNweShkc3QsIHNyYywgY250KTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBtZW1jcHlfbnRfZHJhaW4KJiM0MzsvKgomIzQzOyAqIENhbGxlcnMgdXNlIG1lbWNweV9udF9kcmFpbigpIGJlZm9yZSBsYXRlciBub3JtYWwgc3RvcmVzIHRoYXQgbmVlZCB0bwomIzQzOyAqIGJlIG9yZGVyZWQgYWZ0ZXIgbWVtY3B5X250KCkuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhIHNwZWNpYWxpemVkCiYjNDM7ICogYmFja2VuZCBjYW4gbGVhdmUgaXQgZW1wdHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udF9kcmFpbih2b2lkKQomIzQzO3sKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTsKIApkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZGRiNDk2OTU4N2VmYSAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMTAwNSwxMSAmIzQzOzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpCiB9CiAKICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0UKLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0cnVlIHdoZW4gdGhlIGZyZWUgcGF0aCBmb3IgdGhpcyBwYWdlbWFwIHR5cGUgcmVzdG9yZXMgdGhlIHBhZ2UKJiM0MzsgKiByZWZjb3VudCB0byAxLCBzbyBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIGNhbiBrZWVwIHRoZSBjb3VudCBzZXQgYnkKJiM0MzsgKiBfX2luaXRfc2luZ2xlX3BhZ2UoKS4gT3RoZXJ3aXNlIGluaXRpYWxpemUgdGhlIHJlZmNvdW50IHRvIDAgYW5kIGxlYXZlCiYjNDM7ICogaXQgdG8gdGhlIGFsbG9jYXRvciBvciBwZ21hcCBjYWxsYmFja3MgdG8gcmFpc2UgaXQgd2hlbiB0aGUgcGFnZSBpcwomIzQzOyAqIGhhbmRlZCBvdXQgYWdhaW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZQomIzQzOwkgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZQomIzQzOwkgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuCiYjNDM7CSAqLwomIzQzOwlzd2l0Y2ggKHBnbWFwLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6CiYjNDM7CWNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6CiYjNDM7CWNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzoKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKIAkJCQkJICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQogewotCiAJX19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7CiAKIAkvKgpAQCAtMTAyOCwyNyAmIzQzOzEwNTQsNzMgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAogCSAqLwogCXBhZ2VfZm9saW8ocGFnZSktJmd0O3BnbWFwID0gcGdtYXA7CiAJcGFnZS0mZ3Q7em9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiYjNDM7CQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQomIzQzO3sKJiM0MzsJX196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CWlmICghcGFnZW1hcF9yZXNldHNfcmVmY291bnQocGdtYXApKQomIzQzOwkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7CiYjNDM7fQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCh2b2lkKQomIzQzO3sKIAkvKgotCSAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWQKLQkgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50Ci0JICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuCi0JICoKLQkgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlCi0JICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXIKLQkgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS4KJiM0MzsJICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXkKJiM0MzsJICogaW5zdHJ1bWVudGVkLgogCSAqLwotCXN3aXRjaCAocGdtYXAtJmd0O3R5cGUpIHsKLQljYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOgotCWNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOgotCWNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDoKLQljYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQToKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7Ci0JCWJyZWFrOwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCWNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOgotCQlicmVhazsKLQl9CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuCiYjNDM7CSAqIFNraXAgaXQgd2hlbiB0aGUgcGFnZV9yZWZfc2V0IHRyYWNlcG9pbnQgaXMgZW5hYmxlZC4KJiM0MzsJICovCiYjNDM7CWlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiYjNDM7CQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCwKJiM0MzsJCXVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwomIzQzOwlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwomIzQzOwlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiAmIzM5O3RlbXBsYXRlJiMzOTsgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZQomIzQzOyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnkKJiM0MzsgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS0mZ3Q7dmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kCiYjNDM7ICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlCiYjNDM7ICogY29weWluZyBpdCBpbnRvIEBwYWdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7CiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMCiYjNDM7CWlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKQomIzQzOwkJc2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiAmIzM5O3RlbXBsYXRlJiMzOTsgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3QKJiM0MzsJICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdAomIzQzOwkgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS4KJiM0MzsJICovCiYjNDM7CXpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pOwomIzQzOwltZW1jcHlfbnQocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpOwogfQogCiAvKgpAQCAtMTA3OSwxMCAmIzQzOzExNTEsMTIgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4sCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAomIzQzOwkJCQkgICAgICAgYm9vbCB1c2VfdGVtcGxhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlczsKIAl1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuCkBAIC0xMDkxLDEzICYjNDM7MTE2NSwzOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uCiAJICovCiAJX19TZXRQYWdlSGVhZChoZWFkKTsKJiM0MzsKIAlmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwotCQlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0MzsJCWlmICghdXNlX3RlbXBsYXRlKSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLAomIzQzOwkJCQkJCSAgIHBnbWFwLCBoZWFkLCBvcmRlcik7CiYjNDM7CQl9IGVsc2UgaWYgKHBmbiA9PSBoZWFkX3BmbiAmIzQzOyAxKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGUKJiM0MzsJCQkgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2UKJiM0MzsJCQkgKiBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZAomIzQzOwkJCSAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdAomIzQzOwkJCSAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuCiYjNDM7CQkJICovCiYjNDM7CQkJem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLAomIzQzOwkJCQkJCSAgIHBnbWFwLCBoZWFkLCBvcmRlcik7CiYjNDM7CQkJLyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovCiYjNDM7CQkJbWVtY3B5KCZhbXA7dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sCiYjNDM7CQkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKJiM0MzsJCX0KIAl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gdGhlIHRlbXBsYXRlIHBhdGggaXMgZW5hYmxlZCwgb3JkZXIgdGhlIHByZWNlZGluZyB0YWlsLXBhZ2UgY29waWVzCiYjNDM7CSAqIGJlZm9yZSBwcmVwX2NvbXBvdW5kX2hlYWQoKSB1cGRhdGVzIHRoZSBvdmVybGFwcGluZyBjb21wb3VuZCBtZXRhZGF0YQomIzQzOwkgKiBpbiB0aGUgZmlyc3QgdGFpbC1wYWdlIGRlc2NyaXB0b3JzLiBJZiBtZW1jcHlfbnQoKSBmZWxsIGJhY2sgdG8KJiM0MzsJICogcmVndWxhciBjYWNoZWQgc3RvcmVzLCBtZW1jcHlfbnRfZHJhaW4oKSBtYXkgYmUgYSBuby1vcC4KJiM0MzsJICovCiYjNDM7CWlmICh1c2VfdGVtcGxhdGUpCiYjNDM7CQltZW1jcHlfbnRfZHJhaW4oKTsKIAlwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpOwogfQogCkBAIC0xMTA2LDYgJiM0MzsxMjA2LDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkJCSAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiB7CiYjNDM7CWJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXM7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtJmd0O3pvbmVfcGdkYXQ7CiAJc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSBwZ21hcF9hbHRtYXAocGdtYXApOwpAQCAtMTExMyw2ICYjNDM7MTIxNCw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJdW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwogCWludCBuaWQgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpCiAJCXJldHVybjsKQEAgLTExMzAsNyAmIzQzOzEyMzIsMjQgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuICZsdDsgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAKLQkJX19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CQlpZiAoIXVzZV90ZW1wbGF0ZSkgewomIzQzOwkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsCiYjNDM7CQkJCQkJICAgbmlkLCBwZ21hcCk7CiYjNDM7CQl9IGVsc2UgaWYgKHBmbiA9PSBzdGFydF9wZm4pIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZQomIzQzOwkJCSAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UsIGJlY2F1c2UgdGhlIGV4aXN0aW5nCiYjNDM7CQkJICogcGFnZS1pbml0IGFuZCBwYWdlYmxvY2sgaGVscGVycyBleHBlY3QgYSByZWFsCiYjNDM7CQkJICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LgomIzQzOwkJCSAqLwomIzQzOwkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsCiYjNDM7CQkJCQkJICAgbmlkLCBwZ21hcCk7CiYjNDM7CQkJLyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovCiYjNDM7CQkJbWVtY3B5KCZhbXA7dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sCiYjNDM7CQkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKJiM0MzsJCX0KIAogCQlpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSkKIAkJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTEzOCw5ICYjNDM7MTI1NywyNiBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogCQlpZiAocGZuc19wZXJfY29tcG91bmQgPT0gMSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQkvKgomIzQzOwkJICogV2hlbiB0aGUgdGVtcGxhdGUgcGF0aCBpcyBlbmFibGVkLCBvcmRlciB0aGUgcHJlY2VkaW5nIGhlYWQtcGFnZSBjb3B5CiYjNDM7CQkgKiBiZWZvcmUgbWVtbWFwX2luaXRfY29tcG91bmQoKSwgd2hpY2ggaW1tZWRpYXRlbHkgdXBkYXRlcyBjb21wb3VuZC1oZWFkCiYjNDM7CQkgKiBtZXRhZGF0YS4gSWYgbWVtY3B5X250KCkgZmVsbCBiYWNrIHRvIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcywKJiM0MzsJCSAqIG1lbWNweV9udF9kcmFpbigpIG1heSBiZSBhIG5vLW9wLgomIzQzOwkJICovCiYjNDM7CQlpZiAodXNlX3RlbXBsYXRlKQomIzQzOwkJCW1lbWNweV9udF9kcmFpbigpOwomIzQzOwogCQltZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLAotCQkJCSAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7CiYjNDM7CQkJCSAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSwKJiM0MzsJCQkJICAgICB1c2VfdGVtcGxhdGUpOwogCX0KJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIGFueSBwcmlvciB0ZW1wbGF0ZSBjb3BpZXMgYXJlIG9yZGVyZWQgYmVmb3JlIHJldHVybmluZy4KJiM0MzsJICogT24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBtZW1jcHlfbnQoKSB1c2VkIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcywKJiM0MzsJICogbWVtY3B5X250X2RyYWluKCkgbWF5IGJlIGEgbm8tb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAodXNlX3RlbXBsYXRlKQomIzQzOwkJbWVtY3B5X250X2RyYWluKCk7CiAKIAlwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZShzdGFydF9wZm4sIG5yX3BhZ2VzLCBNSUdSQVRFX01PVkFCTEUpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcHRpbWl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhaW1zIHRvIG9wdGltaXplIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFRoZXkmIzM5O3JlIGRvaW5nIHRoaXMgd2l0aCBhIHRlbXBsYXRlIGFuZCBub24tdGVtcG9yYWwgbWVtb3J5IGNvcGllcyB1c2luZyBgbWVtY3B5X250YC4gSW50ZXJlc3RpbmcgYXBwcm9hY2guIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIGEgZmV3IGtleSBhcmVhczogYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgYGluY2x1ZGUvbGludXgvbW0uaGAsIGBpbmNsdWRlL2xpbnV4L3N0cmluZy5oYCwgYW5kIGBtbS9tbV9pbml0LmNgLiBUaGF0IG1ha2VzIHNlbnNlOyBoZWFkZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZGVmaW5pdGlvbnMsIGFuZCB0aGVuIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uCgpUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgKmNhbiogd2UgcmVhbGlzdGljYWxseSB0ZXN0IHRoaXM/IFRoZSBwYXRjaCB0b3VjaGVzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIHNvIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgWk9ORV9ERVZJQ0UgbWVtb3J5IGluaXRpYWxpemF0aW9uLiBaT05FX0RFVklDRT8gUmlnaHQsIHRoYXQmIzM5O3MgREFYLCBwbWVtLCB0aG9zZSBraW5kcyBvZiBkZXZpY2VzLiBOb3csIGNhbiB0aGlzIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IEhtbS4uLiB5ZWFoLCB3aXRoIGBuZF9wbWVtYCBvciBzaW1pbGFyIGRyaXZlcnMsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNpbXVsYXRlIGl0LiBHb29kLCBnb29kLCB0aGF0IG9wZW5zIHVwIHRlc3Rpbmcgc2lnbmlmaWNhbnRseS4gV2FpdCBhIHNlY29uZC4uLiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGFsc28gY2FsbGVkIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBmb3IgWk9ORV9ERVZJQ0UhIFRoYXQgYnJvYWRlbnMgdGhlIHRlc3Rpbmcgd2luZG93IGV2ZW4gZnVydGhlciwgd2hpY2ggaXMgZXhjZWxsZW50LgoKSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXTigJlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gQW55IG9wdGltaXphdGlvbiBoZXJlLCBlc3BlY2lhbGx5IGludm9sdmluZyBsb3ctbGV2ZWwgbWVtb3J5IG9wZXJhdGlvbnMsIGhhcyB0aGUgcG90ZW50aWFsIGZvciBuYXN0eSBzaWRlIGVmZmVjdHMgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYnVncy4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbGVycyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBzdGFydCBsb29raW5nIGZvciBpbnRlcmVzdGluZyB0ZXN0IGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MTMxMT1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMC1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyMTpleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzIyLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTtcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTI0MS1cdCAqL1xubW0vbWVtcmVtYXAuYzoyNDI6XHRtZW1tYXBfaW5pdF96b25lX2RldmljZShcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcbm1tL21lbXJlbWFwLmMtMjQzLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxuLS1cbm1tL21tX2luaXQuYz05Njg9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTEwMDktICogUmV0dXJuIHRydWUgd2hlbiB0aGUgZnJlZSBwYXRoIGZvciB0aGlzIHBhZ2VtYXAgdHlwZSByZXN0b3JlcyB0aGUgcGFnZVxubW0vbW1faW5pdC5jOjEwMTA6ICogcmVmY291bnQgdG8gMSwgc28gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBjYW4ga2VlcCB0aGUgY291bnQgc2V0IGJ5XG5tbS9tbV9pbml0LmMtMTAxMS0gKiBfX2luaXRfc2luZ2xlX3BhZ2UoKS4gT3RoZXJ3aXNlIGluaXRpYWxpemUgdGhlIHJlZmNvdW50IHRvIDAgYW5kIGxlYXZlXG4tLVxubW0vbW1faW5pdC5jPTExNTA9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4tLVxubW0vbW1faW5pdC5jLTEyMDMtXG5tbS9tbV9pbml0LmM6MTIwNDp2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxubW0vbW1faW5pdC5jLTEyMDUtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODYxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYHBhZ2VtYXBfcmFuZ2VgIENhbGxlcnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBgcGFnZW1hcF9yYW5nZWAgd2l0aGluIGBtbS9tZW1yZW1hcC5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgd2hlcmUgYHBhZ2VtYXBfcmFuZ2VgIGlzIGJlaW5nIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgaW1tZWRpYXRlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGluc2lnaHQgaW50byAqd2h5KiBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCwgdGhlcmVmb3JlLCB0aGUgbmF0dXJlIG9mIHRoZSBwcm9ibGVtIG9yIHRhc2sgYXQgaGFuZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1yZW1hcC5jPTEzNz1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuLS1cbm1tL21lbXJlbWFwLmMtMTQzLVxubW0vbWVtcmVtYXAuYzoxNDQ6c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG5tbS9tZW1yZW1hcC5jLTE0NS1cdFx0aW50IHJhbmdlX2lkLCBpbnQgbmlkKVxuLS1cbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYy0zMzctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbXJlbWFwLmM6MzM4Olx0XHRlcnJvciA9IHBhZ2VtYXBfcmFuZ2UocGdtYXAsIFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcbm1tL21lbXJlbWFwLmMtMzM5LVx0XHRpZiAoZXJyb3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI5OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBtZW1yZW1hcF9wYWdlc2AgVXNhZ2UqKgoKUmlnaHQsIGBtZW1yZW1hcF9wYWdlc2AuLi4gdGhhdCBmdW5jdGlvbiBpcyBhIGtleXN0b25lLCBpc24mIzM5O3QgaXQ/IFRoZSBzaGVlciBudW1iZXIgb2YgZHJpdmVycyB0aGF0IGNhbGwgaW50byBpdCBpcyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnIOKAkyBvciwgcmF0aGVyLCBhIHBvaW50IG9mIHNpZ25pZmljYW50IGludGVyZXN0LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicmVhZHRoIG9mIGl0cyBpbXBhY3QuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFsbCB0eXBlcyBvZiBkcml2ZXJzLiBXaGF0IGFyZSB0aGUgY29tbW9uIHVzZS1jYXNlcz8gSXMgaXQgbWVtb3J5IG1hcHBpbmcgZm9yIGRldmljZSBhY2Nlc3M/IERNQSB0cmFuc2ZlcnM/IFZpcnR1YWwgYWRkcmVzcyBtYW5pcHVsYXRpb24/IEVhY2ggZHJpdmVyJiMzOTtzIG1vdGl2YXRpb24gYmVoaW5kIGNhbGxpbmcgYG1lbXJlbWFwX3BhZ2VzYCBhZGRzIGEgbGF5ZXIgb2YgY29tcGxleGl0eS4gSSYjMzk7bGwgd2FudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29udGV4dCB3aXRoaW4gZWFjaCBjYWxsZXIsIHRoZSBzcGVjaWZpYyBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgb2YgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEFueSBzdWJ0bGUgbWlzdXNlIG9yIHVuaW50ZW5kZWQgYmVoYXZpb3IgaW4gYG1lbXJlbWFwX3BhZ2VzYCBjb3VsZCBwcm9wYWdhdGUgaXNzdWVzIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGNvbXBvbmVudHMuIFRoaXMgcmVxdWlyZXMgc29tZSBkZWVwIGRpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNzQ9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4NS0gICAgcGFnZW1hcC5vcHMgPSBcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyODY6ICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yODctXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5MC1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyOTE6VGhlcmUgYXJlIGFsc28gZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjkyLWRldm1fbWVtdW5tYXBfcGFnZXMoKSwgYW5kIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkgd2hlbiB0aGUgcmVzb3VyY2VzIGNhblxuLS1cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNDE9dG8ga2VlcCB0aGUgbWVtb3J5IHBpbm5lZCBmb3IgYWN0aXZlIHVzZS4gYFpPTkVfREVWSUNFYCwgdmlhXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTQyOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLCBwZXJmb3JtcyBqdXN0IGVub3VnaCBtZW1vcnkgaG90cGx1ZyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE0My10dXJuIG9uIDpjOmZ1bmM6YHBmbl90b19wYWdlYCwgOmM6ZnVuYzpgcGFnZV90b19wZm5gLCBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTU3PW1lbW9yeSBob3RwbHVnLiBTdWItc2VjdGlvbiBzdXBwb3J0IGFsbG93cyBmb3IgMk1CIGFzIHRoZSBjcm9zcy1hcmNoXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTU4OmNvbW1vbiBhbGlnbm1lbnQgZ3JhbnVsYXJpdHkgZm9yIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLlxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE1OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM2LSAgICBwYWdlbWFwLm9wcyA9IFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzc6ICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNDI66L+Y5pyJZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0My1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MTA3PVpPTkVfREVWSUNFXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTEt5LqL5a6e5pyJ5YWz77ya6L+Z5Lqb5Zyw5Z2A6IyD5Zu055qE6aG16Z2i5a+56LGh5LuO5pyq6KKr5Zyo57q/5qCH6K6w6L+H77yM6ICM5LiU5b+F6aG75a+56K6+5aSH6L+b6KGM5byV55So77yM6ICM5LiN5LuF5LuFXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjExMjrmmK/pobXpnaLvvIzku6Xkv53mjIHlhoXlrZjooqvigJzplIHlrprigJ3ku6Xkvr/kvb/nlKjjgIIgYFpPTkVfREVWSUNFYCDvvIzpgJrov4cgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMy3kuLrnu5nlrprnmoRwZm5z6IyD5Zu05omn6KGM6Laz5aSf55qE5YaF5a2Y54Ot5o+S5ouU5p2l5byA5ZCvIDpjOmZ1bmM6YHBmbl90b19wYWdlYO+8jFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTIyLTpjOmZ1bmM6YGFyY2hfYWRkX21lbW9yeWAg77yM5Y2z5YaF5a2Y54Ot5o+S5ouU55qE5LiK5Y2K6YOo5YiG44CC5a2Q5q615pSv5oyB5YWB6K64Mk1C5L2c5Li6XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjEyMzo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDnmoTot6jmnrbmnoTpgJrnlKjlr7npvZDpopfnspLluqbjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTI0LVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9MTE1OD1pbnQga3ZtcHBjX3V2bWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODktXHRrdm1wcGNfdXZtZW1fcGdtYXAub3duZXIgPSBcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXA7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjExOTA6XHRhZGRyID0gbWVtcmVtYXBfcGFnZXMoXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwLCBOVU1BX05PX05PREUpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTkxLVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjQ9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc2LVx0LypcbmFyY2gveDg2L21tL2luaXRfNjQuYzo5Nzc6XHQgKiBTcGVjaWFsIGNhc2U6IGFkZF9wYWdlcygpIGlzIGNhbGxlZCBieSBtZW1yZW1hcF9wYWdlcygpIGZvciBhZGRpbmcgZGV2aWNlXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc4LVx0ICogcHJpdmF0ZSBwYWdlcy4gRG8gbm90IGJ1bXAgdXAgbWF4X3BmbiBpbiB0aGUgZGV2aWNlIHByaXZhdGUgcGF0aCxcbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNC1cdFx0XHRvcmRlcl9iYXNlXzIoZGV2X2RheC1cdTAwM2VhbGlnbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNi1cdGlmIChJU19FUlIoYWRkcikpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0yMDc9c3RhdGljIGludCBmc2Rldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzMtXG5kcml2ZXJzL2RheC9mc2Rldi5jOjI3NDpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzUtXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDY4Olx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cdGlmIChJU19FUlIocikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0yOTY9bm91dmVhdV9kbWVtX2NodW5rX2FsbG9jKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLCBzdHJ1Y3QgcGFnZSAqKnBwYWdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzMi1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjMzMzpcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFx1MDAyNmNodW5rLVx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzNC1cdGlmIChJU19FUlIocHRyKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzYwPXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDEtXHRwYWdlbWFwLVx1MDAzZW9wcyA9IGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzX2dldCgpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4MDI6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDMtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM9MzgxPXN0YXRpYyBpbnQgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtKHN0cnVjdCBtc2h2X3Z0bCAqdnRsLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMC1cdCAqIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSByYW5nZSBpcyBhbGlnbmVkOyBpLmUuIGJvdGggdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoLlxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDExOlx0ICogQ2xhbXAgdG8gTUFYX0ZPTElPX09SREVSIHRvIGF2b2lkIGEgV0FSTiBpbiBtZW1yZW1hcF9wYWdlcygpIHdoZW4gdGhlIHJhbmdlXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTItXHQgKiBhbGlnbm1lbnQgZXhjZWVkcyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgZm9saW8gb3JkZXIgZm9yIHRoaXMga2VybmVsIGNvbmZpZy5cbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTktXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjA6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjEtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjI6XHRcdGRldl9lcnIodnRsLVx1MDAzZW1vZHVsZV9kZXYsIFwmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcblwmIzM0OywgUFRSX0VSUihhZGRyKSk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjMtXHRcdGtmcmVlKHBnbWFwKTtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1MS1cdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcdCAgY29yZSBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgaW1wbGVtZW50YXRpb24gYW5kIG90aGVyXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cdCAgaW5mcmFzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MTctXHRcdHBtZW0tXHUwMDNlcGdtYXAub3BzID0gXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTE4Olx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxOS1cdFx0cGZuX3NiID0gbmRfcGZuLVx1MDAzZXBmbl9zYjtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTMwLVx0XHRwbWVtLVx1MDAzZXBnbWFwLm9wcyA9IFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUzMTpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcdTAwMjZwbWVtLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXHRcdGJiX3JhbmdlID0gcG1lbS1cdTAwM2VwZ21hcC5yYW5nZTtcbi0tXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jPTkzND1FWFBPUlRfU1lNQk9MKG5kX3JlZ2lvbl9yZWxlYXNlX2xhbmUpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM2LS8qXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jOjkzNzogKiBQb3dlclBDIHJlcXVpcmVzIHRoaXMgYWxpZ25tZW50IGZvciBtZW1yZW1hcF9wYWdlcygpLiBBbGwgb3RoZXIgYXJjaHNcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM4LSAqIHNob3VsZCBiZSBvayB3aXRoIFNVQlNFQ1RJT05fU0laRSAoc2VlIG1lbXJlbWFwX2NvbXBhdF9hbGlnbigpKS5cbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYz0zODc9aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzo0Mzc6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk2LVx0XHRkZXZfaW5mby1cdTAwM2VwZ21hcC5ucl9yYW5nZVx0PSAxO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2luZm8tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTgtXHRcdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jPTM3PXN0YXRpYyBpbnQgZmlsbF9saXN0KHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyMy1cbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM6MTI0Olx0dmFkZHIgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgTlVNQV9OT19OT0RFKTtcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTI1LVx0aWYgKElTX0VSUih2YWRkcikpIHtcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTEwNzY9c3RhdGljIGludCB2aXJ0aW9fZnNfc2V0dXBfZGF4KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBzdHJ1Y3QgdmlydGlvX2ZzICpmcylcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTYtXHQvKiBJZGVhbGx5IHdlIHdvdWxkIGRpcmVjdGx5IHVzZSB0aGUgUENJIEJBUiByZXNvdXJjZSBidXRcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE4LVx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI2LVxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3Olx0ZnMtXHUwMDNld2luZG93X2thZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZ2ZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI4LVx0aWYgKElTX0VSUihmcy1cdTAwM2V3aW5kb3dfa2FkZHIpKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE1LSAqIEBhbHRtYXA6IHByZS1hbGxvY2F0ZWQvcmVzZXJ2ZWQgbWVtb3J5IGZvciB2bWVtbWFwIGFsbG9jYXRpb25zXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIyNz12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMjgtXHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyMjk6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMwLXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjMxOnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzItdm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjQtI2Vsc2VcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjU6c3RhdGljIGlubGluZSB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjYtXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2OC1cdC8qXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY5Olx0ICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjcwLVx0ICogWk9ORV9ERVZJQ0Ugc3VwcG9ydCBlbmFibGVkLCB0aGlzIHJlcXVpcmVzIGNhbGxlcnMgdG8gZmFsbFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yODc9c3RhdGljIGlubGluZSBib29sIHBnbWFwX3Bmbl92YWxpZChzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCB1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkxLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI5MjovKiB3aGVuIG1lbXJlbWFwX3BhZ2VzKCkgaXMgZGlzYWJsZWQgYWxsIGFyY2hzIGNhbiByZW1hcCBhIHNpbmdsZSBwYWdlICovXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkzLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1yZW1hcF9jb21wYXRfYWxpZ24odm9pZClcbi0tXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcbi0tXG5saWIvdGVzdF9obW0uYy02MTUtXHR9XG5saWIvdGVzdF9obW0uYzo2MTY6XHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcdTAwMjZkZXZtZW0tXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xubGliL3Rlc3RfaG1tLmMtNjE3LVx0aWYgKElTX0VSUl9PUl9OVUxMKHB0cikpIHtcbi0tXG5tbS9tZW1yZW1hcC5jPTE3PXN0YXRpYyBERUZJTkVfWEFSUkFZKHBnbWFwX2FycmF5KTtcbi0tXG5tbS9tZW1yZW1hcC5jLTE5LS8qXG5tbS9tZW1yZW1hcC5jOjIwOiAqIFRoZSBtZW1yZW1hcCgpIGFuZCBtZW1yZW1hcF9wYWdlcygpIGludGVyZmFjZXMgYXJlIGFsdGVybmF0ZWx5IHVzZWRcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XG5tbS9tZW1yZW1hcC5jLTIyLSAqIGNvbnN0cmFpbnRzIG9uIHRoZSBhbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIG1hcHBpbmcgKG5hbWVzcGFjZSkuXG5tbS9tZW1yZW1hcC5jOjIzOiAqIG1lbXJlbWFwKCkgY2FuIG1hcCBpbmRpdmlkdWFsIFBBR0VfU0laRSBwYWdlcy4gbWVtcmVtYXBfcGFnZXMoKSBjYW5cbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxubW0vbWVtcmVtYXAuYzoyNTogKiB0aGUgbWluaW11bSBtYXBwaW5nIGdyYW51bGFyaXR5IG9mIG1lbXJlbWFwX3BhZ2VzKCkgaXMgMTZNQi5cbm1tL21lbXJlbWFwLmMtMjYtICpcbi0tXG5tbS9tZW1yZW1hcC5jPTEzMD1FWFBPUlRfU1lNQk9MX0dQTChtZW11bm1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTEzMS1cbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxubW0vbWVtcmVtYXAuYy0xMzMte1xuLS1cbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm1tL21lbXJlbWFwLmMtMjYxLS8qXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcbm1tL21lbXJlbWFwLmM6MjYzOiAqIG1lbXVubWFwX3BhZ2VzKCkuICBQbGVhc2UgdXNlIGRldm1fbWVtcmVtYXBfcGFnZXMgaWYgeW91IGhhdmUgYSBzdHJ1Y3Rcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cbm1tL21lbXJlbWFwLmM6MjY2OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG5tbS9tZW1yZW1hcC5jLTI2Ny17XG4tLVxubW0vbWVtcmVtYXAuYy0zNTEtfVxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0zNTMtXG5tbS9tZW1yZW1hcC5jLTM1NC0vKipcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xuLS1cbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICYjMzk7bGl2ZSYjMzk7IG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XG5tbS9tZW1yZW1hcC5jOjM2ODogKiAgICBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UoKSB0aW1lLCBvciBpZiB0aGlzIHJvdXRpbmUgZmFpbHMuXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxuLS1cbm1tL21lbXJlbWFwLmMtMzczLSAqL1xubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM3NS17XG4tLVxubW0vbWVtcmVtYXAuYy0zNzgtXG5tbS9tZW1yZW1hcC5jOjM3OTpcdHJldCA9IG1lbXJlbWFwX3BhZ2VzKHBnbWFwLCBkZXZfdG9fbm9kZShkZXYpKTtcbm1tL21lbXJlbWFwLmMtMzgwLVx0aWYgKElTX0VSUihyZXQpKVxuLS1cbm1tL21lbXJlbWFwLmMtMzgyLVxubW0vbWVtcmVtYXAuYzozODM6XHRlcnJvciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSxcbm1tL21lbXJlbWFwLmMtMzg0LVx0XHRcdHBnbWFwKTtcbi0tXG5tbS9tZW1yZW1hcC5jLTM4OC19XG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMzkwLVxubW0vbWVtcmVtYXAuYz0zOTE9dm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzkyLXtcbm1tL21lbXJlbWFwLmM6MzkzOlx0ZGV2bV9yZWxlYXNlX2FjdGlvbihkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSwgcGdtYXApO1xubW0vbWVtcmVtYXAuYy0zOTQtfVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9NDAyPWludCBfX21lbWluaXQgdm1lbW1hcF9wb3B1bGF0ZV9odWdlcGFnZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYy00NTktICpcbm1tL3NwYXJzZS12bWVtbWFwLmM6NDYwOiAqIE5vdGUgdGhhdCBtZW1yZW1hcF9wYWdlcygpIHJlc2V0cyBAbnJfcmFuZ2UgdmFsdWUgYW5kIHdpbGwgaW5jcmVtZW50XG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2MS0gKiBpdCBhZnRlciBlYWNoIHJhbmdlIHN1Y2Nlc3NmdWwgb25saW5pbmcuIFRodXMgdGhlIHZhbHVlIG9yIEBucl9yYW5nZVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZD0xMz1sZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ6MTQ6bGRmbGFncy15ICYjNDM7PSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkLTE1LWxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYz0xMDg9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE0LVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjExNTp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIxLVx0aWYgKCFuZml0X3JlcylcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMjI6XHRcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEyMy1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMzU6RVhQT1JUX1NZTUJPTF9HUEwoX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNi1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oPTIxMj12b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxMy1cdFx0c2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaDoyMTQ6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ4MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgUGF0Y2gqKgoKT2theSwgc28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMuIEkgc2VlIGl0JiMzOTtzIHVzZWQgaW4gYGxpYi90ZXN0X2htbS5jYCwgdGhhdCYjMzk7cyBvdXIgdGVzdGluZyBtb2R1bGUsIGFzIHdlbGwgYXMgdGhlIHBtZW0gZHJpdmVyIChgZHJpdmVycy9udmRpbW0vcG1lbS5jYCkgYW5kIGFsc28gYGRyaXZlcnMvZGF4L2RldmljZS5jYC4gU28sIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYWN0aXZlbHkgdXNlZC4KCkFscmlnaHQsIHRpbWUgdG8gcmV2aXNpdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyBhZGRpbmcgYSBgbWVtY3B5X250YCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIG5vbi10ZW1wb3JhbCBtZW1jcHkgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zIG9uIHg4Nl82NCwgYSBuZWF0IG9wdGltaXphdGlvbi4gVGhlIG1haW4gdGhpbmcgdGhpcyBwYXRjaCBkb2VzIGlzIG1vZGlmeSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHRvIGxldmVyYWdlIGBtZW1jcHlfbnRgLiBUaGUgZ29hbCBpcyB0byBjb3B5IGZyb20gYSB0ZW1wbGF0ZSBwYWdlIGluc3RlYWQgb2YgcGFpbnN0YWtpbmdseSBpbml0aWFsaXppbmcgZWFjaCBpbmRpdmlkdWFsIHBhZ2UgZnJvbSBzY3JhdGNoLiBTb3VuZHMgbGlrZSBhIG5pY2Ugb3B0aW1pemF0aW9uIGZvciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBlc3BlY2lhbGx5IGZvciBsYXJnZXIgbWVtb3J5IHJlZ2lvbnMuCgpOb3csIEkmIzM5O20gc2VlaW5nIHRoaXMgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZGAgZnVuY3Rpb24gaW4gdGhlIHBhdGNoLiBUaGlzIGlzIGtleSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIG9wdGltaXphdGlvbiBpcyAqZW5hYmxlZCouIFdhaXQgYSBtaW51dGUuLi4gaWYgS0FTQU4gb3IgS01TQU4gYXJlIGVuYWJsZWQsIGl0IHJldHVybnMgZmFsc2UuIFRoZSBvcHRpbWl6YXRpb24gaXMgKmRpc2FibGVkKiEgQW5kIGFsc28gaWYgdGhlIGBwYWdlX3JlZl9zZXRgIHRyYWNlcG9pbnQgaXMgYWN0aXZlLCB0aGF0IGRpc2FibGVzIGl0IHRvby4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGF0LiBMZXQmIzM5O3MgZGlnIGludG8gYG1tL21tX2luaXQuY2AgYW5kIGNoZWNrIGhvdyBgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRob3NlIHBhcnRpY3VsYXIgY29uZGl0aW9ucyB3YXJyYW50IGRpc2FibGluZyB0aGUgb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTEwNTk9c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vbW1faW5pdC5jLTEwNjctXG5tbS9tbV9pbml0LmM6MTA2ODpzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKHZvaWQpXG5tbS9tbV9pbml0LmMtMTA2OS17XG4tLVxubW0vbW1faW5pdC5jPTEyMDQ9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtMTIwOC17XG5tbS9tbV9pbml0LmM6MTIwOTpcdGJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7XG5tbS9tbV9pbml0LmMtMTIxMC1cdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gc3RhcnRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZsYWcsIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgLCBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgZGlzc2VjdGluZyB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3B0aW1pemF0aW9uIGlzIGJlaW5nIGVuYWJsZWQgaGVyZSwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiBpdCYjMzk7cyBiZWluZyBpbXBsZW1lbnRlZC4gJiMzNDtab25lIGRldmljZSBwYWdlIGluaXQmIzM0OyDigJMgdGhhdCBwaHJhc2UgYWxvbmUgdGVsbHMgbWUgdGhpcyByZWxhdGVzIHRvIHRoZSBpbml0aWFsIHNldHVwIG9mIG1lbW9yeSBwYWdlcyB3aXRoaW4gYSBwYXJ0aWN1bGFyIHpvbmUgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBkZXZpY2UgbWVtb3J5IG9yIGEgRE1BIHpvbmUuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIGFyb3VuZCB0aGUgdHJhZGUtb2Zmcy4gV2hhdCBhcmUgd2Ugb3B0aW1pemluZyBmb3I/IElzIGl0IHNwZWVkIG9mIGFsbG9jYXRpb24/IFJlZHVjaW5nIG1lbW9yeSBvdmVyaGVhZD8gUG93ZXIgY29uc3VtcHRpb24gZHVyaW5nIGluaXRpYWwgc2V0dXA/IElzIHRoaXMgYWJvdXQgbGF6eSBpbml0aWFsaXphdGlvbj8gT3IgcGVyaGFwcyBkZWZlcnJpbmcgYWxsb2NhdGlvbiBhbHRvZ2V0aGVyIHVudGlsIGEgbGF0ZXIgdGltZT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEFyZSB0aGVyZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBOVU1BIGNvbnNpZGVyYXRpb25zIGF0IHBsYXkgdGhhdCB3b3VsZCBpbmZvcm0gdGhpcyBvcHRpbWl6YXRpb24/CgpJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBwaXRmYWxscyB0b28uIFdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhpcyBvcHRpbWl6YXRpb24gaXMgbWlzYXBwbGllZCBvciBpZiB0aGUgYXNzdW1wdGlvbnMgaXQmIzM5O3MgYmFzZWQgb24gYXJlIHZpb2xhdGVkPyBNZW1vcnkgbGVha3M/IEluY29ycmVjdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFnZXMgY2F1c2luZyBkb3duc3RyZWFtIGlzc3Vlcz8gT3IsIHBlcmhhcHMsIGNvbnRlbnRpb24gaXNzdWVzIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIHBhdGhzPyBUaGUgZXhhY3QgaW1wYWN0IG9uIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygd29ya2xvYWRzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY29uc2lkZXI7IGFyZSB0aGVyZSBkaWZmZXJlbnQgd29ya2xvYWRzIHdoZXJlIHRoaXMgY2FuIGNhdXNlIGFuIGlzc3VlPwoKRnVuZGFtZW50YWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBjb250cm9sbGVkIGJ5IHRoaXMgZmxhZyBhbmQgbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIGJlZm9yZS1hbmQtYWZ0ZXIgYmVoYXZpb3IuIEEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsb2NrcyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW5kIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZWZmZWN0cyBvZiB0aGlzIG9wdGltaXphdGlvbiBmbGFnLiBJIHdpbGwgbmVlZCB0byB1c2UgbXkgZGVidWdnaW5nIHRvb2xzIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgYW5kIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgY291bnRlcnMgSSBjYW4gdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tX2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQodm9pZClcbjEwNjk6XHR7XG4xMDcwOlx0XHQvKlxuMTA3MTpcdFx0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcbjEwNzI6XHRcdCAqIGluc3RydW1lbnRlZC5cbjEwNzM6XHRcdCAqL1xuMTA3NDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOKSB8fCBJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXG4xMDc1Olx0XHRcdHJldHVybiBmYWxzZTtcbjEwNzY6XHRcbjEwNzc6XHRcdC8qXG4xMDc4Olx0XHQgKiBUaGUgdGVtcGxhdGUgZmFzdCBwYXRoIGNvcGllcyBhIHByZWluaXRpYWxpemVkIHN0cnVjdCBwYWdlIGltYWdlLlxuMTA3OTpcdFx0ICogU2tpcCBpdCB3aGVuIHRoZSBwYWdlX3JlZl9zZXQgdHJhY2Vwb2ludCBpcyBlbmFibGVkLlxuMTA4MDpcdFx0ICovXG4xMDgxOlx0XHRpZiAocGFnZV9yZWZfdHJhY2Vwb2ludF9hY3RpdmUocGFnZV9yZWZfc2V0KSlcbjEwODI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA4MzpcdFxuMTA4NDpcdFx0cmV0dXJuIHRydWU7XG4xMDg1Olx0fVxuMTA4NjpcdFxuMTA4NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLQVNBTiBJbXBhY3Qgb24gYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0tBU0FOYCBvciBgQ09ORklHX0tNU0FOYC4gTXkgZ3V0IHJlYWN0aW9uIGlzLCAmIzM0O1VoIG9oLCB0aGlzIG1pZ2h0IGJlIGEgcHJvYmxlbS4mIzM0OyBTcGVjaWZpY2FsbHksIGlmIGVpdGhlciBvZiB0aG9zZSBpcyBlbmFibGVkLCB0aGUgb3B0aW1pemF0aW9uIGlzIGJ5cGFzc2VkLiBBbmQsIGxldCYjMzk7cyBmYWNlIGl0LCBzeXprYWxsZXIsIHdoaWNoIGlzIHRoZSBmdXp6ZXIgdGhhdCYjMzk7cyByZWxldmFudCBoZXJlLCAqbG92ZXMqIEtBU0FOLiBTbywgdHlwaWNhbGx5LCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgd291bGQgc2ltcGx5IHJldHVybiBgZmFsc2VgLCB0YWtpbmcgdGhlIHNsb3cgcGF0aC4KClJpZ2h0LCBzbyB0aGF0IG1lYW5zIGlmIEtBU0FOIGlzIG9uLCB3aGljaCBpcyB0eXBpY2FsIGZvciBzeXprYWxsZXIsIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgIHJldHVybnMgZmFsc2UuIEFuZCB0aHVzIGB1c2VfdGVtcGxhdGVgIGJlY29tZXMgZmFsc2UuIExvb2tpbmcgZnVydGhlciBkb3duIGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIEkgc2VlOgoKYGBgYwoJCWlmICghdXNlX3RlbXBsYXRlKSB7CgkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsCgkJCQkJCSAgIG5pZCwgcGdtYXApOwoJCX0gZWxzZSBpZiAocGZuID09IHN0YXJ0X3BmbikgewpgYGAKCkdvdCBpdCEgVGhlIG5ldyBmYXN0IHBhdGggd29uJiMzOTt0IGdldCBleGVjdXRlZCBhdCBhbGwgd2hlbiBLQVNBTiBpcyBlbmFibGVkLiAgTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBkaXNtaXNzIGl0LiBCdXQsIHdhaXQuLi4gc3l6a2FsbGVyICphbHNvKiB0ZXN0cyB3aXRob3V0IEtBU0FOIHNvbWV0aW1lcy4gIEFuZCBldmVuIGlmIG5vdCwgd2UgY2FuIGFsd2F5cyBqdXN0aWZ5IGZ1enppbmcgYSBwaWVjZSBvZiBjb2RlIGFuZCB0ZXN0IGl0IG9uIG5vbi1LQVNBTiBpbnN0YW5jZXMuCgpOb3csIGxldCBtZSBnbyBiYWNrIHRvIHRoZSBwcm9tcHQsIHdoaWNoIHNheXMsICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OyBPa2F5LCBpdCBkb2VzbiYjMzk7dCBtZW50aW9uIEtBU0FOIHNwZWNpZmljYWxseS4gSXQgaXMganVzdCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgVGhpcyBpcyBkaWZmZXJlbnQsIGJ1dCBub3QgaW1wb3NzaWJsZS4KCkhvd2V2ZXIsIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjdHVhbGx5IGZ1enplci13b3J0aHksIGV2ZW4gaWYgcmVhY2hhYmxlPyAgVG8gbWFrZSBhIGNhbGwgZWl0aGVyIHdheSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBPa2F5LCBub3cgdGhhdCBJIGhhdmUgYXNzZXNzZWQgdGhlIHJlYWNoYWJpbGl0eSwgZG9lcyB0aGUgc2xvdyBwYXRoIGhhdmUgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcz8gSSBzaG91bGQgY2hlY2sgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tbV9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDU5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNTk6XHRzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbjEwNjA6XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4xMDYxOlx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4xMDYyOlx0e1xuMTA2MzpcdFx0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4xMDY0Olx0XHRpZiAoIXBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KHBnbWFwKSlcbjEwNjU6XHRcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4xMDY2Olx0fVxuMTA2NzpcdFxuMTA2ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQodm9pZClcbjEwNjk6XHR7XG4xMDcwOlx0XHQvKlxuMTA3MTpcdFx0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcbjEwNzI6XHRcdCAqIGluc3RydW1lbnRlZC5cbjEwNzM6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE3OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpPTkVfREVWSUNFIFBhZ2UgSW5pdGlhbGl6YXRpb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX196b25lX2RldmljZV9wYWdlX2luaXRgIGZ1bmN0aW9uIGFuZCB0aGUgYXNzb2NpYXRlZCBgcGFnZW1hcF9yZXNldHNfcmVmY291bnRgIGNoZWNrLiBFc3NlbnRpYWxseSwgdGhlICYjMzQ7c2xvdyBwYXRoJiMzNDsgaGVyZSBpcyBqdXN0IHRoZSBvbGQgY29kZSwgcmVmYWN0b3JlZCBmb3IgY2xhcml0eS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGF0IHBhcnQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBuZXcgJiMzNDtmYXN0IHBhdGgsJiMzNDsgd2hpY2ggSSYjMzk7bSBpbnRlcmVzdGVkIGluIGJlY2F1c2UgaXQmIzM5O3Mgd2hlcmUgcG90ZW50aWFsIGJ1Z3MgY291bGQgYmUgaGlkaW5nLgoKVGhlIGNvcmUgb2YgdGhlIHJlZmFjdG9yaW5nIHJldm9sdmVzIGFyb3VuZCBob3cgcGFnZSBjb3VudHMgYXJlIGhhbmRsZWQgZm9yIGRpZmZlcmVudCBkZXZpY2UgcGFnZSBtYXAgdHlwZXMuIFRoZSBvbGQgY29kZSBoYWQgYSBgc3dpdGNoYCBzdGF0ZW1lbnQgdGhhdCBzcGVjaWZpY2FsbHkgemVyb2VkIHRoZSBwYWdlIGNvdW50IGZvciBjZXJ0YWluIGRldmljZSB0eXBlcyAoYE1FTU9SWV9ERVZJQ0VfRlNfREFYYCwgYE1FTU9SWV9ERVZJQ0VfUFJJVkFURWAsIGBNRU1PUllfREVWSUNFX0NPSEVSRU5UYCwgYE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQWApLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5vdyBjaGVja3MgYHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50YCwgZWZmZWN0aXZlbHkgZG9pbmcgdGhlIHNhbWUuCgpUaGUgY2F0Y2ggaXMsIHRoaXMgZmFzdCBwYXRoIGlzIGRpc2FibGVkIHVuZGVyIGBDT05GSUdfS0FTQU5gIG9yIGBDT05GSUdfS01TQU5gLCBzbyBJIGNhbiYjMzk7dCBpbW1lZGlhdGVseSB0ZXN0IHRoZSBjaGFuZ2VzLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBpdCB3b3J0aCBmdXp6aW5nIHRoaXMgY29kZT8KClllcywgaXQgaXMuIFRoZSBmYXN0IHBhdGggY29udGFpbnMgY2hhbmdlcyB0byB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBzb21lIGRldmljZSB0eXBlcy4gSWYgSSB3YW50IHRvIGhpdCB0aGF0IGZhc3QgcGF0aCwgSSYjMzk7bGwgbmVlZCBhIGtlcm5lbCBidWlsZCB3aXRob3V0IHRob3NlIHNhbml0aXplcnMuIFN5emthbGxlciwgd2hpY2ggSSB1c2UgcmVndWxhcmx5LCBkb2VzIGhhdmUgaW5zdGFuY2VzIHdpdGhvdXQgS0FTQU4gYW5kIEtNU0FOLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBmZWFzaWJsZSB0byBmdXp6IHRoaXMuCgpOb3csIHdoYXQgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24/IEkga25vdyBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBhIG11c3QsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHBpZWNlcyBpbiBwbGFjZSBmb3IgdGhlIGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFpPTkVfREVWSUNFKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgWk9ORV9ERVZJQ0VgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIGl0cyBkZWNsYXJhdGlvbiBpcyB3aXRoaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlLCB0aGlzIGZlZWxzIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyB0aGVyZSBhbmQgdGhlbiBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIGNvbmRpdGlvbmVkLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgZGVmaW5lIHdoZXRoZXIgb3Igbm90IHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMzY6XHRjb25maWcgWk9ORV9ERVZJQ0VcbjEyMzc6XHRcdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuMTIzODpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xuMTIzOTpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG4xMjQwOlx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4xMjQxOlx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4xMjQyOlx0XG4xMjQzOlx0XHRoZWxwXG4xMjQ0Olx0XHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXG4xMjQ1Olx0XHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXG4xMjQ2Olx0XHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxuMTI0NzpcdFx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbjEyNDg6XHRcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxuMTI0OTpcdFxuMTI1MDpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHJlZHVjZSB0aGUgZW50cm9weSBvZiB4ODYgS0FTTFIgbWVtb3J5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzU2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1lbW9yeSBDb3B5IE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgbG9va3MgbGlrZSBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gbm90ZS4gVGhlIG1haW4gdGhpbmcgaGVyZSBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEl0IGludHJvZHVjZXMgc29tZSBuZXcgaW50cmluc2ljczogYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBgbW92bnRpXzY0YCwgYG1lbWNweV9udGAsIGFuZCBgbWVtY3B5X250X2RyYWluYC4gVGhlc2UgYXJlIHNwZWNpZmljYWxseSB1dGlsaXplZCBieSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGFuZCBgbWVtY3B5X250YC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgYG1lbWNweV9udGAgdXNlZCBhbnl3aGVyZSBlbHNlPyBBIHF1aWNrIHNjYW4gc2hvd3MgaXQmIzM5O3MgY3VycmVudGx5IG9ubHkgdXNlZCBpbiBgbW0vbW1faW5pdC5jYC4gSW50ZXJlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gRGl2aW5nIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgSSBzZWU6CgpgYGBjCiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMQp2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpOwpgYGAKCkFoLCByaWdodC4gVGhlIHg4NiBvcHRpbWl6ZWQgYG1lbWNweV9udGAgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gU28sIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IHRvIGtlZXAgaW4gbWluZC4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCBmdXJ0aGVyIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnPTU0Mj1jb25maWcgVUFDQ0VTU19NRU1DUFlcbi0tXG5saWIvS2NvbmZpZy01NDQtXG5saWIvS2NvbmZpZzo1NDU6Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxubGliL0tjb25maWctNTQ2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ1MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgSSYjMzk7bSBhYm91dCB0byBkbzoKCioqRXhhbWluaW5nIHRoZSBTaWduaWZpY2FuY2Ugb2YgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgY2xlYXJseS4gSXQmIzM5O3MgaW5kaWNhdGluZyBzb21lIGxldmVsIG9mIG9wdGltaXphdGlvbiwgcG9zc2libHkgcmVsYXRlZCB0byBtZW1vcnkgY29oZXJlbmN5IG9yIGNhY2hlIG1hbmFnZW1lbnQsIHdpdGhpbiB0aGUgY29udGV4dCBvZiB1c2VyLXNwYWNlIGFjY2Vzcy4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRlZmluZXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGlkZW50aWZ5IHdoYXQgc2VsZWN0cyBpdC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSXMgaXQgdGllZCB0byBhIHNwZWNpZmljIHByb2Nlc3NvciBmYW1pbHksIGEgcGFydGljdWxhciBtZW1vcnkgbW9kZWwsIG9yIHBlcmhhcHMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzdWJzeXN0ZW0/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2ggYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgdG8gdHJhY2Ugd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIGNyaXRpY2FsbHksICpzZWxlY3RlZCouIFRoYXQgc2hvdWxkIHJhcGlkbHkgdW5jb3ZlciB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZlYXR1cmUgYmVjb21lcyByZWxldmFudC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLiBJdCYjMzk7cyBhbGwgYWJvdXQgY29udGV4dCBhbmQgaG93IHRoaXMgZmVhdHVyZSBjaGFuZ2VzIG9yIGltcHJvdmVzIHRoZSBub3JtYWwgb3BlcmF0aW9uLCBlc3BlY2lhbGx5IGluIGFyZWFzIG9mIHVzZXItc3BhY2UgYW5kIGtlcm5lbCBhY2Nlc3MuIEtub3dpbmcgdGhlIGNvZGUgcGF0aHMgdGhhdCAqZGVwZW5kKiBvbiB0aGlzIGRlZmluaXRpb24gd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGluc2lnaHQgaW50byBpdHMgYWN0dWFsIHV0aWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTE5MjI9Y29uZmlnIEFSTTY0X1BNRU1cbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTkyNC1cdHNlbGVjdCBBUkNIX0hBU19QTUVNX0FQSVxuYXJjaC9hcm02NC9LY29uZmlnOjE5MjU6XHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL2FybTY0L0tjb25maWctMTkyNi1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE1OC1cdHNlbGVjdCBBUkNIX0hBU19USUNLX0JST0FEQ0FTVFx0XHRpZiBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTU5Olx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9wb3dlcnBjL0tjb25maWctMTYwLVx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMDItXHRzZWxlY3QgQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkdcdGlmIFBHVEFCTEVfTEVWRUxTIFx1MDAzZSAyXG5hcmNoL3g4Ni9LY29uZmlnOjEwMzpcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcdGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZy0xMDQtXHRzZWxlY3QgQVJDSF9IQVNfQ09QWV9NQ1x0XHRcdGlmIFg4Nl82NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA5OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBab25lIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBteSBicmFpbiBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgc2VlIHRoaXMgcGFydGljdWxhciBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYFg4Nl82NGAuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGdlbmVyYWwgcHJldmFsZW5jZSBvZiB0aGF0IGFyY2hpdGVjdHVyZS4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYnJvYWRlciBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYCBiZWluZyBlbmFibGVkLiBUaGVzZSBvcHRpb25zIGltcGx5IHRoZSBzdXBwb3J0IG9mIGR5bmFtaWMgbWVtb3J5IGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgbWFwLCBzbyBJIGdldCB0aGUgY29ubmVjdGlvbi4KCkJleW9uZCB0aGF0LCB0aGUgY29kZSYjMzk7cyB1c3VhbGx5IHNlbGVjdGVkIGJ5IGBOVkRJTU1gLCBgREFYYCwgb3IgYEhNTWAuIFRoaXMgcmVhbGx5IHNoYXJwZW5zIHRoZSBmb2N1cyBvbiBzcGVjaWFsaXplZCBtZW1vcnkgaGFyZHdhcmUgYW5kIGRhdGEgYWNjZXNzIG1ldGhvZHMuIEnigJlsbCBtYWtlIGEgbm90ZSBvZiB0aG9zZSBzZWxlY3RvcnMuIEl0IHN1Z2dlc3RzIHRoZSBtYWluIHVzZSBjYXNlcyBjZW50ZXIgYXJvdW5kIHRob3NlIHRlY2hub2xvZ2llcy4gVG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgd2hlcmUgaXTigJlzIGFwcGxpY2FibGUsIEkmIzM5O20gZ29pbmcgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIHdoaWNoIHNwZWNpZmljIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5IGVuYWJsZSBgWk9ORV9ERVZJQ0VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDkyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIFZhcmlhYmxlICYjMzk7Wk9ORV9ERVZJQ0UmIzM5OyoqCgpSaWdodCwgc28gYFpPTkVfREVWSUNFYCBpcyBhIEJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24uIEl0JiMzOTtzIGVpdGhlciAqb24qIG9yICpvZmYqLCBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0byBlc3RhYmxpc2guIE5vdywgdGhlIGtleSBxdWVzdGlvbiwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggem9uZS1iYXNlZCBjb25maWd1cmF0aW9ucyBpcy4uLiBJcyB0aGlzIHZhcmlhYmxlIGVuYWJsZWQgYnkgZGVmYXVsdD8gVGhhdCYjMzk7cyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8ga25vdyB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBzeXN0ZW0gYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCB0aGF0IGRlZmF1bHQgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZz03OT1jb25maWcgRFJNX1hFX0dQVVNWTVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTgyLVx0ZGVwZW5kcyBvbiAhVU1MXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4MzpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg0LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZz02Mj1jb25maWcgTlZESU1NX1BGTlxuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjQtXHRkZWZhdWx0IExJQk5WRElNTVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo2NTpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjYtXHRzZWxlY3QgTkRfQ0xBSU1cbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnPTIwNj1jb25maWcgUENJX1AyUERNQVxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDctXHRib29sIFwmIzM0O1BDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDg6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwOS1cdCNcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnPTMzNj1jb25maWcgWEVOX1VOUE9QVUxBVEVEX0FMTE9DXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzNy1cdGJvb2wgXCYjMzQ7VXNlIHVucG9wdWxhdGVkIG1lbW9yeSByYW5nZXMgZm9yIGd1ZXN0IG1hcHBpbmdzXCYjMzQ7XG5kcml2ZXJzL3hlbi9LY29uZmlnOjMzODpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMveGVuL0tjb25maWctMzM5LVx0ZGVmYXVsdCBYRU5fQkFDS0VORCB8fCBYRU5fR05UREVWIHx8IFhFTl9ET00wXG4tLVxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MC1cdGRlcGVuZHMgb24gTU1VXG5mcy9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZnMvS2NvbmZpZy02Mi1cdHNlbGVjdCBGU19JT01BUFxuLS1cbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcbi0tXG5mcy9LY29uZmlnLTkzLVx0ZGVwZW5kcyBvbiBGU19EQVhcbmZzL0tjb25maWc6OTQ6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnLTk1LVx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbm1tL0tjb25maWc9MTI2Nz1jb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2OC1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG5tbS9LY29uZmlnOjEyNjk6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyNzAtXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjM3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBhbmQgSG90IFBhdGggSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYFpPTkVfREVWSUNFYCBpcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQgZm9yIHNldmVyYWwgb3RoZXIgZmVhdHVyZXMsIG5hbWVseSBgRlNfREFYYCwgYFBDSV9QMlBETUFgLCBgTlZESU1NX1BGTmAsIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBCYXNlZCBvbiB0aGlzIHJlbGF0aW9uc2hpcCwgdGhlIGxvZ2ljYWwgc3RlcCBpcyB0byBpbmNsdWRlIGBaT05FX0RFVklDRWAgd2l0aGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZGVwZW5kZW5jeSByZXNvbHV0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBoZWF2aWx5IG1vZGlmeWluZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBCZXNpZGVzIHRoYXQsIGl0IGlzIGFsc28gaW50cm9kdWNpbmcgYSBoYW5kZnVsIG9mIG5ldyBmdW5jdGlvbnM6IGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAsIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AsIGFuZCBgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGVgLiBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBJJiMzOTttIHNlZWluZyBoZXJlIGlzIGluZGVlZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLgoKTXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZmFsbHMgd2l0aGluIGEgaG90IHBhdGguIEl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnLCB3aGljaCBnZW5lcmFsbHkgaXMgbm90IGEgaGlnaC1mcmVxdWVuY3kgb3BlcmF0aW9uLiBLbm93aW5nIHRoYXQsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgc2VlbXMgbGlrZSBhIGdvb2QgZm9jYWwgcG9pbnQuCgpJIHNlZSB0aGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgYWxzbyBiZWluZyB0b3VjaGVkLCBzbyBJIHdpbGwgYWRkIHRoYXQgdG8gbXkgbWVudGFsIGNoZWNrbGlzdCBmb3IgZnVydGhlciByZXZpZXcuIExldCYjMzk7cyBzZWUgaG93IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgYmVpbmcgYWZmZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X2NvbXBvdW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMTM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wb3VuZF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtMTE0OS1cbm1tL21tX2luaXQuYzoxMTUwOnN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxubW0vbW1faW5pdC5jLTExNTEtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3Bmbixcbi0tXG5tbS9tbV9pbml0LmM9MTIwND12b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL21tX2luaXQuYy0xMjYxLVx0XHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgaGVhZC1wYWdlIGNvcHlcbm1tL21tX2luaXQuYzoxMjYyOlx0XHQgKiBiZWZvcmUgbWVtbWFwX2luaXRfY29tcG91bmQoKSwgd2hpY2ggaW1tZWRpYXRlbHkgdXBkYXRlcyBjb21wb3VuZC1oZWFkXG5tbS9tbV9pbml0LmMtMTI2My1cdFx0ICogbWV0YWRhdGEuIElmIG1lbWNweV9udCgpIGZlbGwgYmFjayB0byByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXG4tLVxubW0vbW1faW5pdC5jLTEyNjgtXG5tbS9tbV9pbml0LmM6MTI2OTpcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbm1tL21tX2luaXQuYy0xMjcwLVx0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjExNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIE1lbW9yeSBNYXBwaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBUaGF0IG1ha2VzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdGhlIGxpa2VseSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHNlY3Rpb24uIEJ1dCBob2xkIG9uLCBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4uLiBobW0sIHRoYXQgbWVhbnMgaXQgKmNvdWxkKiBiZSBpbmxpbmVkLCBwb3RlbnRpYWxseSBvYnNjdXJpbmcgdGhlIGNhbGwgY2hhaW4uIEkmIzM5O2xsIGZsYWcgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBmb3IgYSBkZWVwZXIgZGl2ZSBpbiBgRm9jdXNTeW1ib2xzYCB0byBlbnN1cmUgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBhbGwgc3RhcnRzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluIHBsYXkuIExvb2tzIGxpa2UgYG1lbWNweV9udGAsIGBtZW1jcHlfbnRfZHJhaW5gLCBgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXRgLCBhbmQgYHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlYCwgYXJlIGFsbCBzdGF0aWMgaW5saW5lLCBhbmQgbGlrZWx5IG9wdGltaXplZCBhd2F5LCBvciBpbmxpbmVkLCBtYWtpbmcgdHJhY2luZyB0aHJvdWdoIHRoZXNlIGRpZmZpY3VsdC4gQWxzbywgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBhbmQgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCBhcmUgc3RhdGljIGJ1dCBub3QgaW5saW5lLgoKU28sIGZyb20gd2hhdCBJIGNhbiBzZWUsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGdldHMgbW9kaWZpZWQuIEJ1dCB3YWl0LCBpcyBpdCBleHBvcnRlZD8gTm8sIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gRXZlbiB0aG91Z2ggaXQgaXMgbm90IGV4cG9ydGVkLCBpdCBpcyBnbG9iYWxseSB2aXNpYmxlLiBCZXN0IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIGxldCYjMzk7cyBjaGVjayBvdXQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBmdW5jdGlvbiBkZWZpbml0aW9uIGluIGBtbS9tbV9pbml0LmNgIHRvIHNlZSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjA0Olx0dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbjEyMDU6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuMTIwNjpcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjEyMDc6XHRcdFx0XHRcdCAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4xMjA4Olx0e1xuMTIwOTpcdFx0Ym9vbCB1c2VfdGVtcGxhdGUgPSB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQoKTtcbjEyMTA6XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gc3RhcnRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuMTIxMTpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbjEyMTI6XHRcdHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwID0gcGdtYXBfYWx0bWFwKHBnbWFwKTtcbjEyMTM6XHRcdHVuc2lnbmVkIGludCBwZm5zX3Blcl9jb21wb3VuZCA9IHBnbWFwX3ZtZW1tYXBfbnIocGdtYXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk5NAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IHRoaXMgaXMgYSBnbG9iYWxseSB2aXNpYmxlIGNoYW5nZSwgd2hpY2ggaW1tZWRpYXRlbHkgZGVtYW5kcyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBidXQgd2hhdCAqZWxzZSogaXMgaW1wYWN0ZWQ/JiMzNDsgQSBnbG9iYWwgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIHJpcHBsZSBvdXR3YXJkIGluIHVuZXhwZWN0ZWQgd2F5cywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUuCgpSaWdodCwgSSBzZWUgYSBtb2RpZmljYXRpb24gdG8gYG1lbWNweV9mbHVzaGNhY2hlYCB3aXRoaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYC4gTm93IHdlJiMzOTtyZSBnZXR0aW5nIHNvbWV3aGVyZS4gYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBjcml0aWNhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb24geDg2LCBwYXJ0aWN1bGFybHkgd2hlcmUgY2FjaGUgY29oZXJlbmNlIGlzIGludm9sdmVkLCBzbyBsZXQmIzM5O3MgZGlnIGludG8gKnRoYXQqIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQmIzM5O3MgY2hhbmdlZCB0aGVyZSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGFjcm9zcyB0aGUgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGBtZW1jcHlfZmx1c2hjYWNoZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNweV9mbHVzaGNhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDctI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDktI2VuZGlmXG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jOjEwOnZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xMS17XG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMTktfVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MjA6RVhQT1JUX1NZTUJPTF9HUEwobWVtY3B5X2ZsdXNoY2FjaGUpO1xuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oPTI4PWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oLTMwLVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODAtXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04Mi17XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6ODg6RVhQT1JUX1NZTUJPTChtZW1jcHlfZmx1c2hjYWNoZSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODE9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTg0LSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODU6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTg2LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEwNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTExMi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjExMzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMTQtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTMyLVx0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMzOlx0XHRcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTM0LVx0XHRcdCAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE1NS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE1NjpcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTctfVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTE2NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTY2LXtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE2NzpcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTY4LX1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xNzE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9udF9kcmFpbih2b2lkKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE3My1cdC8qXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNzQ6XHQgKiBPcmRlciB0aGUgcHJpb3IgTU9WTlRJIHN0b3JlcyBpc3N1ZWQgYnkgbWVtY3B5X2ZsdXNoY2FjaGUoKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTc1LVx0ICogYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMuXG4tLVxuYXJjaC94ODYva2VybmVsL2NyYXNoLmM9NTE0PXZvaWQgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqYXJnKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTU2NS1cdHhjaGcoXHUwMDI2a2V4ZWNfY3Jhc2hfaW1hZ2UsIE5VTEwpO1xuYXJjaC94ODYva2VybmVsL2NyYXNoLmM6NTY2Olx0bWVtY3B5X2ZsdXNoY2FjaGUob2xkX2VsZmNvcmVoZHIsIGVsZmJ1ZiwgZWxmc3opO1xuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNTY3LVx0eGNoZyhcdTAwMjZrZXhlY19jcmFzaF9pbWFnZSwgaW1hZ2UpO1xuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jPTQ2PXNpemVfdCBjb3B5X3VzZXJfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHNpemVfdCBzaXplKVxuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTc5LVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM6ODA6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKl9kc3QsIGNvbnN0IHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtODEte1xuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTE0Mi19XG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxNDM6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jcHlfZmx1c2hjYWNoZSk7XG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDQtI2VuZGlmXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0zMT1zdGF0aWMgdm9pZCBmc2Rldl93cml0ZV9kYXgodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0zNy1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mzg6XHRcdG1lbWNweV9mbHVzaGNhY2hlKGFkZHIsIG1lbSAmIzQzOyBvZmYsIGNodW5rKTtcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMzktXHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9MTc9c3RhdGljIHZvaWQgY2FjaGVfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSlcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTI1LVx0Y2FjaGUtXHUwMDNlaW5mb19pbmRleCA9IChjYWNoZS1cdTAwM2VpbmZvX2luZGV4ICYjNDM7IDEpICUgUENBQ0hFX01FVEFfSU5ERVhfTUFYO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYzoyNjpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9pbmZvX2FkZHIoY2FjaGUpLCBjYWNoZV9pbmZvLFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNy1cdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9pbmZvKSk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz04Nz12b2lkIGNhY2hlX3Bvc19lbmNvZGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDAtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjEwMTpcdG1lbWNweV9mbHVzaGNhY2hlKHBvc19vbm1lZGlhX2FkZHIsIFx1MDAyNnBvc19vbm1lZGlhLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9wb3Nfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDItXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jPTE0MD1zdGF0aWMgdm9pZCBzYl93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX2RldiAqY2FjaGVfZGV2LCBzdHJ1Y3QgcGNhY2hlX3NiICpzYilcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYy0xNDMtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYzoxNDQ6XHRtZW1jcHlfZmx1c2hjYWNoZShzYl9hZGRyLCBzYiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfc2IpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jLTE0NS1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM9MTE0PXN0YXRpYyB2b2lkIGFwcGVuZF9sYXN0X2tzZXQoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHUzMiBuZXh0X3NlZylcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjItXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYzoxMjM6XHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfa2V5X2hlYWRfYWRkcihjYWNoZSksIFx1MDAyNmtzZXRfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjQtXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jPTEyOD1pbnQgY2FjaGVfa3NldF9jbG9zZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0ICprc2V0KVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE1My1cdFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBuZXh0IHNlZyAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTU0Olx0XHRtZW1jcHlfZmx1c2hjYWNoZShuZXh0X3NlZy1cdTAwM2VzZWdtZW50LmRhdGEsIFx1MDAyNnBjYWNoZV9lbXB0eV9rc2V0LFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTU1LVx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNjUtXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGFmdGVyIGN1cnJlbnQga3NldCAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY2Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpICYjNDM7IGtzZXRfb25tZWRpYV9zaXplLCBcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE2Ny1cdFx0XHRcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY4LVx0Lyogd3JpdGUgY3VycmVudCBrc2V0IGludG8gc2VnbWVudCAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY5Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpLCBrc2V0X29ubWVkaWEsIGtzZXRfb25tZWRpYV9zaXplKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE3MC1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTIwPXN0YXRpYyB2b2lkIGNhY2hlX3NlZ19pbmZvX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnbWVudCAqY2FjaGVfc2VnKVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMS1cdHNlZ19pbmZvX2FkZHIgPSBnZXRfc2VnX2luZm9fYWRkcihjYWNoZV9zZWcpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjMyOlx0bWVtY3B5X2ZsdXNoY2FjaGUoc2VnX2luZm9fYWRkciwgc2VnX2luZm8sIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NlZ21lbnRfaW5mbykpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTMzLVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MTI2PXN0YXRpYyB2b2lkIGNhY2hlX3NlZ19jdHJsX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnbWVudCAqY2FjaGVfc2VnKVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzYtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MTM3Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX3NlZ19nZW5fYWRkcihjYWNoZV9zZWcpLCBcdTAwMjZjYWNoZV9zZWdfZ2VuLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdfZ2VuKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM4LVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MTgyPWludCBjYWNoZV9zZWdfaW5pdChzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgdTMyIHNlZ19pZCwgdTMyIGNhY2hlX3NlZ19pZCxcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMjE2LVx0XHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIHNlZ21lbnQgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoyMTc6XHRcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ21lbnQtXHUwMDNlZGF0YSwgXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxOC1cdFx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz00Nj1kbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00Ny1cdHR5cGVvZihkZXN0KSB1bmlxID0gKHNyYyk7XHRcdFx0XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6NDg6XHRtZW1jcHlfZmx1c2hjYWNoZShcdTAwMjYoZGVzdCksIFx1MDAyNnVuaXEsIHNpemVvZihkZXN0KSk7XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDktfSB3aGlsZSAoMClcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMTkwPXN0YXRpYyBpbnQgd3JpdGVjYWNoZV9tZXNzYWdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIwOS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMTA6c3RhdGljIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKHZvaWQgKmRlc3QsIHZvaWQgKnNvdXJjZSwgc2l6ZV90IHNpemUpXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjExLXtcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI0LVx0ICogTk9URTogdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIG5vdyAod2l0aCBkbS13cml0ZWNhY2hlJiMzOTtzIHNpbmdsZVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIyNTpcdCAqIHRocmVhZGVkIG1vZGVsKSBidXQgcmUtZXZhbHVhdGUgdGhpcyBvbmNlIG1lbWNweV9mbHVzaGNhY2hlKCkgaXNcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjYtXHQgKiBlbmFibGVkIHRvIHVzZSBtb3ZkaXI2NGIgd2hpY2ggbWlnaHQgaW52YWxpZGF0ZSB0aGlzIHBlcmZvcm1hbmNlXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0Mi0jZW5kaWZcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNDM6XHRtZW1jcHlfZmx1c2hjYWNoZShkZXN0LCBzb3VyY2UsIHNpemUpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0NC19XG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTI0Nj1zdGF0aWMgdm9pZCBiaW9fY29weV9ibG9jayhzdHJ1Y3QgZG1fd3JpdGVjYWNoZSAqd2MsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjcxLVx0XHRcdGZsdXNoX2RjYWNoZV9wYWdlKGJpb19wYWdlKGJpbykpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI3MjpcdFx0XHRtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQoZGF0YSwgYnVmLCBzaXplKTtcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzMtXHRcdH1cbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXG4tLVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzYtXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3NzpcdG1lbWNweV9mbHVzaGNhY2hlKG5zaW8tXHUwMDNlYWRkciAmIzQzOyBvZmZzZXQsIGJ1Ziwgc2l6ZSk7XG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3OC1cdHJldCA9IG52ZGltbV9mbHVzaCh0b19uZF9yZWdpb24obmRucy1cdTAwM2VkZXYucGFyZW50KSwgTlVMTCk7XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTEyND1zdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzMi1cdFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMzM6XHRcdG1lbWNweV9mbHVzaGNhY2hlKHBtZW1fYWRkciwgbWVtICYjNDM7IG9mZiwgY2h1bmspO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzNC1cdFx0a3VubWFwX2xvY2FsKG1lbSk7XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz0xMTA2PWludCBnZW5lcmljX252ZGltbV9mbHVzaChzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24pXG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTIxLVx0ICogdGhlIHBsYXRmb3JtIGJ1ZmZlciBmbHVzaC4gTm90ZSB0aGF0IHdlJiMzOTt2ZSBhbHJlYWR5IGFycmFuZ2VkIGZvciBwbWVtXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jOjExMjI6XHQgKiB3cml0ZXMgdG8gYXZvaWQgdGhlIGNhY2hlIHZpYSBtZW1jcHlfZmx1c2hjYWNoZSgpLiAgVGhlIGZpbmFsXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTExMjMtXHQgKiB3bWIoKSBlbnN1cmVzIG9yZGVyaW5nIGZvciB0aGUgTlZESU1NIGZsdXNoIHdyaXRlLlxuLS1cbmluY2x1ZGUvbGludXgvc3RyaW5nLmg9MjcyPWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3NC0jaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3Ni17XG4tLVxubGliL2lvdl9pdGVyLmM9MzAzPXNpemVfdCBtZW1jcHlfZnJvbV9pdGVyX2ZsdXNoY2FjaGUodm9pZCAqaXRlcl9mcm9tLCBzaXplX3QgcHJvZ3Jlc3MsXG4tLVxubGliL2lvdl9pdGVyLmMtMzA1LXtcbmxpYi9pb3ZfaXRlci5jOjMwNjpcdG1lbWNweV9mbHVzaGNhY2hlKHRvICYjNDM7IHByb2dyZXNzLCBpdGVyX2Zyb20sIGxlbik7XG5saWIvaW92X2l0ZXIuYy0zMDctXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0ODQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIE5ldyBgbWVtY3B5X250YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBhIG5ldyBmdW5jdGlvbiwgYG1lbWNweV9udGAsIGhhcyBiZWVuIGludHJvZHVjZWQuIEl0JiMzOTtzIGRlZmluZWQgaW4gYm90aCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAgYW5kIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGFuZCBJIHNlZSBpdCYjMzk7cyBiZWluZyB1c2VkIGluIGBtbS9tbV9pbml0LmNgLiBCdXQgaG9sZCBvbiwgdGhlIHJlYWwgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLCB3aGVyZSB0aGUgZXhpc3RpbmcgYG1lbWNweV9mbHVzaGNhY2hlYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgcmVwbGFjZW1lbnQuIEl0JiMzOTtzIGFuIG9wdGltaXphdGlvbiBvZiBgbWVtY3B5X2ZsdXNoY2FjaGVgIHNwZWNpZmljYWxseSBmb3IgZml4ZWQgc2l6ZXMgbGlrZSAzMiwgNDgsIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLCB3aGljaCBpcyBjbGV2ZXIuIGBtZW1jcHlfbnRgIGlzIGxldmVyYWdpbmcgdGhpcyBvcHRpbWl6ZWQgdmVyc2lvbi4gVGhlIGltcGFjdCBpcyBkZWZpbml0ZWx5IGJyb2FkZXIgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LgoKTm93LCBgbWVtY3B5X2ZsdXNoY2FjaGVgIGdldHMgdXNlZCBhY3Jvc3MgYSBidW5jaCBvZiBwbGFjZXM6IGBkcml2ZXJzL2RheC9mc2Rldi5jYCwgYGRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jYCwgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AsIGFuZCBgbGliL2lvdl9pdGVyLmNgLCB0byBuYW1lIGEgZmV3LiBUaGF0JiMzOTtzIGEgZ29vZCBjcm9zcy1zZWN0aW9uIG9mIHRoZSBrZXJuZWwuIFRoaXMgbWVhbnMgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFyZW4mIzM5O3QgbGltaXRlZCB0byBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFzIEkgaGFkIGZpcnN0IGFzc3VtZWQuCgpIb3dldmVyLCBzaW5jZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgSSBjYW4mIzM5O3QgZGlyZWN0bHkgYWRkIGl0IHRvIGBGb2N1c1N5bWJvbHNgLiBTbywgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGluc3RlYWQuIFRoaXMgYmVjb21lcyB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGtleSBoZXJlLiBPdGhlciByZWxldmFudCBvcHRpb25zIHRoYXQgY291bGQgZW5hYmxlIGBaT05FX0RFVklDRWAgdXNhZ2UgYXJlOiBgQ09ORklHX0ZTX0RBWGAsIGBDT05GSUdfTlZESU1NX1BGTmAsIGBDT05GSUdfUENJX1AyUERNQWAsIG9yIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgLiBJJiMzOTtsbCBhZGQgYFpPTkVfREVWSUNFYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuCgpCdXQgd2hhdCBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzPyBBaCwgcmlnaHQsIGBDT05GSUdfS0FTQU5gIGFuZCBgQ09ORklHX0tNU0FOYCBkaXNhYmxlIG9wdGltaXphdGlvbnMgaW4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gQnV0IHdhaXQsIHRoaXMgaXMgYSBiaXQgbWlzbGVhZGluZy4gVGhlIGBtZW1jcHlfZmx1c2hjYWNoZWAgKm9wdGltaXphdGlvbiogaXNuJiMzOTt0IGRpc2FibGVkIGJ5IEtBU0FOISBUaGUgYG1lbWNweV9mbHVzaGNhY2hlYCBpbmxpbmUgZnVuY3Rpb24gKmlzKiB1c2VkIGJ5IGBtZW1jcHlfbnRgICphbmQqIGJ5IHRoaW5ncyBsaWtlIGBkbS13cml0ZWNhY2hlYCwgYHBtZW1gLCBhbmQgYGRheGAuIFRoaXMgbWVhbnMgdGhlIGNoYW5nZXMgdG8gYG1lbWNweV9mbHVzaGNhY2hlYCBhcmUgc3RpbGwgcmVsZXZhbnQsIGV2ZW4gd2l0aCBLQVNBTiBlbmFibGVkLCAqYXMgbG9uZyBhcyB0aGUgc2l6ZSBpcyBmaXhlZCogdG8gMzIsIDQ4LCA2NCwgODAsIG9yIDk2LgoKSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaG93IGBkbS13cml0ZWNhY2hlYCB1c2VzIGBtZW1jcHlfZmx1c2hjYWNoZWAuIERvZXMgaXQgcHJpbWFyaWx5IHdvcmsgd2l0aCB2YXJpYWJsZSBvciBmaXhlZCBzaXplcz8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZG0td3JpdGVjYWNoZS5jYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jcHlfZmx1c2hjYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTQ2PWRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQ3LVx0dHlwZW9mKGRlc3QpIHVuaXEgPSAoc3JjKTtcdFx0XHRcdFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzo0ODpcdG1lbWNweV9mbHVzaGNhY2hlKFx1MDAyNihkZXN0KSwgXHUwMDI2dW5pcSwgc2l6ZW9mKGRlc3QpKTtcdFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00OS19IHdoaWxlICgwKVxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTExOTA9c3RhdGljIGludCB3cml0ZWNhY2hlX21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndixcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjA5LVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIxMDpzdGF0aWMgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQodm9pZCAqZGVzdCwgdm9pZCAqc291cmNlLCBzaXplX3Qgc2l6ZSlcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMTEte1xuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjQtXHQgKiBOT1RFOiB0aGlzIGhhcHBlbnMgdG8gYmUgdGhlIGNhc2Ugbm93ICh3aXRoIGRtLXdyaXRlY2FjaGUmIzM5O3Mgc2luZ2xlXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjI1Olx0ICogdGhyZWFkZWQgbW9kZWwpIGJ1dCByZS1ldmFsdWF0ZSB0aGlzIG9uY2UgbWVtY3B5X2ZsdXNoY2FjaGUoKSBpc1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyNi1cdCAqIGVuYWJsZWQgdG8gdXNlIG1vdmRpcjY0YiB3aGljaCBtaWdodCBpbnZhbGlkYXRlIHRoaXMgcGVyZm9ybWFuY2Vcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQyLSNlbmRpZlxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI0MzpcdG1lbWNweV9mbHVzaGNhY2hlKGRlc3QsIHNvdXJjZSwgc2l6ZSk7XG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQ0LX1cbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMjQ2PXN0YXRpYyB2b2lkIGJpb19jb3B5X2Jsb2NrKHN0cnVjdCBkbV93cml0ZWNhY2hlICp3Yywgc3RydWN0IGJpbyAqYmlvLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzEtXHRcdFx0Zmx1c2hfZGNhY2hlX3BhZ2UoYmlvX3BhZ2UoYmlvKSk7XG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjcyOlx0XHRcdG1lbWNweV9mbHVzaGNhY2hlX29wdGltaXplZChkYXRhLCBidWYsIHNpemUpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdyaXRlY2FjaGUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZG0td3JpdGVjYWNoZS5jYCBhbmQgaG93IGl0IGhhbmRsZXMgZmx1c2hpbmcuIEkgc2VlIGB3cml0ZWNhY2hlX2NvbW1pdF9mbHVzaGVkYCB1c2VzIGB3cml0ZWNhY2hlX2ZsdXNoX3JlZ2lvbmAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1lbWNweV9mbHVzaGNhY2hlYC4gV2FpdCBhIG1pbnV0ZS4uLiBsb29raW5nIGF0IHRoYXQgbWFjcm86CgpgYGBjCiNkZWZpbmUgd3JpdGVjYWNoZV9mbHVzaF9yZWdpb24od2MsIGRlc3QsIHNyYykJCQkJXApkbyB7CQkJCQkJCQlcCgl0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpOwkJCQlcCgltZW1jcHlfZmx1c2hjYWNoZSgmYW1wOyhkZXN0KSwgJmFtcDt1bmlxLCBzaXplb2YoZGVzdCkpOwlcCn0gd2hpbGUgKDApCmBgYAoKYHNpemVvZihkZXN0KWAgaXMgYSAqY29uc3RhbnQqIGhlcmUhIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHNpemUgb2YgYGRlc3RgIGFjdHVhbGx5IGlzIGluIHRoZXNlIHZhcmlvdXMgY29udGV4dHMsIGJ1dCBpZiBpdCAqaXMqIGEgY29uc3RhbnQgc2l6ZSwgdGhlbiB0aGUgaW5saW5lIG9wdGltaXphdGlvbiB3aXRoaW4gYG1lbWNweV9mbHVzaGNhY2hlYCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnRlc3RhYmxlKi4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSB3aG9sZSBwaWN0dXJlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB0byB1c2UgYSB0ZW1wbGF0ZSBhbmQgYG1lbWNweV9udGAgZm9yIGZhc3RlciBpbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBQbHVzLCBhbmQgdGhpcyBpcyBnb29kLCBpdCBhZGRzIGlubGluZSBvcHRpbWl6YXRpb25zIGZvciBgbWVtY3B5X2ZsdXNoY2FjaGVgIGZvciBzaXplcyBsaWtlIDMyLCA0OCwgNjQsIGV0Yy4gSW1wb3J0YW50bHksIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIG9wdGltaXphdGlvbiBpcyAqZGlzYWJsZWQqIGlmIEtBU0FOIG9yIEtNU0FOIGlzIGVuYWJsZWQsIGJ1dCB0aGUgYG1lbWNweV9mbHVzaGNhY2hlYCBvcHRpbWl6YXRpb24gaXMgKmFsd2F5cyogZW5hYmxlZCBpZiB0aGUgc2l6ZSBpcyBjb25zdGFudC4gVGhpcyBtZWFucyB0aGUgcHJvcG9zZWQgY29kZSBpcywgZnVuY3Rpb25hbGx5LCBzb3VuZCBhbmQgcmVhY2hhYmxlLgoKYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBzZWVtcyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sIGhlcmUuIEl0JiMzOTtzIGEgY2xlYXIgZW50cnkgcG9pbnQgdG8gZXhhbWluZSB0aGUgZWZmZWN0cyBvZiB0aGUgb3B0aW1pemF0aW9uLiBXZSAqbmVlZCogYENPTkZJR19aT05FX0RFVklDRWAgdG8gZXZlbiBnZXQgdG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdGVzdGluZy4KCkkgc2hvdWxkIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIG1haW4gb25lLCBhbmQgSSBzZWUgYHBhZ2VtYXBfcmFuZ2VgIGlzIHRoZSBjYWxsZXIgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gSSBzaG91bGQgYWRkIGBwYWdlbWFwX3JhbmdlYCB0byBgRm9jdXNTeW1ib2xzYCBhcyB3ZWxsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBwYWdlbWFwX3JhbmdlYCBpbiBgbW0vbWVtcmVtYXAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VtYXBfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1yZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXJlbWFwLmM9MTM3PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxubW0vbWVtcmVtYXAuYy0xNDMtXG5tbS9tZW1yZW1hcC5jOjE0NDpzdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbm1tL21lbXJlbWFwLmMtMTQ1LVx0XHRpbnQgcmFuZ2VfaWQsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYz0yNjY9dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcbi0tXG5tbS9tZW1yZW1hcC5jLTMzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xubW0vbWVtcmVtYXAuYzozMzg6XHRcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXHUwMDI2cGFyYW1zLCBpLCBuaWQpO1xubW0vbWVtcmVtYXAuYy0zMzktXHRcdGlmIChlcnJvcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWm9uZSBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IGBwYWdlbWFwX3JhbmdlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgZnVuY3Rpb24gYG1lbXJlbWFwX3BhZ2VzYCBpcyBleHBvcnRlZCwgd2hpY2ggaXMgdXNlZnVsIGZvciBvdXIgd29yay4gSSB0aGluayB3ZSBjYW4gc2FmZWx5IGFkZCBib3RoIGBtZW1yZW1hcF9wYWdlc2AgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGVwLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLiBgWk9ORV9ERVZJQ0VgIGlzIGNsZWFybHkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBBcmUgdGhlcmUgYW55IG90aGVycyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciB0aGluZ3MgbGlrZSBgQ09ORklHX0ZTX0RBWGAsIGBDT05GSUdfTlZESU1NX1BGTmAsIGBDT05GSUdfUENJX1AyUERNQWAsIG9yIGV2ZW4gYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGFuZCBjb25zaWRlcmluZyBob3cgU3l6a2FsbGVyIHVzdWFsbHkgc2V0cyB0aGluZ3MgdXAsIGBDT05GSUdfRlNfREFYYCBhbmQgYENPTkZJR19QQ0lfUDJQRE1BYCBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEJ1dCwgZm9yIG5vdywgdG8ga2VlcCBpdCBzaW1wbGUsIHdlIGNhbiBqdXN0IGZvY3VzIG9uIGxpc3RpbmcgYFpPTkVfREVWSUNFYC4KCkZpbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSByZWFjaGFiaWxpdHkgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gQ2FuIGl0IGJlIGNhbGxlZCB3aXRob3V0IGBaT05FX0RFVklDRWAgZW5hYmxlZD8gTm8sIGxvb2tpbmcgYXQgaXQsIGl0IGFwcGVhcnMgaXQmIzM5O3MgZWl0aGVyIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIG9yIHRoZSB3aG9sZSBmaWxlIHRoYXQgY29udGFpbnMgaXQgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGVuYWJsZWQuIFdhaXQsIGhvbGQgb24uLi4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBpbiBgbW0vbW1faW5pdC5jYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIGFjdHVhbGx5IGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgLiBKdXN0IHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tbV9pbml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTY3ND1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfaGFzaGRpc3Qodm9pZCkge31cbi0tXG5tbS9tbV9pbml0LmMtNjc2LVxubW0vbW1faW5pdC5jOjY3NzojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5tbS9tbV9pbml0LmMtNjc4LXN0YXRpYyBfX21lbWluaXQgdm9pZCBwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmM9ODc0PXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxuLS1cbm1tL21tX2luaXQuYy04ODUtXG5tbS9tbV9pbml0LmM6ODg2OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbm1tL21tX2luaXQuYy04ODctXHQvKlxuLS1cbm1tL21tX2luaXQuYy05MjAtXHRcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykge1xubW0vbW1faW5pdC5jOjkyMTojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5tbS9tbV9pbml0LmMtOTIyLVx0XHRcdGlmICh6b25lID09IFpPTkVfREVWSUNFKVxuLS1cbm1tL21tX2luaXQuYz05Njg9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTEwMDYtXG5tbS9tbV9pbml0LmM6MTAwNzojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5tbS9tbV9pbml0LmMtMTAwOC0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTkzNQoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA4MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgWk9ORV9ERVZJQ0UgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGtleSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYFpPTkVfREVWSUNFYCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmIENPTkZJR19aT05FX0RFVklDRWAgY29uZmlybXMgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBwcmltYXJ5IGZvY3VzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnV6emluZyBzdHJhdGVneSBpcyBzb3VuZC4KClRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBgbWVtY3B5X250YCBhbmQgYG1lbWNweV9udF9kcmFpbmAsIGltcGxlbWVudGVkIGluIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlJiMzOTtzIHN0cmluZyBoYW5kbGluZyAoYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCksIGFsb25nIHdpdGggb3B0aW1pemF0aW9ucyBmb3IgYG1lbWNweV9mbHVzaGNhY2hlYCBpbiB0aGUgc2FtZSBmaWxlLiBUaGVzZSBhcmUgdXNlZCB3aXRoaW4gYG1tL21tX2luaXQuY2AsIHNwZWNpZmljYWxseSBpbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBUaGUgbmljZSB0aGluZyBpcyB0aGUgZmFsbGJhY2sgaW4gYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgLCBtZWFuaW5nIG90aGVyIGFyY2hpdGVjdHVyZXMgc2hvdWxkbiYjMzk7dCBiZSBhZmZlY3RlZC4KClRoZSByZWFzb25pbmcgZm9yIGZ1enppbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvcHkgcm91dGluZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBub24tdGVtcG9yYWwgY29waWVzIGZvciBpbml0aWFsaXppbmcgYFpPTkVfREVWSUNFYCBwYWdlcy4gVGhlc2Ugcm91dGluZXMgYXJlIHRvdWNoZWQgZHVyaW5nIGhvdHBsdWdnaW5nLCBkZXZpY2UgbWVtb3J5IGluaXRpYWxpemF0aW9uIChEQVgsIHBtZW0sIGV0Yy4pLCBzbyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciByZWdyZXNzaW9ucyBpcyBkZWZpbml0ZWx5IHRoZXJlLgoKTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtcmVtYXBfcGFnZXNgLiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBtZW1yZW1hcF9wYWdlc2AgaXMgYSBnb29kIGNob2ljZSBiZWNhdXNlIGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkcml2ZXJzIG1hcHBpbmcgYFpPTkVfREVWSUNFYCBtZW1vcnkuIEkmIzM5O3ZlIGFsc28gY29uc2lkZXJlZCBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGJ1dCBkZWNpZGVkIHRoYXQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbXJlbWFwX3BhZ2VzYCBjb3ZlciB0aGUgY29yZSBsb2dpYyBzdWZmaWNpZW50bHkuCgpJIGNvbnNpZGVyZWQgYGRtLXdyaXRlY2FjaGUuY2AgYW5kIGBtZW1jcHlfZmx1c2hjYWNoZWAuIFdoaWxlIGl0JiMzOTtzIHVzZWQgdGhlcmUsIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyBmdXp6aW5nIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB3aWxsIGNvdmVyIHRoYXQuIEkgY291bGQgYWRkIGZ1bmN0aW9ucyBsaWtlIGB3cml0ZWNhY2hlX2NvbW1pdF9mbHVzaGVkYCBvciBgcG1lbV9kb193cml0ZWAgZm9yIGV4dHJhIGNvdmVyYWdlLCBidXQgdGhlIG1haW4gY2hhbmdlIGlzIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIG9wdGltaXphdGlvbiwgYW5kIHRob3NlIGFyZSBtb3JlIHNwZWNpZmljIHRvIHRob3NlIGRyaXZlcnMuCgpOb3csIGFib3V0IHRoZSBjb25maWd1cmF0aW9uOiBJdCBsb29rcyBsaWtlIEkgb25seSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBaT05FX0RFVklDRWAuIGBYODZfNjRgIGlzIGFzc3VtZWQgYW5kIGBLQVNBTmAgY2FuIGJlIGlnbm9yZWQgYmVjYXVzZSB0aGUgc3l6a2FsbGVyIHdpbGwgaGFuZGxlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgaXQgYXMgcmVxdWlyZWQsIEkgY2FuJiMzOTt0IHNwZWNpZnkgZGlzYWJsaW5nIGl0IGluIHRoZSBjb25maWcgZmlsZS4gU2luY2UgSSYjMzk7bSBhaW1pbmcgZm9yIHRoZSBmYXN0IHBhdGgsIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluc3RhbmNlIG9mIHN5emthbGxlciBkb2VzbiYjMzk7dCBlbmFibGUgS0FTQU4sIHNpbmNlIEkgZG9uJiMzOTt0IHNlZSBhbnkgd2F5IHRvIHNwZWNpZnkgYSAmIzM0O2Rpc2FibGUgS0FTQU4mIzM0OyBkaXJlY3RpdmUuCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBpbml0aWFsaXppbmcgWk9ORV9ERVZJQ0UgbWVtb3J5IHBhZ2VzIHVzaW5nIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbnQpLiBJdCBhbHNvIGFkZHMgaW5saW5lIG9wdGltaXphdGlvbnMgZm9yIG1lbWNweV9mbHVzaGNhY2hlIG9uIHg4Nl82NC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3RyaW5nIGNvcHkgcm91dGluZXMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBkZXZpY2UgbWVtb3J5IGluaXRpYWxpemF0aW9uIChlLmcuLCBEQVgsIHBtZW0pLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhlIG5ldyBmYXN0IHBhdGggYW5kIHRoZSBvcHRpbWl6ZWQgbWVtb3J5IGNvcHkgcm91dGluZXMgZG8gbm90IGludHJvZHVjZSBtZW1vcnkgY29ycnVwdGlvbiBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjM5OjUyLjE5NTE2MDkyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTk5ODU2ODA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBpbml0aWFsaXppbmcgWk9ORV9ERVZJQ0UgbWVtb3J5IHBhZ2VzIHVzaW5nIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbnQpLiBJdCBhbHNvIGFkZHMgaW5saW5lIG9wdGltaXphdGlvbnMgZm9yIG1lbWNweV9mbHVzaGNhY2hlIG9uIHg4Nl82NC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3RyaW5nIGNvcHkgcm91dGluZXMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBkZXZpY2UgbWVtb3J5IGluaXRpYWxpemF0aW9uIChlLmcuLCBEQVgsIHBtZW0pLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhlIG5ldyBmYXN0IHBhdGggYW5kIHRoZSBvcHRpbWl6ZWQgbWVtb3J5IGNvcHkgcm91dGluZXMgZG8gbm90IGludHJvZHVjZSBtZW1vcnkgY29ycnVwdGlvbiBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6Mzk6NTIuMTk1MTY5MDUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU1MjM4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxN2I4NmVjZTU1ZmIxZjhkYzYwNDE1YWQwYTdmMmM2NmE3N2M0MjQzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDA2OjM5OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcXG5pbmRleCA0NjM1NjE2ODYzZjUzZC4uMWU2MzQyNjRhMzFiZDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2lmZGVmIF9fS0VSTkVMX19cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9iYXJyaWVyLmhcXHUwMDNlXFxuIFxcbiAvKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqL1xcbiBcXG5AQCAtODIsNyArODMsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwibW92bnRpcSAlMSwgJTBcXFwiXFxuK1xcdFxcdCAgICAgOiBcXFwiPW1cXFwiKCoodTY0ICopZHN0KVxcbitcXHRcXHQgICAgIDogXFxcInJcXFwiKCooY29uc3QgdTY0ICopc3JjKVxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV84KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzE2KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzE2KGRzdCArIDE2LCBzcmMgKyAxNik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzMyKGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGNudClcXG4ge1xcbiBcXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkge1xcbiBcXHRcXHRzd2l0Y2ggKGNudCkge1xcbkBAIC05NiwxMCArMTI1LDU3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKilkc3QpIDogXFxcInJcXFwiKCoodTY0ICopc3JjKSk7XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXFxcInJcXFwiKCoodTY0ICopKHNyYyArIDgpKSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxcbitcXHRcXHRcXHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxcbitcXHRcXHRcXHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXFxuK1xcdFxcdFxcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxcbitcXHRcXHRcXHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGNhc2UgMzI6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA0ODpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzE2KGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDgwOlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMTYoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDk2OlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuIFxcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuIH1cXG4rXFxuKyNkZWZpbmUgbWVtY3B5X250IG1lbWNweV9udFxcbisvKlxcbisgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbnQgY29weSBwcmltaXRpdmUuXFxuKyAqIENhbGxlcnMgcGFpciBpdCB3aXRoIG1lbWNweV9udF9kcmFpbigpIHdoZW4gbGF0ZXIgc3RvcmVzIG11c3QgYmVcXG4rICogb3JkZXJlZCBhZnRlciB0aGUgY29weS5cXG4rICovXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbnQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuK3tcXG4rXFx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuK31cXG4rXFxuKyNkZWZpbmUgbWVtY3B5X250X2RyYWluIG1lbWNweV9udF9kcmFpblxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogT3JkZXIgdGhlIHByaW9yIE1PVk5USSBzdG9yZXMgaXNzdWVkIGJ5IG1lbWNweV9mbHVzaGNhY2hlKClcXG4rXFx0ICogYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMuXFxuK1xcdCAqL1xcbitcXHR3bWIoKTtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxcbmluZGV4IDQ4NWRmOWMyZGJkZGIzLi40MzM0M2JmY2U0OTM2ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMjU0MSwxMSArMjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbiBcXHRwYWdlLVxcdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFxcdTAwMjYgU0VDVElPTlNfTUFTSykgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcXG4ge1xcbiBcXHRyZXR1cm4gKG1kZi5mIFxcdTAwM2VcXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFxcdTAwMjYgU0VDVElPTlNfTUFTSztcXG4gfVxcbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI3NjgsOSArMjc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSxcXG4ge1xcbiBcXHRzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpO1xcbiBcXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xcbi0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTXFxuLVxcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuLSNlbmRpZlxcbitcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbmluZGV4IDU3MDJkYWNhNDMyNmI3Li5hMTA5YjJmODZjYTZkMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbkBAIC0yNzgsNiArMjc4LDI5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgbWVtY3B5X250XFxuKy8qXFxuKyAqIG1lbWNweV9udCgpIHJlcXVlc3RzIGEgbm9uLXRlbXBvcmFsIGNvcHkgd2hlbiB0aGUgYXJjaGl0ZWN0dXJlIGhhcyBhXFxuKyAqIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgb3ZlcnJpZGUgaXQgZmFsbCBiYWNrIHRvXFxuKyAqIG1lbWNweSgpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG4re1xcbitcXHRtZW1jcHkoZHN0LCBzcmMsIGNudCk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIG1lbWNweV9udF9kcmFpblxcbisvKlxcbisgKiBDYWxsZXJzIHVzZSBtZW1jcHlfbnRfZHJhaW4oKSBiZWZvcmUgbGF0ZXIgbm9ybWFsIHN0b3JlcyB0aGF0IG5lZWQgdG9cXG4rICogYmUgb3JkZXJlZCBhZnRlciBtZW1jcHlfbnQoKS4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGEgc3BlY2lhbGl6ZWRcXG4rICogYmFja2VuZCBjYW4gbGVhdmUgaXQgZW1wdHkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXFxuK3tcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcXG4gY2hhciAqc3RycmVwbGFjZShjaGFyICpzdHIsIGNoYXIgb2xkLCBjaGFyIG5ldyk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCAwZjY0OTA5ZThkMjBlMi4uYWRkYjQ5Njk1ODdlZmEgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTEwMDUsMTEgKzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG4tc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbisvKlxcbisgKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBmcmVlIHBhdGggZm9yIHRoaXMgcGFnZW1hcCB0eXBlIHJlc3RvcmVzIHRoZSBwYWdlXFxuKyAqIHJlZmNvdW50IHRvIDEsIHNvIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgY2FuIGtlZXAgdGhlIGNvdW50IHNldCBieVxcbisgKiBfX2luaXRfc2luZ2xlX3BhZ2UoKS4gT3RoZXJ3aXNlIGluaXRpYWxpemUgdGhlIHJlZmNvdW50IHRvIDAgYW5kIGxlYXZlXFxuKyAqIGl0IHRvIHRoZSBhbGxvY2F0b3Igb3IgcGdtYXAgY2FsbGJhY2tzIHRvIHJhaXNlIGl0IHdoZW4gdGhlIHBhZ2UgaXNcXG4rICogaGFuZGVkIG91dCBhZ2Fpbi5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwYWdlbWFwX3Jlc2V0c19yZWZjb3VudChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXFxuK1xcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXFxuK1xcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4ge1xcbi1cXG4gXFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMDI4LDI3ICsxMDU0LDczIEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0ICovXFxuIFxcdHBhZ2VfZm9saW8ocGFnZSktXFx1MDAzZXBnbWFwID0gcGdtYXA7XFxuIFxcdHBhZ2UtXFx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuK1xcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuK3tcXG4rXFx0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuK1xcdGlmICghcGFnZW1hcF9yZXNldHNfcmVmY291bnQocGdtYXApKVxcbitcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4rfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCh2b2lkKVxcbit7XFxuIFxcdC8qXFxuLVxcdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcXG4tXFx0ICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudFxcbi1cXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cXG4tXFx0ICpcXG4tXFx0ICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZVxcbi1cXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxcbi1cXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cXG4rXFx0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcXG4rXFx0ICogaW5zdHJ1bWVudGVkLlxcbiBcXHQgKi9cXG4tXFx0c3dpdGNoIChwZ21hcC1cXHUwMDNldHlwZSkge1xcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcXG4tXFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuXFxuK1xcdCAqIFNraXAgaXQgd2hlbiB0aGUgcGFnZV9yZWZfc2V0IHRyYWNlcG9pbnQgaXMgZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4rXFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4rXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqICd0ZW1wbGF0ZScgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZVxcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XFxuKyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLVxcdTAwM2V2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmRcXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXFxuKyAqIGNvcHlpbmcgaXQgaW50byBAcGFnZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XFxuKyNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxcbitcXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcXG4rXFx0XFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogJ3RlbXBsYXRlJyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxcbitcXHQgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0XFxuK1xcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxcbitcXHQgKi9cXG4rXFx0em9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7XFxuK1xcdG1lbWNweV9udChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEwNzksMTAgKzExNTEsMTIgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgdXNlX3RlbXBsYXRlKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gKyBucl9wYWdlcztcXG4gXFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXFx1MDAzZXZtZW1tYXBfc2hpZnQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cXG5AQCAtMTA5MSwxMyArMTE2NSwzOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4gXFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxcbiBcXHQgKi9cXG4gXFx0X19TZXRQYWdlSGVhZChoZWFkKTtcXG4rXFxuIFxcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4rKykge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuIFxcbi1cXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4tXFx0XFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4tXFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK1xcdFxcdGlmICghdXNlX3RlbXBsYXRlKSB7XFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcGdtYXAsIGhlYWQsIG9yZGVyKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChwZm4gPT0gaGVhZF9wZm4gKyAxKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxcbitcXHRcXHRcXHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcXG4rXFx0XFx0XFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcXG4rXFx0XFx0XFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XFxuK1xcdFxcdFxcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XFxuK1xcdFxcdFxcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgdGFpbC1wYWdlIGNvcGllc1xcbitcXHQgKiBiZWZvcmUgcHJlcF9jb21wb3VuZF9oZWFkKCkgdXBkYXRlcyB0aGUgb3ZlcmxhcHBpbmcgY29tcG91bmQgbWV0YWRhdGFcXG4rXFx0ICogaW4gdGhlIGZpcnN0IHRhaWwtcGFnZSBkZXNjcmlwdG9ycy4gSWYgbWVtY3B5X250KCkgZmVsbCBiYWNrIHRvXFxuK1xcdCAqIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcywgbWVtY3B5X250X2RyYWluKCkgbWF5IGJlIGEgbm8tb3AuXFxuK1xcdCAqL1xcbitcXHRpZiAodXNlX3RlbXBsYXRlKVxcbitcXHRcXHRtZW1jcHlfbnRfZHJhaW4oKTtcXG4gXFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcXG4gfVxcbiBcXG5AQCAtMTEwNiw2ICsxMjA2LDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4ge1xcbitcXHRib29sIHVzZV90ZW1wbGF0ZSA9IHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCgpO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIG5yX3BhZ2VzO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG4gXFx0c3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSBwZ21hcF9hbHRtYXAocGdtYXApO1xcbkBAIC0xMTEzLDYgKzEyMTQsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xcbiBcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTExMzAsNyArMTIzMiwyNCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gXFxuLVxcdFxcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRcXHRpZiAoIXVzZV90ZW1wbGF0ZSkge1xcbitcXHRcXHRcXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBuaWQsIHBnbWFwKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xcbitcXHRcXHRcXHQgKiBwYWdlLWluaXQgYW5kIHBhZ2VibG9jayBoZWxwZXJzIGV4cGVjdCBhIHJlYWxcXG4rXFx0XFx0XFx0ICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbmlkLCBwZ21hcCk7XFxuK1xcdFxcdFxcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbkBAIC0xMTM4LDkgKzEyNTcsMjYgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0XFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kID09IDEpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogV2hlbiB0aGUgdGVtcGxhdGUgcGF0aCBpcyBlbmFibGVkLCBvcmRlciB0aGUgcHJlY2VkaW5nIGhlYWQtcGFnZSBjb3B5XFxuK1xcdFxcdCAqIGJlZm9yZSBtZW1tYXBfaW5pdF9jb21wb3VuZCgpLCB3aGljaCBpbW1lZGlhdGVseSB1cGRhdGVzIGNvbXBvdW5kLWhlYWRcXG4rXFx0XFx0ICogbWV0YWRhdGEuIElmIG1lbWNweV9udCgpIGZlbGwgYmFjayB0byByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXFxuK1xcdFxcdCAqIG1lbWNweV9udF9kcmFpbigpIG1heSBiZSBhIG5vLW9wLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHVzZV90ZW1wbGF0ZSlcXG4rXFx0XFx0XFx0bWVtY3B5X250X2RyYWluKCk7XFxuK1xcbiBcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCkpO1xcbitcXHRcXHRcXHRcXHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCksXFxuK1xcdFxcdFxcdFxcdCAgICAgdXNlX3RlbXBsYXRlKTtcXG4gXFx0fVxcbitcXHQvKlxcbitcXHQgKiBFbnN1cmUgYW55IHByaW9yIHRlbXBsYXRlIGNvcGllcyBhcmUgb3JkZXJlZCBiZWZvcmUgcmV0dXJuaW5nLlxcbitcXHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIG1lbWNweV9udCgpIHVzZWQgcmVndWxhciBjYWNoZWQgc3RvcmVzLFxcbitcXHQgKiBtZW1jcHlfbnRfZHJhaW4oKSBtYXkgYmUgYSBuby1vcC5cXG4rXFx0ICovXFxuK1xcdGlmICh1c2VfdGVtcGxhdGUpXFxuK1xcdFxcdG1lbWNweV9udF9kcmFpbigpO1xcbiBcXG4gXFx0cGFnZWJsb2NrX21pZ3JhdGV0eXBlX2luaXRfcmFuZ2Uoc3RhcnRfcGZuLCBucl9wYWdlcywgTUlHUkFURV9NT1ZBQkxFKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjM5OjUyLjk5MTc0ODY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTUyMDE5Njc3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgaW5pdGlhbGl6aW5nIFpPTkVfREVWSUNFIG1lbW9yeSBwYWdlcyB1c2luZyBub24tdGVtcG9yYWwgbWVtb3J5IGNvcGllcyAobWVtY3B5X250KS4gSXQgYWxzbyBhZGRzIGlubGluZSBvcHRpbWl6YXRpb25zIGZvciBtZW1jcHlfZmx1c2hjYWNoZSBvbiB4ODZfNjQuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN0cmluZyBjb3B5IHJvdXRpbmVzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgZGV2aWNlIG1lbW9yeSBpbml0aWFsaXphdGlvbiAoZS5nLiwgREFYLCBwbWVtKS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGFuZCB0aGUgb3B0aW1pemVkIG1lbW9yeSBjb3B5IHJvdXRpbmVzIGRvIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IGNvcnJ1cHRpb24gb3IgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTdiODZlY2U1NWZiMWY4ZGM2MDQxNWFkMGE3ZjJjNjZhNzdjNDI0M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDA2OjM5OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLjFlNjM0MjY0YTMxYmQyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtNCw2ICs0LDcgQEBcbiBcbiAjaWZkZWYgX19LRVJORUxfX1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiBcbiAvKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqL1xuIFxuQEAgLTgyLDcgKzgzLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRhc20gdm9sYXRpbGUoXCJtb3ZudGlxICUxLCAlMFwiXG4rXHRcdCAgICAgOiBcIj1tXCIoKih1NjQgKilkc3QpXG4rXHRcdCAgICAgOiBcInJcIigqKGNvbnN0IHU2NCAqKXNyYylcbitcdFx0ICAgICA6IFwibWVtb3J5XCIpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV84KGRzdCwgc3JjKTtcbitcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8xNihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMTYoZHN0ICsgMTYsIHNyYyArIDE2KTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuK1x0bW92bnRpXzMyKGRzdCArIDMyLCBzcmMgKyAzMik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbitcdFx0XHRcdFx0ICAgICAgc2l6ZV90IGNudClcbiB7XG4gXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkge1xuIFx0XHRzd2l0Y2ggKGNudCkge1xuQEAgLTk2LDEwICsxMjUsNTcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3RcbiBcdFx0XHRcdGFzbSAoXCJtb3ZudGlxICUxLCAlMFwiIDogXCI9bVwiKCoodTY0ICopZHN0KSA6IFwiclwiKCoodTY0ICopc3JjKSk7XG4gXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKShkc3QgKyA4KSkgOiBcInJcIigqKHU2NCAqKShzcmMgKyA4KSkpO1xuIFx0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxuK1x0XHRcdCAqIHg4Nl82NCBzdHJ1Y3QgcGFnZSBzaXplczogNjQsIDgwLCBhbmQgOTYgYnl0ZXMuXG4rXHRcdFx0ICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuK1x0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuK1x0XHRcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGNhc2UgMzI6XG4rXHRcdFx0XHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgNDg6XG4rXHRcdFx0XHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuK1x0XHRcdFx0bW92bnRpXzE2KGRzdCArIDMyLCBzcmMgKyAzMik7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA2NDpcbitcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA4MDpcbitcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4rXHRcdFx0XHRtb3ZudGlfMTYoZHN0ICsgNjQsIHNyYyArIDY0KTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDk2OlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdG1vdm50aV8zMihkc3QgKyA2NCwgc3JjICsgNjQpO1xuK1x0XHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4rXG4gXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbitcbisjZGVmaW5lIG1lbWNweV9udCBtZW1jcHlfbnRcbisvKlxuKyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBudCBjb3B5IHByaW1pdGl2ZS5cbisgKiBDYWxsZXJzIHBhaXIgaXQgd2l0aCBtZW1jcHlfbnRfZHJhaW4oKSB3aGVuIGxhdGVyIHN0b3JlcyBtdXN0IGJlXG4rICogb3JkZXJlZCBhZnRlciB0aGUgY29weS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuK3tcbitcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuK31cbitcbisjZGVmaW5lIG1lbWNweV9udF9kcmFpbiBtZW1jcHlfbnRfZHJhaW5cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXG4re1xuK1x0LypcbitcdCAqIE9yZGVyIHRoZSBwcmlvciBNT1ZOVEkgc3RvcmVzIGlzc3VlZCBieSBtZW1jcHlfZmx1c2hjYWNoZSgpXG4rXHQgKiBiZWZvcmUgbGF0ZXIgbm9ybWFsIHN0b3Jlcy5cbitcdCAqL1xuK1x0d21iKCk7XG4rfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLFxuIHtcbiBcdHNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7XG4gXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xuLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1Ncbi1cdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4tI2VuZGlmXG4rXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uYTEwOWIyZjg2Y2E2ZDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X250XG4rLypcbisgKiBtZW1jcHlfbnQoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBoYXMgYVxuKyAqIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgb3ZlcnJpZGUgaXQgZmFsbCBiYWNrIHRvXG4rICogbWVtY3B5KCkuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbit7XG4rXHRtZW1jcHkoZHN0LCBzcmMsIGNudCk7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgbWVtY3B5X250X2RyYWluXG4rLypcbisgKiBDYWxsZXJzIHVzZSBtZW1jcHlfbnRfZHJhaW4oKSBiZWZvcmUgbGF0ZXIgbm9ybWFsIHN0b3JlcyB0aGF0IG5lZWQgdG9cbisgKiBiZSBvcmRlcmVkIGFmdGVyIG1lbWNweV9udCgpLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYSBzcGVjaWFsaXplZFxuKyAqIGJhY2tlbmQgY2FuIGxlYXZlIGl0IGVtcHR5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfbnRfZHJhaW4odm9pZClcbit7XG4rfVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZGRiNDk2OTU4N2VmYSAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSArMTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbisvKlxuKyAqIFJldHVybiB0cnVlIHdoZW4gdGhlIGZyZWUgcGF0aCBmb3IgdGhpcyBwYWdlbWFwIHR5cGUgcmVzdG9yZXMgdGhlIHBhZ2VcbisgKiByZWZjb3VudCB0byAxLCBzbyBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIGNhbiBrZWVwIHRoZSBjb3VudCBzZXQgYnlcbisgKiBfX2luaXRfc2luZ2xlX3BhZ2UoKS4gT3RoZXJ3aXNlIGluaXRpYWxpemUgdGhlIHJlZmNvdW50IHRvIDAgYW5kIGxlYXZlXG4rICogaXQgdG8gdGhlIGFsbG9jYXRvciBvciBwZ21hcCBjYWxsYmFja3MgdG8gcmFpc2UgaXQgd2hlbiB0aGUgcGFnZSBpc1xuKyAqIGhhbmRlZCBvdXQgYWdhaW4uXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4re1xuK1x0LypcbitcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4rXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuK1x0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxuK1x0ICovXG4rXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiB7XG4tXG4gXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcbiBcbiBcdC8qXG5AQCAtMTAyOCwyNyArMTA1NCw3MyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbit7XG4rXHRfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdGlmICghcGFnZW1hcF9yZXNldHNfcmVmY291bnQocGdtYXApKVxuK1x0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbit9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCh2b2lkKVxuK3tcbiBcdC8qXG4tXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXG4tXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XG4tXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cbi1cdCAqXG4tXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXG4tXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxuLVx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXG4rXHQgKiBLZWVwIHNhbml0aXplZCBidWlsZHMgb24gdGhlIHNsb3cgcGF0aCBzbyB0aGVpciBzdG9yZXMgc3RheVxuK1x0ICogaW5zdHJ1bWVudGVkLlxuIFx0ICovXG4tXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbi1cdFx0YnJlYWs7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4tXHRcdGJyZWFrO1xuLVx0fVxuK1x0LypcbitcdCAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuXG4rXHQgKiBTa2lwIGl0IHdoZW4gdGhlIHBhZ2VfcmVmX3NldCB0cmFjZXBvaW50IGlzIGVuYWJsZWQuXG4rXHQgKi9cbitcdGlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXG4rXHRcdHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbit9XG4rXG4rLypcbisgKiAndGVtcGxhdGUnIGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XG4rICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXG4rICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4rXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbitcdFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0LypcbitcdCAqICd0ZW1wbGF0ZScgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbitcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbitcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuK1x0ICovXG4rXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbitcdG1lbWNweV9udChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4gfVxuIFxuIC8qXG5AQCAtMTA3OSwxMCArMTE1MSwxMiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcbi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4rXHRcdFx0XHQgICAgICAgYm9vbCB1c2VfdGVtcGxhdGUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMyArMTE2NSwzOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbiBcdCAqL1xuIFx0X19TZXRQYWdlSGVhZChoZWFkKTtcbitcbiBcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbisrKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4tXHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0XHRpZiAoIXVzZV90ZW1wbGF0ZSkge1xuK1x0XHRcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcbitcdFx0XHRcdFx0XHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xuK1x0XHR9IGVsc2UgaWYgKHBmbiA9PSBoZWFkX3BmbiArIDEpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxuK1x0XHRcdCAqIHN0YXRlIGVzdGFibGlzaGVkIGJ5IHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZVxuK1x0XHRcdCAqIG9uZSB0YWlsIHRlbXBsYXRlIGZvciB0aGUgd2hvbGUgcmFuZ2UgYW5kXG4rXHRcdFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XG4rXHRcdFx0ICogdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS5cbitcdFx0XHQgKi9cbitcdFx0XHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXG4rXHRcdFx0XHRcdFx0ICAgcGdtYXAsIGhlYWQsIG9yZGVyKTtcbitcdFx0XHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cbitcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4rXHRcdH1cbiBcdH1cbitcbitcdC8qXG4rXHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgdGFpbC1wYWdlIGNvcGllc1xuK1x0ICogYmVmb3JlIHByZXBfY29tcG91bmRfaGVhZCgpIHVwZGF0ZXMgdGhlIG92ZXJsYXBwaW5nIGNvbXBvdW5kIG1ldGFkYXRhXG4rXHQgKiBpbiB0aGUgZmlyc3QgdGFpbC1wYWdlIGRlc2NyaXB0b3JzLiBJZiBtZW1jcHlfbnQoKSBmZWxsIGJhY2sgdG9cbitcdCAqIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcywgbWVtY3B5X250X2RyYWluKCkgbWF5IGJlIGEgbm8tb3AuXG4rXHQgKi9cbitcdGlmICh1c2VfdGVtcGxhdGUpXG4rXHRcdG1lbWNweV9udF9kcmFpbigpO1xuIFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbiB9XG4gXG5AQCAtMTEwNiw2ICsxMjA2LDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuIHtcbitcdGJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIG5yX3BhZ2VzO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbiBcdHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwID0gcGdtYXBfYWx0bWFwKHBnbWFwKTtcbkBAIC0xMTEzLDYgKzEyMTQsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTEzMCw3ICsxMjMyLDI0IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdFx0aWYgKCF1c2VfdGVtcGxhdGUpIHtcbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuK1x0XHRcdFx0XHRcdCAgIG5pZCwgcGdtYXApO1xuK1x0XHR9IGVsc2UgaWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxuK1x0XHRcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UsIGJlY2F1c2UgdGhlIGV4aXN0aW5nXG4rXHRcdFx0ICogcGFnZS1pbml0IGFuZCBwYWdlYmxvY2sgaGVscGVycyBleHBlY3QgYSByZWFsXG4rXHRcdFx0ICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsXG4rXHRcdFx0XHRcdFx0ICAgbmlkLCBwZ21hcCk7XG4rXHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4rXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTExMzgsOSArMTI1NywyNiBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRpZiAocGZuc19wZXJfY29tcG91bmQgPT0gMSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0LypcbitcdFx0ICogV2hlbiB0aGUgdGVtcGxhdGUgcGF0aCBpcyBlbmFibGVkLCBvcmRlciB0aGUgcHJlY2VkaW5nIGhlYWQtcGFnZSBjb3B5XG4rXHRcdCAqIGJlZm9yZSBtZW1tYXBfaW5pdF9jb21wb3VuZCgpLCB3aGljaCBpbW1lZGlhdGVseSB1cGRhdGVzIGNvbXBvdW5kLWhlYWRcbitcdFx0ICogbWV0YWRhdGEuIElmIG1lbWNweV9udCgpIGZlbGwgYmFjayB0byByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXG4rXHRcdCAqIG1lbWNweV9udF9kcmFpbigpIG1heSBiZSBhIG5vLW9wLlxuK1x0XHQgKi9cbitcdFx0aWYgKHVzZV90ZW1wbGF0ZSlcbitcdFx0XHRtZW1jcHlfbnRfZHJhaW4oKTtcbitcbiBcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbi1cdFx0XHRcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XG4rXHRcdFx0XHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCksXG4rXHRcdFx0XHQgICAgIHVzZV90ZW1wbGF0ZSk7XG4gXHR9XG4rXHQvKlxuK1x0ICogRW5zdXJlIGFueSBwcmlvciB0ZW1wbGF0ZSBjb3BpZXMgYXJlIG9yZGVyZWQgYmVmb3JlIHJldHVybmluZy5cbitcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgbWVtY3B5X250KCkgdXNlZCByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXG4rXHQgKiBtZW1jcHlfbnRfZHJhaW4oKSBtYXkgYmUgYSBuby1vcC5cbitcdCAqL1xuK1x0aWYgKHVzZV90ZW1wbGF0ZSlcbitcdFx0bWVtY3B5X250X2RyYWluKCk7XG4gXG4gXHRwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZShzdGFydF9wZm4sIG5yX3BhZ2VzLCBNSUdSQVRFX01PVkFCTEUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6Mzk6NTIuOTkxNzUxMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM0NzA5NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFpbXMgdG8gb3B0aW1pemUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhleSdyZSBkb2luZyB0aGlzIHdpdGggYSB0ZW1wbGF0ZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgdXNpbmcgYG1lbWNweV9udGAuIEludGVyZXN0aW5nIGFwcHJvYWNoLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBhIGZldyBrZXkgYXJlYXM6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAsIGFuZCBgbW0vbW1faW5pdC5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaGVhZGVyIGRlZmluaXRpb25zIGZvciB0aGUgYXJjaGl0ZWN0dXJlLCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGRlZmluaXRpb25zLCBhbmQgdGhlbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgKmNhbiogd2UgcmVhbGlzdGljYWxseSB0ZXN0IHRoaXM/IFRoZSBwYXRjaCB0b3VjaGVzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIHNvIGl0J3MgY2FsbGVkIGR1cmluZyBaT05FX0RFVklDRSBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFpPTkVfREVWSUNFPyBSaWdodCwgdGhhdCdzIERBWCwgcG1lbSwgdGhvc2Uga2luZHMgb2YgZGV2aWNlcy4gTm93LCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBIbW0uLi4geWVhaCwgd2l0aCBgbmRfcG1lbWAgb3Igc2ltaWxhciBkcml2ZXJzLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBzaW11bGF0ZSBpdC4gR29vZCwgZ29vZCwgdGhhdCBvcGVucyB1cCB0ZXN0aW5nIHNpZ25pZmljYW50bHkuIFdhaXQgYSBzZWNvbmQuLi4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBhbHNvIGNhbGxlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgZm9yIFpPTkVfREVWSUNFISBUaGF0IGJyb2FkZW5zIHRoZSB0ZXN0aW5nIHdpbmRvdyBldmVuIGZ1cnRoZXIsIHdoaWNoIGlzIGV4Y2VsbGVudC5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXTigJlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gQW55IG9wdGltaXphdGlvbiBoZXJlLCBlc3BlY2lhbGx5IGludm9sdmluZyBsb3ctbGV2ZWwgbWVtb3J5IG9wZXJhdGlvbnMsIGhhcyB0aGUgcG90ZW50aWFsIGZvciBuYXN0eSBzaWRlIGVmZmVjdHMgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYnVncy4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbGVycyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBzdGFydCBsb29raW5nIGZvciBpbnRlcmVzdGluZyB0ZXN0IGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6Mzk6NTguNTI2NDYyNjQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDk0Mzk3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMzExPXN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjAtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMzIxOmV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzIyLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjQxLVxcdCAqL1xcbm1tL21lbXJlbWFwLmM6MjQyOlxcdG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKFxcdTAwMjZOT0RFX0RBVEEobmlkKS1cXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV0sXFxubW0vbWVtcmVtYXAuYy0yNDMtXFx0XFx0XFx0XFx0UEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG4tLVxcbm1tL21tX2luaXQuYz05Njg9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTAwOS0gKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBmcmVlIHBhdGggZm9yIHRoaXMgcGFnZW1hcCB0eXBlIHJlc3RvcmVzIHRoZSBwYWdlXFxubW0vbW1faW5pdC5jOjEwMTA6ICogcmVmY291bnQgdG8gMSwgc28gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBjYW4ga2VlcCB0aGUgY291bnQgc2V0IGJ5XFxubW0vbW1faW5pdC5jLTEwMTEtICogX19pbml0X3NpbmdsZV9wYWdlKCkuIE90aGVyd2lzZSBpbml0aWFsaXplIHRoZSByZWZjb3VudCB0byAwIGFuZCBsZWF2ZVxcbi0tXFxubW0vbW1faW5pdC5jPTExNTA9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIwMy1cXG5tbS9tbV9pbml0LmM6MTIwNDp2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbm1tL21tX2luaXQuYy0xMjA1LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDowMi42NzU5MDgzNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAwNzk5NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBwYWdlbWFwX3JhbmdlYCBDYWxsZXJzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gc29tZXRoaW5nIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGBwYWdlbWFwX3JhbmdlYCB3aXRoaW4gYG1tL21lbXJlbWFwLmNgLiBUaGF0IGZ1bmN0aW9uJ3MgcHJldHR5IGZ1bmRhbWVudGFsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIHdoZXJlIGBwYWdlbWFwX3JhbmdlYCBpcyBiZWluZyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gKndoeSogaXQncyBiZWluZyB1c2VkIGFuZCwgdGhlcmVmb3JlLCB0aGUgbmF0dXJlIG9mIHRoZSBwcm9ibGVtIG9yIHRhc2sgYXQgaGFuZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNhbGwgZ3JhcGggcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjA2LjI3NjcxMDI0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU2OTc2NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VtYXBfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcmVtYXAuYz0xMzc9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTQzLVxcbm1tL21lbXJlbWFwLmM6MTQ0OnN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbm1tL21lbXJlbWFwLmMtMTQ1LVxcdFxcdGludCByYW5nZV9pZCwgaW50IG5pZClcXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTMzNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2U7IGkrKykge1xcbm1tL21lbXJlbWFwLmM6MzM4OlxcdFxcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcXG5tbS9tZW1yZW1hcC5jLTMzOS1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjEwLjgzMzY5MjE2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTQ1OTg0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbXJlbWFwX3BhZ2VzYCBVc2FnZSoqXG5cblJpZ2h0LCBgbWVtcmVtYXBfcGFnZXNgLi4uIHRoYXQgZnVuY3Rpb24gaXMgYSBrZXlzdG9uZSwgaXNuJ3QgaXQ/IFRoZSBzaGVlciBudW1iZXIgb2YgZHJpdmVycyB0aGF0IGNhbGwgaW50byBpdCBpcyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnIOKAkyBvciwgcmF0aGVyLCBhIHBvaW50IG9mIHNpZ25pZmljYW50IGludGVyZXN0LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicmVhZHRoIG9mIGl0cyBpbXBhY3QuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYWxsIHR5cGVzIG9mIGRyaXZlcnMuIFdoYXQgYXJlIHRoZSBjb21tb24gdXNlLWNhc2VzPyBJcyBpdCBtZW1vcnkgbWFwcGluZyBmb3IgZGV2aWNlIGFjY2Vzcz8gRE1BIHRyYW5zZmVycz8gVmlydHVhbCBhZGRyZXNzIG1hbmlwdWxhdGlvbj8gRWFjaCBkcml2ZXIncyBtb3RpdmF0aW9uIGJlaGluZCBjYWxsaW5nIGBtZW1yZW1hcF9wYWdlc2AgYWRkcyBhIGxheWVyIG9mIGNvbXBsZXhpdHkuIEknbGwgd2FudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29udGV4dCB3aXRoaW4gZWFjaCBjYWxsZXIsIHRoZSBzcGVjaWZpYyBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgb2YgaG93IGl0J3MgYmVpbmcgdXNlZC4gQW55IHN1YnRsZSBtaXN1c2Ugb3IgdW5pbnRlbmRlZCBiZWhhdmlvciBpbiBgbWVtcmVtYXBfcGFnZXNgIGNvdWxkIHByb3BhZ2F0ZSBpc3N1ZXMgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBoYXJkd2FyZSBhbmQgc29mdHdhcmUgY29tcG9uZW50cy4gVGhpcyByZXF1aXJlcyBzb21lIGRlZXAgZGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyOTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDoxNC4wMjgyOTMwNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3OTMwNjk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1yZW1hcF9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjc0PVRoZXNlIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIHdpdGg6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4NS0gICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI4NjogICAgbWVtcmVtYXBfcGFnZXMoXFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5MC1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjkxOlRoZXJlIGFyZSBhbHNvIGRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTItZGV2bV9tZW11bm1hcF9wYWdlcygpLCBhbmQgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSB3aGVuIHRoZSByZXNvdXJjZXMgY2FuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTQxPXRvIGtlZXAgdGhlIG1lbW9yeSBwaW5uZWQgZm9yIGFjdGl2ZSB1c2UuIGBaT05FX0RFVklDRWAsIHZpYVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNDI6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AsIHBlcmZvcm1zIGp1c3QgZW5vdWdoIG1lbW9yeSBob3RwbHVnIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE0My10dXJuIG9uIDpjOmZ1bmM6YHBmbl90b19wYWdlYCwgOmM6ZnVuYzpgcGFnZV90b19wZm5gLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNTc9bWVtb3J5IGhvdHBsdWcuIFN1Yi1zZWN0aW9uIHN1cHBvcnQgYWxsb3dzIGZvciAyTUIgYXMgdGhlIGNyb3NzLWFyY2hcXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTU4OmNvbW1vbiBhbGlnbm1lbnQgZ3JhbnVsYXJpdHkgZm9yIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLlxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzYtICAgIHBhZ2VtYXAub3BzID0gXFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjM3OiAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNDI66L+Y5pyJZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDMtZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MTA3PVpPTkVfREVWSUNFXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMS3kuovlrp7mnInlhbPvvJrov5nkupvlnLDlnYDojIPlm7TnmoTpobXpnaLlr7nosaHku47mnKrooqvlnKjnur/moIforrDov4fvvIzogIzkuJTlv4Xpobvlr7norr7lpIfov5vooYzlvJXnlKjvvIzogIzkuI3ku4Xku4VcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjExMjrmmK/pobXpnaLvvIzku6Xkv53mjIHlhoXlrZjooqvigJzplIHlrprigJ3ku6Xkvr/kvb/nlKjjgIIgYFpPTkVfREVWSUNFYCDvvIzpgJrov4cgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTMt5Li657uZ5a6a55qEcGZuc+iMg+WbtOaJp+ihjOi2s+Wkn+eahOWGheWtmOeDreaPkuaLlOadpeW8gOWQryA6YzpmdW5jOmBwZm5fdG9fcGFnZWDvvIxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTIyLTpjOmZ1bmM6YGFyY2hfYWRkX21lbW9yeWAg77yM5Y2z5YaF5a2Y54Ot5o+S5ouU55qE5LiK5Y2K6YOo5YiG44CC5a2Q5q615pSv5oyB5YWB6K64Mk1C5L2c5Li6XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMjM6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag55qE6Leo5p625p6E6YCa55So5a+56b2Q6aKX57KS5bqm44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjQtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTExNTg9aW50IGt2bXBwY191dm1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODktXFx0a3ZtcHBjX3V2bWVtX3BnbWFwLm93bmVyID0gXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjExOTA6XFx0YWRkciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXAsIE5VTUFfTk9fTk9ERSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTkxLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjQ9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzYtXFx0LypcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6OTc3OlxcdCAqIFNwZWNpYWwgY2FzZTogYWRkX3BhZ2VzKCkgaXMgY2FsbGVkIGJ5IG1lbXJlbWFwX3BhZ2VzKCkgZm9yIGFkZGluZyBkZXZpY2VcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc4LVxcdCAqIHByaXZhdGUgcGFnZXMuIERvIG5vdCBidW1wIHVwIG1heF9wZm4gaW4gdGhlIGRldmljZSBwcml2YXRlIHBhdGgsXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM0LVxcdFxcdFxcdG9yZGVyX2Jhc2VfMihkZXZfZGF4LVxcdTAwM2VhbGlnbiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM2LVxcdGlmIChJU19FUlIoYWRkcikpXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jPTIwNz1zdGF0aWMgaW50IGZzZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjczLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mjc0OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjc1LVxcdGlmIChJU19FUlIoYWRkcikpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTEwMjY9aW50IGtnZDJrZmRfaW5pdF96b25lX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNjg6XFx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cXHUwMDNlZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY5LVxcdGlmIChJU19FUlIocikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI5Nj1ub3V2ZWF1X2RtZW1fY2h1bmtfYWxsb2Moc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sIHN0cnVjdCBwYWdlICoqcHBhZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMzItXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MzMzOlxcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZjaHVuay1cXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzNC1cXHRpZiAoSVNfRVJSKHB0cikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzYwPXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMS1cXHRwYWdlbWFwLVxcdTAwM2VvcHMgPSBkcm1fcGFnZW1hcF9wYWdlbWFwX29wc19nZXQoKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTgwMjpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAzLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTM4MT1zdGF0aWMgaW50IG1zaHZfdnRsX2lvY3RsX2FkZF92dGwwX21lbShzdHJ1Y3QgbXNodl92dGwgKnZ0bCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMC1cXHQgKiBUaGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgcmFuZ2UgaXMgYWxpZ25lZDsgaS5lLiBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGxlbmd0aC5cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MTE6XFx0ICogQ2xhbXAgdG8gTUFYX0ZPTElPX09SREVSIHRvIGF2b2lkIGEgV0FSTiBpbiBtZW1yZW1hcF9wYWdlcygpIHdoZW4gdGhlIHJhbmdlXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEyLVxcdCAqIGFsaWdubWVudCBleGNlZWRzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBmb2xpbyBvcmRlciBmb3IgdGhpcyBrZXJuZWwgY29uZmlnLlxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDE5LVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMDpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIxLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjI6XFx0XFx0ZGV2X2Vycih2dGwtXFx1MDAzZW1vZHVsZV9kZXYsIFxcXCJkZXZtX21lbXJlbWFwX3BhZ2VzIGVycm9yOiAlbGRcXFxcblxcXCIsIFBUUl9FUlIoYWRkcikpO1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQyMy1cXHRcXHRrZnJlZShwZ21hcCk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUxLVxcdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxNTI6XFx0ICBjb3JlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBpbXBsZW1lbnRhdGlvbiBhbmQgb3RoZXJcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cXHQgIGluZnJhc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxNy1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUxODpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxOS1cXHRcXHRwZm5fc2IgPSBuZF9wZm4tXFx1MDAzZXBmbl9zYjtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzAtXFx0XFx0cG1lbS1cXHUwMDNlcGdtYXAub3BzID0gXFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MzE6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcXHUwMDI2cG1lbS1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXFx0XFx0YmJfcmFuZ2UgPSBwbWVtLVxcdTAwM2VwZ21hcC5yYW5nZTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9OTM0PUVYUE9SVF9TWU1CT0wobmRfcmVnaW9uX3JlbGVhc2VfbGFuZSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTkzNi0vKlxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6OTM3OiAqIFBvd2VyUEMgcmVxdWlyZXMgdGhpcyBhbGlnbm1lbnQgZm9yIG1lbXJlbWFwX3BhZ2VzKCkuIEFsbCBvdGhlciBhcmNoc1xcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM4LSAqIHNob3VsZCBiZSBvayB3aXRoIFNVQlNFQ1RJT05fU0laRSAoc2VlIG1lbXJlbWFwX2NvbXBhdF9hbGlnbigpKS5cXG4tLVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jPTM4Nz1pbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLFxcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM2LVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQzNzpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTYtXFx0XFx0ZGV2X2luZm8tXFx1MDAzZXBnbWFwLm5yX3JhbmdlXFx0PSAxO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM6Njk3OlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlZGV2LCBcXHUwMDI2ZGV2X2luZm8tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5OC1cXHRcXHRpZiAoSVNfRVJSKGFkZHIpKSB7XFxuLS1cXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jPTM3PXN0YXRpYyBpbnQgZmlsbF9saXN0KHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTIzLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM6MTI0OlxcdHZhZGRyID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIE5VTUFfTk9fTk9ERSk7XFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjUtXFx0aWYgKElTX0VSUih2YWRkcikpIHtcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3Nj1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE2LVxcdC8qIElkZWFsbHkgd2Ugd291bGQgZGlyZWN0bHkgdXNlIHRoZSBQQ0kgQkFSIHJlc291cmNlIGJ1dFxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcXHQgKiBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2FudHMgaXRzIG93biBjb3B5IGluIHBnbWFwLiAgU29cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTgtXFx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjYtXFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3OlxcdGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZ2ZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjgtXFx0aWYgKElTX0VSUihmcy1cXHUwMDNld2luZG93X2thZGRyKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTUtICogQGFsdG1hcDogcHJlLWFsbG9jYXRlZC9yZXNlcnZlZCBtZW1vcnkgZm9yIHZtZW1tYXAgYWxsb2NhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNy0gKiBAZG9uZTogY29tcGxldGlvbiBmb3IgQHJlZlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIyNz12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjI4LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIyOTp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMwLXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIzMTp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIzMi12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjQtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY1OnN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2Ni1cXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2OC1cXHQvKlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjk6XFx0ICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI3MC1cXHQgKiBaT05FX0RFVklDRSBzdXBwb3J0IGVuYWJsZWQsIHRoaXMgcmVxdWlyZXMgY2FsbGVycyB0byBmYWxsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Mjg3PXN0YXRpYyBpbmxpbmUgYm9vbCBwZ21hcF9wZm5fdmFsaWQoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgdW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkxLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyOTI6Lyogd2hlbiBtZW1yZW1hcF9wYWdlcygpIGlzIGRpc2FibGVkIGFsbCBhcmNocyBjYW4gcmVtYXAgYSBzaW5nbGUgcGFnZSAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTMtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbXJlbWFwX2NvbXBhdF9hbGlnbih2b2lkKVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXFxuLS1cXG5saWIvdGVzdF9obW0uYy02MTUtXFx0fVxcbmxpYi90ZXN0X2htbS5jOjYxNjpcXHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2ZGV2bWVtLVxcdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxubGliL3Rlc3RfaG1tLmMtNjE3LVxcdGlmIChJU19FUlJfT1JfTlVMTChwdHIpKSB7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE3PXN0YXRpYyBERUZJTkVfWEFSUkFZKHBnbWFwX2FycmF5KTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTktLypcXG5tbS9tZW1yZW1hcC5jOjIwOiAqIFRoZSBtZW1yZW1hcCgpIGFuZCBtZW1yZW1hcF9wYWdlcygpIGludGVyZmFjZXMgYXJlIGFsdGVybmF0ZWx5IHVzZWRcXG5tbS9tZW1yZW1hcC5jLTIxLSAqIHRvIG1hcCBwZXJzaXN0ZW50IG1lbW9yeSBuYW1lc3BhY2VzLiBUaGVzZSBpbnRlcmZhY2VzIHBsYWNlIGRpZmZlcmVudFxcbm1tL21lbXJlbWFwLmMtMjItICogY29uc3RyYWludHMgb24gdGhlIGFsaWdubWVudCBhbmQgc2l6ZSBvZiB0aGUgbWFwcGluZyAobmFtZXNwYWNlKS5cXG5tbS9tZW1yZW1hcC5jOjIzOiAqIG1lbXJlbWFwKCkgY2FuIG1hcCBpbmRpdmlkdWFsIFBBR0VfU0laRSBwYWdlcy4gbWVtcmVtYXBfcGFnZXMoKSBjYW5cXG5tbS9tZW1yZW1hcC5jLTI0LSAqIG9ubHkgbWFwIHN1YnNlY3Rpb25zICgyTUIpLCBhbmQgYXQgbGVhc3Qgb25lIGFyY2hpdGVjdHVyZSAoUG93ZXJQQylcXG5tbS9tZW1yZW1hcC5jOjI1OiAqIHRoZSBtaW5pbXVtIG1hcHBpbmcgZ3JhbnVsYXJpdHkgb2YgbWVtcmVtYXBfcGFnZXMoKSBpcyAxNk1CLlxcbm1tL21lbXJlbWFwLmMtMjYtICpcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTMwPUVYUE9SVF9TWU1CT0xfR1BMKG1lbXVubWFwX3BhZ2VzKTtcXG5tbS9tZW1yZW1hcC5jLTEzMS1cXG5tbS9tZW1yZW1hcC5jOjEzMjpzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG5tbS9tZW1yZW1hcC5jLTEzMy17XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjYxLS8qXFxubW0vbWVtcmVtYXAuYzoyNjI6ICogTm90IGRldmljZSBtYW5hZ2VkIHZlcnNpb24gb2YgZGV2bV9tZW1yZW1hcF9wYWdlcywgdW5kb25lIGJ5XFxubW0vbWVtcmVtYXAuYzoyNjM6ICogbWVtdW5tYXBfcGFnZXMoKS4gIFBsZWFzZSB1c2UgZGV2bV9tZW1yZW1hcF9wYWdlcyBpZiB5b3UgaGF2ZSBhIHN0cnVjdFxcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXFxubW0vbWVtcmVtYXAuYy0yNjUtICovXFxubW0vbWVtcmVtYXAuYzoyNjY6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcXG5tbS9tZW1yZW1hcC5jLTI2Ny17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM1MS19XFxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzUzLVxcbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXFxubW0vbWVtcmVtYXAuYy0zNTYtICogQGRldjogaG9zdGluZyBkZXZpY2UgZm9yIEByZXNcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICdsaXZlJyBvbiBlbnRyeSBhbmQgd2lsbCBiZSBraWxsZWQgYW5kIHJlYXBlZCBhdFxcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzMtICovXFxubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zNzUte1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzgtXFxubW0vbWVtcmVtYXAuYzozNzk6XFx0cmV0ID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIGRldl90b19ub2RlKGRldikpO1xcbm1tL21lbXJlbWFwLmMtMzgwLVxcdGlmIChJU19FUlIocmV0KSlcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzgyLVxcbm1tL21lbXJlbWFwLmM6MzgzOlxcdGVycm9yID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLFxcbm1tL21lbXJlbWFwLmMtMzg0LVxcdFxcdFxcdHBnbWFwKTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzg4LX1cXG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG5tbS9tZW1yZW1hcC5jLTM5MC1cXG5tbS9tZW1yZW1hcC5jPTM5MT12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbm1tL21lbXJlbWFwLmMtMzkyLXtcXG5tbS9tZW1yZW1hcC5jOjM5MzpcXHRkZXZtX3JlbGVhc2VfYWN0aW9uKGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLCBwZ21hcCk7XFxubW0vbWVtcmVtYXAuYy0zOTQtfVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYz00MDI9aW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDU5LSAqXFxubW0vc3BhcnNlLXZtZW1tYXAuYzo0NjA6ICogTm90ZSB0aGF0IG1lbXJlbWFwX3BhZ2VzKCkgcmVzZXRzIEBucl9yYW5nZSB2YWx1ZSBhbmQgd2lsbCBpbmNyZW1lbnRcXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2MS0gKiBpdCBhZnRlciBlYWNoIHJhbmdlIHN1Y2Nlc3NmdWwgb25saW5pbmcuIFRodXMgdGhlIHZhbHVlIG9yIEBucl9yYW5nZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkPTEzPWxkZmxhZ3MteSArPSAtLXdyYXA9X19yZWxlYXNlX3JlZ2lvblxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZDoxNDpsZGZsYWdzLXkgKz0gLS13cmFwPWRldm1fbWVtcmVtYXBfcGFnZXNcXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQtMTUtbGRmbGFncy15ICs9IC0td3JhcD1pbnNlcnRfcmVzb3VyY2VcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYz0xMDg9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMTQtXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjExNTp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNi17XFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIxLVxcdGlmICghbmZpdF9yZXMpXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEyMjpcXHRcXHRyZXR1cm4gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNC19XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEzNTpFWFBPUlRfU1lNQk9MX0dQTChfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNi1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg9MjEyPXZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxMy1cXHRcXHRzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaDoyMTQ6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxNS12b2lkICpfX3dyYXBfbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjE4LjUwNzYwNjQyNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTQ4MDk1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIFBhdGNoKipcblxuT2theSwgc28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMuIEkgc2VlIGl0J3MgdXNlZCBpbiBgbGliL3Rlc3RfaG1tLmNgLCB0aGF0J3Mgb3VyIHRlc3RpbmcgbW9kdWxlLCBhcyB3ZWxsIGFzIHRoZSBwbWVtIGRyaXZlciAoYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2ApIGFuZCBhbHNvIGBkcml2ZXJzL2RheC9kZXZpY2UuY2AuIFNvLCBpdCdzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIHRoYXQncyBhY3RpdmVseSB1c2VkLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJldmlzaXQgdGhpcyBwYXRjaC4gSXQncyBhZGRpbmcgYSBgbWVtY3B5X250YCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQncyB0aGUgbm9uLXRlbXBvcmFsIG1lbWNweSB1c2luZyBgbW92bnRpYCBpbnN0cnVjdGlvbnMgb24geDg2XzY0LCBhIG5lYXQgb3B0aW1pemF0aW9uLiBUaGUgbWFpbiB0aGluZyB0aGlzIHBhdGNoIGRvZXMgaXMgbW9kaWZ5IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gbGV2ZXJhZ2UgYG1lbWNweV9udGAuIFRoZSBnb2FsIGlzIHRvIGNvcHkgZnJvbSBhIHRlbXBsYXRlIHBhZ2UgaW5zdGVhZCBvZiBwYWluc3Rha2luZ2x5IGluaXRpYWxpemluZyBlYWNoIGluZGl2aWR1YWwgcGFnZSBmcm9tIHNjcmF0Y2guIFNvdW5kcyBsaWtlIGEgbmljZSBvcHRpbWl6YXRpb24gZm9yIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGVzcGVjaWFsbHkgZm9yIGxhcmdlciBtZW1vcnkgcmVnaW9ucy5cblxuTm93LCBJJ20gc2VlaW5nIHRoaXMgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZGAgZnVuY3Rpb24gaW4gdGhlIHBhdGNoLiBUaGlzIGlzIGtleSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIG9wdGltaXphdGlvbiBpcyAqZW5hYmxlZCouIFdhaXQgYSBtaW51dGUuLi4gaWYgS0FTQU4gb3IgS01TQU4gYXJlIGVuYWJsZWQsIGl0IHJldHVybnMgZmFsc2UuIFRoZSBvcHRpbWl6YXRpb24gaXMgKmRpc2FibGVkKiEgQW5kIGFsc28gaWYgdGhlIGBwYWdlX3JlZl9zZXRgIHRyYWNlcG9pbnQgaXMgYWN0aXZlLCB0aGF0IGRpc2FibGVzIGl0IHRvby4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGF0LiBMZXQncyBkaWcgaW50byBgbW0vbW1faW5pdC5jYCBhbmQgY2hlY2sgaG93IGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhvc2UgcGFydGljdWxhciBjb25kaXRpb25zIHdhcnJhbnQgZGlzYWJsaW5nIHRoZSBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDgyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjI0LjIyMjQxOTA2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNDc0MTY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTEwNTk9c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA2Ny1cXG5tbS9tbV9pbml0LmM6MTA2ODpzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKHZvaWQpXFxubW0vbW1faW5pdC5jLTEwNjkte1xcbi0tXFxubW0vbW1faW5pdC5jPTEyMDQ9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21tX2luaXQuYy0xMjA4LXtcXG5tbS9tbV9pbml0LmM6MTIwOTpcXHRib29sIHVzZV90ZW1wbGF0ZSA9IHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCgpO1xcbm1tL21tX2luaXQuYy0xMjEwLVxcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gc3RhcnRfcGZuICsgbnJfcGFnZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjI4LjMyNzE2NzA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDM0NjMwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmbGFnLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkYCwgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGRpc3NlY3RpbmcgdGhlIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG9wdGltaXphdGlvbiBpcyBiZWluZyBlbmFibGVkIGhlcmUsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXQncyBiZWluZyBpbXBsZW1lbnRlZC4gXCJab25lIGRldmljZSBwYWdlIGluaXRcIiDigJMgdGhhdCBwaHJhc2UgYWxvbmUgdGVsbHMgbWUgdGhpcyByZWxhdGVzIHRvIHRoZSBpbml0aWFsIHNldHVwIG9mIG1lbW9yeSBwYWdlcyB3aXRoaW4gYSBwYXJ0aWN1bGFyIHpvbmUgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBkZXZpY2UgbWVtb3J5IG9yIGEgRE1BIHpvbmUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYXJvdW5kIHRoZSB0cmFkZS1vZmZzLiBXaGF0IGFyZSB3ZSBvcHRpbWl6aW5nIGZvcj8gSXMgaXQgc3BlZWQgb2YgYWxsb2NhdGlvbj8gUmVkdWNpbmcgbWVtb3J5IG92ZXJoZWFkPyBQb3dlciBjb25zdW1wdGlvbiBkdXJpbmcgaW5pdGlhbCBzZXR1cD8gSXMgdGhpcyBhYm91dCBsYXp5IGluaXRpYWxpemF0aW9uPyBPciBwZXJoYXBzIGRlZmVycmluZyBhbGxvY2F0aW9uIGFsdG9nZXRoZXIgdW50aWwgYSBsYXRlciB0aW1lPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIE5VTUEgY29uc2lkZXJhdGlvbnMgYXQgcGxheSB0aGF0IHdvdWxkIGluZm9ybSB0aGlzIG9wdGltaXphdGlvbj9cblxuSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBwaXRmYWxscyB0b28uIFdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhpcyBvcHRpbWl6YXRpb24gaXMgbWlzYXBwbGllZCBvciBpZiB0aGUgYXNzdW1wdGlvbnMgaXQncyBiYXNlZCBvbiBhcmUgdmlvbGF0ZWQ/IE1lbW9yeSBsZWFrcz8gSW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWdlcyBjYXVzaW5nIGRvd25zdHJlYW0gaXNzdWVzPyBPciwgcGVyaGFwcywgY29udGVudGlvbiBpc3N1ZXMgaWYgd2UncmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBwYXRocz8gVGhlIGV4YWN0IGltcGFjdCBvbiB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHdvcmtsb2FkcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGNvbnNpZGVyOyBhcmUgdGhlcmUgZGlmZmVyZW50IHdvcmtsb2FkcyB3aGVyZSB0aGlzIGNhbiBjYXVzZSBhbiBpc3N1ZT9cblxuRnVuZGFtZW50YWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBjb250cm9sbGVkIGJ5IHRoaXMgZmxhZyBhbmQgbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIGJlZm9yZS1hbmQtYWZ0ZXIgYmVoYXZpb3IuIEEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsb2NrcyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW5kIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZWZmZWN0cyBvZiB0aGlzIG9wdGltaXphdGlvbiBmbGFnLiBJIHdpbGwgbmVlZCB0byB1c2UgbXkgZGVidWdnaW5nIHRvb2xzIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgYW5kIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgY291bnRlcnMgSSBjYW4gdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjMyLjU3MDYzMjgzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21tX2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDY4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQodm9pZClcXG4xMDY5OlxcdHtcXG4xMDcwOlxcdFxcdC8qXFxuMTA3MTpcXHRcXHQgKiBLZWVwIHNhbml0aXplZCBidWlsZHMgb24gdGhlIHNsb3cgcGF0aCBzbyB0aGVpciBzdG9yZXMgc3RheVxcbjEwNzI6XFx0XFx0ICogaW5zdHJ1bWVudGVkLlxcbjEwNzM6XFx0XFx0ICovXFxuMTA3NDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSlcXG4xMDc1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDc2OlxcdFxcbjEwNzc6XFx0XFx0LypcXG4xMDc4OlxcdFxcdCAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuXFxuMTA3OTpcXHRcXHQgKiBTa2lwIGl0IHdoZW4gdGhlIHBhZ2VfcmVmX3NldCB0cmFjZXBvaW50IGlzIGVuYWJsZWQuXFxuMTA4MDpcXHRcXHQgKi9cXG4xMDgxOlxcdFxcdGlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKVxcbjEwODI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwODM6XFx0XFxuMTA4NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDg1OlxcdH1cXG4xMDg2OlxcdFxcbjEwODc6XFx0c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDozMi41NzE5ODc2NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgzOTQ3NzI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtBU0FOIEltcGFjdCBvbiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0tBU0FOYCBvciBgQ09ORklHX0tNU0FOYC4gTXkgZ3V0IHJlYWN0aW9uIGlzLCBcIlVoIG9oLCB0aGlzIG1pZ2h0IGJlIGEgcHJvYmxlbS5cIiBTcGVjaWZpY2FsbHksIGlmIGVpdGhlciBvZiB0aG9zZSBpcyBlbmFibGVkLCB0aGUgb3B0aW1pemF0aW9uIGlzIGJ5cGFzc2VkLiBBbmQsIGxldCdzIGZhY2UgaXQsIHN5emthbGxlciwgd2hpY2ggaXMgdGhlIGZ1enplciB0aGF0J3MgcmVsZXZhbnQgaGVyZSwgKmxvdmVzKiBLQVNBTi4gU28sIHR5cGljYWxseSwgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIHdvdWxkIHNpbXBseSByZXR1cm4gYGZhbHNlYCwgdGFraW5nIHRoZSBzbG93IHBhdGguXG5cblJpZ2h0LCBzbyB0aGF0IG1lYW5zIGlmIEtBU0FOIGlzIG9uLCB3aGljaCBpcyB0eXBpY2FsIGZvciBzeXprYWxsZXIsIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgIHJldHVybnMgZmFsc2UuIEFuZCB0aHVzIGB1c2VfdGVtcGxhdGVgIGJlY29tZXMgZmFsc2UuIExvb2tpbmcgZnVydGhlciBkb3duIGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIEkgc2VlOlxuXG5gYGBjXG5cdFx0aWYgKCF1c2VfdGVtcGxhdGUpIHtcblx0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsXG5cdFx0XHRcdFx0XHQgICBuaWQsIHBnbWFwKTtcblx0XHR9IGVsc2UgaWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbmBgYFxuXG5Hb3QgaXQhIFRoZSBuZXcgZmFzdCBwYXRoIHdvbid0IGdldCBleGVjdXRlZCBhdCBhbGwgd2hlbiBLQVNBTiBpcyBlbmFibGVkLiAgTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBkaXNtaXNzIGl0LiBCdXQsIHdhaXQuLi4gc3l6a2FsbGVyICphbHNvKiB0ZXN0cyB3aXRob3V0IEtBU0FOIHNvbWV0aW1lcy4gIEFuZCBldmVuIGlmIG5vdCwgd2UgY2FuIGFsd2F5cyBqdXN0aWZ5IGZ1enppbmcgYSBwaWVjZSBvZiBjb2RlIGFuZCB0ZXN0IGl0IG9uIG5vbi1LQVNBTiBpbnN0YW5jZXMuXG5cbk5vdywgbGV0IG1lIGdvIGJhY2sgdG8gdGhlIHByb21wdCwgd2hpY2ggc2F5cywgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIE9rYXksIGl0IGRvZXNuJ3QgbWVudGlvbiBLQVNBTiBzcGVjaWZpY2FsbHkuIEl0IGlzIGp1c3QgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIFRoaXMgaXMgZGlmZmVyZW50LCBidXQgbm90IGltcG9zc2libGUuXG5cbkhvd2V2ZXIsIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjdHVhbGx5IGZ1enplci13b3J0aHksIGV2ZW4gaWYgcmVhY2hhYmxlPyAgVG8gbWFrZSBhIGNhbGwgZWl0aGVyIHdheSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBPa2F5LCBub3cgdGhhdCBJIGhhdmUgYXNzZXNzZWQgdGhlIHJlYWNoYWJpbGl0eSwgZG9lcyB0aGUgc2xvdyBwYXRoIGhhdmUgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcz8gSSBzaG91bGQgY2hlY2sgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDozOS40MTE0NjgyNjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21tX2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDU5LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDU5OlxcdHN0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxcbjEwNjA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuMTA2MTpcXHRcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbjEwNjI6XFx0e1xcbjEwNjM6XFx0XFx0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuMTA2NDpcXHRcXHRpZiAoIXBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KHBnbWFwKSlcXG4xMDY1OlxcdFxcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbjEwNjY6XFx0fVxcbjEwNjc6XFx0XFxuMTA2ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKHZvaWQpXFxuMTA2OTpcXHR7XFxuMTA3MDpcXHRcXHQvKlxcbjEwNzE6XFx0XFx0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcXG4xMDcyOlxcdFxcdCAqIGluc3RydW1lbnRlZC5cXG4xMDczOlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDozOS40MTE2NzY0MDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkzMzgzNjgxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpPTkVfREVWSUNFIFBhZ2UgSW5pdGlhbGl6YXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fem9uZV9kZXZpY2VfcGFnZV9pbml0YCBmdW5jdGlvbiBhbmQgdGhlIGFzc29jaWF0ZWQgYHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50YCBjaGVjay4gRXNzZW50aWFsbHksIHRoZSBcInNsb3cgcGF0aFwiIGhlcmUgaXMganVzdCB0aGUgb2xkIGNvZGUsIHJlZmFjdG9yZWQgZm9yIGNsYXJpdHkuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhhdCBwYXJ0LiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgbmV3IFwiZmFzdCBwYXRoLFwiIHdoaWNoIEknbSBpbnRlcmVzdGVkIGluIGJlY2F1c2UgaXQncyB3aGVyZSBwb3RlbnRpYWwgYnVncyBjb3VsZCBiZSBoaWRpbmcuXG5cblRoZSBjb3JlIG9mIHRoZSByZWZhY3RvcmluZyByZXZvbHZlcyBhcm91bmQgaG93IHBhZ2UgY291bnRzIGFyZSBoYW5kbGVkIGZvciBkaWZmZXJlbnQgZGV2aWNlIHBhZ2UgbWFwIHR5cGVzLiBUaGUgb2xkIGNvZGUgaGFkIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRoYXQgc3BlY2lmaWNhbGx5IHplcm9lZCB0aGUgcGFnZSBjb3VudCBmb3IgY2VydGFpbiBkZXZpY2UgdHlwZXMgKGBNRU1PUllfREVWSUNFX0ZTX0RBWGAsIGBNRU1PUllfREVWSUNFX1BSSVZBVEVgLCBgTUVNT1JZX0RFVklDRV9DT0hFUkVOVGAsIGBNRU1PUllfREVWSUNFX1BDSV9QMlBETUFgKS4gVGhlIHJlZmFjdG9yZWQgY29kZSBub3cgY2hlY2tzIGBwYWdlbWFwX3Jlc2V0c19yZWZjb3VudGAsIGVmZmVjdGl2ZWx5IGRvaW5nIHRoZSBzYW1lLlxuXG5UaGUgY2F0Y2ggaXMsIHRoaXMgZmFzdCBwYXRoIGlzIGRpc2FibGVkIHVuZGVyIGBDT05GSUdfS0FTQU5gIG9yIGBDT05GSUdfS01TQU5gLCBzbyBJIGNhbid0IGltbWVkaWF0ZWx5IHRlc3QgdGhlIGNoYW5nZXMuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIGl0IHdvcnRoIGZ1enppbmcgdGhpcyBjb2RlP1xuXG5ZZXMsIGl0IGlzLiBUaGUgZmFzdCBwYXRoIGNvbnRhaW5zIGNoYW5nZXMgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmb3Igc29tZSBkZXZpY2UgdHlwZXMuIElmIEkgd2FudCB0byBoaXQgdGhhdCBmYXN0IHBhdGgsIEknbGwgbmVlZCBhIGtlcm5lbCBidWlsZCB3aXRob3V0IHRob3NlIHNhbml0aXplcnMuIFN5emthbGxlciwgd2hpY2ggSSB1c2UgcmVndWxhcmx5LCBkb2VzIGhhdmUgaW5zdGFuY2VzIHdpdGhvdXQgS0FTQU4gYW5kIEtNU0FOLiBTbywgaXQncyBkZWZpbml0ZWx5IGZlYXNpYmxlIHRvIGZ1enogdGhpcy5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uPyBJIGtub3cgYENPTkZJR19aT05FX0RFVklDRWAgaXMgYSBtdXN0LCBidXQgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHBpZWNlcyBpbiBwbGFjZSBmb3IgdGhlIGZ1enppbmcgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTc5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDA6NDkuMzQ1NTE1OTI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIxODIzMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIzNS1cXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjM3LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjU0LjI2NzM0NjAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTY0NTE5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgWk9ORV9ERVZJQ0UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYFpPTkVfREVWSUNFYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIGl0cyBkZWNsYXJhdGlvbiBpcyB3aXRoaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUsIHRoaXMgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyB0aGVyZSBhbmQgdGhlbiBzZWUgaG93IGl0J3MgYmVpbmcgY29uZGl0aW9uZWQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCBkZWZpbmUgd2hldGhlciBvciBub3QgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDA6NTcuNDYzODAwNTc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMzYsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMzY6XFx0Y29uZmlnIFpPTkVfREVWSUNFXFxuMTIzNzpcXHRcXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbjEyMzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xcbjEyMzk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxuMTI0MDpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuMTI0MTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuMTI0MjpcXHRcXG4xMjQzOlxcdFxcdGhlbHBcXG4xMjQ0OlxcdFxcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcXG4xMjQ1OlxcdFxcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcXG4xMjQ2OlxcdFxcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXFxuMTI0NzpcXHRcXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxuMTI0ODpcXHRcXHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHJlZHVjZSB0aGUgZW50cm9weSBvZiB4ODYgS0FTTFIgbWVtb3J5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjU3LjQ2NDAwNDQ2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzE4MzI2MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1lbW9yeSBDb3B5IE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYFpPTkVfREVWSUNFYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIG5vdGUuIFRoZSBtYWluIHRoaW5nIGhlcmUgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBJdCBpbnRyb2R1Y2VzIHNvbWUgbmV3IGludHJpbnNpY3M6IGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYG1vdm50aV82NGAsIGBtZW1jcHlfbnRgLCBhbmQgYG1lbWNweV9udF9kcmFpbmAuIFRoZXNlIGFyZSBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgYG1lbWNweV9mbHVzaGNhY2hlYCBhbmQgYG1lbWNweV9udGAuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgYG1lbWNweV9udGAgdXNlZCBhbnl3aGVyZSBlbHNlPyBBIHF1aWNrIHNjYW4gc2hvd3MgaXQncyBjdXJyZW50bHkgb25seSB1c2VkIGluIGBtbS9tbV9pbml0LmNgLiBJbnRlcmVzdGluZy5cblxuTm93LCBsZXQncyBsb29rIGZvciBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gRGl2aW5nIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgSSBzZWU6XG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG5gYGBcblxuQWgsIHJpZ2h0LiBUaGUgeDg2IG9wdGltaXplZCBgbWVtY3B5X250YCBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gYENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVgLiBTbywgdGhhdCdzIGFub3RoZXIgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSB0byBrZWVwIGluIG1pbmQuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAgZnVydGhlciB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MTowNS43ODIzMzM3NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwNjU5OTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnPTU0Mj1jb25maWcgVUFDQ0VTU19NRU1DUFlcXG4tLVxcbmxpYi9LY29uZmlnLTU0NC1cXG5saWIvS2NvbmZpZzo1NDU6Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmxpYi9LY29uZmlnLTU0Ni1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQxOjA5Ljk4ODk0MzE1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk3NTg1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBhYm91dCB0byBkbzpcblxuKipFeGFtaW5pbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCoqXG5cblJpZ2h0LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgY2xlYXJseS4gSXQncyBpbmRpY2F0aW5nIHNvbWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uLCBwb3NzaWJseSByZWxhdGVkIHRvIG1lbW9yeSBjb2hlcmVuY3kgb3IgY2FjaGUgbWFuYWdlbWVudCwgd2l0aGluIHRoZSBjb250ZXh0IG9mIHVzZXItc3BhY2UgYWNjZXNzLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZGVmaW5lcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gaWRlbnRpZnkgd2hhdCBzZWxlY3RzIGl0LiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgcHJvY2Vzc29yIGZhbWlseSwgYSBwYXJ0aWN1bGFyIG1lbW9yeSBtb2RlbCwgb3IgcGVyaGFwcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHN1YnN5c3RlbT8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIHNpbWlsYXIgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSBjb2RlIHRvIHRyYWNlIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQsIGNyaXRpY2FsbHksICpzZWxlY3RlZCouIFRoYXQgc2hvdWxkIHJhcGlkbHkgdW5jb3ZlciB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZlYXR1cmUgYmVjb21lcyByZWxldmFudC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLiBJdCdzIGFsbCBhYm91dCBjb250ZXh0IGFuZCBob3cgdGhpcyBmZWF0dXJlIGNoYW5nZXMgb3IgaW1wcm92ZXMgdGhlIG5vcm1hbCBvcGVyYXRpb24sIGVzcGVjaWFsbHkgaW4gYXJlYXMgb2YgdXNlci1zcGFjZSBhbmQga2VybmVsIGFjY2Vzcy4gS25vd2luZyB0aGUgY29kZSBwYXRocyB0aGF0ICpkZXBlbmQqIG9uIHRoaXMgZGVmaW5pdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIGl0cyBhY3R1YWwgdXRpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NTEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MToxMy41ODY1MzI2NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjI1NjAwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9MTkyMj1jb25maWcgQVJNNjRfUE1FTVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE5MjQtXFx0c2VsZWN0IEFSQ0hfSEFTX1BNRU1fQVBJXFxuYXJjaC9hcm02NC9LY29uZmlnOjE5MjU6XFx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI2LVxcdGhlbHBcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNTgtXFx0c2VsZWN0IEFSQ0hfSEFTX1RJQ0tfQlJPQURDQVNUXFx0XFx0aWYgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1RcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxNTk6XFx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE2MC1cXHRzZWxlY3QgQVJDSF9IQVNfVUJTQU5cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMDItXFx0c2VsZWN0IEFSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HXFx0aWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuYXJjaC94ODYvS2NvbmZpZzoxMDM6XFx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMTA0LVxcdHNlbGVjdCBBUkNIX0hBU19DT1BZX01DXFx0XFx0XFx0aWYgWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQxOjE3LjU0OTA5ODQwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUxODIxMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFpvbmUgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBteSBicmFpbiBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgc2VlIHRoaXMgcGFydGljdWxhciBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYFg4Nl82NGAuIFJpZ2h0LCBzbyB0aGF0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBnZW5lcmFsIHByZXZhbGVuY2Ugb2YgdGhhdCBhcmNoaXRlY3R1cmUuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYnJvYWRlciBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYCBiZWluZyBlbmFibGVkLiBUaGVzZSBvcHRpb25zIGltcGx5IHRoZSBzdXBwb3J0IG9mIGR5bmFtaWMgbWVtb3J5IGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgbWFwLCBzbyBJIGdldCB0aGUgY29ubmVjdGlvbi5cblxuQmV5b25kIHRoYXQsIHRoZSBjb2RlJ3MgdXN1YWxseSBzZWxlY3RlZCBieSBgTlZESU1NYCwgYERBWGAsIG9yIGBITU1gLiBUaGlzIHJlYWxseSBzaGFycGVucyB0aGUgZm9jdXMgb24gc3BlY2lhbGl6ZWQgbWVtb3J5IGhhcmR3YXJlIGFuZCBkYXRhIGFjY2VzcyBtZXRob2RzLiBJ4oCZbGwgbWFrZSBhIG5vdGUgb2YgdGhvc2Ugc2VsZWN0b3JzLiBJdCBzdWdnZXN0cyB0aGUgbWFpbiB1c2UgY2FzZXMgY2VudGVyIGFyb3VuZCB0aG9zZSB0ZWNobm9sb2dpZXMuIFRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIHdoZXJlIGl04oCZcyBhcHBsaWNhYmxlLCBJJ20gZ29pbmcgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIHdoaWNoIHNwZWNpZmljIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5IGVuYWJsZSBgWk9ORV9ERVZJQ0VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA5OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MToyMS42MDA5MjMxNjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTc4MTY2NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDE6MjYuMjE4NzQ4Mzk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NDY1NjM4NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gVmFyaWFibGUgJ1pPTkVfREVWSUNFJyoqXG5cblJpZ2h0LCBzbyBgWk9ORV9ERVZJQ0VgIGlzIGEgQm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBlaXRoZXIgKm9uKiBvciAqb2ZmKiwgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBlc3RhYmxpc2guIE5vdywgdGhlIGtleSBxdWVzdGlvbiwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggem9uZS1iYXNlZCBjb25maWd1cmF0aW9ucyBpcy4uLiBJcyB0aGlzIHZhcmlhYmxlIGVuYWJsZWQgYnkgZGVmYXVsdD8gVGhhdCdzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93IHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHN5c3RlbSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIExldCdzIGRpZyBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgdGhhdCBkZWZhdWx0IHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDE6NDEuNjg0Mzg5NTYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTMxMjczMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTgyLVxcdGRlcGVuZHMgb24gIVVNTFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjgzOlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NC1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9NjI9Y29uZmlnIE5WRElNTV9QRk5cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjQtXFx0ZGVmYXVsdCBMSUJOVkRJTU1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjY1OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTY2LVxcdHNlbGVjdCBORF9DTEFJTVxcbi0tXFxuZHJpdmVycy9wY2kvS2NvbmZpZz0yMDY9Y29uZmlnIFBDSV9QMlBETUFcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDg6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA5LVxcdCNcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWc9MzM2PWNvbmZpZyBYRU5fVU5QT1BVTEFURURfQUxMT0NcXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzNy1cXHRib29sIFxcXCJVc2UgdW5wb3B1bGF0ZWQgbWVtb3J5IHJhbmdlcyBmb3IgZ3Vlc3QgbWFwcGluZ3NcXFwiXFxuZHJpdmVycy94ZW4vS2NvbmZpZzozMzg6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmRyaXZlcnMveGVuL0tjb25maWctMzM5LVxcdGRlZmF1bHQgWEVOX0JBQ0tFTkQgfHwgWEVOX0dOVERFViB8fCBYRU5fRE9NMFxcbi0tXFxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYwLVxcdGRlcGVuZHMgb24gTU1VXFxuZnMvS2NvbmZpZzo2MTpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZy02Mi1cXHRzZWxlY3QgRlNfSU9NQVBcXG4tLVxcbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcXG4tLVxcbmZzL0tjb25maWctOTMtXFx0ZGVwZW5kcyBvbiBGU19EQVhcXG5mcy9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnLTk1LVxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4tLVxcbm1tL0tjb25maWc9MTI2Nz1jb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjgtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbm1tL0tjb25maWc6MTI2OTpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjcwLVxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDE6NDcuMjE1NjczOTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDU1Nzk1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBIb3QgUGF0aCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGl0J3MgY2xlYXIgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIGEgbmVjZXNzYXJ5IGNvbXBvbmVudCBmb3Igc2V2ZXJhbCBvdGhlciBmZWF0dXJlcywgbmFtZWx5IGBGU19EQVhgLCBgUENJX1AyUERNQWAsIGBOVkRJTU1fUEZOYCwgYW5kIGBERVZJQ0VfUFJJVkFURWAuIEJhc2VkIG9uIHRoaXMgcmVsYXRpb25zaGlwLCB0aGUgbG9naWNhbCBzdGVwIGlzIHRvIGluY2x1ZGUgYFpPTkVfREVWSUNFYCB3aXRoaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgcmVzb2x1dGlvbi5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGFmZmVjdGVkLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGhlYXZpbHkgbW9kaWZ5aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEJlc2lkZXMgdGhhdCwgaXQgaXMgYWxzbyBpbnRyb2R1Y2luZyBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYW5kIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAuIFRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IEknbSBzZWVpbmcgaGVyZSBpcyBpbmRlZWQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC5cblxuTXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZmFsbHMgd2l0aGluIGEgaG90IHBhdGguIEl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnLCB3aGljaCBnZW5lcmFsbHkgaXMgbm90IGEgaGlnaC1mcmVxdWVuY3kgb3BlcmF0aW9uLiBLbm93aW5nIHRoYXQsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgc2VlbXMgbGlrZSBhIGdvb2QgZm9jYWwgcG9pbnQuXG5cbkkgc2VlIHRoYXQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBhbHNvIGJlaW5nIHRvdWNoZWQsIHNvIEkgd2lsbCBhZGQgdGhhdCB0byBteSBtZW50YWwgY2hlY2tsaXN0IGZvciBmdXJ0aGVyIHJldmlldy4gTGV0J3Mgc2VlIGhvdyBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGJlaW5nIGFmZmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIzNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MTo1My4zNjEyNTc1NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0MzgxNDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9MTEzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcG91bmRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmMtMTE0OS1cXG5tbS9tbV9pbml0LmM6MTE1MDpzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG5tbS9tbV9pbml0LmMtMTE1MS1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3BmbixcXG4tLVxcbm1tL21tX2luaXQuYz0xMjA0PXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTI2MS1cXHRcXHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgaGVhZC1wYWdlIGNvcHlcXG5tbS9tbV9pbml0LmM6MTI2MjpcXHRcXHQgKiBiZWZvcmUgbWVtbWFwX2luaXRfY29tcG91bmQoKSwgd2hpY2ggaW1tZWRpYXRlbHkgdXBkYXRlcyBjb21wb3VuZC1oZWFkXFxubW0vbW1faW5pdC5jLTEyNjMtXFx0XFx0ICogbWV0YWRhdGEuIElmIG1lbWNweV9udCgpIGZlbGwgYmFjayB0byByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTI2OC1cXG5tbS9tbV9pbml0LmM6MTI2OTpcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbm1tL21tX2luaXQuYy0xMjcwLVxcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDE6NTkuMDA1MTAxMTcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjE4MTE4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBvZiBNZW1vcnkgTWFwcGluZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFRoYXQgbWFrZXMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB0aGUgbGlrZWx5IHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgc2VjdGlvbi4gQnV0IGhvbGQgb24sIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLi4uIGhtbSwgdGhhdCBtZWFucyBpdCAqY291bGQqIGJlIGlubGluZWQsIHBvdGVudGlhbGx5IG9ic2N1cmluZyB0aGUgY2FsbCBjaGFpbi4gSSdsbCBmbGFnIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZm9yIGEgZGVlcGVyIGRpdmUgaW4gYEZvY3VzU3ltYm9sc2AgdG8gZW5zdXJlIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgYWxsIHN0YXJ0cy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gcGxheS4gTG9va3MgbGlrZSBgbWVtY3B5X250YCwgYG1lbWNweV9udF9kcmFpbmAsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAsIGFuZCBgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGVgLCBhcmUgYWxsIHN0YXRpYyBpbmxpbmUsIGFuZCBsaWtlbHkgb3B0aW1pemVkIGF3YXksIG9yIGlubGluZWQsIG1ha2luZyB0cmFjaW5nIHRocm91Z2ggdGhlc2UgZGlmZmljdWx0LiBBbHNvLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgIGFuZCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3dgIGFyZSBzdGF0aWMgYnV0IG5vdCBpbmxpbmUuXG5cblNvLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBnZXRzIG1vZGlmaWVkLiBCdXQgd2FpdCwgaXMgaXQgZXhwb3J0ZWQ/IE5vLCBpdCdzIG5vdCBleHBvcnRlZC4gRXZlbiB0aG91Z2ggaXQgaXMgbm90IGV4cG9ydGVkLCBpdCBpcyBnbG9iYWxseSB2aXNpYmxlLiBCZXN0IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIGxldCdzIGNoZWNrIG91dCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gYG1tL21tX2luaXQuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDI6MDQuNTI2OTE2NzQ0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tbV9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwNCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwNDpcXHR2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbjEyMDU6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuMTIwNjpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjEyMDc6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4xMjA4OlxcdHtcXG4xMjA5OlxcdFxcdGJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7XFxuMTIxMDpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIG5yX3BhZ2VzO1xcbjEyMTE6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxuMTIxMjpcXHRcXHRzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCA9IHBnbWFwX2FsdG1hcChwZ21hcCk7XFxuMTIxMzpcXHRcXHR1bnNpZ25lZCBpbnQgcGZuc19wZXJfY29tcG91bmQgPSBwZ21hcF92bWVtbWFwX25yKHBnbWFwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDI6MDQuNTI3MTE2NDU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTE4NjU2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiB0aGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IHRoaXMgaXMgYSBnbG9iYWxseSB2aXNpYmxlIGNoYW5nZSwgd2hpY2ggaW1tZWRpYXRlbHkgZGVtYW5kcyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCBidXQgd2hhdCAqZWxzZSogaXMgaW1wYWN0ZWQ/XCIgQSBnbG9iYWwgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIHJpcHBsZSBvdXR3YXJkIGluIHVuZXhwZWN0ZWQgd2F5cywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUuXG5cblJpZ2h0LCBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgbWVtY3B5X2ZsdXNoY2FjaGVgIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBOb3cgd2UncmUgZ2V0dGluZyBzb21ld2hlcmUuIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgY3JpdGljYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9uIHg4NiwgcGFydGljdWxhcmx5IHdoZXJlIGNhY2hlIGNvaGVyZW5jZSBpcyBpbnZvbHZlZCwgc28gbGV0J3MgZGlnIGludG8gKnRoYXQqIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQncyBjaGFuZ2VkIHRoZXJlLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgYWNyb3NzIHRoZSBhcmNoaXRlY3R1cmUuIEl0J3MgdGltZSB0byBjaGVjayBgbWVtY3B5X2ZsdXNoY2FjaGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk5NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDI6MDguMjM4OTg1MjEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ4ODIwOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNweV9mbHVzaGNhY2hlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ5LSNlbmRpZlxcbi0tXFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYzoxMDp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTExLXtcXG4tLVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTE5LX1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYzoyMDpFWFBPUlRfU1lNQk9MX0dQTChtZW1jcHlfZmx1c2hjYWNoZSk7XFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RyaW5nLmg9Mjg9ZXh0ZXJuIHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaC0zMC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04MC1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODIte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jOjg4OkVYUE9SVF9TWU1CT0wobWVtY3B5X2ZsdXNoY2FjaGUpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODE9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODQtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODU6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04Ni1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEwNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTEyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjExMzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjbnQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMzItXFx0XFx0XFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMzOlxcdFxcdFxcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEzNC1cXHRcXHRcXHQgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE1NS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNTY6XFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTctfVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9MTY1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbnQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTY2LXtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNjc6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTY4LX1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTE3MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNzMtXFx0LypcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNzQ6XFx0ICogT3JkZXIgdGhlIHByaW9yIE1PVk5USSBzdG9yZXMgaXNzdWVkIGJ5IG1lbWNweV9mbHVzaGNhY2hlKClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNzUtXFx0ICogYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMuXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYz01MTQ9dm9pZCBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICphcmcpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYy01NjUtXFx0eGNoZyhcXHUwMDI2a2V4ZWNfY3Jhc2hfaW1hZ2UsIE5VTEwpO1xcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jOjU2NjpcXHRtZW1jcHlfZmx1c2hjYWNoZShvbGRfZWxmY29yZWhkciwgZWxmYnVmLCBlbGZzeik7XFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNTY3LVxcdHhjaGcoXFx1MDAyNmtleGVjX2NyYXNoX2ltYWdlLCBpbWFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYz00Nj1zaXplX3QgY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTc5LVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjgwOnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpfZHN0LCBjb25zdCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSlcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy04MS17XFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDItfVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE0MzpFWFBPUlRfU1lNQk9MX0dQTChfX21lbWNweV9mbHVzaGNhY2hlKTtcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDQtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jPTMxPXN0YXRpYyB2b2lkIGZzZGV2X3dyaXRlX2RheCh2b2lkICphZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMzctXFxuZHJpdmVycy9kYXgvZnNkZXYuYzozODpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShhZGRyLCBtZW0gKyBvZmYsIGNodW5rKTtcXG5kcml2ZXJzL2RheC9mc2Rldi5jLTM5LVxcdFxcdGt1bm1hcF9sb2NhbChtZW0pO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz0xNz1zdGF0aWMgdm9pZCBjYWNoZV9pbmZvX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNS1cXHRjYWNoZS1cXHUwMDNlaW5mb19pbmRleCA9IChjYWNoZS1cXHUwMDNlaW5mb19pbmRleCArIDEpICUgUENBQ0hFX01FVEFfSU5ERVhfTUFYO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM6MjY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX2luZm9fYWRkcihjYWNoZSksIGNhY2hlX2luZm8sXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNy1cXHRcXHRcXHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9pbmZvKSk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jPTg3PXZvaWQgY2FjaGVfcG9zX2VuY29kZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMTAwLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM6MTAxOlxcdG1lbWNweV9mbHVzaGNhY2hlKHBvc19vbm1lZGlhX2FkZHIsIFxcdTAwMjZwb3Nfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfcG9zX29ubWVkaWEpKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTEwMi1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmM9MTQwPXN0YXRpYyB2b2lkIHNiX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfZGV2ICpjYWNoZV9kZXYsIHN0cnVjdCBwY2FjaGVfc2IgKnNiKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmMtMTQzLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jOjE0NDpcXHRtZW1jcHlfZmx1c2hjYWNoZShzYl9hZGRyLCBzYiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfc2IpKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYy0xNDUtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jPTExND1zdGF0aWMgdm9pZCBhcHBlbmRfbGFzdF9rc2V0KHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCB1MzIgbmV4dF9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjItXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTIzOlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSwgXFx1MDAyNmtzZXRfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTI0LVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYz0xMjg9aW50IGNhY2hlX2tzZXRfY2xvc2Uoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldCAqa3NldClcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE1My1cXHRcXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIG5leHQgc2VnICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTU0OlxcdFxcdG1lbWNweV9mbHVzaGNhY2hlKG5leHRfc2VnLVxcdTAwM2VzZWdtZW50LmRhdGEsIFxcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNTUtXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNjUtXFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBhZnRlciBjdXJyZW50IGtzZXQgKi9cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYzoxNjY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpICsga3NldF9vbm1lZGlhX3NpemUsIFxcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNjctXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY4LVxcdC8qIHdyaXRlIGN1cnJlbnQga3NldCBpbnRvIHNlZ21lbnQgKi9cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYzoxNjk6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpLCBrc2V0X29ubWVkaWEsIGtzZXRfb25tZWRpYV9zaXplKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNzAtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0yMD1zdGF0aWMgdm9pZCBjYWNoZV9zZWdfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX3NlZ21lbnQgKmNhY2hlX3NlZylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMS1cXHRzZWdfaW5mb19hZGRyID0gZ2V0X3NlZ19pbmZvX2FkZHIoY2FjaGVfc2VnKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MzI6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoc2VnX2luZm9fYWRkciwgc2VnX2luZm8sIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NlZ21lbnRfaW5mbykpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMy1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTEyNj1zdGF0aWMgdm9pZCBjYWNoZV9zZWdfY3RybF93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX3NlZ21lbnQgKmNhY2hlX3NlZylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzYtXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjEzNzpcXHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfY2FjaGVfc2VnX2dlbl9hZGRyKGNhY2hlX3NlZyksIFxcdTAwMjZjYWNoZV9zZWdfZ2VuLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdfZ2VuKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTEzOC1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTE4Mj1pbnQgY2FjaGVfc2VnX2luaXQoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHUzMiBzZWdfaWQsIHUzMiBjYWNoZV9zZWdfaWQsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMjE2LVxcdFxcdC8qIGNsZWFyIG91dGRhdGVkIGtzZXQgaW4gc2VnbWVudCAqL1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoyMTc6XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGUoc2VnbWVudC1cXHUwMDNlZGF0YSwgXFx1MDAyNnBjYWNoZV9lbXB0eV9rc2V0LCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMjE4LVxcdFxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz00Nj1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQ3LVxcdHR5cGVvZihkZXN0KSB1bmlxID0gKHNyYyk7XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjQ4OlxcdG1lbWNweV9mbHVzaGNhY2hlKFxcdTAwMjYoZGVzdCksIFxcdTAwMjZ1bmlxLCBzaXplb2YoZGVzdCkpO1xcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00OS19IHdoaWxlICgwKVxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTE5MD1zdGF0aWMgaW50IHdyaXRlY2FjaGVfbWVzc2FnZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2LFxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIwOS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjEwOnN0YXRpYyB2b2lkIG1lbWNweV9mbHVzaGNhY2hlX29wdGltaXplZCh2b2lkICpkZXN0LCB2b2lkICpzb3VyY2UsIHNpemVfdCBzaXplKVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMTEte1xcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyNC1cXHQgKiBOT1RFOiB0aGlzIGhhcHBlbnMgdG8gYmUgdGhlIGNhc2Ugbm93ICh3aXRoIGRtLXdyaXRlY2FjaGUncyBzaW5nbGVcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjI1OlxcdCAqIHRocmVhZGVkIG1vZGVsKSBidXQgcmUtZXZhbHVhdGUgdGhpcyBvbmNlIG1lbWNweV9mbHVzaGNhY2hlKCkgaXNcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI2LVxcdCAqIGVuYWJsZWQgdG8gdXNlIG1vdmRpcjY0YiB3aGljaCBtaWdodCBpbnZhbGlkYXRlIHRoaXMgcGVyZm9ybWFuY2VcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNDItI2VuZGlmXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI0MzpcXHRtZW1jcHlfZmx1c2hjYWNoZShkZXN0LCBzb3VyY2UsIHNpemUpO1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNDQtfVxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTI0Nj1zdGF0aWMgdm9pZCBiaW9fY29weV9ibG9jayhzdHJ1Y3QgZG1fd3JpdGVjYWNoZSAqd2MsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzEtXFx0XFx0XFx0Zmx1c2hfZGNhY2hlX3BhZ2UoYmlvX3BhZ2UoYmlvKSk7XFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI3MjpcXHRcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQoZGF0YSwgYnVmLCBzaXplKTtcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjczLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9MjMzPXN0YXRpYyBpbnQgbnNpb19yd19ieXRlcyhzdHJ1Y3QgbmRfbmFtZXNwYWNlX2NvbW1vbiAqbmRucyxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjc2LVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM6Mjc3OlxcdG1lbWNweV9mbHVzaGNhY2hlKG5zaW8tXFx1MDAzZWFkZHIgKyBvZmZzZXQsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzgtXFx0cmV0ID0gbnZkaW1tX2ZsdXNoKHRvX25kX3JlZ2lvbihuZG5zLVxcdTAwM2VkZXYucGFyZW50KSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MTI0PXN0YXRpYyB2b2lkIHdyaXRlX3BtZW0odm9pZCAqcG1lbV9hZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzItXFx0XFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTMzOlxcdFxcdG1lbWNweV9mbHVzaGNhY2hlKHBtZW1fYWRkciwgbWVtICsgb2ZmLCBjaHVuayk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzNC1cXHRcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9MTEwNj1pbnQgZ2VuZXJpY19udmRpbW1fZmx1c2goc3RydWN0IG5kX3JlZ2lvbiAqbmRfcmVnaW9uKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTIxLVxcdCAqIHRoZSBwbGF0Zm9ybSBidWZmZXIgZmx1c2guIE5vdGUgdGhhdCB3ZSd2ZSBhbHJlYWR5IGFycmFuZ2VkIGZvciBwbWVtXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzoxMTIyOlxcdCAqIHdyaXRlcyB0byBhdm9pZCB0aGUgY2FjaGUgdmlhIG1lbWNweV9mbHVzaGNhY2hlKCkuICBUaGUgZmluYWxcXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTExMjMtXFx0ICogd21iKCkgZW5zdXJlcyBvcmRlcmluZyBmb3IgdGhlIE5WRElNTSBmbHVzaCB3cml0ZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg9MjcyPWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjc0LSNpZm5kZWYgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEVcXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yNzYte1xcbi0tXFxubGliL2lvdl9pdGVyLmM9MzAzPXNpemVfdCBtZW1jcHlfZnJvbV9pdGVyX2ZsdXNoY2FjaGUodm9pZCAqaXRlcl9mcm9tLCBzaXplX3QgcHJvZ3Jlc3MsXFxuLS1cXG5saWIvaW92X2l0ZXIuYy0zMDUte1xcbmxpYi9pb3ZfaXRlci5jOjMwNjpcXHRtZW1jcHlfZmx1c2hjYWNoZSh0byArIHByb2dyZXNzLCBpdGVyX2Zyb20sIGxlbik7XFxubGliL2lvdl9pdGVyLmMtMzA3LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MjoxMi41ODc4MTI2MTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2ODQ4MTAyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIE5ldyBgbWVtY3B5X250YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgbWVtY3B5X250YCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gSXQncyBkZWZpbmVkIGluIGJvdGggYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgIGFuZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhbmQgSSBzZWUgaXQncyBiZWluZyB1c2VkIGluIGBtbS9tbV9pbml0LmNgLiBCdXQgaG9sZCBvbiwgdGhlIHJlYWwgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLCB3aGVyZSB0aGUgZXhpc3RpbmcgYG1lbWNweV9mbHVzaGNhY2hlYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgdGhpcyBpc24ndCBqdXN0IGEgc2ltcGxlIHJlcGxhY2VtZW50LiBJdCdzIGFuIG9wdGltaXphdGlvbiBvZiBgbWVtY3B5X2ZsdXNoY2FjaGVgIHNwZWNpZmljYWxseSBmb3IgZml4ZWQgc2l6ZXMgbGlrZSAzMiwgNDgsIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLCB3aGljaCBpcyBjbGV2ZXIuIGBtZW1jcHlfbnRgIGlzIGxldmVyYWdpbmcgdGhpcyBvcHRpbWl6ZWQgdmVyc2lvbi4gVGhlIGltcGFjdCBpcyBkZWZpbml0ZWx5IGJyb2FkZXIgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LlxuXG5Ob3csIGBtZW1jcHlfZmx1c2hjYWNoZWAgZ2V0cyB1c2VkIGFjcm9zcyBhIGJ1bmNoIG9mIHBsYWNlczogYGRyaXZlcnMvZGF4L2ZzZGV2LmNgLCBgZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmNgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCwgYW5kIGBsaWIvaW92X2l0ZXIuY2AsIHRvIG5hbWUgYSBmZXcuIFRoYXQncyBhIGdvb2QgY3Jvc3Mtc2VjdGlvbiBvZiB0aGUga2VybmVsLiBUaGlzIG1lYW5zIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhcmVuJ3QgbGltaXRlZCB0byBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFzIEkgaGFkIGZpcnN0IGFzc3VtZWQuXG5cbkhvd2V2ZXIsIHNpbmNlIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBJIGNhbid0IGRpcmVjdGx5IGFkZCBpdCB0byBgRm9jdXNTeW1ib2xzYC4gU28sIEknbGwgbmVlZCB0byBmb2N1cyBvbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGluc3RlYWQuIFRoaXMgYmVjb21lcyB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19aT05FX0RFVklDRWAgaXMga2V5IGhlcmUuIE90aGVyIHJlbGV2YW50IG9wdGlvbnMgdGhhdCBjb3VsZCBlbmFibGUgYFpPTkVfREVWSUNFYCB1c2FnZSBhcmU6IGBDT05GSUdfRlNfREFYYCwgYENPTkZJR19OVkRJTU1fUEZOYCwgYENPTkZJR19QQ0lfUDJQRE1BYCwgb3IgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEknbGwgYWRkIGBaT05FX0RFVklDRWAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LlxuXG5CdXQgd2hhdCBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzPyBBaCwgcmlnaHQsIGBDT05GSUdfS0FTQU5gIGFuZCBgQ09ORklHX0tNU0FOYCBkaXNhYmxlIG9wdGltaXphdGlvbnMgaW4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gQnV0IHdhaXQsIHRoaXMgaXMgYSBiaXQgbWlzbGVhZGluZy4gVGhlIGBtZW1jcHlfZmx1c2hjYWNoZWAgKm9wdGltaXphdGlvbiogaXNuJ3QgZGlzYWJsZWQgYnkgS0FTQU4hIFRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGlubGluZSBmdW5jdGlvbiAqaXMqIHVzZWQgYnkgYG1lbWNweV9udGAgKmFuZCogYnkgdGhpbmdzIGxpa2UgYGRtLXdyaXRlY2FjaGVgLCBgcG1lbWAsIGFuZCBgZGF4YC4gVGhpcyBtZWFucyB0aGUgY2hhbmdlcyB0byBgbWVtY3B5X2ZsdXNoY2FjaGVgIGFyZSBzdGlsbCByZWxldmFudCwgZXZlbiB3aXRoIEtBU0FOIGVuYWJsZWQsICphcyBsb25nIGFzIHRoZSBzaXplIGlzIGZpeGVkKiB0byAzMiwgNDgsIDY0LCA4MCwgb3IgOTYuXG5cbkknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaG93IGBkbS13cml0ZWNhY2hlYCB1c2VzIGBtZW1jcHlfZmx1c2hjYWNoZWAuIERvZXMgaXQgcHJpbWFyaWx5IHdvcmsgd2l0aCB2YXJpYWJsZSBvciBmaXhlZCBzaXplcz8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBkbS13cml0ZWNhY2hlLmNgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQyOjI0LjI3MjYyNTE4MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTc3MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNweV9mbHVzaGNhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTQ2PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDctXFx0dHlwZW9mKGRlc3QpIHVuaXEgPSAoc3JjKTtcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6NDg6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoXFx1MDAyNihkZXN0KSwgXFx1MDAyNnVuaXEsIHNpemVvZihkZXN0KSk7XFx0XFxcXFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQ5LX0gd2hpbGUgKDApXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMTkwPXN0YXRpYyBpbnQgd3JpdGVjYWNoZV9tZXNzYWdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjA5LVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMTA6c3RhdGljIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKHZvaWQgKmRlc3QsIHZvaWQgKnNvdXJjZSwgc2l6ZV90IHNpemUpXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIxMS17XFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI0LVxcdCAqIE5PVEU6IHRoaXMgaGFwcGVucyB0byBiZSB0aGUgY2FzZSBub3cgKHdpdGggZG0td3JpdGVjYWNoZSdzIHNpbmdsZVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMjU6XFx0ICogdGhyZWFkZWQgbW9kZWwpIGJ1dCByZS1ldmFsdWF0ZSB0aGlzIG9uY2UgbWVtY3B5X2ZsdXNoY2FjaGUoKSBpc1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjYtXFx0ICogZW5hYmxlZCB0byB1c2UgbW92ZGlyNjRiIHdoaWNoIG1pZ2h0IGludmFsaWRhdGUgdGhpcyBwZXJmb3JtYW5jZVxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0Mi0jZW5kaWZcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjQzOlxcdG1lbWNweV9mbHVzaGNhY2hlKGRlc3QsIHNvdXJjZSwgc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0NC19XFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMjQ2PXN0YXRpYyB2b2lkIGJpb19jb3B5X2Jsb2NrKHN0cnVjdCBkbV93cml0ZWNhY2hlICp3Yywgc3RydWN0IGJpbyAqYmlvLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3MS1cXHRcXHRcXHRmbHVzaF9kY2FjaGVfcGFnZShiaW9fcGFnZShiaW8pKTtcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjcyOlxcdFxcdFxcdG1lbWNweV9mbHVzaGNhY2hlX29wdGltaXplZChkYXRhLCBidWYsIHNpemUpO1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MjoyNC40NDQyMDkxODhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1MDAzNDM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdyaXRlY2FjaGUgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRtLXdyaXRlY2FjaGUuY2AgYW5kIGhvdyBpdCBoYW5kbGVzIGZsdXNoaW5nLiBJIHNlZSBgd3JpdGVjYWNoZV9jb21taXRfZmx1c2hlZGAgdXNlcyBgd3JpdGVjYWNoZV9mbHVzaF9yZWdpb25gLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBtZW1jcHlfZmx1c2hjYWNoZWAuIFdhaXQgYSBtaW51dGUuLi4gbG9va2luZyBhdCB0aGF0IG1hY3JvOlxuXG5gYGBjXG4jZGVmaW5lIHdyaXRlY2FjaGVfZmx1c2hfcmVnaW9uKHdjLCBkZXN0LCBzcmMpXHRcdFx0XHRcXFxuZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuXHR0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpO1x0XHRcdFx0XFxcblx0bWVtY3B5X2ZsdXNoY2FjaGUoXHUwMDI2KGRlc3QpLCBcdTAwMjZ1bmlxLCBzaXplb2YoZGVzdCkpO1x0XFxcbn0gd2hpbGUgKDApXG5gYGBcblxuYHNpemVvZihkZXN0KWAgaXMgYSAqY29uc3RhbnQqIGhlcmUhIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgc2l6ZSBvZiBgZGVzdGAgYWN0dWFsbHkgaXMgaW4gdGhlc2UgdmFyaW91cyBjb250ZXh0cywgYnV0IGlmIGl0ICppcyogYSBjb25zdGFudCBzaXplLCB0aGVuIHRoZSBpbmxpbmUgb3B0aW1pemF0aW9uIHdpdGhpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqdGVzdGFibGUqLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgbGV0J3MgcmVjYXAgdGhlIHdob2xlIHBpY3R1cmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHRvIHVzZSBhIHRlbXBsYXRlIGFuZCBgbWVtY3B5X250YCBmb3IgZmFzdGVyIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFBsdXMsIGFuZCB0aGlzIGlzIGdvb2QsIGl0IGFkZHMgaW5saW5lIG9wdGltaXphdGlvbnMgZm9yIGBtZW1jcHlfZmx1c2hjYWNoZWAgZm9yIHNpemVzIGxpa2UgMzIsIDQ4LCA2NCwgZXRjLiBJbXBvcnRhbnRseSwgdGhlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgb3B0aW1pemF0aW9uIGlzICpkaXNhYmxlZCogaWYgS0FTQU4gb3IgS01TQU4gaXMgZW5hYmxlZCwgYnV0IHRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIG9wdGltaXphdGlvbiBpcyAqYWx3YXlzKiBlbmFibGVkIGlmIHRoZSBzaXplIGlzIGNvbnN0YW50LiBUaGlzIG1lYW5zIHRoZSBwcm9wb3NlZCBjb2RlIGlzLCBmdW5jdGlvbmFsbHksIHNvdW5kIGFuZCByZWFjaGFibGUuXG5cbmBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgc2VlbXMgbGlrZSBhIHNvbGlkIGZvY3VzIHN5bWJvbCBoZXJlLiBJdCdzIGEgY2xlYXIgZW50cnkgcG9pbnQgdG8gZXhhbWluZSB0aGUgZWZmZWN0cyBvZiB0aGUgb3B0aW1pemF0aW9uLiBXZSAqbmVlZCogYENPTkZJR19aT05FX0RFVklDRWAgdG8gZXZlbiBnZXQgdG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdGVzdGluZy5cblxuSSBzaG91bGQgYWxzbyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgbWFpbiBvbmUsIGFuZCBJIHNlZSBgcGFnZW1hcF9yYW5nZWAgaXMgdGhlIGNhbGxlciBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBJIHNob3VsZCBhZGQgYHBhZ2VtYXBfcmFuZ2VgIHRvIGBGb2N1c1N5bWJvbHNgIGFzIHdlbGwuIEknbGwgbmVlZCB0byBjaGVjayBgcGFnZW1hcF9yYW5nZWAgaW4gYG1tL21lbXJlbWFwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcxOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MjozMS45OTQyNDY2MjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTE3OTg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXJlbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcmVtYXAuYz0xMzc9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTQzLVxcbm1tL21lbXJlbWFwLmM6MTQ0OnN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbm1tL21lbXJlbWFwLmMtMTQ1LVxcdFxcdGludCByYW5nZV9pZCwgaW50IG5pZClcXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTMzNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2U7IGkrKykge1xcbm1tL21lbXJlbWFwLmM6MzM4OlxcdFxcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcXG5tbS9tZW1yZW1hcC5jLTMzOS1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQyOjMyLjE2NTQzNTUyMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTM1MDc1OTkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBab25lIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IGBwYWdlbWFwX3JhbmdlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkuIFRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBmdW5jdGlvbiBgbWVtcmVtYXBfcGFnZXNgIGlzIGV4cG9ydGVkLCB3aGljaCBpcyB1c2VmdWwgZm9yIG91ciB3b3JrLiBJIHRoaW5rIHdlIGNhbiBzYWZlbHkgYWRkIGJvdGggYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHN0ZXAuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIHdlJ3JlIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMuIGBaT05FX0RFVklDRWAgaXMgY2xlYXJseSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEFyZSB0aGVyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IExldCBtZSBxdWlja2x5IHNjYW4gZm9yIHRoaW5ncyBsaWtlIGBDT05GSUdfRlNfREFYYCwgYENPTkZJR19OVkRJTU1fUEZOYCwgYENPTkZJR19QQ0lfUDJQRE1BYCwgb3IgZXZlbiBgQ09ORklHX0RFVklDRV9QUklWQVRFYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgYW5kIGNvbnNpZGVyaW5nIGhvdyBTeXprYWxsZXIgdXN1YWxseSBzZXRzIHRoaW5ncyB1cCwgYENPTkZJR19GU19EQVhgIGFuZCBgQ09ORklHX1BDSV9QMlBETUFgIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gQnV0LCBmb3Igbm93LCB0byBrZWVwIGl0IHNpbXBsZSwgd2UgY2FuIGp1c3QgZm9jdXMgb24gbGlzdGluZyBgWk9ORV9ERVZJQ0VgLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgcmVhY2hhYmlsaXR5IG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIENhbiBpdCBiZSBjYWxsZWQgd2l0aG91dCBgWk9ORV9ERVZJQ0VgIGVuYWJsZWQ/IE5vLCBsb29raW5nIGF0IGl0LCBpdCBhcHBlYXJzIGl0J3MgZWl0aGVyIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIG9yIHRoZSB3aG9sZSBmaWxlIHRoYXQgY29udGFpbnMgaXQgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGVuYWJsZWQuIFdhaXQsIGhvbGQgb24uLi4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBpbiBgbW0vbW1faW5pdC5jYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGl0J3MgYWN0dWFsbHkgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19aT05FX0RFVklDRWAuIEp1c3Qgd2FudCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQyOjQ3LjUxNjE5OTExOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1ODUzMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19aT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbV9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTY3ND1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfaGFzaGRpc3Qodm9pZCkge31cXG4tLVxcbm1tL21tX2luaXQuYy02NzYtXFxubW0vbW1faW5pdC5jOjY3NzojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxubW0vbW1faW5pdC5jLTY3OC1zdGF0aWMgX19tZW1pbml0IHZvaWQgcGFnZWJsb2NrX21pZ3JhdGV0eXBlX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmM9ODc0PXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxcbi0tXFxubW0vbW1faW5pdC5jLTg4NS1cXG5tbS9tbV9pbml0LmM6ODg2OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9tbV9pbml0LmMtODg3LVxcdC8qXFxuLS1cXG5tbS9tbV9pbml0LmMtOTIwLVxcdFxcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykge1xcbm1tL21tX2luaXQuYzo5MjE6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbm1tL21tX2luaXQuYy05MjItXFx0XFx0XFx0aWYgKHpvbmUgPT0gWk9ORV9ERVZJQ0UpXFxuLS1cXG5tbS9tbV9pbml0LmM9OTY4PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTEwMDYtXFxubW0vbW1faW5pdC5jOjEwMDc6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbm1tL21tX2luaXQuYy0xMDA4LS8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQyOjQ3LjcxMjA1ODk2NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDI5NDQ4MDgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBaT05FX0RFVklDRSBNZW1vcnkgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBrZXkgY2hhbmdlcyByZWxhdGVkIHRvIGBaT05FX0RFVklDRWAgbWVtb3J5IGluaXRpYWxpemF0aW9uLiBUaGUgcHJlc2VuY2Ugb2YgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIGNvbmZpcm1zIHRoYXQgYFpPTkVfREVWSUNFYCBpcyB0aGUgcHJpbWFyeSBmb2N1cy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kgaXMgc291bmQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBgbWVtY3B5X250YCBhbmQgYG1lbWNweV9udF9kcmFpbmAsIGltcGxlbWVudGVkIGluIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlJ3Mgc3RyaW5nIGhhbmRsaW5nIChgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgKSwgYWxvbmcgd2l0aCBvcHRpbWl6YXRpb25zIGZvciBgbWVtY3B5X2ZsdXNoY2FjaGVgIGluIHRoZSBzYW1lIGZpbGUuIFRoZXNlIGFyZSB1c2VkIHdpdGhpbiBgbW0vbW1faW5pdC5jYCwgc3BlY2lmaWNhbGx5IGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFRoZSBuaWNlIHRoaW5nIGlzIHRoZSBmYWxsYmFjayBpbiBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAsIG1lYW5pbmcgb3RoZXIgYXJjaGl0ZWN0dXJlcyBzaG91bGRuJ3QgYmUgYWZmZWN0ZWQuXG5cblRoZSByZWFzb25pbmcgZm9yIGZ1enppbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvcHkgcm91dGluZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBub24tdGVtcG9yYWwgY29waWVzIGZvciBpbml0aWFsaXppbmcgYFpPTkVfREVWSUNFYCBwYWdlcy4gVGhlc2Ugcm91dGluZXMgYXJlIHRvdWNoZWQgZHVyaW5nIGhvdHBsdWdnaW5nLCBkZXZpY2UgbWVtb3J5IGluaXRpYWxpemF0aW9uIChEQVgsIHBtZW0sIGV0Yy4pLCBzbyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciByZWdyZXNzaW9ucyBpcyBkZWZpbml0ZWx5IHRoZXJlLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1yZW1hcF9wYWdlc2AuIEkndmUgdmVyaWZpZWQgdGhhdCBgbWVtcmVtYXBfcGFnZXNgIGlzIGEgZ29vZCBjaG9pY2UgYmVjYXVzZSBpdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkcml2ZXJzIG1hcHBpbmcgYFpPTkVfREVWSUNFYCBtZW1vcnkuIEkndmUgYWxzbyBjb25zaWRlcmVkIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgYnV0IGRlY2lkZWQgdGhhdCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtcmVtYXBfcGFnZXNgIGNvdmVyIHRoZSBjb3JlIGxvZ2ljIHN1ZmZpY2llbnRseS5cblxuSSBjb25zaWRlcmVkIGBkbS13cml0ZWNhY2hlLmNgIGFuZCBgbWVtY3B5X2ZsdXNoY2FjaGVgLiBXaGlsZSBpdCdzIHVzZWQgdGhlcmUsIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyBmdXp6aW5nIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB3aWxsIGNvdmVyIHRoYXQuIEkgY291bGQgYWRkIGZ1bmN0aW9ucyBsaWtlIGB3cml0ZWNhY2hlX2NvbW1pdF9mbHVzaGVkYCBvciBgcG1lbV9kb193cml0ZWAgZm9yIGV4dHJhIGNvdmVyYWdlLCBidXQgdGhlIG1haW4gY2hhbmdlIGlzIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIG9wdGltaXphdGlvbiwgYW5kIHRob3NlIGFyZSBtb3JlIHNwZWNpZmljIHRvIHRob3NlIGRyaXZlcnMuXG5cbk5vdywgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb246IEl0IGxvb2tzIGxpa2UgSSBvbmx5IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgYFpPTkVfREVWSUNFYC4gYFg4Nl82NGAgaXMgYXNzdW1lZCBhbmQgYEtBU0FOYCBjYW4gYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBzeXprYWxsZXIgd2lsbCBoYW5kbGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBpdCBhcyByZXF1aXJlZCwgSSBjYW4ndCBzcGVjaWZ5IGRpc2FibGluZyBpdCBpbiB0aGUgY29uZmlnIGZpbGUuIFNpbmNlIEknbSBhaW1pbmcgZm9yIHRoZSBmYXN0IHBhdGgsIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb2Ygc3l6a2FsbGVyIGRvZXNuJ3QgZW5hYmxlIEtBU0FOLCBzaW5jZSBJIGRvbid0IHNlZSBhbnkgd2F5IHRvIHNwZWNpZnkgYSBcImRpc2FibGUgS0FTQU5cIiBkaXJlY3RpdmUuXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTM1LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MzowOC4wMDY1NTIxMjVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcxNTc3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbXJlbWFwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbXJlbWFwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 06:14:42 +0000 UTC FinishedAt: 2026-07-10 06:43:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "6763d3f95456c0850a20c8676a1032c8216eda56", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "6763d3f95456c0850a20c8676a1032c8216eda56", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE" ], "series_id": "da87b656-168c-4c5b-a7bf-18da1eb94602" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memremap_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTdiODZlY2U1NWZiMWY4ZGM2MDQxNWFkMGE3ZjJjNjZhNzdjNDI0M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDA2OjM5OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbmluZGV4IDQ2MzU2MTY4NjNmNTNkLi4xZTYzNDI2NGEzMWJkMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpZmRlZiBfX0tFUk5FTF9fXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiBcbiAvKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqL1xuIFxuQEAgLTgyLDcgJiM0Mzs4MywzNSBAQCBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKmNzLCBjb25zdCBjaGFyICpjdCk7XG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbiB2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpO1xuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0O1xuJiM0MztcdFx0ICAgICA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KVxuJiM0MztcdFx0ICAgICA6IFwmIzM0O3JcJiMzNDsoKihjb25zdCB1NjQgKilzcmMpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbiYjNDM7e1xuJiM0MztcdG1vdm50aV84KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfOChkc3QgJiM0MzsgOCwgc3JjICYjNDM7IDgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDE2LCBzcmMgJiM0MzsgMTYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRtb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuIHtcbiBcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4gXHRcdHN3aXRjaCAoY250KSB7XG5AQCAtOTYsMTAgJiM0MzsxMjUsNTcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3RcbiBcdFx0XHRcdGFzbSAoXCYjMzQ7bW92bnRpcSAlMSwgJTBcJiMzNDsgOiBcJiMzNDs9bVwmIzM0OygqKHU2NCAqKWRzdCkgOiBcJiMzNDtyXCYjMzQ7KCoodTY0ICopc3JjKSk7XG4gXHRcdFx0XHRhc20gKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7IDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6IFwmIzM0O3JcJiMzNDsoKih1NjQgKikoc3JjICYjNDM7IDgpKSk7XG4gXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGVcbiYjNDM7XHRcdFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cbiYjNDM7XHRcdFx0ICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuJiM0MztcdFx0XHQgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemVcbiYjNDM7XHRcdFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRjYXNlIDMyOlxuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRjYXNlIDQ4OlxuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0bW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgNjQ6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgODA6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA5NjpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdG1vdm50aV8zMihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1xuIFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiB9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIG1lbWNweV9udCBtZW1jcHlfbnRcbiYjNDM7LypcbiYjNDM7ICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG50IGNvcHkgcHJpbWl0aXZlLlxuJiM0MzsgKiBDYWxsZXJzIHBhaXIgaXQgd2l0aCBtZW1jcHlfbnRfZHJhaW4oKSB3aGVuIGxhdGVyIHN0b3JlcyBtdXN0IGJlXG4mIzQzOyAqIG9yZGVyZWQgYWZ0ZXIgdGhlIGNvcHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuJiM0Mzt7XG4mIzQzO1x0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgbWVtY3B5X250X2RyYWluIG1lbWNweV9udF9kcmFpblxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9yZGVyIHRoZSBwcmlvciBNT1ZOVEkgc3RvcmVzIGlzc3VlZCBieSBtZW1jcHlfZmx1c2hjYWNoZSgpXG4mIzQzO1x0ICogYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0d21iKCk7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjQzMzQzYmZjZTQ5MzZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yNTQxLDExICYjNDM7MjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbiB7XG4gXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiB9XG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uYTEwOWIyZjg2Y2E2ZDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgJiM0MzsyNzgsMjkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbnRcbiYjNDM7LypcbiYjNDM7ICogbWVtY3B5X250KCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZSBhcmNoaXRlY3R1cmUgaGFzIGFcbiYjNDM7ICogc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBvdmVycmlkZSBpdCBmYWxsIGJhY2sgdG9cbiYjNDM7ICogbWVtY3B5KCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X250KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuJiM0Mzt7XG4mIzQzO1x0bWVtY3B5KGRzdCwgc3JjLCBjbnQpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbnRfZHJhaW5cbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVycyB1c2UgbWVtY3B5X250X2RyYWluKCkgYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMgdGhhdCBuZWVkIHRvXG4mIzQzOyAqIGJlIG9yZGVyZWQgYWZ0ZXIgbWVtY3B5X250KCkuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhIHNwZWNpYWxpemVkXG4mIzQzOyAqIGJhY2tlbmQgY2FuIGxlYXZlIGl0IGVtcHR5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udF9kcmFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZGRiNDk2OTU4N2VmYSAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSAmIzQzOzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbi1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0cnVlIHdoZW4gdGhlIGZyZWUgcGF0aCBmb3IgdGhpcyBwYWdlbWFwIHR5cGUgcmVzdG9yZXMgdGhlIHBhZ2VcbiYjNDM7ICogcmVmY291bnQgdG8gMSwgc28gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBjYW4ga2VlcCB0aGUgY291bnQgc2V0IGJ5XG4mIzQzOyAqIF9faW5pdF9zaW5nbGVfcGFnZSgpLiBPdGhlcndpc2UgaW5pdGlhbGl6ZSB0aGUgcmVmY291bnQgdG8gMCBhbmQgbGVhdmVcbiYjNDM7ICogaXQgdG8gdGhlIGFsbG9jYXRvciBvciBwZ21hcCBjYWxsYmFja3MgdG8gcmFpc2UgaXQgd2hlbiB0aGUgcGFnZSBpc1xuJiM0MzsgKiBoYW5kZWQgb3V0IGFnYWluLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4mIzQzO1x0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbiYjNDM7XHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuIHtcbi1cbiBcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xuIFxuIFx0LypcbkBAIC0xMDI4LDI3ICYjNDM7MTA1NCw3MyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuJiM0Mzt7XG4mIzQzO1x0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0aWYgKCFwYWdlbWFwX3Jlc2V0c19yZWZjb3VudChwZ21hcCkpXG4mIzQzO1x0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbiYjNDM7fVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKHZvaWQpXG4mIzQzO3tcbiBcdC8qXG4tXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXG4tXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XG4tXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cbi1cdCAqXG4tXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXG4tXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxuLVx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXG4mIzQzO1x0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcbiYjNDM7XHQgKiBpbnN0cnVtZW50ZWQuXG4gXHQgKi9cbi1cdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuLVx0XHRicmVhaztcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxuLVx0XHRicmVhaztcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuXG4mIzQzO1x0ICogU2tpcCBpdCB3aGVuIHRoZSBwYWdlX3JlZl9zZXQgdHJhY2Vwb2ludCBpcyBlbmFibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4mIzQzO1x0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqICYjMzk7dGVtcGxhdGUmIzM5OyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlXG4mIzQzOyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnlcbiYjNDM7ICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4mIzQzOyAqIG9uIHRoZSBQRk4uIFJlZnJlc2ggdGhvc2UgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZVxuJiM0MzsgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnRlbXBsYXRlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcbiYjNDM7XHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbiYjNDM7XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqICYjMzk7dGVtcGxhdGUmIzM5OyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxuJiM0MztcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbiYjNDM7XHQgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbiYjNDM7XHRtZW1jcHlfbnQocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xuIH1cbiBcbiAvKlxuQEAgLTEwNzksMTAgJiM0MzsxMTUxLDEyIEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4sXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLFxuLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgdXNlX3RlbXBsYXRlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC1cdTAwM2V2bWVtbWFwX3NoaWZ0O1xuJiM0MztcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMyAmIzQzOzExNjUsMzkgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4gXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXG4gXHQgKi9cbiBcdF9fU2V0UGFnZUhlYWQoaGVhZCk7XG4mIzQzO1xuIFx0Zm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO1x0XHRpZiAoIXVzZV90ZW1wbGF0ZSkge1xuJiM0MztcdFx0XHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHBmbiA9PSBoZWFkX3BmbiAmIzQzOyAxKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxuJiM0MztcdFx0XHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcbiYjNDM7XHRcdFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbiYjNDM7XHRcdFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XG4mIzQzO1x0XHRcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XG4mIzQzO1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4mIzQzO1x0XHR9XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiB0aGUgdGVtcGxhdGUgcGF0aCBpcyBlbmFibGVkLCBvcmRlciB0aGUgcHJlY2VkaW5nIHRhaWwtcGFnZSBjb3BpZXNcbiYjNDM7XHQgKiBiZWZvcmUgcHJlcF9jb21wb3VuZF9oZWFkKCkgdXBkYXRlcyB0aGUgb3ZlcmxhcHBpbmcgY29tcG91bmQgbWV0YWRhdGFcbiYjNDM7XHQgKiBpbiB0aGUgZmlyc3QgdGFpbC1wYWdlIGRlc2NyaXB0b3JzLiBJZiBtZW1jcHlfbnQoKSBmZWxsIGJhY2sgdG9cbiYjNDM7XHQgKiByZWd1bGFyIGNhY2hlZCBzdG9yZXMsIG1lbWNweV9udF9kcmFpbigpIG1heSBiZSBhIG5vLW9wLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1c2VfdGVtcGxhdGUpXG4mIzQzO1x0XHRtZW1jcHlfbnRfZHJhaW4oKTtcbiBcdHByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7XG4gfVxuIFxuQEAgLTExMDYsNiAmIzQzOzEyMDYsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdCAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4ge1xuJiM0MztcdGJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IHN0YXJ0X3BmbiAmIzQzOyBucl9wYWdlcztcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXHRzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCA9IHBnbWFwX2FsdG1hcChwZ21hcCk7XG5AQCAtMTExMyw2ICYjNDM7MTIxNCw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcztcbiBcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuJiM0MztcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTEzMCw3ICYjNDM7MTIzMiwyNCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4gXG4tXHRcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdFx0aWYgKCF1c2VfdGVtcGxhdGUpIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmlkLCBwZ21hcCk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UsIGJlY2F1c2UgdGhlIGV4aXN0aW5nXG4mIzQzO1x0XHRcdCAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbFxuJiM0MztcdFx0XHQgKiBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuJiM0MztcdFx0XHRcdFx0XHQgICBuaWQsIHBnbWFwKTtcbiYjNDM7XHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTEzOCw5ICYjNDM7MTI1NywyNiBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRpZiAocGZuc19wZXJfY29tcG91bmQgPT0gMSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgaGVhZC1wYWdlIGNvcHlcbiYjNDM7XHRcdCAqIGJlZm9yZSBtZW1tYXBfaW5pdF9jb21wb3VuZCgpLCB3aGljaCBpbW1lZGlhdGVseSB1cGRhdGVzIGNvbXBvdW5kLWhlYWRcbiYjNDM7XHRcdCAqIG1ldGFkYXRhLiBJZiBtZW1jcHlfbnQoKSBmZWxsIGJhY2sgdG8gcmVndWxhciBjYWNoZWQgc3RvcmVzLFxuJiM0MztcdFx0ICogbWVtY3B5X250X2RyYWluKCkgbWF5IGJlIGEgbm8tb3AuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh1c2VfdGVtcGxhdGUpXG4mIzQzO1x0XHRcdG1lbWNweV9udF9kcmFpbigpO1xuJiM0MztcbiBcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbi1cdFx0XHRcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XG4mIzQzO1x0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApLFxuJiM0MztcdFx0XHRcdCAgICAgdXNlX3RlbXBsYXRlKTtcbiBcdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSBhbnkgcHJpb3IgdGVtcGxhdGUgY29waWVzIGFyZSBvcmRlcmVkIGJlZm9yZSByZXR1cm5pbmcuXG4mIzQzO1x0ICogT24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBtZW1jcHlfbnQoKSB1c2VkIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcyxcbiYjNDM7XHQgKiBtZW1jcHlfbnRfZHJhaW4oKSBtYXkgYmUgYSBuby1vcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodXNlX3RlbXBsYXRlKVxuJiM0MztcdFx0bWVtY3B5X250X2RyYWluKCk7XG4gXG4gXHRwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZShzdGFydF9wZm4sIG5yX3BhZ2VzLCBNSUdSQVRFX01PVkFCTEUpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxN2I4NmVjZTU1ZmIxZjhkYzYwNDE1YWQwYTdmMmM2NmE3N2M0MjQzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMDY6Mzk6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCmluZGV4IDQ2MzU2MTY4NjNmNTNkLi4xZTYzNDI2NGEzMWJkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgKQEAgLTQsNiAmIzQzOzQsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgJmx0O2xpbnV4L2p1bXBfbGFiZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKIAogLyogV3JpdHRlbiAyMDAyIGJ5IEFuZGkgS2xlZW4gKi8KIApAQCAtODIsNyAmIzQzOzgzLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDEKIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHU2NCAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV84KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzgoZHN0ICYjNDM7IDgsIHNyYyAmIzQzOyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8xNihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQkJCQkgICAgICBzaXplX3QgY250KQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7CiAJCXN3aXRjaCAoY250KSB7CkBAIC05NiwxMCAmIzQzOzEyNSw1NyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdAogCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopc3JjKSk7CiAJCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopKHNyYyAmIzQzOyA4KSkpOwogCQkJCXJldHVybjsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUKJiM0MzsJCQkgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLgomIzQzOwkJCSAqIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGwKJiM0MzsJCQkgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUKJiM0MzsJCQkgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYXNlIDMyOgomIzQzOwkJCQltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA0ODoKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCWNhc2UgNjQ6CiYjNDM7CQkJCW1vdm50aV82NChkc3QsIHNyYyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDgwOgomIzQzOwkJCQltb3ZudGlfNjQoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA5NjoKJiM0MzsJCQkJbW92bnRpXzY0KGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsKJiM0MzsJCQkJcmV0dXJuOwogCQl9CiAJfQomIzQzOwogCV9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiB9CiYjNDM7CiYjNDM7I2RlZmluZSBtZW1jcHlfbnQgbWVtY3B5X250CiYjNDM7LyoKJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbnQgY29weSBwcmltaXRpdmUuCiYjNDM7ICogQ2FsbGVycyBwYWlyIGl0IHdpdGggbWVtY3B5X250X2RyYWluKCkgd2hlbiBsYXRlciBzdG9yZXMgbXVzdCBiZQomIzQzOyAqIG9yZGVyZWQgYWZ0ZXIgdGhlIGNvcHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9udCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCkKJiM0Mzt7CiYjNDM7CW1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIG1lbWNweV9udF9kcmFpbiBtZW1jcHlfbnRfZHJhaW4KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBPcmRlciB0aGUgcHJpb3IgTU9WTlRJIHN0b3JlcyBpc3N1ZWQgYnkgbWVtY3B5X2ZsdXNoY2FjaGUoKQomIzQzOwkgKiBiZWZvcmUgbGF0ZXIgbm9ybWFsIHN0b3Jlcy4KJiM0MzsJICovCiYjNDM7CXdtYigpOwomIzQzO30KICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDQ4NWRmOWMyZGJkZGIzLi40MzM0M2JmY2U0OTM2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjU0MSwxMSAmIzQzOzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbikKIAlwYWdlLSZndDtmbGFncy5mIHw9IChzZWN0aW9uICZhbXA7IFNFQ1RJT05TX01BU0spICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiB7CiAJcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBTRUNUSU9OU19QR1NISUZUKSAmYW1wOyBTRUNUSU9OU19NQVNLOwogfQogI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZikKIHsKIAlyZXR1cm4gMDsKQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsCiB7CiAJc2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTsKIAlzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpOwotI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHUwotCXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7Ci0jZW5kaWYKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDU3MDJkYWNhNDMyNmI3Li5hMTA5YjJmODZjYTZkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0yNzgsNiAmIzQzOzI3OCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgbWVtY3B5X250CiYjNDM7LyoKJiM0MzsgKiBtZW1jcHlfbnQoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBoYXMgYQomIzQzOyAqIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgb3ZlcnJpZGUgaXQgZmFsbCBiYWNrIHRvCiYjNDM7ICogbWVtY3B5KCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCkKJiM0Mzt7CiYjNDM7CW1lbWNweShkc3QsIHNyYywgY250KTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBtZW1jcHlfbnRfZHJhaW4KJiM0MzsvKgomIzQzOyAqIENhbGxlcnMgdXNlIG1lbWNweV9udF9kcmFpbigpIGJlZm9yZSBsYXRlciBub3JtYWwgc3RvcmVzIHRoYXQgbmVlZCB0bwomIzQzOyAqIGJlIG9yZGVyZWQgYWZ0ZXIgbWVtY3B5X250KCkuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhIHNwZWNpYWxpemVkCiYjNDM7ICogYmFja2VuZCBjYW4gbGVhdmUgaXQgZW1wdHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udF9kcmFpbih2b2lkKQomIzQzO3sKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTsKIApkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZGRiNDk2OTU4N2VmYSAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMTAwNSwxMSAmIzQzOzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpCiB9CiAKICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0UKLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0cnVlIHdoZW4gdGhlIGZyZWUgcGF0aCBmb3IgdGhpcyBwYWdlbWFwIHR5cGUgcmVzdG9yZXMgdGhlIHBhZ2UKJiM0MzsgKiByZWZjb3VudCB0byAxLCBzbyBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIGNhbiBrZWVwIHRoZSBjb3VudCBzZXQgYnkKJiM0MzsgKiBfX2luaXRfc2luZ2xlX3BhZ2UoKS4gT3RoZXJ3aXNlIGluaXRpYWxpemUgdGhlIHJlZmNvdW50IHRvIDAgYW5kIGxlYXZlCiYjNDM7ICogaXQgdG8gdGhlIGFsbG9jYXRvciBvciBwZ21hcCBjYWxsYmFja3MgdG8gcmFpc2UgaXQgd2hlbiB0aGUgcGFnZSBpcwomIzQzOyAqIGhhbmRlZCBvdXQgYWdhaW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZQomIzQzOwkgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZQomIzQzOwkgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuCiYjNDM7CSAqLwomIzQzOwlzd2l0Y2ggKHBnbWFwLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6CiYjNDM7CWNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6CiYjNDM7CWNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzoKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKIAkJCQkJICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQogewotCiAJX19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7CiAKIAkvKgpAQCAtMTAyOCwyNyAmIzQzOzEwNTQsNzMgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAogCSAqLwogCXBhZ2VfZm9saW8ocGFnZSktJmd0O3BnbWFwID0gcGdtYXA7CiAJcGFnZS0mZ3Q7em9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiYjNDM7CQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQomIzQzO3sKJiM0MzsJX196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CWlmICghcGFnZW1hcF9yZXNldHNfcmVmY291bnQocGdtYXApKQomIzQzOwkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7CiYjNDM7fQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCh2b2lkKQomIzQzO3sKIAkvKgotCSAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWQKLQkgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50Ci0JICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuCi0JICoKLQkgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlCi0JICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXIKLQkgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS4KJiM0MzsJICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXkKJiM0MzsJICogaW5zdHJ1bWVudGVkLgogCSAqLwotCXN3aXRjaCAocGdtYXAtJmd0O3R5cGUpIHsKLQljYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOgotCWNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOgotCWNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDoKLQljYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQToKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7Ci0JCWJyZWFrOwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCWNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOgotCQlicmVhazsKLQl9CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuCiYjNDM7CSAqIFNraXAgaXQgd2hlbiB0aGUgcGFnZV9yZWZfc2V0IHRyYWNlcG9pbnQgaXMgZW5hYmxlZC4KJiM0MzsJICovCiYjNDM7CWlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiYjNDM7CQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCwKJiM0MzsJCXVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwomIzQzOwlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwomIzQzOwlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiAmIzM5O3RlbXBsYXRlJiMzOTsgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZQomIzQzOyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnkKJiM0MzsgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS0mZ3Q7dmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kCiYjNDM7ICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlCiYjNDM7ICogY29weWluZyBpdCBpbnRvIEBwYWdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7CiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMCiYjNDM7CWlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKQomIzQzOwkJc2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiAmIzM5O3RlbXBsYXRlJiMzOTsgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3QKJiM0MzsJICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdAomIzQzOwkgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS4KJiM0MzsJICovCiYjNDM7CXpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pOwomIzQzOwltZW1jcHlfbnQocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpOwogfQogCiAvKgpAQCAtMTA3OSwxMCAmIzQzOzExNTEsMTIgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaGVhZF9wZm4sCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAomIzQzOwkJCQkgICAgICAgYm9vbCB1c2VfdGVtcGxhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlczsKIAl1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuCkBAIC0xMDkxLDEzICYjNDM7MTE2NSwzOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uCiAJICovCiAJX19TZXRQYWdlSGVhZChoZWFkKTsKJiM0MzsKIAlmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwotCQlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0MzsJCWlmICghdXNlX3RlbXBsYXRlKSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLAomIzQzOwkJCQkJCSAgIHBnbWFwLCBoZWFkLCBvcmRlcik7CiYjNDM7CQl9IGVsc2UgaWYgKHBmbiA9PSBoZWFkX3BmbiAmIzQzOyAxKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGUKJiM0MzsJCQkgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2UKJiM0MzsJCQkgKiBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZAomIzQzOwkJCSAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdAomIzQzOwkJCSAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuCiYjNDM7CQkJICovCiYjNDM7CQkJem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLAomIzQzOwkJCQkJCSAgIHBnbWFwLCBoZWFkLCBvcmRlcik7CiYjNDM7CQkJLyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovCiYjNDM7CQkJbWVtY3B5KCZhbXA7dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sCiYjNDM7CQkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKJiM0MzsJCX0KIAl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gdGhlIHRlbXBsYXRlIHBhdGggaXMgZW5hYmxlZCwgb3JkZXIgdGhlIHByZWNlZGluZyB0YWlsLXBhZ2UgY29waWVzCiYjNDM7CSAqIGJlZm9yZSBwcmVwX2NvbXBvdW5kX2hlYWQoKSB1cGRhdGVzIHRoZSBvdmVybGFwcGluZyBjb21wb3VuZCBtZXRhZGF0YQomIzQzOwkgKiBpbiB0aGUgZmlyc3QgdGFpbC1wYWdlIGRlc2NyaXB0b3JzLiBJZiBtZW1jcHlfbnQoKSBmZWxsIGJhY2sgdG8KJiM0MzsJICogcmVndWxhciBjYWNoZWQgc3RvcmVzLCBtZW1jcHlfbnRfZHJhaW4oKSBtYXkgYmUgYSBuby1vcC4KJiM0MzsJICovCiYjNDM7CWlmICh1c2VfdGVtcGxhdGUpCiYjNDM7CQltZW1jcHlfbnRfZHJhaW4oKTsKIAlwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpOwogfQogCkBAIC0xMTA2LDYgJiM0MzsxMjA2LDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkJCSAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiB7CiYjNDM7CWJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXM7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtJmd0O3pvbmVfcGdkYXQ7CiAJc3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSBwZ21hcF9hbHRtYXAocGdtYXApOwpAQCAtMTExMyw2ICYjNDM7MTIxNCw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJdW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwogCWludCBuaWQgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpCiAJCXJldHVybjsKQEAgLTExMzAsNyAmIzQzOzEyMzIsMjQgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuICZsdDsgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAKLQkJX19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CQlpZiAoIXVzZV90ZW1wbGF0ZSkgewomIzQzOwkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsCiYjNDM7CQkJCQkJICAgbmlkLCBwZ21hcCk7CiYjNDM7CQl9IGVsc2UgaWYgKHBmbiA9PSBzdGFydF9wZm4pIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZQomIzQzOwkJCSAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UsIGJlY2F1c2UgdGhlIGV4aXN0aW5nCiYjNDM7CQkJICogcGFnZS1pbml0IGFuZCBwYWdlYmxvY2sgaGVscGVycyBleHBlY3QgYSByZWFsCiYjNDM7CQkJICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LgomIzQzOwkJCSAqLwomIzQzOwkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsCiYjNDM7CQkJCQkJICAgbmlkLCBwZ21hcCk7CiYjNDM7CQkJLyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovCiYjNDM7CQkJbWVtY3B5KCZhbXA7dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sCiYjNDM7CQkJCQkJCSAgICAmYW1wO3RlbXBsYXRlKTsKJiM0MzsJCX0KIAogCQlpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSkKIAkJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTEzOCw5ICYjNDM7MTI1NywyNiBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogCQlpZiAocGZuc19wZXJfY29tcG91bmQgPT0gMSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQkvKgomIzQzOwkJICogV2hlbiB0aGUgdGVtcGxhdGUgcGF0aCBpcyBlbmFibGVkLCBvcmRlciB0aGUgcHJlY2VkaW5nIGhlYWQtcGFnZSBjb3B5CiYjNDM7CQkgKiBiZWZvcmUgbWVtbWFwX2luaXRfY29tcG91bmQoKSwgd2hpY2ggaW1tZWRpYXRlbHkgdXBkYXRlcyBjb21wb3VuZC1oZWFkCiYjNDM7CQkgKiBtZXRhZGF0YS4gSWYgbWVtY3B5X250KCkgZmVsbCBiYWNrIHRvIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcywKJiM0MzsJCSAqIG1lbWNweV9udF9kcmFpbigpIG1heSBiZSBhIG5vLW9wLgomIzQzOwkJICovCiYjNDM7CQlpZiAodXNlX3RlbXBsYXRlKQomIzQzOwkJCW1lbWNweV9udF9kcmFpbigpOwomIzQzOwogCQltZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLAotCQkJCSAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7CiYjNDM7CQkJCSAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSwKJiM0MzsJCQkJICAgICB1c2VfdGVtcGxhdGUpOwogCX0KJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIGFueSBwcmlvciB0ZW1wbGF0ZSBjb3BpZXMgYXJlIG9yZGVyZWQgYmVmb3JlIHJldHVybmluZy4KJiM0MzsJICogT24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBtZW1jcHlfbnQoKSB1c2VkIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcywKJiM0MzsJICogbWVtY3B5X250X2RyYWluKCkgbWF5IGJlIGEgbm8tb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAodXNlX3RlbXBsYXRlKQomIzQzOwkJbWVtY3B5X250X2RyYWluKCk7CiAKIAlwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZShzdGFydF9wZm4sIG5yX3BhZ2VzLCBNSUdSQVRFX01PVkFCTEUpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcHRpbWl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhaW1zIHRvIG9wdGltaXplIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFRoZXkmIzM5O3JlIGRvaW5nIHRoaXMgd2l0aCBhIHRlbXBsYXRlIGFuZCBub24tdGVtcG9yYWwgbWVtb3J5IGNvcGllcyB1c2luZyBgbWVtY3B5X250YC4gSW50ZXJlc3RpbmcgYXBwcm9hY2guIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIGEgZmV3IGtleSBhcmVhczogYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgYGluY2x1ZGUvbGludXgvbW0uaGAsIGBpbmNsdWRlL2xpbnV4L3N0cmluZy5oYCwgYW5kIGBtbS9tbV9pbml0LmNgLiBUaGF0IG1ha2VzIHNlbnNlOyBoZWFkZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZGVmaW5pdGlvbnMsIGFuZCB0aGVuIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uCgpUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgKmNhbiogd2UgcmVhbGlzdGljYWxseSB0ZXN0IHRoaXM/IFRoZSBwYXRjaCB0b3VjaGVzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIHNvIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgWk9ORV9ERVZJQ0UgbWVtb3J5IGluaXRpYWxpemF0aW9uLiBaT05FX0RFVklDRT8gUmlnaHQsIHRoYXQmIzM5O3MgREFYLCBwbWVtLCB0aG9zZSBraW5kcyBvZiBkZXZpY2VzLiBOb3csIGNhbiB0aGlzIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IEhtbS4uLiB5ZWFoLCB3aXRoIGBuZF9wbWVtYCBvciBzaW1pbGFyIGRyaXZlcnMsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNpbXVsYXRlIGl0LiBHb29kLCBnb29kLCB0aGF0IG9wZW5zIHVwIHRlc3Rpbmcgc2lnbmlmaWNhbnRseS4gV2FpdCBhIHNlY29uZC4uLiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGFsc28gY2FsbGVkIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBmb3IgWk9ORV9ERVZJQ0UhIFRoYXQgYnJvYWRlbnMgdGhlIHRlc3Rpbmcgd2luZG93IGV2ZW4gZnVydGhlciwgd2hpY2ggaXMgZXhjZWxsZW50LgoKSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXTigJlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gQW55IG9wdGltaXphdGlvbiBoZXJlLCBlc3BlY2lhbGx5IGludm9sdmluZyBsb3ctbGV2ZWwgbWVtb3J5IG9wZXJhdGlvbnMsIGhhcyB0aGUgcG90ZW50aWFsIGZvciBuYXN0eSBzaWRlIGVmZmVjdHMgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYnVncy4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbGVycyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBzdGFydCBsb29raW5nIGZvciBpbnRlcmVzdGluZyB0ZXN0IGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MTMxMT1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMC1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyMTpleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzIyLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTtcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTI0MS1cdCAqL1xubW0vbWVtcmVtYXAuYzoyNDI6XHRtZW1tYXBfaW5pdF96b25lX2RldmljZShcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcbm1tL21lbXJlbWFwLmMtMjQzLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxuLS1cbm1tL21tX2luaXQuYz05Njg9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTEwMDktICogUmV0dXJuIHRydWUgd2hlbiB0aGUgZnJlZSBwYXRoIGZvciB0aGlzIHBhZ2VtYXAgdHlwZSByZXN0b3JlcyB0aGUgcGFnZVxubW0vbW1faW5pdC5jOjEwMTA6ICogcmVmY291bnQgdG8gMSwgc28gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBjYW4ga2VlcCB0aGUgY291bnQgc2V0IGJ5XG5tbS9tbV9pbml0LmMtMTAxMS0gKiBfX2luaXRfc2luZ2xlX3BhZ2UoKS4gT3RoZXJ3aXNlIGluaXRpYWxpemUgdGhlIHJlZmNvdW50IHRvIDAgYW5kIGxlYXZlXG4tLVxubW0vbW1faW5pdC5jPTExNTA9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4tLVxubW0vbW1faW5pdC5jLTEyMDMtXG5tbS9tbV9pbml0LmM6MTIwNDp2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxubW0vbW1faW5pdC5jLTEyMDUtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODYxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYHBhZ2VtYXBfcmFuZ2VgIENhbGxlcnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBgcGFnZW1hcF9yYW5nZWAgd2l0aGluIGBtbS9tZW1yZW1hcC5jYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwb2ludHMgd2hlcmUgYHBhZ2VtYXBfcmFuZ2VgIGlzIGJlaW5nIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgaW1tZWRpYXRlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGluc2lnaHQgaW50byAqd2h5KiBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCwgdGhlcmVmb3JlLCB0aGUgbmF0dXJlIG9mIHRoZSBwcm9ibGVtIG9yIHRhc2sgYXQgaGFuZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1yZW1hcC5jPTEzNz1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxuLS1cbm1tL21lbXJlbWFwLmMtMTQzLVxubW0vbWVtcmVtYXAuYzoxNDQ6c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG5tbS9tZW1yZW1hcC5jLTE0NS1cdFx0aW50IHJhbmdlX2lkLCBpbnQgbmlkKVxuLS1cbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYy0zMzctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9yYW5nZTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbXJlbWFwLmM6MzM4Olx0XHRlcnJvciA9IHBhZ2VtYXBfcmFuZ2UocGdtYXAsIFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcbm1tL21lbXJlbWFwLmMtMzM5LVx0XHRpZiAoZXJyb3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI5OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBtZW1yZW1hcF9wYWdlc2AgVXNhZ2UqKgoKUmlnaHQsIGBtZW1yZW1hcF9wYWdlc2AuLi4gdGhhdCBmdW5jdGlvbiBpcyBhIGtleXN0b25lLCBpc24mIzM5O3QgaXQ/IFRoZSBzaGVlciBudW1iZXIgb2YgZHJpdmVycyB0aGF0IGNhbGwgaW50byBpdCBpcyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnIOKAkyBvciwgcmF0aGVyLCBhIHBvaW50IG9mIHNpZ25pZmljYW50IGludGVyZXN0LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicmVhZHRoIG9mIGl0cyBpbXBhY3QuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFsbCB0eXBlcyBvZiBkcml2ZXJzLiBXaGF0IGFyZSB0aGUgY29tbW9uIHVzZS1jYXNlcz8gSXMgaXQgbWVtb3J5IG1hcHBpbmcgZm9yIGRldmljZSBhY2Nlc3M/IERNQSB0cmFuc2ZlcnM/IFZpcnR1YWwgYWRkcmVzcyBtYW5pcHVsYXRpb24/IEVhY2ggZHJpdmVyJiMzOTtzIG1vdGl2YXRpb24gYmVoaW5kIGNhbGxpbmcgYG1lbXJlbWFwX3BhZ2VzYCBhZGRzIGEgbGF5ZXIgb2YgY29tcGxleGl0eS4gSSYjMzk7bGwgd2FudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29udGV4dCB3aXRoaW4gZWFjaCBjYWxsZXIsIHRoZSBzcGVjaWZpYyBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgb2YgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEFueSBzdWJ0bGUgbWlzdXNlIG9yIHVuaW50ZW5kZWQgYmVoYXZpb3IgaW4gYG1lbXJlbWFwX3BhZ2VzYCBjb3VsZCBwcm9wYWdhdGUgaXNzdWVzIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGNvbXBvbmVudHMuIFRoaXMgcmVxdWlyZXMgc29tZSBkZWVwIGRpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNzQ9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4NS0gICAgcGFnZW1hcC5vcHMgPSBcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyODY6ICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yODctXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5MC1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyOTE6VGhlcmUgYXJlIGFsc28gZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjkyLWRldm1fbWVtdW5tYXBfcGFnZXMoKSwgYW5kIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkgd2hlbiB0aGUgcmVzb3VyY2VzIGNhblxuLS1cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNDE9dG8ga2VlcCB0aGUgbWVtb3J5IHBpbm5lZCBmb3IgYWN0aXZlIHVzZS4gYFpPTkVfREVWSUNFYCwgdmlhXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTQyOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLCBwZXJmb3JtcyBqdXN0IGVub3VnaCBtZW1vcnkgaG90cGx1ZyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE0My10dXJuIG9uIDpjOmZ1bmM6YHBmbl90b19wYWdlYCwgOmM6ZnVuYzpgcGFnZV90b19wZm5gLCBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTU3PW1lbW9yeSBob3RwbHVnLiBTdWItc2VjdGlvbiBzdXBwb3J0IGFsbG93cyBmb3IgMk1CIGFzIHRoZSBjcm9zcy1hcmNoXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTU4OmNvbW1vbiBhbGlnbm1lbnQgZ3JhbnVsYXJpdHkgZm9yIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLlxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE1OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM2LSAgICBwYWdlbWFwLm9wcyA9IFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzc6ICAgIG1lbXJlbWFwX3BhZ2VzKFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM4LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNDI66L+Y5pyJZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0My1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MTA3PVpPTkVfREVWSUNFXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTEt5LqL5a6e5pyJ5YWz77ya6L+Z5Lqb5Zyw5Z2A6IyD5Zu055qE6aG16Z2i5a+56LGh5LuO5pyq6KKr5Zyo57q/5qCH6K6w6L+H77yM6ICM5LiU5b+F6aG75a+56K6+5aSH6L+b6KGM5byV55So77yM6ICM5LiN5LuF5LuFXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjExMjrmmK/pobXpnaLvvIzku6Xkv53mjIHlhoXlrZjooqvigJzplIHlrprigJ3ku6Xkvr/kvb/nlKjjgIIgYFpPTkVfREVWSUNFYCDvvIzpgJrov4cgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMy3kuLrnu5nlrprnmoRwZm5z6IyD5Zu05omn6KGM6Laz5aSf55qE5YaF5a2Y54Ot5o+S5ouU5p2l5byA5ZCvIDpjOmZ1bmM6YHBmbl90b19wYWdlYO+8jFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTIyLTpjOmZ1bmM6YGFyY2hfYWRkX21lbW9yeWAg77yM5Y2z5YaF5a2Y54Ot5o+S5ouU55qE5LiK5Y2K6YOo5YiG44CC5a2Q5q615pSv5oyB5YWB6K64Mk1C5L2c5Li6XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjEyMzo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCDnmoTot6jmnrbmnoTpgJrnlKjlr7npvZDpopfnspLluqbjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTI0LVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9MTE1OD1pbnQga3ZtcHBjX3V2bWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODktXHRrdm1wcGNfdXZtZW1fcGdtYXAub3duZXIgPSBcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXA7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjExOTA6XHRhZGRyID0gbWVtcmVtYXBfcGFnZXMoXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwLCBOVU1BX05PX05PREUpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTkxLVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjQ9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc2LVx0LypcbmFyY2gveDg2L21tL2luaXRfNjQuYzo5Nzc6XHQgKiBTcGVjaWFsIGNhc2U6IGFkZF9wYWdlcygpIGlzIGNhbGxlZCBieSBtZW1yZW1hcF9wYWdlcygpIGZvciBhZGRpbmcgZGV2aWNlXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc4LVx0ICogcHJpdmF0ZSBwYWdlcy4gRG8gbm90IGJ1bXAgdXAgbWF4X3BmbiBpbiB0aGUgZGV2aWNlIHByaXZhdGUgcGF0aCxcbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNC1cdFx0XHRvcmRlcl9iYXNlXzIoZGV2X2RheC1cdTAwM2VhbGlnbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNi1cdGlmIChJU19FUlIoYWRkcikpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0yMDc9c3RhdGljIGludCBmc2Rldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzMtXG5kcml2ZXJzL2RheC9mc2Rldi5jOjI3NDpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzUtXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDY4Olx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cdGlmIChJU19FUlIocikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0yOTY9bm91dmVhdV9kbWVtX2NodW5rX2FsbG9jKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLCBzdHJ1Y3QgcGFnZSAqKnBwYWdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzMi1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjMzMzpcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFx1MDAyNmNodW5rLVx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzNC1cdGlmIChJU19FUlIocHRyKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzYwPXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDEtXHRwYWdlbWFwLVx1MDAzZW9wcyA9IGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzX2dldCgpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4MDI6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDMtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM9MzgxPXN0YXRpYyBpbnQgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtKHN0cnVjdCBtc2h2X3Z0bCAqdnRsLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMC1cdCAqIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSByYW5nZSBpcyBhbGlnbmVkOyBpLmUuIGJvdGggdGhlIHN0YXJ0IGFuZCB0aGUgbGVuZ3RoLlxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDExOlx0ICogQ2xhbXAgdG8gTUFYX0ZPTElPX09SREVSIHRvIGF2b2lkIGEgV0FSTiBpbiBtZW1yZW1hcF9wYWdlcygpIHdoZW4gdGhlIHJhbmdlXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTItXHQgKiBhbGlnbm1lbnQgZXhjZWVkcyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgZm9saW8gb3JkZXIgZm9yIHRoaXMga2VybmVsIGNvbmZpZy5cbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTktXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjA6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjEtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjI6XHRcdGRldl9lcnIodnRsLVx1MDAzZW1vZHVsZV9kZXYsIFwmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcblwmIzM0OywgUFRSX0VSUihhZGRyKSk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjMtXHRcdGtmcmVlKHBnbWFwKTtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1MS1cdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcdCAgY29yZSBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgaW1wbGVtZW50YXRpb24gYW5kIG90aGVyXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cdCAgaW5mcmFzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MTctXHRcdHBtZW0tXHUwMDNlcGdtYXAub3BzID0gXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTE4Olx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxOS1cdFx0cGZuX3NiID0gbmRfcGZuLVx1MDAzZXBmbl9zYjtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTMwLVx0XHRwbWVtLVx1MDAzZXBnbWFwLm9wcyA9IFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUzMTpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcdTAwMjZwbWVtLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXHRcdGJiX3JhbmdlID0gcG1lbS1cdTAwM2VwZ21hcC5yYW5nZTtcbi0tXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jPTkzND1FWFBPUlRfU1lNQk9MKG5kX3JlZ2lvbl9yZWxlYXNlX2xhbmUpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM2LS8qXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jOjkzNzogKiBQb3dlclBDIHJlcXVpcmVzIHRoaXMgYWxpZ25tZW50IGZvciBtZW1yZW1hcF9wYWdlcygpLiBBbGwgb3RoZXIgYXJjaHNcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM4LSAqIHNob3VsZCBiZSBvayB3aXRoIFNVQlNFQ1RJT05fU0laRSAoc2VlIG1lbXJlbWFwX2NvbXBhdF9hbGlnbigpKS5cbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYz0zODc9aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzo0Mzc6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk2LVx0XHRkZXZfaW5mby1cdTAwM2VwZ21hcC5ucl9yYW5nZVx0PSAxO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2luZm8tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTgtXHRcdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jPTM3PXN0YXRpYyBpbnQgZmlsbF9saXN0KHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyMy1cbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM6MTI0Olx0dmFkZHIgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgTlVNQV9OT19OT0RFKTtcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTI1LVx0aWYgKElTX0VSUih2YWRkcikpIHtcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTEwNzY9c3RhdGljIGludCB2aXJ0aW9fZnNfc2V0dXBfZGF4KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBzdHJ1Y3QgdmlydGlvX2ZzICpmcylcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTYtXHQvKiBJZGVhbGx5IHdlIHdvdWxkIGRpcmVjdGx5IHVzZSB0aGUgUENJIEJBUiByZXNvdXJjZSBidXRcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE4LVx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI2LVxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3Olx0ZnMtXHUwMDNld2luZG93X2thZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZ2ZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI4LVx0aWYgKElTX0VSUihmcy1cdTAwM2V3aW5kb3dfa2FkZHIpKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE1LSAqIEBhbHRtYXA6IHByZS1hbGxvY2F0ZWQvcmVzZXJ2ZWQgbWVtb3J5IGZvciB2bWVtbWFwIGFsbG9jYXRpb25zXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIyNz12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMjgtXHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyMjk6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMwLXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjMxOnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzItdm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjQtI2Vsc2VcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjU6c3RhdGljIGlubGluZSB2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjYtXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2OC1cdC8qXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY5Olx0ICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjcwLVx0ICogWk9ORV9ERVZJQ0Ugc3VwcG9ydCBlbmFibGVkLCB0aGlzIHJlcXVpcmVzIGNhbGxlcnMgdG8gZmFsbFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yODc9c3RhdGljIGlubGluZSBib29sIHBnbWFwX3Bmbl92YWxpZChzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCB1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkxLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI5MjovKiB3aGVuIG1lbXJlbWFwX3BhZ2VzKCkgaXMgZGlzYWJsZWQgYWxsIGFyY2hzIGNhbiByZW1hcCBhIHNpbmdsZSBwYWdlICovXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkzLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1yZW1hcF9jb21wYXRfYWxpZ24odm9pZClcbi0tXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcbi0tXG5saWIvdGVzdF9obW0uYy02MTUtXHR9XG5saWIvdGVzdF9obW0uYzo2MTY6XHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcdTAwMjZkZXZtZW0tXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xubGliL3Rlc3RfaG1tLmMtNjE3LVx0aWYgKElTX0VSUl9PUl9OVUxMKHB0cikpIHtcbi0tXG5tbS9tZW1yZW1hcC5jPTE3PXN0YXRpYyBERUZJTkVfWEFSUkFZKHBnbWFwX2FycmF5KTtcbi0tXG5tbS9tZW1yZW1hcC5jLTE5LS8qXG5tbS9tZW1yZW1hcC5jOjIwOiAqIFRoZSBtZW1yZW1hcCgpIGFuZCBtZW1yZW1hcF9wYWdlcygpIGludGVyZmFjZXMgYXJlIGFsdGVybmF0ZWx5IHVzZWRcbm1tL21lbXJlbWFwLmMtMjEtICogdG8gbWFwIHBlcnNpc3RlbnQgbWVtb3J5IG5hbWVzcGFjZXMuIFRoZXNlIGludGVyZmFjZXMgcGxhY2UgZGlmZmVyZW50XG5tbS9tZW1yZW1hcC5jLTIyLSAqIGNvbnN0cmFpbnRzIG9uIHRoZSBhbGlnbm1lbnQgYW5kIHNpemUgb2YgdGhlIG1hcHBpbmcgKG5hbWVzcGFjZSkuXG5tbS9tZW1yZW1hcC5jOjIzOiAqIG1lbXJlbWFwKCkgY2FuIG1hcCBpbmRpdmlkdWFsIFBBR0VfU0laRSBwYWdlcy4gbWVtcmVtYXBfcGFnZXMoKSBjYW5cbm1tL21lbXJlbWFwLmMtMjQtICogb25seSBtYXAgc3Vic2VjdGlvbnMgKDJNQiksIGFuZCBhdCBsZWFzdCBvbmUgYXJjaGl0ZWN0dXJlIChQb3dlclBDKVxubW0vbWVtcmVtYXAuYzoyNTogKiB0aGUgbWluaW11bSBtYXBwaW5nIGdyYW51bGFyaXR5IG9mIG1lbXJlbWFwX3BhZ2VzKCkgaXMgMTZNQi5cbm1tL21lbXJlbWFwLmMtMjYtICpcbi0tXG5tbS9tZW1yZW1hcC5jPTEzMD1FWFBPUlRfU1lNQk9MX0dQTChtZW11bm1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTEzMS1cbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxubW0vbWVtcmVtYXAuYy0xMzMte1xuLS1cbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm1tL21lbXJlbWFwLmMtMjYxLS8qXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcbm1tL21lbXJlbWFwLmM6MjYzOiAqIG1lbXVubWFwX3BhZ2VzKCkuICBQbGVhc2UgdXNlIGRldm1fbWVtcmVtYXBfcGFnZXMgaWYgeW91IGhhdmUgYSBzdHJ1Y3Rcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXG5tbS9tZW1yZW1hcC5jLTI2NS0gKi9cbm1tL21lbXJlbWFwLmM6MjY2OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXG5tbS9tZW1yZW1hcC5jLTI2Ny17XG4tLVxubW0vbWVtcmVtYXAuYy0zNTEtfVxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0zNTMtXG5tbS9tZW1yZW1hcC5jLTM1NC0vKipcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXG5tbS9tZW1yZW1hcC5jLTM1Ni0gKiBAZGV2OiBob3N0aW5nIGRldmljZSBmb3IgQHJlc1xuLS1cbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICYjMzk7bGl2ZSYjMzk7IG9uIGVudHJ5IGFuZCB3aWxsIGJlIGtpbGxlZCBhbmQgcmVhcGVkIGF0XG5tbS9tZW1yZW1hcC5jOjM2ODogKiAgICBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UoKSB0aW1lLCBvciBpZiB0aGlzIHJvdXRpbmUgZmFpbHMuXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxuLS1cbm1tL21lbXJlbWFwLmMtMzczLSAqL1xubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM3NS17XG4tLVxubW0vbWVtcmVtYXAuYy0zNzgtXG5tbS9tZW1yZW1hcC5jOjM3OTpcdHJldCA9IG1lbXJlbWFwX3BhZ2VzKHBnbWFwLCBkZXZfdG9fbm9kZShkZXYpKTtcbm1tL21lbXJlbWFwLmMtMzgwLVx0aWYgKElTX0VSUihyZXQpKVxuLS1cbm1tL21lbXJlbWFwLmMtMzgyLVxubW0vbWVtcmVtYXAuYzozODM6XHRlcnJvciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSxcbm1tL21lbXJlbWFwLmMtMzg0LVx0XHRcdHBnbWFwKTtcbi0tXG5tbS9tZW1yZW1hcC5jLTM4OC19XG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMzkwLVxubW0vbWVtcmVtYXAuYz0zOTE9dm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzkyLXtcbm1tL21lbXJlbWFwLmM6MzkzOlx0ZGV2bV9yZWxlYXNlX2FjdGlvbihkZXYsIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSwgcGdtYXApO1xubW0vbWVtcmVtYXAuYy0zOTQtfVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9NDAyPWludCBfX21lbWluaXQgdm1lbW1hcF9wb3B1bGF0ZV9odWdlcGFnZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYy00NTktICpcbm1tL3NwYXJzZS12bWVtbWFwLmM6NDYwOiAqIE5vdGUgdGhhdCBtZW1yZW1hcF9wYWdlcygpIHJlc2V0cyBAbnJfcmFuZ2UgdmFsdWUgYW5kIHdpbGwgaW5jcmVtZW50XG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2MS0gKiBpdCBhZnRlciBlYWNoIHJhbmdlIHN1Y2Nlc3NmdWwgb25saW5pbmcuIFRodXMgdGhlIHZhbHVlIG9yIEBucl9yYW5nZVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZD0xMz1sZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ6MTQ6bGRmbGFncy15ICYjNDM7PSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkLTE1LWxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxuLS1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYz0xMDg9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE0LVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjExNTp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIxLVx0aWYgKCFuZml0X3JlcylcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMjI6XHRcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEyMy1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMzU6RVhQT1JUX1NZTUJPTF9HUEwoX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNi1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oPTIxMj12b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxMy1cdFx0c2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaDoyMTQ6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ4MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgUGF0Y2gqKgoKT2theSwgc28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMuIEkgc2VlIGl0JiMzOTtzIHVzZWQgaW4gYGxpYi90ZXN0X2htbS5jYCwgdGhhdCYjMzk7cyBvdXIgdGVzdGluZyBtb2R1bGUsIGFzIHdlbGwgYXMgdGhlIHBtZW0gZHJpdmVyIChgZHJpdmVycy9udmRpbW0vcG1lbS5jYCkgYW5kIGFsc28gYGRyaXZlcnMvZGF4L2RldmljZS5jYC4gU28sIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYWN0aXZlbHkgdXNlZC4KCkFscmlnaHQsIHRpbWUgdG8gcmV2aXNpdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyBhZGRpbmcgYSBgbWVtY3B5X250YCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIG5vbi10ZW1wb3JhbCBtZW1jcHkgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zIG9uIHg4Nl82NCwgYSBuZWF0IG9wdGltaXphdGlvbi4gVGhlIG1haW4gdGhpbmcgdGhpcyBwYXRjaCBkb2VzIGlzIG1vZGlmeSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHRvIGxldmVyYWdlIGBtZW1jcHlfbnRgLiBUaGUgZ29hbCBpcyB0byBjb3B5IGZyb20gYSB0ZW1wbGF0ZSBwYWdlIGluc3RlYWQgb2YgcGFpbnN0YWtpbmdseSBpbml0aWFsaXppbmcgZWFjaCBpbmRpdmlkdWFsIHBhZ2UgZnJvbSBzY3JhdGNoLiBTb3VuZHMgbGlrZSBhIG5pY2Ugb3B0aW1pemF0aW9uIGZvciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBlc3BlY2lhbGx5IGZvciBsYXJnZXIgbWVtb3J5IHJlZ2lvbnMuCgpOb3csIEkmIzM5O20gc2VlaW5nIHRoaXMgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZGAgZnVuY3Rpb24gaW4gdGhlIHBhdGNoLiBUaGlzIGlzIGtleSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIG9wdGltaXphdGlvbiBpcyAqZW5hYmxlZCouIFdhaXQgYSBtaW51dGUuLi4gaWYgS0FTQU4gb3IgS01TQU4gYXJlIGVuYWJsZWQsIGl0IHJldHVybnMgZmFsc2UuIFRoZSBvcHRpbWl6YXRpb24gaXMgKmRpc2FibGVkKiEgQW5kIGFsc28gaWYgdGhlIGBwYWdlX3JlZl9zZXRgIHRyYWNlcG9pbnQgaXMgYWN0aXZlLCB0aGF0IGRpc2FibGVzIGl0IHRvby4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGF0LiBMZXQmIzM5O3MgZGlnIGludG8gYG1tL21tX2luaXQuY2AgYW5kIGNoZWNrIGhvdyBgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRob3NlIHBhcnRpY3VsYXIgY29uZGl0aW9ucyB3YXJyYW50IGRpc2FibGluZyB0aGUgb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTEwNTk9c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vbW1faW5pdC5jLTEwNjctXG5tbS9tbV9pbml0LmM6MTA2ODpzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKHZvaWQpXG5tbS9tbV9pbml0LmMtMTA2OS17XG4tLVxubW0vbW1faW5pdC5jPTEyMDQ9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tbV9pbml0LmMtMTIwOC17XG5tbS9tbV9pbml0LmM6MTIwOTpcdGJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7XG5tbS9tbV9pbml0LmMtMTIxMC1cdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gc3RhcnRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZsYWcsIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgLCBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgZGlzc2VjdGluZyB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3B0aW1pemF0aW9uIGlzIGJlaW5nIGVuYWJsZWQgaGVyZSwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqaG93KiBpdCYjMzk7cyBiZWluZyBpbXBsZW1lbnRlZC4gJiMzNDtab25lIGRldmljZSBwYWdlIGluaXQmIzM0OyDigJMgdGhhdCBwaHJhc2UgYWxvbmUgdGVsbHMgbWUgdGhpcyByZWxhdGVzIHRvIHRoZSBpbml0aWFsIHNldHVwIG9mIG1lbW9yeSBwYWdlcyB3aXRoaW4gYSBwYXJ0aWN1bGFyIHpvbmUgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBkZXZpY2UgbWVtb3J5IG9yIGEgRE1BIHpvbmUuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIGFyb3VuZCB0aGUgdHJhZGUtb2Zmcy4gV2hhdCBhcmUgd2Ugb3B0aW1pemluZyBmb3I/IElzIGl0IHNwZWVkIG9mIGFsbG9jYXRpb24/IFJlZHVjaW5nIG1lbW9yeSBvdmVyaGVhZD8gUG93ZXIgY29uc3VtcHRpb24gZHVyaW5nIGluaXRpYWwgc2V0dXA/IElzIHRoaXMgYWJvdXQgbGF6eSBpbml0aWFsaXphdGlvbj8gT3IgcGVyaGFwcyBkZWZlcnJpbmcgYWxsb2NhdGlvbiBhbHRvZ2V0aGVyIHVudGlsIGEgbGF0ZXIgdGltZT8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEFyZSB0aGVyZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBOVU1BIGNvbnNpZGVyYXRpb25zIGF0IHBsYXkgdGhhdCB3b3VsZCBpbmZvcm0gdGhpcyBvcHRpbWl6YXRpb24/CgpJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBwaXRmYWxscyB0b28uIFdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhpcyBvcHRpbWl6YXRpb24gaXMgbWlzYXBwbGllZCBvciBpZiB0aGUgYXNzdW1wdGlvbnMgaXQmIzM5O3MgYmFzZWQgb24gYXJlIHZpb2xhdGVkPyBNZW1vcnkgbGVha3M/IEluY29ycmVjdCBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFnZXMgY2F1c2luZyBkb3duc3RyZWFtIGlzc3Vlcz8gT3IsIHBlcmhhcHMsIGNvbnRlbnRpb24gaXNzdWVzIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIHBhdGhzPyBUaGUgZXhhY3QgaW1wYWN0IG9uIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygd29ya2xvYWRzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY29uc2lkZXI7IGFyZSB0aGVyZSBkaWZmZXJlbnQgd29ya2xvYWRzIHdoZXJlIHRoaXMgY2FuIGNhdXNlIGFuIGlzc3VlPwoKRnVuZGFtZW50YWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBjb250cm9sbGVkIGJ5IHRoaXMgZmxhZyBhbmQgbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIGJlZm9yZS1hbmQtYWZ0ZXIgYmVoYXZpb3IuIEEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsb2NrcyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW5kIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZWZmZWN0cyBvZiB0aGlzIG9wdGltaXphdGlvbiBmbGFnLiBJIHdpbGwgbmVlZCB0byB1c2UgbXkgZGVidWdnaW5nIHRvb2xzIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgYW5kIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgY291bnRlcnMgSSBjYW4gdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tX2luaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQodm9pZClcbjEwNjk6XHR7XG4xMDcwOlx0XHQvKlxuMTA3MTpcdFx0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcbjEwNzI6XHRcdCAqIGluc3RydW1lbnRlZC5cbjEwNzM6XHRcdCAqL1xuMTA3NDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOKSB8fCBJU19FTkFCTEVEKENPTkZJR19LTVNBTikpXG4xMDc1Olx0XHRcdHJldHVybiBmYWxzZTtcbjEwNzY6XHRcbjEwNzc6XHRcdC8qXG4xMDc4Olx0XHQgKiBUaGUgdGVtcGxhdGUgZmFzdCBwYXRoIGNvcGllcyBhIHByZWluaXRpYWxpemVkIHN0cnVjdCBwYWdlIGltYWdlLlxuMTA3OTpcdFx0ICogU2tpcCBpdCB3aGVuIHRoZSBwYWdlX3JlZl9zZXQgdHJhY2Vwb2ludCBpcyBlbmFibGVkLlxuMTA4MDpcdFx0ICovXG4xMDgxOlx0XHRpZiAocGFnZV9yZWZfdHJhY2Vwb2ludF9hY3RpdmUocGFnZV9yZWZfc2V0KSlcbjEwODI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA4MzpcdFxuMTA4NDpcdFx0cmV0dXJuIHRydWU7XG4xMDg1Olx0fVxuMTA4NjpcdFxuMTA4NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLQVNBTiBJbXBhY3Qgb24gYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0tBU0FOYCBvciBgQ09ORklHX0tNU0FOYC4gTXkgZ3V0IHJlYWN0aW9uIGlzLCAmIzM0O1VoIG9oLCB0aGlzIG1pZ2h0IGJlIGEgcHJvYmxlbS4mIzM0OyBTcGVjaWZpY2FsbHksIGlmIGVpdGhlciBvZiB0aG9zZSBpcyBlbmFibGVkLCB0aGUgb3B0aW1pemF0aW9uIGlzIGJ5cGFzc2VkLiBBbmQsIGxldCYjMzk7cyBmYWNlIGl0LCBzeXprYWxsZXIsIHdoaWNoIGlzIHRoZSBmdXp6ZXIgdGhhdCYjMzk7cyByZWxldmFudCBoZXJlLCAqbG92ZXMqIEtBU0FOLiBTbywgdHlwaWNhbGx5LCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgd291bGQgc2ltcGx5IHJldHVybiBgZmFsc2VgLCB0YWtpbmcgdGhlIHNsb3cgcGF0aC4KClJpZ2h0LCBzbyB0aGF0IG1lYW5zIGlmIEtBU0FOIGlzIG9uLCB3aGljaCBpcyB0eXBpY2FsIGZvciBzeXprYWxsZXIsIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgIHJldHVybnMgZmFsc2UuIEFuZCB0aHVzIGB1c2VfdGVtcGxhdGVgIGJlY29tZXMgZmFsc2UuIExvb2tpbmcgZnVydGhlciBkb3duIGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIEkgc2VlOgoKYGBgYwoJCWlmICghdXNlX3RlbXBsYXRlKSB7CgkJCXpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsCgkJCQkJCSAgIG5pZCwgcGdtYXApOwoJCX0gZWxzZSBpZiAocGZuID09IHN0YXJ0X3BmbikgewpgYGAKCkdvdCBpdCEgVGhlIG5ldyBmYXN0IHBhdGggd29uJiMzOTt0IGdldCBleGVjdXRlZCBhdCBhbGwgd2hlbiBLQVNBTiBpcyBlbmFibGVkLiAgTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBkaXNtaXNzIGl0LiBCdXQsIHdhaXQuLi4gc3l6a2FsbGVyICphbHNvKiB0ZXN0cyB3aXRob3V0IEtBU0FOIHNvbWV0aW1lcy4gIEFuZCBldmVuIGlmIG5vdCwgd2UgY2FuIGFsd2F5cyBqdXN0aWZ5IGZ1enppbmcgYSBwaWVjZSBvZiBjb2RlIGFuZCB0ZXN0IGl0IG9uIG5vbi1LQVNBTiBpbnN0YW5jZXMuCgpOb3csIGxldCBtZSBnbyBiYWNrIHRvIHRoZSBwcm9tcHQsIHdoaWNoIHNheXMsICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OyBPa2F5LCBpdCBkb2VzbiYjMzk7dCBtZW50aW9uIEtBU0FOIHNwZWNpZmljYWxseS4gSXQgaXMganVzdCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgVGhpcyBpcyBkaWZmZXJlbnQsIGJ1dCBub3QgaW1wb3NzaWJsZS4KCkhvd2V2ZXIsIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjdHVhbGx5IGZ1enplci13b3J0aHksIGV2ZW4gaWYgcmVhY2hhYmxlPyAgVG8gbWFrZSBhIGNhbGwgZWl0aGVyIHdheSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBPa2F5LCBub3cgdGhhdCBJIGhhdmUgYXNzZXNzZWQgdGhlIHJlYWNoYWJpbGl0eSwgZG9lcyB0aGUgc2xvdyBwYXRoIGhhdmUgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcz8gSSBzaG91bGQgY2hlY2sgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tbV9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDU5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNTk6XHRzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbjEwNjA6XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4xMDYxOlx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4xMDYyOlx0e1xuMTA2MzpcdFx0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4xMDY0Olx0XHRpZiAoIXBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KHBnbWFwKSlcbjEwNjU6XHRcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4xMDY2Olx0fVxuMTA2NzpcdFxuMTA2ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQodm9pZClcbjEwNjk6XHR7XG4xMDcwOlx0XHQvKlxuMTA3MTpcdFx0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcbjEwNzI6XHRcdCAqIGluc3RydW1lbnRlZC5cbjEwNzM6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE3OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpPTkVfREVWSUNFIFBhZ2UgSW5pdGlhbGl6YXRpb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX196b25lX2RldmljZV9wYWdlX2luaXRgIGZ1bmN0aW9uIGFuZCB0aGUgYXNzb2NpYXRlZCBgcGFnZW1hcF9yZXNldHNfcmVmY291bnRgIGNoZWNrLiBFc3NlbnRpYWxseSwgdGhlICYjMzQ7c2xvdyBwYXRoJiMzNDsgaGVyZSBpcyBqdXN0IHRoZSBvbGQgY29kZSwgcmVmYWN0b3JlZCBmb3IgY2xhcml0eS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGF0IHBhcnQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSBuZXcgJiMzNDtmYXN0IHBhdGgsJiMzNDsgd2hpY2ggSSYjMzk7bSBpbnRlcmVzdGVkIGluIGJlY2F1c2UgaXQmIzM5O3Mgd2hlcmUgcG90ZW50aWFsIGJ1Z3MgY291bGQgYmUgaGlkaW5nLgoKVGhlIGNvcmUgb2YgdGhlIHJlZmFjdG9yaW5nIHJldm9sdmVzIGFyb3VuZCBob3cgcGFnZSBjb3VudHMgYXJlIGhhbmRsZWQgZm9yIGRpZmZlcmVudCBkZXZpY2UgcGFnZSBtYXAgdHlwZXMuIFRoZSBvbGQgY29kZSBoYWQgYSBgc3dpdGNoYCBzdGF0ZW1lbnQgdGhhdCBzcGVjaWZpY2FsbHkgemVyb2VkIHRoZSBwYWdlIGNvdW50IGZvciBjZXJ0YWluIGRldmljZSB0eXBlcyAoYE1FTU9SWV9ERVZJQ0VfRlNfREFYYCwgYE1FTU9SWV9ERVZJQ0VfUFJJVkFURWAsIGBNRU1PUllfREVWSUNFX0NPSEVSRU5UYCwgYE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQWApLiBUaGUgcmVmYWN0b3JlZCBjb2RlIG5vdyBjaGVja3MgYHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50YCwgZWZmZWN0aXZlbHkgZG9pbmcgdGhlIHNhbWUuCgpUaGUgY2F0Y2ggaXMsIHRoaXMgZmFzdCBwYXRoIGlzIGRpc2FibGVkIHVuZGVyIGBDT05GSUdfS0FTQU5gIG9yIGBDT05GSUdfS01TQU5gLCBzbyBJIGNhbiYjMzk7dCBpbW1lZGlhdGVseSB0ZXN0IHRoZSBjaGFuZ2VzLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBpdCB3b3J0aCBmdXp6aW5nIHRoaXMgY29kZT8KClllcywgaXQgaXMuIFRoZSBmYXN0IHBhdGggY29udGFpbnMgY2hhbmdlcyB0byB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBzb21lIGRldmljZSB0eXBlcy4gSWYgSSB3YW50IHRvIGhpdCB0aGF0IGZhc3QgcGF0aCwgSSYjMzk7bGwgbmVlZCBhIGtlcm5lbCBidWlsZCB3aXRob3V0IHRob3NlIHNhbml0aXplcnMuIFN5emthbGxlciwgd2hpY2ggSSB1c2UgcmVndWxhcmx5LCBkb2VzIGhhdmUgaW5zdGFuY2VzIHdpdGhvdXQgS0FTQU4gYW5kIEtNU0FOLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBmZWFzaWJsZSB0byBmdXp6IHRoaXMuCgpOb3csIHdoYXQgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24/IEkga25vdyBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBhIG11c3QsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHBpZWNlcyBpbiBwbGFjZSBmb3IgdGhlIGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFpPTkVfREVWSUNFKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgWk9ORV9ERVZJQ0VgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIGl0cyBkZWNsYXJhdGlvbiBpcyB3aXRoaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlLCB0aGlzIGZlZWxzIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyB0aGVyZSBhbmQgdGhlbiBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIGNvbmRpdGlvbmVkLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzIHRoYXQgZGVmaW5lIHdoZXRoZXIgb3Igbm90IHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMzY6XHRjb25maWcgWk9ORV9ERVZJQ0VcbjEyMzc6XHRcdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuMTIzODpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xuMTIzOTpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG4xMjQwOlx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4xMjQxOlx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4xMjQyOlx0XG4xMjQzOlx0XHRoZWxwXG4xMjQ0Olx0XHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXG4xMjQ1Olx0XHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXG4xMjQ2Olx0XHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxuMTI0NzpcdFx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbjEyNDg6XHRcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxuMTI0OTpcdFxuMTI1MDpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHJlZHVjZSB0aGUgZW50cm9weSBvZiB4ODYgS0FTTFIgbWVtb3J5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzU2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1lbW9yeSBDb3B5IE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgbG9va3MgbGlrZSBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gbm90ZS4gVGhlIG1haW4gdGhpbmcgaGVyZSBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEl0IGludHJvZHVjZXMgc29tZSBuZXcgaW50cmluc2ljczogYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBgbW92bnRpXzY0YCwgYG1lbWNweV9udGAsIGFuZCBgbWVtY3B5X250X2RyYWluYC4gVGhlc2UgYXJlIHNwZWNpZmljYWxseSB1dGlsaXplZCBieSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGFuZCBgbWVtY3B5X250YC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgYG1lbWNweV9udGAgdXNlZCBhbnl3aGVyZSBlbHNlPyBBIHF1aWNrIHNjYW4gc2hvd3MgaXQmIzM5O3MgY3VycmVudGx5IG9ubHkgdXNlZCBpbiBgbW0vbW1faW5pdC5jYC4gSW50ZXJlc3RpbmcuCgpOb3csIGxldCYjMzk7cyBsb29rIGZvciBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gRGl2aW5nIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgSSBzZWU6CgpgYGBjCiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMQp2b2lkIF9fbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpOwpgYGAKCkFoLCByaWdodC4gVGhlIHg4NiBvcHRpbWl6ZWQgYG1lbWNweV9udGAgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gU28sIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IHRvIGtlZXAgaW4gbWluZC4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCBmdXJ0aGVyIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnPTU0Mj1jb25maWcgVUFDQ0VTU19NRU1DUFlcbi0tXG5saWIvS2NvbmZpZy01NDQtXG5saWIvS2NvbmZpZzo1NDU6Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxubGliL0tjb25maWctNTQ2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ1MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgSSYjMzk7bSBhYm91dCB0byBkbzoKCioqRXhhbWluaW5nIHRoZSBTaWduaWZpY2FuY2Ugb2YgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgY2xlYXJseS4gSXQmIzM5O3MgaW5kaWNhdGluZyBzb21lIGxldmVsIG9mIG9wdGltaXphdGlvbiwgcG9zc2libHkgcmVsYXRlZCB0byBtZW1vcnkgY29oZXJlbmN5IG9yIGNhY2hlIG1hbmFnZW1lbnQsIHdpdGhpbiB0aGUgY29udGV4dCBvZiB1c2VyLXNwYWNlIGFjY2Vzcy4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRlZmluZXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGlkZW50aWZ5IHdoYXQgc2VsZWN0cyBpdC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSXMgaXQgdGllZCB0byBhIHNwZWNpZmljIHByb2Nlc3NvciBmYW1pbHksIGEgcGFydGljdWxhciBtZW1vcnkgbW9kZWwsIG9yIHBlcmhhcHMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBzdWJzeXN0ZW0/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2ggYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgdG8gdHJhY2Ugd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIGNyaXRpY2FsbHksICpzZWxlY3RlZCouIFRoYXQgc2hvdWxkIHJhcGlkbHkgdW5jb3ZlciB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZlYXR1cmUgYmVjb21lcyByZWxldmFudC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLiBJdCYjMzk7cyBhbGwgYWJvdXQgY29udGV4dCBhbmQgaG93IHRoaXMgZmVhdHVyZSBjaGFuZ2VzIG9yIGltcHJvdmVzIHRoZSBub3JtYWwgb3BlcmF0aW9uLCBlc3BlY2lhbGx5IGluIGFyZWFzIG9mIHVzZXItc3BhY2UgYW5kIGtlcm5lbCBhY2Nlc3MuIEtub3dpbmcgdGhlIGNvZGUgcGF0aHMgdGhhdCAqZGVwZW5kKiBvbiB0aGlzIGRlZmluaXRpb24gd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGluc2lnaHQgaW50byBpdHMgYWN0dWFsIHV0aWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTE5MjI9Y29uZmlnIEFSTTY0X1BNRU1cbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTkyNC1cdHNlbGVjdCBBUkNIX0hBU19QTUVNX0FQSVxuYXJjaC9hcm02NC9LY29uZmlnOjE5MjU6XHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL2FybTY0L0tjb25maWctMTkyNi1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE1OC1cdHNlbGVjdCBBUkNIX0hBU19USUNLX0JST0FEQ0FTVFx0XHRpZiBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTU5Olx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9wb3dlcnBjL0tjb25maWctMTYwLVx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMDItXHRzZWxlY3QgQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkdcdGlmIFBHVEFCTEVfTEVWRUxTIFx1MDAzZSAyXG5hcmNoL3g4Ni9LY29uZmlnOjEwMzpcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcdGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZy0xMDQtXHRzZWxlY3QgQVJDSF9IQVNfQ09QWV9NQ1x0XHRcdGlmIFg4Nl82NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA5OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBab25lIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBteSBicmFpbiBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgc2VlIHRoaXMgcGFydGljdWxhciBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYFg4Nl82NGAuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGdlbmVyYWwgcHJldmFsZW5jZSBvZiB0aGF0IGFyY2hpdGVjdHVyZS4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYnJvYWRlciBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYCBiZWluZyBlbmFibGVkLiBUaGVzZSBvcHRpb25zIGltcGx5IHRoZSBzdXBwb3J0IG9mIGR5bmFtaWMgbWVtb3J5IGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgbWFwLCBzbyBJIGdldCB0aGUgY29ubmVjdGlvbi4KCkJleW9uZCB0aGF0LCB0aGUgY29kZSYjMzk7cyB1c3VhbGx5IHNlbGVjdGVkIGJ5IGBOVkRJTU1gLCBgREFYYCwgb3IgYEhNTWAuIFRoaXMgcmVhbGx5IHNoYXJwZW5zIHRoZSBmb2N1cyBvbiBzcGVjaWFsaXplZCBtZW1vcnkgaGFyZHdhcmUgYW5kIGRhdGEgYWNjZXNzIG1ldGhvZHMuIEnigJlsbCBtYWtlIGEgbm90ZSBvZiB0aG9zZSBzZWxlY3RvcnMuIEl0IHN1Z2dlc3RzIHRoZSBtYWluIHVzZSBjYXNlcyBjZW50ZXIgYXJvdW5kIHRob3NlIHRlY2hub2xvZ2llcy4gVG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgd2hlcmUgaXTigJlzIGFwcGxpY2FibGUsIEkmIzM5O20gZ29pbmcgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIHdoaWNoIHNwZWNpZmljIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5IGVuYWJsZSBgWk9ORV9ERVZJQ0VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDkyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIFZhcmlhYmxlICYjMzk7Wk9ORV9ERVZJQ0UmIzM5OyoqCgpSaWdodCwgc28gYFpPTkVfREVWSUNFYCBpcyBhIEJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24uIEl0JiMzOTtzIGVpdGhlciAqb24qIG9yICpvZmYqLCBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0byBlc3RhYmxpc2guIE5vdywgdGhlIGtleSBxdWVzdGlvbiwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggem9uZS1iYXNlZCBjb25maWd1cmF0aW9ucyBpcy4uLiBJcyB0aGlzIHZhcmlhYmxlIGVuYWJsZWQgYnkgZGVmYXVsdD8gVGhhdCYjMzk7cyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8ga25vdyB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBzeXN0ZW0gYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCB0aGF0IGRlZmF1bHQgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZz03OT1jb25maWcgRFJNX1hFX0dQVVNWTVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTgyLVx0ZGVwZW5kcyBvbiAhVU1MXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4MzpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg0LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZz02Mj1jb25maWcgTlZESU1NX1BGTlxuLS1cbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjQtXHRkZWZhdWx0IExJQk5WRElNTVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzo2NTpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjYtXHRzZWxlY3QgTkRfQ0xBSU1cbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnPTIwNj1jb25maWcgUENJX1AyUERNQVxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDctXHRib29sIFwmIzM0O1BDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDg6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwOS1cdCNcbi0tXG5kcml2ZXJzL3hlbi9LY29uZmlnPTMzNj1jb25maWcgWEVOX1VOUE9QVUxBVEVEX0FMTE9DXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzNy1cdGJvb2wgXCYjMzQ7VXNlIHVucG9wdWxhdGVkIG1lbW9yeSByYW5nZXMgZm9yIGd1ZXN0IG1hcHBpbmdzXCYjMzQ7XG5kcml2ZXJzL3hlbi9LY29uZmlnOjMzODpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMveGVuL0tjb25maWctMzM5LVx0ZGVmYXVsdCBYRU5fQkFDS0VORCB8fCBYRU5fR05UREVWIHx8IFhFTl9ET00wXG4tLVxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MC1cdGRlcGVuZHMgb24gTU1VXG5mcy9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZnMvS2NvbmZpZy02Mi1cdHNlbGVjdCBGU19JT01BUFxuLS1cbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcbi0tXG5mcy9LY29uZmlnLTkzLVx0ZGVwZW5kcyBvbiBGU19EQVhcbmZzL0tjb25maWc6OTQ6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnLTk1LVx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbm1tL0tjb25maWc9MTI2Nz1jb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2OC1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG5tbS9LY29uZmlnOjEyNjk6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyNzAtXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjM3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBhbmQgSG90IFBhdGggSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYFpPTkVfREVWSUNFYCBpcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQgZm9yIHNldmVyYWwgb3RoZXIgZmVhdHVyZXMsIG5hbWVseSBgRlNfREFYYCwgYFBDSV9QMlBETUFgLCBgTlZESU1NX1BGTmAsIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBCYXNlZCBvbiB0aGlzIHJlbGF0aW9uc2hpcCwgdGhlIGxvZ2ljYWwgc3RlcCBpcyB0byBpbmNsdWRlIGBaT05FX0RFVklDRWAgd2l0aGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZGVwZW5kZW5jeSByZXNvbHV0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBoZWF2aWx5IG1vZGlmeWluZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBCZXNpZGVzIHRoYXQsIGl0IGlzIGFsc28gaW50cm9kdWNpbmcgYSBoYW5kZnVsIG9mIG5ldyBmdW5jdGlvbnM6IGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAsIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AsIGFuZCBgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGVgLiBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBJJiMzOTttIHNlZWluZyBoZXJlIGlzIGluZGVlZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLgoKTXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZmFsbHMgd2l0aGluIGEgaG90IHBhdGguIEl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnLCB3aGljaCBnZW5lcmFsbHkgaXMgbm90IGEgaGlnaC1mcmVxdWVuY3kgb3BlcmF0aW9uLiBLbm93aW5nIHRoYXQsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgc2VlbXMgbGlrZSBhIGdvb2QgZm9jYWwgcG9pbnQuCgpJIHNlZSB0aGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgYWxzbyBiZWluZyB0b3VjaGVkLCBzbyBJIHdpbGwgYWRkIHRoYXQgdG8gbXkgbWVudGFsIGNoZWNrbGlzdCBmb3IgZnVydGhlciByZXZpZXcuIExldCYjMzk7cyBzZWUgaG93IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgYmVpbmcgYWZmZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X2NvbXBvdW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMTM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wb3VuZF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtMTE0OS1cbm1tL21tX2luaXQuYzoxMTUwOnN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxubW0vbW1faW5pdC5jLTExNTEtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3Bmbixcbi0tXG5tbS9tbV9pbml0LmM9MTIwND12b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL21tX2luaXQuYy0xMjYxLVx0XHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgaGVhZC1wYWdlIGNvcHlcbm1tL21tX2luaXQuYzoxMjYyOlx0XHQgKiBiZWZvcmUgbWVtbWFwX2luaXRfY29tcG91bmQoKSwgd2hpY2ggaW1tZWRpYXRlbHkgdXBkYXRlcyBjb21wb3VuZC1oZWFkXG5tbS9tbV9pbml0LmMtMTI2My1cdFx0ICogbWV0YWRhdGEuIElmIG1lbWNweV9udCgpIGZlbGwgYmFjayB0byByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXG4tLVxubW0vbW1faW5pdC5jLTEyNjgtXG5tbS9tbV9pbml0LmM6MTI2OTpcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbm1tL21tX2luaXQuYy0xMjcwLVx0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjExNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIE1lbW9yeSBNYXBwaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBUaGF0IG1ha2VzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdGhlIGxpa2VseSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHNlY3Rpb24uIEJ1dCBob2xkIG9uLCBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4uLiBobW0sIHRoYXQgbWVhbnMgaXQgKmNvdWxkKiBiZSBpbmxpbmVkLCBwb3RlbnRpYWxseSBvYnNjdXJpbmcgdGhlIGNhbGwgY2hhaW4uIEkmIzM5O2xsIGZsYWcgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBmb3IgYSBkZWVwZXIgZGl2ZSBpbiBgRm9jdXNTeW1ib2xzYCB0byBlbnN1cmUgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBhbGwgc3RhcnRzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluIHBsYXkuIExvb2tzIGxpa2UgYG1lbWNweV9udGAsIGBtZW1jcHlfbnRfZHJhaW5gLCBgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXRgLCBhbmQgYHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlYCwgYXJlIGFsbCBzdGF0aWMgaW5saW5lLCBhbmQgbGlrZWx5IG9wdGltaXplZCBhd2F5LCBvciBpbmxpbmVkLCBtYWtpbmcgdHJhY2luZyB0aHJvdWdoIHRoZXNlIGRpZmZpY3VsdC4gQWxzbywgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBhbmQgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCBhcmUgc3RhdGljIGJ1dCBub3QgaW5saW5lLgoKU28sIGZyb20gd2hhdCBJIGNhbiBzZWUsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGdldHMgbW9kaWZpZWQuIEJ1dCB3YWl0LCBpcyBpdCBleHBvcnRlZD8gTm8sIGl0JiMzOTtzIG5vdCBleHBvcnRlZC4gRXZlbiB0aG91Z2ggaXQgaXMgbm90IGV4cG9ydGVkLCBpdCBpcyBnbG9iYWxseSB2aXNpYmxlLiBCZXN0IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIGxldCYjMzk7cyBjaGVjayBvdXQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBmdW5jdGlvbiBkZWZpbml0aW9uIGluIGBtbS9tbV9pbml0LmNgIHRvIHNlZSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjA0Olx0dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbjEyMDU6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuMTIwNjpcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjEyMDc6XHRcdFx0XHRcdCAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4xMjA4Olx0e1xuMTIwOTpcdFx0Ym9vbCB1c2VfdGVtcGxhdGUgPSB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQoKTtcbjEyMTA6XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gc3RhcnRfcGZuICYjNDM7IG5yX3BhZ2VzO1xuMTIxMTpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbjEyMTI6XHRcdHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwID0gcGdtYXBfYWx0bWFwKHBnbWFwKTtcbjEyMTM6XHRcdHVuc2lnbmVkIGludCBwZm5zX3Blcl9jb21wb3VuZCA9IHBnbWFwX3ZtZW1tYXBfbnIocGdtYXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk5NAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgdGhlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IHRoaXMgaXMgYSBnbG9iYWxseSB2aXNpYmxlIGNoYW5nZSwgd2hpY2ggaW1tZWRpYXRlbHkgZGVtYW5kcyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBidXQgd2hhdCAqZWxzZSogaXMgaW1wYWN0ZWQ/JiMzNDsgQSBnbG9iYWwgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIHJpcHBsZSBvdXR3YXJkIGluIHVuZXhwZWN0ZWQgd2F5cywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUuCgpSaWdodCwgSSBzZWUgYSBtb2RpZmljYXRpb24gdG8gYG1lbWNweV9mbHVzaGNhY2hlYCB3aXRoaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYC4gTm93IHdlJiMzOTtyZSBnZXR0aW5nIHNvbWV3aGVyZS4gYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBjcml0aWNhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb24geDg2LCBwYXJ0aWN1bGFybHkgd2hlcmUgY2FjaGUgY29oZXJlbmNlIGlzIGludm9sdmVkLCBzbyBsZXQmIzM5O3MgZGlnIGludG8gKnRoYXQqIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQmIzM5O3MgY2hhbmdlZCB0aGVyZSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoYXQgaGFzIGFjcm9zcyB0aGUgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGBtZW1jcHlfZmx1c2hjYWNoZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNweV9mbHVzaGNhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDctI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmgtNDktI2VuZGlmXG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jOjEwOnZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYy0xMS17XG4tLVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMTktfVxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmM6MjA6RVhQT1JUX1NZTUJPTF9HUEwobWVtY3B5X2ZsdXNoY2FjaGUpO1xuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oPTI4PWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0cmluZy5oLTMwLVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODAtXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04Mi17XG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6ODg6RVhQT1JUX1NZTUJPTChtZW1jcHlfZmx1c2hjYWNoZSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODE9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTg0LSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODU6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTg2LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEwNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTExMi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjExMzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMTQtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTMyLVx0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMzOlx0XHRcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTM0LVx0XHRcdCAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE1NS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE1NjpcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTctfVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTE2NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTY2LXtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjE2NzpcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTY4LX1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaD0xNzE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9udF9kcmFpbih2b2lkKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE3My1cdC8qXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNzQ6XHQgKiBPcmRlciB0aGUgcHJpb3IgTU9WTlRJIHN0b3JlcyBpc3N1ZWQgYnkgbWVtY3B5X2ZsdXNoY2FjaGUoKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTc1LVx0ICogYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMuXG4tLVxuYXJjaC94ODYva2VybmVsL2NyYXNoLmM9NTE0PXZvaWQgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqYXJnKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jLTU2NS1cdHhjaGcoXHUwMDI2a2V4ZWNfY3Jhc2hfaW1hZ2UsIE5VTEwpO1xuYXJjaC94ODYva2VybmVsL2NyYXNoLmM6NTY2Olx0bWVtY3B5X2ZsdXNoY2FjaGUob2xkX2VsZmNvcmVoZHIsIGVsZmJ1ZiwgZWxmc3opO1xuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNTY3LVx0eGNoZyhcdTAwMjZrZXhlY19jcmFzaF9pbWFnZSwgaW1hZ2UpO1xuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jPTQ2PXNpemVfdCBjb3B5X3VzZXJfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHNpemVfdCBzaXplKVxuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTc5LVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM6ODA6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKl9kc3QsIGNvbnN0IHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtODEte1xuLS1cbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTE0Mi19XG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxNDM6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jcHlfZmx1c2hjYWNoZSk7XG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDQtI2VuZGlmXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0zMT1zdGF0aWMgdm9pZCBmc2Rldl93cml0ZV9kYXgodm9pZCAqYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0zNy1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mzg6XHRcdG1lbWNweV9mbHVzaGNhY2hlKGFkZHIsIG1lbSAmIzQzOyBvZmYsIGNodW5rKTtcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMzktXHRcdGt1bm1hcF9sb2NhbChtZW0pO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM9MTc9c3RhdGljIHZvaWQgY2FjaGVfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSlcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTI1LVx0Y2FjaGUtXHUwMDNlaW5mb19pbmRleCA9IChjYWNoZS1cdTAwM2VpbmZvX2luZGV4ICYjNDM7IDEpICUgUENBQ0hFX01FVEFfSU5ERVhfTUFYO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYzoyNjpcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9jYWNoZV9pbmZvX2FkZHIoY2FjaGUpLCBjYWNoZV9pbmZvLFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNy1cdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9pbmZvKSk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz04Nz12b2lkIGNhY2hlX3Bvc19lbmNvZGUoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsXG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDAtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jOjEwMTpcdG1lbWNweV9mbHVzaGNhY2hlKHBvc19vbm1lZGlhX2FkZHIsIFx1MDAyNnBvc19vbm1lZGlhLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9wb3Nfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0xMDItXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jPTE0MD1zdGF0aWMgdm9pZCBzYl93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX2RldiAqY2FjaGVfZGV2LCBzdHJ1Y3QgcGNhY2hlX3NiICpzYilcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYy0xNDMtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYzoxNDQ6XHRtZW1jcHlfZmx1c2hjYWNoZShzYl9hZGRyLCBzYiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfc2IpKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jLTE0NS1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM9MTE0PXN0YXRpYyB2b2lkIGFwcGVuZF9sYXN0X2tzZXQoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHUzMiBuZXh0X3NlZylcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjItXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYzoxMjM6XHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfa2V5X2hlYWRfYWRkcihjYWNoZSksIFx1MDAyNmtzZXRfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjQtXHRwbWVtX3dtYigpO1xuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jPTEyOD1pbnQgY2FjaGVfa3NldF9jbG9zZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0ICprc2V0KVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE1My1cdFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBpbiBuZXh0IHNlZyAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTU0Olx0XHRtZW1jcHlfZmx1c2hjYWNoZShuZXh0X3NlZy1cdTAwM2VzZWdtZW50LmRhdGEsIFx1MDAyNnBjYWNoZV9lbXB0eV9rc2V0LFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTU1LVx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNjUtXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGFmdGVyIGN1cnJlbnQga3NldCAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY2Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpICYjNDM7IGtzZXRfb25tZWRpYV9zaXplLCBcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE2Ny1cdFx0XHRcdHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY4LVx0Lyogd3JpdGUgY3VycmVudCBrc2V0IGludG8gc2VnbWVudCAqL1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTY5Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpLCBrc2V0X29ubWVkaWEsIGtzZXRfb25tZWRpYV9zaXplKTtcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE3MC1cdHBtZW1fd21iKCk7XG4tLVxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTIwPXN0YXRpYyB2b2lkIGNhY2hlX3NlZ19pbmZvX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnbWVudCAqY2FjaGVfc2VnKVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMS1cdHNlZ19pbmZvX2FkZHIgPSBnZXRfc2VnX2luZm9fYWRkcihjYWNoZV9zZWcpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjMyOlx0bWVtY3B5X2ZsdXNoY2FjaGUoc2VnX2luZm9fYWRkciwgc2VnX2luZm8sIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NlZ21lbnRfaW5mbykpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTMzLVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MTI2PXN0YXRpYyB2b2lkIGNhY2hlX3NlZ19jdHJsX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfc2VnbWVudCAqY2FjaGVfc2VnKVxuLS1cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzYtXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MTM3Olx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX3NlZ19nZW5fYWRkcihjYWNoZV9zZWcpLCBcdTAwMjZjYWNoZV9zZWdfZ2VuLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdfZ2VuKSk7XG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMTM4LVx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM9MTgyPWludCBjYWNoZV9zZWdfaW5pdChzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSwgdTMyIHNlZ19pZCwgdTMyIGNhY2hlX3NlZ19pZCxcbi0tXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMjE2LVx0XHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIHNlZ21lbnQgKi9cbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoyMTc6XHRcdG1lbWNweV9mbHVzaGNhY2hlKHNlZ21lbnQtXHUwMDNlZGF0YSwgXHUwMDI2cGNhY2hlX2VtcHR5X2tzZXQsIHNpemVvZihzdHJ1Y3QgcGNhY2hlX2NhY2hlX2tzZXRfb25tZWRpYSkpO1xuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTIxOC1cdFx0cG1lbV93bWIoKTtcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz00Nj1kbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00Ny1cdHR5cGVvZihkZXN0KSB1bmlxID0gKHNyYyk7XHRcdFx0XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6NDg6XHRtZW1jcHlfZmx1c2hjYWNoZShcdTAwMjYoZGVzdCksIFx1MDAyNnVuaXEsIHNpemVvZihkZXN0KSk7XHRcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDktfSB3aGlsZSAoMClcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMTkwPXN0YXRpYyBpbnQgd3JpdGVjYWNoZV9tZXNzYWdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIwOS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMTA6c3RhdGljIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKHZvaWQgKmRlc3QsIHZvaWQgKnNvdXJjZSwgc2l6ZV90IHNpemUpXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjExLXtcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI0LVx0ICogTk9URTogdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIG5vdyAod2l0aCBkbS13cml0ZWNhY2hlJiMzOTtzIHNpbmdsZVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIyNTpcdCAqIHRocmVhZGVkIG1vZGVsKSBidXQgcmUtZXZhbHVhdGUgdGhpcyBvbmNlIG1lbWNweV9mbHVzaGNhY2hlKCkgaXNcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjYtXHQgKiBlbmFibGVkIHRvIHVzZSBtb3ZkaXI2NGIgd2hpY2ggbWlnaHQgaW52YWxpZGF0ZSB0aGlzIHBlcmZvcm1hbmNlXG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0Mi0jZW5kaWZcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyNDM6XHRtZW1jcHlfZmx1c2hjYWNoZShkZXN0LCBzb3VyY2UsIHNpemUpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0NC19XG4tLVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTI0Nj1zdGF0aWMgdm9pZCBiaW9fY29weV9ibG9jayhzdHJ1Y3QgZG1fd3JpdGVjYWNoZSAqd2MsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjcxLVx0XHRcdGZsdXNoX2RjYWNoZV9wYWdlKGJpb19wYWdlKGJpbykpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI3MjpcdFx0XHRtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQoZGF0YSwgYnVmLCBzaXplKTtcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzMtXHRcdH1cbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXG4tLVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzYtXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3NzpcdG1lbWNweV9mbHVzaGNhY2hlKG5zaW8tXHUwMDNlYWRkciAmIzQzOyBvZmZzZXQsIGJ1Ziwgc2l6ZSk7XG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3OC1cdHJldCA9IG52ZGltbV9mbHVzaCh0b19uZF9yZWdpb24obmRucy1cdTAwM2VkZXYucGFyZW50KSwgTlVMTCk7XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTEyND1zdGF0aWMgdm9pZCB3cml0ZV9wbWVtKHZvaWQgKnBtZW1fYWRkciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzMi1cdFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoxMzM6XHRcdG1lbWNweV9mbHVzaGNhY2hlKHBtZW1fYWRkciwgbWVtICYjNDM7IG9mZiwgY2h1bmspO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzNC1cdFx0a3VubWFwX2xvY2FsKG1lbSk7XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz0xMTA2PWludCBnZW5lcmljX252ZGltbV9mbHVzaChzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24pXG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTIxLVx0ICogdGhlIHBsYXRmb3JtIGJ1ZmZlciBmbHVzaC4gTm90ZSB0aGF0IHdlJiMzOTt2ZSBhbHJlYWR5IGFycmFuZ2VkIGZvciBwbWVtXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jOjExMjI6XHQgKiB3cml0ZXMgdG8gYXZvaWQgdGhlIGNhY2hlIHZpYSBtZW1jcHlfZmx1c2hjYWNoZSgpLiAgVGhlIGZpbmFsXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTExMjMtXHQgKiB3bWIoKSBlbnN1cmVzIG9yZGVyaW5nIGZvciB0aGUgTlZESU1NIGZsdXNoIHdyaXRlLlxuLS1cbmluY2x1ZGUvbGludXgvc3RyaW5nLmg9MjcyPWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3NC0jaWZuZGVmIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oLTI3Ni17XG4tLVxubGliL2lvdl9pdGVyLmM9MzAzPXNpemVfdCBtZW1jcHlfZnJvbV9pdGVyX2ZsdXNoY2FjaGUodm9pZCAqaXRlcl9mcm9tLCBzaXplX3QgcHJvZ3Jlc3MsXG4tLVxubGliL2lvdl9pdGVyLmMtMzA1LXtcbmxpYi9pb3ZfaXRlci5jOjMwNjpcdG1lbWNweV9mbHVzaGNhY2hlKHRvICYjNDM7IHByb2dyZXNzLCBpdGVyX2Zyb20sIGxlbik7XG5saWIvaW92X2l0ZXIuYy0zMDctXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0ODQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIE5ldyBgbWVtY3B5X250YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBhIG5ldyBmdW5jdGlvbiwgYG1lbWNweV9udGAsIGhhcyBiZWVuIGludHJvZHVjZWQuIEl0JiMzOTtzIGRlZmluZWQgaW4gYm90aCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAgYW5kIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIFRoaXMgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGFuZCBJIHNlZSBpdCYjMzk7cyBiZWluZyB1c2VkIGluIGBtbS9tbV9pbml0LmNgLiBCdXQgaG9sZCBvbiwgdGhlIHJlYWwgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLCB3aGVyZSB0aGUgZXhpc3RpbmcgYG1lbWNweV9mbHVzaGNhY2hlYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgcmVwbGFjZW1lbnQuIEl0JiMzOTtzIGFuIG9wdGltaXphdGlvbiBvZiBgbWVtY3B5X2ZsdXNoY2FjaGVgIHNwZWNpZmljYWxseSBmb3IgZml4ZWQgc2l6ZXMgbGlrZSAzMiwgNDgsIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLCB3aGljaCBpcyBjbGV2ZXIuIGBtZW1jcHlfbnRgIGlzIGxldmVyYWdpbmcgdGhpcyBvcHRpbWl6ZWQgdmVyc2lvbi4gVGhlIGltcGFjdCBpcyBkZWZpbml0ZWx5IGJyb2FkZXIgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LgoKTm93LCBgbWVtY3B5X2ZsdXNoY2FjaGVgIGdldHMgdXNlZCBhY3Jvc3MgYSBidW5jaCBvZiBwbGFjZXM6IGBkcml2ZXJzL2RheC9mc2Rldi5jYCwgYGRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jYCwgYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2AsIGFuZCBgbGliL2lvdl9pdGVyLmNgLCB0byBuYW1lIGEgZmV3LiBUaGF0JiMzOTtzIGEgZ29vZCBjcm9zcy1zZWN0aW9uIG9mIHRoZSBrZXJuZWwuIFRoaXMgbWVhbnMgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFyZW4mIzM5O3QgbGltaXRlZCB0byBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFzIEkgaGFkIGZpcnN0IGFzc3VtZWQuCgpIb3dldmVyLCBzaW5jZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgSSBjYW4mIzM5O3QgZGlyZWN0bHkgYWRkIGl0IHRvIGBGb2N1c1N5bWJvbHNgLiBTbywgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGluc3RlYWQuIFRoaXMgYmVjb21lcyB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGtleSBoZXJlLiBPdGhlciByZWxldmFudCBvcHRpb25zIHRoYXQgY291bGQgZW5hYmxlIGBaT05FX0RFVklDRWAgdXNhZ2UgYXJlOiBgQ09ORklHX0ZTX0RBWGAsIGBDT05GSUdfTlZESU1NX1BGTmAsIGBDT05GSUdfUENJX1AyUERNQWAsIG9yIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgLiBJJiMzOTtsbCBhZGQgYFpPTkVfREVWSUNFYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuCgpCdXQgd2hhdCBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzPyBBaCwgcmlnaHQsIGBDT05GSUdfS0FTQU5gIGFuZCBgQ09ORklHX0tNU0FOYCBkaXNhYmxlIG9wdGltaXphdGlvbnMgaW4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gQnV0IHdhaXQsIHRoaXMgaXMgYSBiaXQgbWlzbGVhZGluZy4gVGhlIGBtZW1jcHlfZmx1c2hjYWNoZWAgKm9wdGltaXphdGlvbiogaXNuJiMzOTt0IGRpc2FibGVkIGJ5IEtBU0FOISBUaGUgYG1lbWNweV9mbHVzaGNhY2hlYCBpbmxpbmUgZnVuY3Rpb24gKmlzKiB1c2VkIGJ5IGBtZW1jcHlfbnRgICphbmQqIGJ5IHRoaW5ncyBsaWtlIGBkbS13cml0ZWNhY2hlYCwgYHBtZW1gLCBhbmQgYGRheGAuIFRoaXMgbWVhbnMgdGhlIGNoYW5nZXMgdG8gYG1lbWNweV9mbHVzaGNhY2hlYCBhcmUgc3RpbGwgcmVsZXZhbnQsIGV2ZW4gd2l0aCBLQVNBTiBlbmFibGVkLCAqYXMgbG9uZyBhcyB0aGUgc2l6ZSBpcyBmaXhlZCogdG8gMzIsIDQ4LCA2NCwgODAsIG9yIDk2LgoKSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaG93IGBkbS13cml0ZWNhY2hlYCB1c2VzIGBtZW1jcHlfZmx1c2hjYWNoZWAuIERvZXMgaXQgcHJpbWFyaWx5IHdvcmsgd2l0aCB2YXJpYWJsZSBvciBmaXhlZCBzaXplcz8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZG0td3JpdGVjYWNoZS5jYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jcHlfZmx1c2hjYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTQ2PWRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQ3LVx0dHlwZW9mKGRlc3QpIHVuaXEgPSAoc3JjKTtcdFx0XHRcdFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzo0ODpcdG1lbWNweV9mbHVzaGNhY2hlKFx1MDAyNihkZXN0KSwgXHUwMDI2dW5pcSwgc2l6ZW9mKGRlc3QpKTtcdFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00OS19IHdoaWxlICgwKVxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTExOTA9c3RhdGljIGludCB3cml0ZWNhY2hlX21lc3NhZ2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndixcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjA5LVxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTIxMDpzdGF0aWMgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQodm9pZCAqZGVzdCwgdm9pZCAqc291cmNlLCBzaXplX3Qgc2l6ZSlcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMTEte1xuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjQtXHQgKiBOT1RFOiB0aGlzIGhhcHBlbnMgdG8gYmUgdGhlIGNhc2Ugbm93ICh3aXRoIGRtLXdyaXRlY2FjaGUmIzM5O3Mgc2luZ2xlXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjI1Olx0ICogdGhyZWFkZWQgbW9kZWwpIGJ1dCByZS1ldmFsdWF0ZSB0aGlzIG9uY2UgbWVtY3B5X2ZsdXNoY2FjaGUoKSBpc1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyNi1cdCAqIGVuYWJsZWQgdG8gdXNlIG1vdmRpcjY0YiB3aGljaCBtaWdodCBpbnZhbGlkYXRlIHRoaXMgcGVyZm9ybWFuY2Vcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQyLSNlbmRpZlxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI0MzpcdG1lbWNweV9mbHVzaGNhY2hlKGRlc3QsIHNvdXJjZSwgc2l6ZSk7XG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjQ0LX1cbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMjQ2PXN0YXRpYyB2b2lkIGJpb19jb3B5X2Jsb2NrKHN0cnVjdCBkbV93cml0ZWNhY2hlICp3Yywgc3RydWN0IGJpbyAqYmlvLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzEtXHRcdFx0Zmx1c2hfZGNhY2hlX3BhZ2UoYmlvX3BhZ2UoYmlvKSk7XG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjcyOlx0XHRcdG1lbWNweV9mbHVzaGNhY2hlX29wdGltaXplZChkYXRhLCBidWYsIHNpemUpO1xuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdyaXRlY2FjaGUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZG0td3JpdGVjYWNoZS5jYCBhbmQgaG93IGl0IGhhbmRsZXMgZmx1c2hpbmcuIEkgc2VlIGB3cml0ZWNhY2hlX2NvbW1pdF9mbHVzaGVkYCB1c2VzIGB3cml0ZWNhY2hlX2ZsdXNoX3JlZ2lvbmAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1lbWNweV9mbHVzaGNhY2hlYC4gV2FpdCBhIG1pbnV0ZS4uLiBsb29raW5nIGF0IHRoYXQgbWFjcm86CgpgYGBjCiNkZWZpbmUgd3JpdGVjYWNoZV9mbHVzaF9yZWdpb24od2MsIGRlc3QsIHNyYykJCQkJXApkbyB7CQkJCQkJCQlcCgl0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpOwkJCQlcCgltZW1jcHlfZmx1c2hjYWNoZSgmYW1wOyhkZXN0KSwgJmFtcDt1bmlxLCBzaXplb2YoZGVzdCkpOwlcCn0gd2hpbGUgKDApCmBgYAoKYHNpemVvZihkZXN0KWAgaXMgYSAqY29uc3RhbnQqIGhlcmUhIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHNpemUgb2YgYGRlc3RgIGFjdHVhbGx5IGlzIGluIHRoZXNlIHZhcmlvdXMgY29udGV4dHMsIGJ1dCBpZiBpdCAqaXMqIGEgY29uc3RhbnQgc2l6ZSwgdGhlbiB0aGUgaW5saW5lIG9wdGltaXphdGlvbiB3aXRoaW4gYG1lbWNweV9mbHVzaGNhY2hlYCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnRlc3RhYmxlKi4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSB3aG9sZSBwaWN0dXJlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB0byB1c2UgYSB0ZW1wbGF0ZSBhbmQgYG1lbWNweV9udGAgZm9yIGZhc3RlciBpbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBQbHVzLCBhbmQgdGhpcyBpcyBnb29kLCBpdCBhZGRzIGlubGluZSBvcHRpbWl6YXRpb25zIGZvciBgbWVtY3B5X2ZsdXNoY2FjaGVgIGZvciBzaXplcyBsaWtlIDMyLCA0OCwgNjQsIGV0Yy4gSW1wb3J0YW50bHksIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIG9wdGltaXphdGlvbiBpcyAqZGlzYWJsZWQqIGlmIEtBU0FOIG9yIEtNU0FOIGlzIGVuYWJsZWQsIGJ1dCB0aGUgYG1lbWNweV9mbHVzaGNhY2hlYCBvcHRpbWl6YXRpb24gaXMgKmFsd2F5cyogZW5hYmxlZCBpZiB0aGUgc2l6ZSBpcyBjb25zdGFudC4gVGhpcyBtZWFucyB0aGUgcHJvcG9zZWQgY29kZSBpcywgZnVuY3Rpb25hbGx5LCBzb3VuZCBhbmQgcmVhY2hhYmxlLgoKYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBzZWVtcyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sIGhlcmUuIEl0JiMzOTtzIGEgY2xlYXIgZW50cnkgcG9pbnQgdG8gZXhhbWluZSB0aGUgZWZmZWN0cyBvZiB0aGUgb3B0aW1pemF0aW9uLiBXZSAqbmVlZCogYENPTkZJR19aT05FX0RFVklDRWAgdG8gZXZlbiBnZXQgdG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdGVzdGluZy4KCkkgc2hvdWxkIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIG1haW4gb25lLCBhbmQgSSBzZWUgYHBhZ2VtYXBfcmFuZ2VgIGlzIHRoZSBjYWxsZXIgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gSSBzaG91bGQgYWRkIGBwYWdlbWFwX3JhbmdlYCB0byBgRm9jdXNTeW1ib2xzYCBhcyB3ZWxsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBwYWdlbWFwX3JhbmdlYCBpbiBgbW0vbWVtcmVtYXAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VtYXBfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1yZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXJlbWFwLmM9MTM3PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxubW0vbWVtcmVtYXAuYy0xNDMtXG5tbS9tZW1yZW1hcC5jOjE0NDpzdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbm1tL21lbXJlbWFwLmMtMTQ1LVx0XHRpbnQgcmFuZ2VfaWQsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYz0yNjY9dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcbi0tXG5tbS9tZW1yZW1hcC5jLTMzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xubW0vbWVtcmVtYXAuYzozMzg6XHRcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXHUwMDI2cGFyYW1zLCBpLCBuaWQpO1xubW0vbWVtcmVtYXAuYy0zMzktXHRcdGlmIChlcnJvcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWm9uZSBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IGBwYWdlbWFwX3JhbmdlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgZnVuY3Rpb24gYG1lbXJlbWFwX3BhZ2VzYCBpcyBleHBvcnRlZCwgd2hpY2ggaXMgdXNlZnVsIGZvciBvdXIgd29yay4gSSB0aGluayB3ZSBjYW4gc2FmZWx5IGFkZCBib3RoIGBtZW1yZW1hcF9wYWdlc2AgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGVwLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLiBgWk9ORV9ERVZJQ0VgIGlzIGNsZWFybHkgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBBcmUgdGhlcmUgYW55IG90aGVycyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciB0aGluZ3MgbGlrZSBgQ09ORklHX0ZTX0RBWGAsIGBDT05GSUdfTlZESU1NX1BGTmAsIGBDT05GSUdfUENJX1AyUERNQWAsIG9yIGV2ZW4gYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGFuZCBjb25zaWRlcmluZyBob3cgU3l6a2FsbGVyIHVzdWFsbHkgc2V0cyB0aGluZ3MgdXAsIGBDT05GSUdfRlNfREFYYCBhbmQgYENPTkZJR19QQ0lfUDJQRE1BYCBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEJ1dCwgZm9yIG5vdywgdG8ga2VlcCBpdCBzaW1wbGUsIHdlIGNhbiBqdXN0IGZvY3VzIG9uIGxpc3RpbmcgYFpPTkVfREVWSUNFYC4KCkZpbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSByZWFjaGFiaWxpdHkgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gQ2FuIGl0IGJlIGNhbGxlZCB3aXRob3V0IGBaT05FX0RFVklDRWAgZW5hYmxlZD8gTm8sIGxvb2tpbmcgYXQgaXQsIGl0IGFwcGVhcnMgaXQmIzM5O3MgZWl0aGVyIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIG9yIHRoZSB3aG9sZSBmaWxlIHRoYXQgY29udGFpbnMgaXQgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGVuYWJsZWQuIFdhaXQsIGhvbGQgb24uLi4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBpbiBgbW0vbW1faW5pdC5jYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIGFjdHVhbGx5IGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgLiBKdXN0IHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tbV9pbml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTY3ND1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfaGFzaGRpc3Qodm9pZCkge31cbi0tXG5tbS9tbV9pbml0LmMtNjc2LVxubW0vbW1faW5pdC5jOjY3NzojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5tbS9tbV9pbml0LmMtNjc4LXN0YXRpYyBfX21lbWluaXQgdm9pZCBwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmM9ODc0PXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxuLS1cbm1tL21tX2luaXQuYy04ODUtXG5tbS9tbV9pbml0LmM6ODg2OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbm1tL21tX2luaXQuYy04ODctXHQvKlxuLS1cbm1tL21tX2luaXQuYy05MjAtXHRcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykge1xubW0vbW1faW5pdC5jOjkyMTojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5tbS9tbV9pbml0LmMtOTIyLVx0XHRcdGlmICh6b25lID09IFpPTkVfREVWSUNFKVxuLS1cbm1tL21tX2luaXQuYz05Njg9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTEwMDYtXG5tbS9tbV9pbml0LmM6MTAwNzojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5tbS9tbV9pbml0LmMtMTAwOC0vKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTkzNQoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA4MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgWk9ORV9ERVZJQ0UgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGtleSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYFpPTkVfREVWSUNFYCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmIENPTkZJR19aT05FX0RFVklDRWAgY29uZmlybXMgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBwcmltYXJ5IGZvY3VzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnV6emluZyBzdHJhdGVneSBpcyBzb3VuZC4KClRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBgbWVtY3B5X250YCBhbmQgYG1lbWNweV9udF9kcmFpbmAsIGltcGxlbWVudGVkIGluIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlJiMzOTtzIHN0cmluZyBoYW5kbGluZyAoYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCksIGFsb25nIHdpdGggb3B0aW1pemF0aW9ucyBmb3IgYG1lbWNweV9mbHVzaGNhY2hlYCBpbiB0aGUgc2FtZSBmaWxlLiBUaGVzZSBhcmUgdXNlZCB3aXRoaW4gYG1tL21tX2luaXQuY2AsIHNwZWNpZmljYWxseSBpbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBUaGUgbmljZSB0aGluZyBpcyB0aGUgZmFsbGJhY2sgaW4gYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgLCBtZWFuaW5nIG90aGVyIGFyY2hpdGVjdHVyZXMgc2hvdWxkbiYjMzk7dCBiZSBhZmZlY3RlZC4KClRoZSByZWFzb25pbmcgZm9yIGZ1enppbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvcHkgcm91dGluZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBub24tdGVtcG9yYWwgY29waWVzIGZvciBpbml0aWFsaXppbmcgYFpPTkVfREVWSUNFYCBwYWdlcy4gVGhlc2Ugcm91dGluZXMgYXJlIHRvdWNoZWQgZHVyaW5nIGhvdHBsdWdnaW5nLCBkZXZpY2UgbWVtb3J5IGluaXRpYWxpemF0aW9uIChEQVgsIHBtZW0sIGV0Yy4pLCBzbyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciByZWdyZXNzaW9ucyBpcyBkZWZpbml0ZWx5IHRoZXJlLgoKTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtcmVtYXBfcGFnZXNgLiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBtZW1yZW1hcF9wYWdlc2AgaXMgYSBnb29kIGNob2ljZSBiZWNhdXNlIGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkcml2ZXJzIG1hcHBpbmcgYFpPTkVfREVWSUNFYCBtZW1vcnkuIEkmIzM5O3ZlIGFsc28gY29uc2lkZXJlZCBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIGJ1dCBkZWNpZGVkIHRoYXQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbXJlbWFwX3BhZ2VzYCBjb3ZlciB0aGUgY29yZSBsb2dpYyBzdWZmaWNpZW50bHkuCgpJIGNvbnNpZGVyZWQgYGRtLXdyaXRlY2FjaGUuY2AgYW5kIGBtZW1jcHlfZmx1c2hjYWNoZWAuIFdoaWxlIGl0JiMzOTtzIHVzZWQgdGhlcmUsIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyBmdXp6aW5nIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB3aWxsIGNvdmVyIHRoYXQuIEkgY291bGQgYWRkIGZ1bmN0aW9ucyBsaWtlIGB3cml0ZWNhY2hlX2NvbW1pdF9mbHVzaGVkYCBvciBgcG1lbV9kb193cml0ZWAgZm9yIGV4dHJhIGNvdmVyYWdlLCBidXQgdGhlIG1haW4gY2hhbmdlIGlzIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIG9wdGltaXphdGlvbiwgYW5kIHRob3NlIGFyZSBtb3JlIHNwZWNpZmljIHRvIHRob3NlIGRyaXZlcnMuCgpOb3csIGFib3V0IHRoZSBjb25maWd1cmF0aW9uOiBJdCBsb29rcyBsaWtlIEkgb25seSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBaT05FX0RFVklDRWAuIGBYODZfNjRgIGlzIGFzc3VtZWQgYW5kIGBLQVNBTmAgY2FuIGJlIGlnbm9yZWQgYmVjYXVzZSB0aGUgc3l6a2FsbGVyIHdpbGwgaGFuZGxlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgaXQgYXMgcmVxdWlyZWQsIEkgY2FuJiMzOTt0IHNwZWNpZnkgZGlzYWJsaW5nIGl0IGluIHRoZSBjb25maWcgZmlsZS4gU2luY2UgSSYjMzk7bSBhaW1pbmcgZm9yIHRoZSBmYXN0IHBhdGgsIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGluc3RhbmNlIG9mIHN5emthbGxlciBkb2VzbiYjMzk7dCBlbmFibGUgS0FTQU4sIHNpbmNlIEkgZG9uJiMzOTt0IHNlZSBhbnkgd2F5IHRvIHNwZWNpZnkgYSAmIzM0O2Rpc2FibGUgS0FTQU4mIzM0OyBkaXJlY3RpdmUuCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtcmVtYXBfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbXJlbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBpbml0aWFsaXppbmcgWk9ORV9ERVZJQ0UgbWVtb3J5IHBhZ2VzIHVzaW5nIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbnQpLiBJdCBhbHNvIGFkZHMgaW5saW5lIG9wdGltaXphdGlvbnMgZm9yIG1lbWNweV9mbHVzaGNhY2hlIG9uIHg4Nl82NC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3RyaW5nIGNvcHkgcm91dGluZXMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBkZXZpY2UgbWVtb3J5IGluaXRpYWxpemF0aW9uIChlLmcuLCBEQVgsIHBtZW0pLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhlIG5ldyBmYXN0IHBhdGggYW5kIHRoZSBvcHRpbWl6ZWQgbWVtb3J5IGNvcHkgcm91dGluZXMgZG8gbm90IGludHJvZHVjZSBtZW1vcnkgY29ycnVwdGlvbiBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjM5OjUyLjE5NTE2MDkyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTk5ODU2ODA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1yZW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBpbml0aWFsaXppbmcgWk9ORV9ERVZJQ0UgbWVtb3J5IHBhZ2VzIHVzaW5nIG5vbi10ZW1wb3JhbCBtZW1vcnkgY29waWVzIChtZW1jcHlfbnQpLiBJdCBhbHNvIGFkZHMgaW5saW5lIG9wdGltaXphdGlvbnMgZm9yIG1lbWNweV9mbHVzaGNhY2hlIG9uIHg4Nl82NC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3RyaW5nIGNvcHkgcm91dGluZXMsIHdoaWNoIGFyZSByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBkZXZpY2UgbWVtb3J5IGluaXRpYWxpemF0aW9uIChlLmcuLCBEQVgsIHBtZW0pLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhlIG5ldyBmYXN0IHBhdGggYW5kIHRoZSBvcHRpbWl6ZWQgbWVtb3J5IGNvcHkgcm91dGluZXMgZG8gbm90IGludHJvZHVjZSBtZW1vcnkgY29ycnVwdGlvbiBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6Mzk6NTIuMTk1MTY5MDUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU1MjM4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxN2I4NmVjZTU1ZmIxZjhkYzYwNDE1YWQwYTdmMmM2NmE3N2M0MjQzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDA2OjM5OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcXG5pbmRleCA0NjM1NjE2ODYzZjUzZC4uMWU2MzQyNjRhMzFiZDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2lmZGVmIF9fS0VSTkVMX19cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9iYXJyaWVyLmhcXHUwMDNlXFxuIFxcbiAvKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqL1xcbiBcXG5AQCAtODIsNyArODMsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwibW92bnRpcSAlMSwgJTBcXFwiXFxuK1xcdFxcdCAgICAgOiBcXFwiPW1cXFwiKCoodTY0ICopZHN0KVxcbitcXHRcXHQgICAgIDogXFxcInJcXFwiKCooY29uc3QgdTY0ICopc3JjKVxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV84KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzE2KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzE2KGRzdCArIDE2LCBzcmMgKyAxNik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzMyKGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGNudClcXG4ge1xcbiBcXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkge1xcbiBcXHRcXHRzd2l0Y2ggKGNudCkge1xcbkBAIC05NiwxMCArMTI1LDU3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKilkc3QpIDogXFxcInJcXFwiKCoodTY0ICopc3JjKSk7XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXFxcInJcXFwiKCoodTY0ICopKHNyYyArIDgpKSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxcbitcXHRcXHRcXHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxcbitcXHRcXHRcXHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXFxuK1xcdFxcdFxcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxcbitcXHRcXHRcXHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGNhc2UgMzI6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA0ODpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzE2KGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDgwOlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMTYoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDk2OlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuIFxcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuIH1cXG4rXFxuKyNkZWZpbmUgbWVtY3B5X250IG1lbWNweV9udFxcbisvKlxcbisgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbnQgY29weSBwcmltaXRpdmUuXFxuKyAqIENhbGxlcnMgcGFpciBpdCB3aXRoIG1lbWNweV9udF9kcmFpbigpIHdoZW4gbGF0ZXIgc3RvcmVzIG11c3QgYmVcXG4rICogb3JkZXJlZCBhZnRlciB0aGUgY29weS5cXG4rICovXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbnQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuK3tcXG4rXFx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuK31cXG4rXFxuKyNkZWZpbmUgbWVtY3B5X250X2RyYWluIG1lbWNweV9udF9kcmFpblxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogT3JkZXIgdGhlIHByaW9yIE1PVk5USSBzdG9yZXMgaXNzdWVkIGJ5IG1lbWNweV9mbHVzaGNhY2hlKClcXG4rXFx0ICogYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMuXFxuK1xcdCAqL1xcbitcXHR3bWIoKTtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxcbmluZGV4IDQ4NWRmOWMyZGJkZGIzLi40MzM0M2JmY2U0OTM2ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMjU0MSwxMSArMjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbiBcXHRwYWdlLVxcdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFxcdTAwMjYgU0VDVElPTlNfTUFTSykgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcXG4ge1xcbiBcXHRyZXR1cm4gKG1kZi5mIFxcdTAwM2VcXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFxcdTAwMjYgU0VDVElPTlNfTUFTSztcXG4gfVxcbiAjZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI3NjgsOSArMjc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9saW5rcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3R5cGUgem9uZSxcXG4ge1xcbiBcXHRzZXRfcGFnZV96b25lKHBhZ2UsIHpvbmUpO1xcbiBcXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xcbi0jaWZkZWYgU0VDVElPTl9JTl9QQUdFX0ZMQUdTXFxuLVxcdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XFxuLSNlbmRpZlxcbitcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbmluZGV4IDU3MDJkYWNhNDMyNmI3Li5hMTA5YjJmODZjYTZkMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbkBAIC0yNzgsNiArMjc4LDI5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgbWVtY3B5X250XFxuKy8qXFxuKyAqIG1lbWNweV9udCgpIHJlcXVlc3RzIGEgbm9uLXRlbXBvcmFsIGNvcHkgd2hlbiB0aGUgYXJjaGl0ZWN0dXJlIGhhcyBhXFxuKyAqIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgb3ZlcnJpZGUgaXQgZmFsbCBiYWNrIHRvXFxuKyAqIG1lbWNweSgpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcXG4re1xcbitcXHRtZW1jcHkoZHN0LCBzcmMsIGNudCk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbisjaWZuZGVmIG1lbWNweV9udF9kcmFpblxcbisvKlxcbisgKiBDYWxsZXJzIHVzZSBtZW1jcHlfbnRfZHJhaW4oKSBiZWZvcmUgbGF0ZXIgbm9ybWFsIHN0b3JlcyB0aGF0IG5lZWQgdG9cXG4rICogYmUgb3JkZXJlZCBhZnRlciBtZW1jcHlfbnQoKS4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGEgc3BlY2lhbGl6ZWRcXG4rICogYmFja2VuZCBjYW4gbGVhdmUgaXQgZW1wdHkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXFxuK3tcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcXG4gY2hhciAqc3RycmVwbGFjZShjaGFyICpzdHIsIGNoYXIgb2xkLCBjaGFyIG5ldyk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCAwZjY0OTA5ZThkMjBlMi4uYWRkYjQ5Njk1ODdlZmEgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTEwMDUsMTEgKzEwMDUsMzcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG4tc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbisvKlxcbisgKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBmcmVlIHBhdGggZm9yIHRoaXMgcGFnZW1hcCB0eXBlIHJlc3RvcmVzIHRoZSBwYWdlXFxuKyAqIHJlZmNvdW50IHRvIDEsIHNvIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgY2FuIGtlZXAgdGhlIGNvdW50IHNldCBieVxcbisgKiBfX2luaXRfc2luZ2xlX3BhZ2UoKS4gT3RoZXJ3aXNlIGluaXRpYWxpemUgdGhlIHJlZmNvdW50IHRvIDAgYW5kIGxlYXZlXFxuKyAqIGl0IHRvIHRoZSBhbGxvY2F0b3Igb3IgcGdtYXAgY2FsbGJhY2tzIHRvIHJhaXNlIGl0IHdoZW4gdGhlIHBhZ2UgaXNcXG4rICogaGFuZGVkIG91dCBhZ2Fpbi5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwYWdlbWFwX3Jlc2V0c19yZWZjb3VudChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXFxuK1xcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXFxuK1xcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4ge1xcbi1cXG4gXFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMDI4LDI3ICsxMDU0LDczIEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0ICovXFxuIFxcdHBhZ2VfZm9saW8ocGFnZSktXFx1MDAzZXBnbWFwID0gcGdtYXA7XFxuIFxcdHBhZ2UtXFx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuK1xcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuK3tcXG4rXFx0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuK1xcdGlmICghcGFnZW1hcF9yZXNldHNfcmVmY291bnQocGdtYXApKVxcbitcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4rfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCh2b2lkKVxcbit7XFxuIFxcdC8qXFxuLVxcdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcXG4tXFx0ICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudFxcbi1cXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cXG4tXFx0ICpcXG4tXFx0ICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZVxcbi1cXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxcbi1cXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cXG4rXFx0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcXG4rXFx0ICogaW5zdHJ1bWVudGVkLlxcbiBcXHQgKi9cXG4tXFx0c3dpdGNoIChwZ21hcC1cXHUwMDNldHlwZSkge1xcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcXG4tXFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuXFxuK1xcdCAqIFNraXAgaXQgd2hlbiB0aGUgcGFnZV9yZWZfc2V0IHRyYWNlcG9pbnQgaXMgZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4rXFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4rXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqICd0ZW1wbGF0ZScgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZVxcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XFxuKyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLVxcdTAwM2V2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmRcXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXFxuKyAqIGNvcHlpbmcgaXQgaW50byBAcGFnZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XFxuKyNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxcbitcXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcXG4rXFx0XFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogJ3RlbXBsYXRlJyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxcbitcXHQgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0XFxuK1xcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxcbitcXHQgKi9cXG4rXFx0em9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7XFxuK1xcdG1lbWNweV9udChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTEwNzksMTAgKzExNTEsMTIgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgdXNlX3RlbXBsYXRlKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gKyBucl9wYWdlcztcXG4gXFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXFx1MDAzZXZtZW1tYXBfc2hpZnQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cXG5AQCAtMTA5MSwxMyArMTE2NSwzOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4gXFx0ICogdGhlIHBhZ2VzIGluIHRoZSBzYW1lIGdvLlxcbiBcXHQgKi9cXG4gXFx0X19TZXRQYWdlSGVhZChoZWFkKTtcXG4rXFxuIFxcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4rKykge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuIFxcbi1cXHRcXHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4tXFx0XFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcXG4tXFx0XFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XFxuK1xcdFxcdGlmICghdXNlX3RlbXBsYXRlKSB7XFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcGdtYXAsIGhlYWQsIG9yZGVyKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChwZm4gPT0gaGVhZF9wZm4gKyAxKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxcbitcXHRcXHRcXHQgKiBzdGF0ZSBlc3RhYmxpc2hlZCBieSBwcmVwX2NvbXBvdW5kX3RhaWwoKS4gUmV1c2VcXG4rXFx0XFx0XFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcXG4rXFx0XFx0XFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XFxuK1xcdFxcdFxcdCAqIHRlbXBsYXRlIGJlZm9yZSBlYWNoIGNvcHkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHBnbWFwLCBoZWFkLCBvcmRlcik7XFxuK1xcdFxcdFxcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgdGFpbC1wYWdlIGNvcGllc1xcbitcXHQgKiBiZWZvcmUgcHJlcF9jb21wb3VuZF9oZWFkKCkgdXBkYXRlcyB0aGUgb3ZlcmxhcHBpbmcgY29tcG91bmQgbWV0YWRhdGFcXG4rXFx0ICogaW4gdGhlIGZpcnN0IHRhaWwtcGFnZSBkZXNjcmlwdG9ycy4gSWYgbWVtY3B5X250KCkgZmVsbCBiYWNrIHRvXFxuK1xcdCAqIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcywgbWVtY3B5X250X2RyYWluKCkgbWF5IGJlIGEgbm8tb3AuXFxuK1xcdCAqL1xcbitcXHRpZiAodXNlX3RlbXBsYXRlKVxcbitcXHRcXHRtZW1jcHlfbnRfZHJhaW4oKTtcXG4gXFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcXG4gfVxcbiBcXG5AQCAtMTEwNiw2ICsxMjA2LDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4ge1xcbitcXHRib29sIHVzZV90ZW1wbGF0ZSA9IHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCgpO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIG5yX3BhZ2VzO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS1cXHUwMDNlem9uZV9wZ2RhdDtcXG4gXFx0c3RydWN0IHZtZW1fYWx0bWFwICphbHRtYXAgPSBwZ21hcF9hbHRtYXAocGdtYXApO1xcbkBAIC0xMTEzLDYgKzEyMTQsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xcbiBcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTExMzAsNyArMTIzMiwyNCBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gXFxuLVxcdFxcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRcXHRpZiAoIXVzZV90ZW1wbGF0ZSkge1xcbitcXHRcXHRcXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBuaWQsIHBnbWFwKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xcbitcXHRcXHRcXHQgKiBwYWdlLWluaXQgYW5kIHBhZ2VibG9jayBoZWxwZXJzIGV4cGVjdCBhIHJlYWxcXG4rXFx0XFx0XFx0ICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbmlkLCBwZ21hcCk7XFxuK1xcdFxcdFxcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbkBAIC0xMTM4LDkgKzEyNTcsMjYgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0XFx0aWYgKHBmbnNfcGVyX2NvbXBvdW5kID09IDEpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogV2hlbiB0aGUgdGVtcGxhdGUgcGF0aCBpcyBlbmFibGVkLCBvcmRlciB0aGUgcHJlY2VkaW5nIGhlYWQtcGFnZSBjb3B5XFxuK1xcdFxcdCAqIGJlZm9yZSBtZW1tYXBfaW5pdF9jb21wb3VuZCgpLCB3aGljaCBpbW1lZGlhdGVseSB1cGRhdGVzIGNvbXBvdW5kLWhlYWRcXG4rXFx0XFx0ICogbWV0YWRhdGEuIElmIG1lbWNweV9udCgpIGZlbGwgYmFjayB0byByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXFxuK1xcdFxcdCAqIG1lbWNweV9udF9kcmFpbigpIG1heSBiZSBhIG5vLW9wLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHVzZV90ZW1wbGF0ZSlcXG4rXFx0XFx0XFx0bWVtY3B5X250X2RyYWluKCk7XFxuK1xcbiBcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCkpO1xcbitcXHRcXHRcXHRcXHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCksXFxuK1xcdFxcdFxcdFxcdCAgICAgdXNlX3RlbXBsYXRlKTtcXG4gXFx0fVxcbitcXHQvKlxcbitcXHQgKiBFbnN1cmUgYW55IHByaW9yIHRlbXBsYXRlIGNvcGllcyBhcmUgb3JkZXJlZCBiZWZvcmUgcmV0dXJuaW5nLlxcbitcXHQgKiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIG1lbWNweV9udCgpIHVzZWQgcmVndWxhciBjYWNoZWQgc3RvcmVzLFxcbitcXHQgKiBtZW1jcHlfbnRfZHJhaW4oKSBtYXkgYmUgYSBuby1vcC5cXG4rXFx0ICovXFxuK1xcdGlmICh1c2VfdGVtcGxhdGUpXFxuK1xcdFxcdG1lbWNweV9udF9kcmFpbigpO1xcbiBcXG4gXFx0cGFnZWJsb2NrX21pZ3JhdGV0eXBlX2luaXRfcmFuZ2Uoc3RhcnRfcGZuLCBucl9wYWdlcywgTUlHUkFURV9NT1ZBQkxFKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjM5OjUyLjk5MTc0ODY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTUyMDE5Njc3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtcmVtYXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgaW5pdGlhbGl6aW5nIFpPTkVfREVWSUNFIG1lbW9yeSBwYWdlcyB1c2luZyBub24tdGVtcG9yYWwgbWVtb3J5IGNvcGllcyAobWVtY3B5X250KS4gSXQgYWxzbyBhZGRzIGlubGluZSBvcHRpbWl6YXRpb25zIGZvciBtZW1jcHlfZmx1c2hjYWNoZSBvbiB4ODZfNjQuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN0cmluZyBjb3B5IHJvdXRpbmVzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgZGV2aWNlIG1lbW9yeSBpbml0aWFsaXphdGlvbiAoZS5nLiwgREFYLCBwbWVtKS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGFuZCB0aGUgb3B0aW1pemVkIG1lbW9yeSBjb3B5IHJvdXRpbmVzIGRvIG5vdCBpbnRyb2R1Y2UgbWVtb3J5IGNvcnJ1cHRpb24gb3IgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTdiODZlY2U1NWZiMWY4ZGM2MDQxNWFkMGE3ZjJjNjZhNzdjNDI0M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDA2OjM5OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLjFlNjM0MjY0YTMxYmQyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtNCw2ICs0LDcgQEBcbiBcbiAjaWZkZWYgX19LRVJORUxfX1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiBcbiAvKiBXcml0dGVuIDIwMDIgYnkgQW5kaSBLbGVlbiAqL1xuIFxuQEAgLTgyLDcgKzgzLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRhc20gdm9sYXRpbGUoXCJtb3ZudGlxICUxLCAlMFwiXG4rXHRcdCAgICAgOiBcIj1tXCIoKih1NjQgKilkc3QpXG4rXHRcdCAgICAgOiBcInJcIigqKGNvbnN0IHU2NCAqKXNyYylcbitcdFx0ICAgICA6IFwibWVtb3J5XCIpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV84KGRzdCwgc3JjKTtcbitcdG1vdm50aV84KGRzdCArIDgsIHNyYyArIDgpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8xNihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMTYoZHN0ICsgMTYsIHNyYyArIDE2KTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuK1x0bW92bnRpXzMyKGRzdCArIDMyLCBzcmMgKyAzMik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbitcdFx0XHRcdFx0ICAgICAgc2l6ZV90IGNudClcbiB7XG4gXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkge1xuIFx0XHRzd2l0Y2ggKGNudCkge1xuQEAgLTk2LDEwICsxMjUsNTcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3RcbiBcdFx0XHRcdGFzbSAoXCJtb3ZudGlxICUxLCAlMFwiIDogXCI9bVwiKCoodTY0ICopZHN0KSA6IFwiclwiKCoodTY0ICopc3JjKSk7XG4gXHRcdFx0XHRhc20gKFwibW92bnRpcSAlMSwgJTBcIiA6IFwiPW1cIigqKHU2NCAqKShkc3QgKyA4KSkgOiBcInJcIigqKHU2NCAqKShzcmMgKyA4KSkpO1xuIFx0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxuK1x0XHRcdCAqIHg4Nl82NCBzdHJ1Y3QgcGFnZSBzaXplczogNjQsIDgwLCBhbmQgOTYgYnl0ZXMuXG4rXHRcdFx0ICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbFxuK1x0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuK1x0XHRcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGNhc2UgMzI6XG4rXHRcdFx0XHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgNDg6XG4rXHRcdFx0XHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuK1x0XHRcdFx0bW92bnRpXzE2KGRzdCArIDMyLCBzcmMgKyAzMik7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA2NDpcbitcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA4MDpcbitcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4rXHRcdFx0XHRtb3ZudGlfMTYoZHN0ICsgNjQsIHNyYyArIDY0KTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDk2OlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdG1vdm50aV8zMihkc3QgKyA2NCwgc3JjICsgNjQpO1xuK1x0XHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4rXG4gXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbitcbisjZGVmaW5lIG1lbWNweV9udCBtZW1jcHlfbnRcbisvKlxuKyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBudCBjb3B5IHByaW1pdGl2ZS5cbisgKiBDYWxsZXJzIHBhaXIgaXQgd2l0aCBtZW1jcHlfbnRfZHJhaW4oKSB3aGVuIGxhdGVyIHN0b3JlcyBtdXN0IGJlXG4rICogb3JkZXJlZCBhZnRlciB0aGUgY29weS5cbisgKi9cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuK3tcbitcdG1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuK31cbitcbisjZGVmaW5lIG1lbWNweV9udF9kcmFpbiBtZW1jcHlfbnRfZHJhaW5cbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXG4re1xuK1x0LypcbitcdCAqIE9yZGVyIHRoZSBwcmlvciBNT1ZOVEkgc3RvcmVzIGlzc3VlZCBieSBtZW1jcHlfZmx1c2hjYWNoZSgpXG4rXHQgKiBiZWZvcmUgbGF0ZXIgbm9ybWFsIHN0b3Jlcy5cbitcdCAqL1xuK1x0d21iKCk7XG4rfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLFxuIHtcbiBcdHNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7XG4gXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xuLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1Ncbi1cdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4tI2VuZGlmXG4rXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uYTEwOWIyZjg2Y2E2ZDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X250XG4rLypcbisgKiBtZW1jcHlfbnQoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlIGFyY2hpdGVjdHVyZSBoYXMgYVxuKyAqIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgb3ZlcnJpZGUgaXQgZmFsbCBiYWNrIHRvXG4rICogbWVtY3B5KCkuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9udCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudClcbit7XG4rXHRtZW1jcHkoZHN0LCBzcmMsIGNudCk7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZm5kZWYgbWVtY3B5X250X2RyYWluXG4rLypcbisgKiBDYWxsZXJzIHVzZSBtZW1jcHlfbnRfZHJhaW4oKSBiZWZvcmUgbGF0ZXIgbm9ybWFsIHN0b3JlcyB0aGF0IG5lZWQgdG9cbisgKiBiZSBvcmRlcmVkIGFmdGVyIG1lbWNweV9udCgpLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYSBzcGVjaWFsaXplZFxuKyAqIGJhY2tlbmQgY2FuIGxlYXZlIGl0IGVtcHR5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1jcHlfbnRfZHJhaW4odm9pZClcbit7XG4rfVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZGRiNDk2OTU4N2VmYSAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSArMTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbisvKlxuKyAqIFJldHVybiB0cnVlIHdoZW4gdGhlIGZyZWUgcGF0aCBmb3IgdGhpcyBwYWdlbWFwIHR5cGUgcmVzdG9yZXMgdGhlIHBhZ2VcbisgKiByZWZjb3VudCB0byAxLCBzbyBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIGNhbiBrZWVwIHRoZSBjb3VudCBzZXQgYnlcbisgKiBfX2luaXRfc2luZ2xlX3BhZ2UoKS4gT3RoZXJ3aXNlIGluaXRpYWxpemUgdGhlIHJlZmNvdW50IHRvIDAgYW5kIGxlYXZlXG4rICogaXQgdG8gdGhlIGFsbG9jYXRvciBvciBwZ21hcCBjYWxsYmFja3MgdG8gcmFpc2UgaXQgd2hlbiB0aGUgcGFnZSBpc1xuKyAqIGhhbmRlZCBvdXQgYWdhaW4uXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4re1xuK1x0LypcbitcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4rXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxuK1x0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxuK1x0ICovXG4rXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiB7XG4tXG4gXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcbiBcbiBcdC8qXG5AQCAtMTAyOCwyNyArMTA1NCw3MyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbit7XG4rXHRfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdGlmICghcGFnZW1hcF9yZXNldHNfcmVmY291bnQocGdtYXApKVxuK1x0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbit9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCh2b2lkKVxuK3tcbiBcdC8qXG4tXHQgKiBaT05FX0RFVklDRSBwYWdlcyBvdGhlciB0aGFuIE1FTU9SWV9UWVBFX0dFTkVSSUMgYXJlIHJlbGVhc2VkXG4tXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XG4tXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cbi1cdCAqXG4tXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXG4tXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxuLVx0ICogdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMCkuXG4rXHQgKiBLZWVwIHNhbml0aXplZCBidWlsZHMgb24gdGhlIHNsb3cgcGF0aCBzbyB0aGVpciBzdG9yZXMgc3RheVxuK1x0ICogaW5zdHJ1bWVudGVkLlxuIFx0ICovXG4tXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbi1cdFx0YnJlYWs7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4tXHRcdGJyZWFrO1xuLVx0fVxuK1x0LypcbitcdCAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuXG4rXHQgKiBTa2lwIGl0IHdoZW4gdGhlIHBhZ2VfcmVmX3NldCB0cmFjZXBvaW50IGlzIGVuYWJsZWQuXG4rXHQgKi9cbitcdGlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXG4rXHRcdHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbit9XG4rXG4rLypcbisgKiAndGVtcGxhdGUnIGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XG4rICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXG4rICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4rXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbitcdFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0LypcbitcdCAqICd0ZW1wbGF0ZScgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbitcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbitcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuK1x0ICovXG4rXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbitcdG1lbWNweV9udChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4gfVxuIFxuIC8qXG5AQCAtMTA3OSwxMCArMTE1MSwxMiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcbi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4rXHRcdFx0XHQgICAgICAgYm9vbCB1c2VfdGVtcGxhdGUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMyArMTE2NSwzOSBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbiBcdCAqL1xuIFx0X19TZXRQYWdlSGVhZChoZWFkKTtcbitcbiBcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbisrKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4tXHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0XHRpZiAoIXVzZV90ZW1wbGF0ZSkge1xuK1x0XHRcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcbitcdFx0XHRcdFx0XHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xuK1x0XHR9IGVsc2UgaWYgKHBmbiA9PSBoZWFkX3BmbiArIDEpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEFsbCB0YWlscyBvZiB0aGUgc2FtZSBjb21wb3VuZCBwYWdlIHNoYXJlIHRoZVxuK1x0XHRcdCAqIHN0YXRlIGVzdGFibGlzaGVkIGJ5IHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZVxuK1x0XHRcdCAqIG9uZSB0YWlsIHRlbXBsYXRlIGZvciB0aGUgd2hvbGUgcmFuZ2UgYW5kXG4rXHRcdFx0ICogcmVmcmVzaCBvbmx5IHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGF0XG4rXHRcdFx0ICogdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS5cbitcdFx0XHQgKi9cbitcdFx0XHR6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsXG4rXHRcdFx0XHRcdFx0ICAgcGdtYXAsIGhlYWQsIG9yZGVyKTtcbitcdFx0XHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cbitcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbitcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4rXHRcdH1cbiBcdH1cbitcbitcdC8qXG4rXHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgdGFpbC1wYWdlIGNvcGllc1xuK1x0ICogYmVmb3JlIHByZXBfY29tcG91bmRfaGVhZCgpIHVwZGF0ZXMgdGhlIG92ZXJsYXBwaW5nIGNvbXBvdW5kIG1ldGFkYXRhXG4rXHQgKiBpbiB0aGUgZmlyc3QgdGFpbC1wYWdlIGRlc2NyaXB0b3JzLiBJZiBtZW1jcHlfbnQoKSBmZWxsIGJhY2sgdG9cbitcdCAqIHJlZ3VsYXIgY2FjaGVkIHN0b3JlcywgbWVtY3B5X250X2RyYWluKCkgbWF5IGJlIGEgbm8tb3AuXG4rXHQgKi9cbitcdGlmICh1c2VfdGVtcGxhdGUpXG4rXHRcdG1lbWNweV9udF9kcmFpbigpO1xuIFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbiB9XG4gXG5AQCAtMTEwNiw2ICsxMjA2LDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuIHtcbitcdGJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIG5yX3BhZ2VzO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbiBcdHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwID0gcGdtYXBfYWx0bWFwKHBnbWFwKTtcbkBAIC0xMTEzLDYgKzEyMTQsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTEzMCw3ICsxMjMyLDI0IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdFx0aWYgKCF1c2VfdGVtcGxhdGUpIHtcbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuK1x0XHRcdFx0XHRcdCAgIG5pZCwgcGdtYXApO1xuK1x0XHR9IGVsc2UgaWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxuK1x0XHRcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UsIGJlY2F1c2UgdGhlIGV4aXN0aW5nXG4rXHRcdFx0ICogcGFnZS1pbml0IGFuZCBwYWdlYmxvY2sgaGVscGVycyBleHBlY3QgYSByZWFsXG4rXHRcdFx0ICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsXG4rXHRcdFx0XHRcdFx0ICAgbmlkLCBwZ21hcCk7XG4rXHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4rXHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTExMzgsOSArMTI1NywyNiBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRpZiAocGZuc19wZXJfY29tcG91bmQgPT0gMSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0LypcbitcdFx0ICogV2hlbiB0aGUgdGVtcGxhdGUgcGF0aCBpcyBlbmFibGVkLCBvcmRlciB0aGUgcHJlY2VkaW5nIGhlYWQtcGFnZSBjb3B5XG4rXHRcdCAqIGJlZm9yZSBtZW1tYXBfaW5pdF9jb21wb3VuZCgpLCB3aGljaCBpbW1lZGlhdGVseSB1cGRhdGVzIGNvbXBvdW5kLWhlYWRcbitcdFx0ICogbWV0YWRhdGEuIElmIG1lbWNweV9udCgpIGZlbGwgYmFjayB0byByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXG4rXHRcdCAqIG1lbWNweV9udF9kcmFpbigpIG1heSBiZSBhIG5vLW9wLlxuK1x0XHQgKi9cbitcdFx0aWYgKHVzZV90ZW1wbGF0ZSlcbitcdFx0XHRtZW1jcHlfbnRfZHJhaW4oKTtcbitcbiBcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbi1cdFx0XHRcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XG4rXHRcdFx0XHQgICAgIGNvbXBvdW5kX25yX3BhZ2VzKHBmbiwgYWx0bWFwLCBwZ21hcCksXG4rXHRcdFx0XHQgICAgIHVzZV90ZW1wbGF0ZSk7XG4gXHR9XG4rXHQvKlxuK1x0ICogRW5zdXJlIGFueSBwcmlvciB0ZW1wbGF0ZSBjb3BpZXMgYXJlIG9yZGVyZWQgYmVmb3JlIHJldHVybmluZy5cbitcdCAqIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgbWVtY3B5X250KCkgdXNlZCByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXG4rXHQgKiBtZW1jcHlfbnRfZHJhaW4oKSBtYXkgYmUgYSBuby1vcC5cbitcdCAqL1xuK1x0aWYgKHVzZV90ZW1wbGF0ZSlcbitcdFx0bWVtY3B5X250X2RyYWluKCk7XG4gXG4gXHRwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZShzdGFydF9wZm4sIG5yX3BhZ2VzLCBNSUdSQVRFX01PVkFCTEUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6Mzk6NTIuOTkxNzUxMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM0NzA5NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFpbXMgdG8gb3B0aW1pemUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gVGhleSdyZSBkb2luZyB0aGlzIHdpdGggYSB0ZW1wbGF0ZSBhbmQgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgdXNpbmcgYG1lbWNweV9udGAuIEludGVyZXN0aW5nIGFwcHJvYWNoLiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBhIGZldyBrZXkgYXJlYXM6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAsIGFuZCBgbW0vbW1faW5pdC5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaGVhZGVyIGRlZmluaXRpb25zIGZvciB0aGUgYXJjaGl0ZWN0dXJlLCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGRlZmluaXRpb25zLCBhbmQgdGhlbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgKmNhbiogd2UgcmVhbGlzdGljYWxseSB0ZXN0IHRoaXM/IFRoZSBwYXRjaCB0b3VjaGVzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIHNvIGl0J3MgY2FsbGVkIGR1cmluZyBaT05FX0RFVklDRSBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFpPTkVfREVWSUNFPyBSaWdodCwgdGhhdCdzIERBWCwgcG1lbSwgdGhvc2Uga2luZHMgb2YgZGV2aWNlcy4gTm93LCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBIbW0uLi4geWVhaCwgd2l0aCBgbmRfcG1lbWAgb3Igc2ltaWxhciBkcml2ZXJzLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBzaW11bGF0ZSBpdC4gR29vZCwgZ29vZCwgdGhhdCBvcGVucyB1cCB0ZXN0aW5nIHNpZ25pZmljYW50bHkuIFdhaXQgYSBzZWNvbmQuLi4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBhbHNvIGNhbGxlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgZm9yIFpPTkVfREVWSUNFISBUaGF0IGJyb2FkZW5zIHRoZSB0ZXN0aW5nIHdpbmRvdyBldmVuIGZ1cnRoZXIsIHdoaWNoIGlzIGV4Y2VsbGVudC5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXTigJlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gQW55IG9wdGltaXphdGlvbiBoZXJlLCBlc3BlY2lhbGx5IGludm9sdmluZyBsb3ctbGV2ZWwgbWVtb3J5IG9wZXJhdGlvbnMsIGhhcyB0aGUgcG90ZW50aWFsIGZvciBuYXN0eSBzaWRlIGVmZmVjdHMgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYnVncy4gVGltZSB0byBkaWcgaW50byB0aGUgY2FsbGVycyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBzdGFydCBsb29raW5nIGZvciBpbnRlcmVzdGluZyB0ZXN0IGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6Mzk6NTguNTI2NDYyNjQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDk0Mzk3MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMzExPXN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjAtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMzIxOmV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzIyLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjQxLVxcdCAqL1xcbm1tL21lbXJlbWFwLmM6MjQyOlxcdG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKFxcdTAwMjZOT0RFX0RBVEEobmlkKS1cXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV0sXFxubW0vbWVtcmVtYXAuYy0yNDMtXFx0XFx0XFx0XFx0UEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG4tLVxcbm1tL21tX2luaXQuYz05Njg9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMTAwOS0gKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBmcmVlIHBhdGggZm9yIHRoaXMgcGFnZW1hcCB0eXBlIHJlc3RvcmVzIHRoZSBwYWdlXFxubW0vbW1faW5pdC5jOjEwMTA6ICogcmVmY291bnQgdG8gMSwgc28gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBjYW4ga2VlcCB0aGUgY291bnQgc2V0IGJ5XFxubW0vbW1faW5pdC5jLTEwMTEtICogX19pbml0X3NpbmdsZV9wYWdlKCkuIE90aGVyd2lzZSBpbml0aWFsaXplIHRoZSByZWZjb3VudCB0byAwIGFuZCBsZWF2ZVxcbi0tXFxubW0vbW1faW5pdC5jPTExNTA9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIwMy1cXG5tbS9tbV9pbml0LmM6MTIwNDp2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbm1tL21tX2luaXQuYy0xMjA1LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDowMi42NzU5MDgzNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAwNzk5NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBwYWdlbWFwX3JhbmdlYCBDYWxsZXJzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gc29tZXRoaW5nIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGBwYWdlbWFwX3JhbmdlYCB3aXRoaW4gYG1tL21lbXJlbWFwLmNgLiBUaGF0IGZ1bmN0aW9uJ3MgcHJldHR5IGZ1bmRhbWVudGFsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIHdoZXJlIGBwYWdlbWFwX3JhbmdlYCBpcyBiZWluZyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGltbWVkaWF0ZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBpbnNpZ2h0IGludG8gKndoeSogaXQncyBiZWluZyB1c2VkIGFuZCwgdGhlcmVmb3JlLCB0aGUgbmF0dXJlIG9mIHRoZSBwcm9ibGVtIG9yIHRhc2sgYXQgaGFuZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNhbGwgZ3JhcGggcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjA2LjI3NjcxMDI0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU2OTc2NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VtYXBfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcmVtYXAuYz0xMzc9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTQzLVxcbm1tL21lbXJlbWFwLmM6MTQ0OnN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbm1tL21lbXJlbWFwLmMtMTQ1LVxcdFxcdGludCByYW5nZV9pZCwgaW50IG5pZClcXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTMzNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2U7IGkrKykge1xcbm1tL21lbXJlbWFwLmM6MzM4OlxcdFxcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcXG5tbS9tZW1yZW1hcC5jLTMzOS1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjEwLjgzMzY5MjE2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTQ1OTg0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbXJlbWFwX3BhZ2VzYCBVc2FnZSoqXG5cblJpZ2h0LCBgbWVtcmVtYXBfcGFnZXNgLi4uIHRoYXQgZnVuY3Rpb24gaXMgYSBrZXlzdG9uZSwgaXNuJ3QgaXQ/IFRoZSBzaGVlciBudW1iZXIgb2YgZHJpdmVycyB0aGF0IGNhbGwgaW50byBpdCBpcyBpbW1lZGlhdGVseSBhIHJlZCBmbGFnIOKAkyBvciwgcmF0aGVyLCBhIHBvaW50IG9mIHNpZ25pZmljYW50IGludGVyZXN0LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicmVhZHRoIG9mIGl0cyBpbXBhY3QuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYWxsIHR5cGVzIG9mIGRyaXZlcnMuIFdoYXQgYXJlIHRoZSBjb21tb24gdXNlLWNhc2VzPyBJcyBpdCBtZW1vcnkgbWFwcGluZyBmb3IgZGV2aWNlIGFjY2Vzcz8gRE1BIHRyYW5zZmVycz8gVmlydHVhbCBhZGRyZXNzIG1hbmlwdWxhdGlvbj8gRWFjaCBkcml2ZXIncyBtb3RpdmF0aW9uIGJlaGluZCBjYWxsaW5nIGBtZW1yZW1hcF9wYWdlc2AgYWRkcyBhIGxheWVyIG9mIGNvbXBsZXhpdHkuIEknbGwgd2FudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29udGV4dCB3aXRoaW4gZWFjaCBjYWxsZXIsIHRoZSBzcGVjaWZpYyBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgb2YgaG93IGl0J3MgYmVpbmcgdXNlZC4gQW55IHN1YnRsZSBtaXN1c2Ugb3IgdW5pbnRlbmRlZCBiZWhhdmlvciBpbiBgbWVtcmVtYXBfcGFnZXNgIGNvdWxkIHByb3BhZ2F0ZSBpc3N1ZXMgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBoYXJkd2FyZSBhbmQgc29mdHdhcmUgY29tcG9uZW50cy4gVGhpcyByZXF1aXJlcyBzb21lIGRlZXAgZGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyOTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDoxNC4wMjgyOTMwNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3OTMwNjk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1yZW1hcF9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjc0PVRoZXNlIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIHdpdGg6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4NS0gICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI4NjogICAgbWVtcmVtYXBfcGFnZXMoXFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5MC1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjkxOlRoZXJlIGFyZSBhbHNvIGRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTItZGV2bV9tZW11bm1hcF9wYWdlcygpLCBhbmQgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSB3aGVuIHRoZSByZXNvdXJjZXMgY2FuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTQxPXRvIGtlZXAgdGhlIG1lbW9yeSBwaW5uZWQgZm9yIGFjdGl2ZSB1c2UuIGBaT05FX0RFVklDRWAsIHZpYVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNDI6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AsIHBlcmZvcm1zIGp1c3QgZW5vdWdoIG1lbW9yeSBob3RwbHVnIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE0My10dXJuIG9uIDpjOmZ1bmM6YHBmbl90b19wYWdlYCwgOmM6ZnVuYzpgcGFnZV90b19wZm5gLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNTc9bWVtb3J5IGhvdHBsdWcuIFN1Yi1zZWN0aW9uIHN1cHBvcnQgYWxsb3dzIGZvciAyTUIgYXMgdGhlIGNyb3NzLWFyY2hcXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTU4OmNvbW1vbiBhbGlnbm1lbnQgZ3JhbnVsYXJpdHkgZm9yIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLlxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzYtICAgIHBhZ2VtYXAub3BzID0gXFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjM3OiAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNDI66L+Y5pyJZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDMtZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MTA3PVpPTkVfREVWSUNFXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMS3kuovlrp7mnInlhbPvvJrov5nkupvlnLDlnYDojIPlm7TnmoTpobXpnaLlr7nosaHku47mnKrooqvlnKjnur/moIforrDov4fvvIzogIzkuJTlv4Xpobvlr7norr7lpIfov5vooYzlvJXnlKjvvIzogIzkuI3ku4Xku4VcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjExMjrmmK/pobXpnaLvvIzku6Xkv53mjIHlhoXlrZjooqvigJzplIHlrprigJ3ku6Xkvr/kvb/nlKjjgIIgYFpPTkVfREVWSUNFYCDvvIzpgJrov4cgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTMt5Li657uZ5a6a55qEcGZuc+iMg+WbtOaJp+ihjOi2s+Wkn+eahOWGheWtmOeDreaPkuaLlOadpeW8gOWQryA6YzpmdW5jOmBwZm5fdG9fcGFnZWDvvIxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTIyLTpjOmZ1bmM6YGFyY2hfYWRkX21lbW9yeWAg77yM5Y2z5YaF5a2Y54Ot5o+S5ouU55qE5LiK5Y2K6YOo5YiG44CC5a2Q5q615pSv5oyB5YWB6K64Mk1C5L2c5Li6XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMjM6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag55qE6Leo5p625p6E6YCa55So5a+56b2Q6aKX57KS5bqm44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjQtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTExNTg9aW50IGt2bXBwY191dm1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODktXFx0a3ZtcHBjX3V2bWVtX3BnbWFwLm93bmVyID0gXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjExOTA6XFx0YWRkciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXAsIE5VTUFfTk9fTk9ERSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTkxLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjQ9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzYtXFx0LypcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6OTc3OlxcdCAqIFNwZWNpYWwgY2FzZTogYWRkX3BhZ2VzKCkgaXMgY2FsbGVkIGJ5IG1lbXJlbWFwX3BhZ2VzKCkgZm9yIGFkZGluZyBkZXZpY2VcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc4LVxcdCAqIHByaXZhdGUgcGFnZXMuIERvIG5vdCBidW1wIHVwIG1heF9wZm4gaW4gdGhlIGRldmljZSBwcml2YXRlIHBhdGgsXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM0LVxcdFxcdFxcdG9yZGVyX2Jhc2VfMihkZXZfZGF4LVxcdTAwM2VhbGlnbiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM2LVxcdGlmIChJU19FUlIoYWRkcikpXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jPTIwNz1zdGF0aWMgaW50IGZzZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjczLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mjc0OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjc1LVxcdGlmIChJU19FUlIoYWRkcikpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTEwMjY9aW50IGtnZDJrZmRfaW5pdF96b25lX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNjg6XFx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cXHUwMDNlZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY5LVxcdGlmIChJU19FUlIocikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI5Nj1ub3V2ZWF1X2RtZW1fY2h1bmtfYWxsb2Moc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sIHN0cnVjdCBwYWdlICoqcHBhZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMzItXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MzMzOlxcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZjaHVuay1cXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzNC1cXHRpZiAoSVNfRVJSKHB0cikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzYwPXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMS1cXHRwYWdlbWFwLVxcdTAwM2VvcHMgPSBkcm1fcGFnZW1hcF9wYWdlbWFwX29wc19nZXQoKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTgwMjpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAzLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTM4MT1zdGF0aWMgaW50IG1zaHZfdnRsX2lvY3RsX2FkZF92dGwwX21lbShzdHJ1Y3QgbXNodl92dGwgKnZ0bCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMC1cXHQgKiBUaGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgcmFuZ2UgaXMgYWxpZ25lZDsgaS5lLiBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGxlbmd0aC5cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MTE6XFx0ICogQ2xhbXAgdG8gTUFYX0ZPTElPX09SREVSIHRvIGF2b2lkIGEgV0FSTiBpbiBtZW1yZW1hcF9wYWdlcygpIHdoZW4gdGhlIHJhbmdlXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEyLVxcdCAqIGFsaWdubWVudCBleGNlZWRzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBmb2xpbyBvcmRlciBmb3IgdGhpcyBrZXJuZWwgY29uZmlnLlxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDE5LVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMDpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIxLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjI6XFx0XFx0ZGV2X2Vycih2dGwtXFx1MDAzZW1vZHVsZV9kZXYsIFxcXCJkZXZtX21lbXJlbWFwX3BhZ2VzIGVycm9yOiAlbGRcXFxcblxcXCIsIFBUUl9FUlIoYWRkcikpO1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQyMy1cXHRcXHRrZnJlZShwZ21hcCk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUxLVxcdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxNTI6XFx0ICBjb3JlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBpbXBsZW1lbnRhdGlvbiBhbmQgb3RoZXJcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cXHQgIGluZnJhc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxNy1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUxODpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxOS1cXHRcXHRwZm5fc2IgPSBuZF9wZm4tXFx1MDAzZXBmbl9zYjtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzAtXFx0XFx0cG1lbS1cXHUwMDNlcGdtYXAub3BzID0gXFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MzE6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcXHUwMDI2cG1lbS1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXFx0XFx0YmJfcmFuZ2UgPSBwbWVtLVxcdTAwM2VwZ21hcC5yYW5nZTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9OTM0PUVYUE9SVF9TWU1CT0wobmRfcmVnaW9uX3JlbGVhc2VfbGFuZSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTkzNi0vKlxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6OTM3OiAqIFBvd2VyUEMgcmVxdWlyZXMgdGhpcyBhbGlnbm1lbnQgZm9yIG1lbXJlbWFwX3BhZ2VzKCkuIEFsbCBvdGhlciBhcmNoc1xcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM4LSAqIHNob3VsZCBiZSBvayB3aXRoIFNVQlNFQ1RJT05fU0laRSAoc2VlIG1lbXJlbWFwX2NvbXBhdF9hbGlnbigpKS5cXG4tLVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jPTM4Nz1pbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLFxcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM2LVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQzNzpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTYtXFx0XFx0ZGV2X2luZm8tXFx1MDAzZXBnbWFwLm5yX3JhbmdlXFx0PSAxO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM6Njk3OlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlZGV2LCBcXHUwMDI2ZGV2X2luZm8tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5OC1cXHRcXHRpZiAoSVNfRVJSKGFkZHIpKSB7XFxuLS1cXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jPTM3PXN0YXRpYyBpbnQgZmlsbF9saXN0KHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTIzLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM6MTI0OlxcdHZhZGRyID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIE5VTUFfTk9fTk9ERSk7XFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjUtXFx0aWYgKElTX0VSUih2YWRkcikpIHtcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3Nj1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE2LVxcdC8qIElkZWFsbHkgd2Ugd291bGQgZGlyZWN0bHkgdXNlIHRoZSBQQ0kgQkFSIHJlc291cmNlIGJ1dFxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcXHQgKiBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2FudHMgaXRzIG93biBjb3B5IGluIHBnbWFwLiAgU29cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTgtXFx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjYtXFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3OlxcdGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZ2ZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjgtXFx0aWYgKElTX0VSUihmcy1cXHUwMDNld2luZG93X2thZGRyKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTUtICogQGFsdG1hcDogcHJlLWFsbG9jYXRlZC9yZXNlcnZlZCBtZW1vcnkgZm9yIHZtZW1tYXAgYWxsb2NhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNy0gKiBAZG9uZTogY29tcGxldGlvbiBmb3IgQHJlZlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIyNz12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjI4LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIyOTp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMwLXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIzMTp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIzMi12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjQtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY1OnN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2Ni1cXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2OC1cXHQvKlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjk6XFx0ICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI3MC1cXHQgKiBaT05FX0RFVklDRSBzdXBwb3J0IGVuYWJsZWQsIHRoaXMgcmVxdWlyZXMgY2FsbGVycyB0byBmYWxsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Mjg3PXN0YXRpYyBpbmxpbmUgYm9vbCBwZ21hcF9wZm5fdmFsaWQoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgdW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkxLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyOTI6Lyogd2hlbiBtZW1yZW1hcF9wYWdlcygpIGlzIGRpc2FibGVkIGFsbCBhcmNocyBjYW4gcmVtYXAgYSBzaW5nbGUgcGFnZSAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTMtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbXJlbWFwX2NvbXBhdF9hbGlnbih2b2lkKVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXFxuLS1cXG5saWIvdGVzdF9obW0uYy02MTUtXFx0fVxcbmxpYi90ZXN0X2htbS5jOjYxNjpcXHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2ZGV2bWVtLVxcdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxubGliL3Rlc3RfaG1tLmMtNjE3LVxcdGlmIChJU19FUlJfT1JfTlVMTChwdHIpKSB7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE3PXN0YXRpYyBERUZJTkVfWEFSUkFZKHBnbWFwX2FycmF5KTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTktLypcXG5tbS9tZW1yZW1hcC5jOjIwOiAqIFRoZSBtZW1yZW1hcCgpIGFuZCBtZW1yZW1hcF9wYWdlcygpIGludGVyZmFjZXMgYXJlIGFsdGVybmF0ZWx5IHVzZWRcXG5tbS9tZW1yZW1hcC5jLTIxLSAqIHRvIG1hcCBwZXJzaXN0ZW50IG1lbW9yeSBuYW1lc3BhY2VzLiBUaGVzZSBpbnRlcmZhY2VzIHBsYWNlIGRpZmZlcmVudFxcbm1tL21lbXJlbWFwLmMtMjItICogY29uc3RyYWludHMgb24gdGhlIGFsaWdubWVudCBhbmQgc2l6ZSBvZiB0aGUgbWFwcGluZyAobmFtZXNwYWNlKS5cXG5tbS9tZW1yZW1hcC5jOjIzOiAqIG1lbXJlbWFwKCkgY2FuIG1hcCBpbmRpdmlkdWFsIFBBR0VfU0laRSBwYWdlcy4gbWVtcmVtYXBfcGFnZXMoKSBjYW5cXG5tbS9tZW1yZW1hcC5jLTI0LSAqIG9ubHkgbWFwIHN1YnNlY3Rpb25zICgyTUIpLCBhbmQgYXQgbGVhc3Qgb25lIGFyY2hpdGVjdHVyZSAoUG93ZXJQQylcXG5tbS9tZW1yZW1hcC5jOjI1OiAqIHRoZSBtaW5pbXVtIG1hcHBpbmcgZ3JhbnVsYXJpdHkgb2YgbWVtcmVtYXBfcGFnZXMoKSBpcyAxNk1CLlxcbm1tL21lbXJlbWFwLmMtMjYtICpcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTMwPUVYUE9SVF9TWU1CT0xfR1BMKG1lbXVubWFwX3BhZ2VzKTtcXG5tbS9tZW1yZW1hcC5jLTEzMS1cXG5tbS9tZW1yZW1hcC5jOjEzMjpzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG5tbS9tZW1yZW1hcC5jLTEzMy17XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjYxLS8qXFxubW0vbWVtcmVtYXAuYzoyNjI6ICogTm90IGRldmljZSBtYW5hZ2VkIHZlcnNpb24gb2YgZGV2bV9tZW1yZW1hcF9wYWdlcywgdW5kb25lIGJ5XFxubW0vbWVtcmVtYXAuYzoyNjM6ICogbWVtdW5tYXBfcGFnZXMoKS4gIFBsZWFzZSB1c2UgZGV2bV9tZW1yZW1hcF9wYWdlcyBpZiB5b3UgaGF2ZSBhIHN0cnVjdFxcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXFxubW0vbWVtcmVtYXAuYy0yNjUtICovXFxubW0vbWVtcmVtYXAuYzoyNjY6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcXG5tbS9tZW1yZW1hcC5jLTI2Ny17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM1MS19XFxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzUzLVxcbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXFxubW0vbWVtcmVtYXAuYy0zNTYtICogQGRldjogaG9zdGluZyBkZXZpY2UgZm9yIEByZXNcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICdsaXZlJyBvbiBlbnRyeSBhbmQgd2lsbCBiZSBraWxsZWQgYW5kIHJlYXBlZCBhdFxcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzMtICovXFxubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zNzUte1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzgtXFxubW0vbWVtcmVtYXAuYzozNzk6XFx0cmV0ID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIGRldl90b19ub2RlKGRldikpO1xcbm1tL21lbXJlbWFwLmMtMzgwLVxcdGlmIChJU19FUlIocmV0KSlcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzgyLVxcbm1tL21lbXJlbWFwLmM6MzgzOlxcdGVycm9yID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLFxcbm1tL21lbXJlbWFwLmMtMzg0LVxcdFxcdFxcdHBnbWFwKTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzg4LX1cXG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG5tbS9tZW1yZW1hcC5jLTM5MC1cXG5tbS9tZW1yZW1hcC5jPTM5MT12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbm1tL21lbXJlbWFwLmMtMzkyLXtcXG5tbS9tZW1yZW1hcC5jOjM5MzpcXHRkZXZtX3JlbGVhc2VfYWN0aW9uKGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLCBwZ21hcCk7XFxubW0vbWVtcmVtYXAuYy0zOTQtfVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYz00MDI9aW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDU5LSAqXFxubW0vc3BhcnNlLXZtZW1tYXAuYzo0NjA6ICogTm90ZSB0aGF0IG1lbXJlbWFwX3BhZ2VzKCkgcmVzZXRzIEBucl9yYW5nZSB2YWx1ZSBhbmQgd2lsbCBpbmNyZW1lbnRcXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2MS0gKiBpdCBhZnRlciBlYWNoIHJhbmdlIHN1Y2Nlc3NmdWwgb25saW5pbmcuIFRodXMgdGhlIHZhbHVlIG9yIEBucl9yYW5nZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkPTEzPWxkZmxhZ3MteSArPSAtLXdyYXA9X19yZWxlYXNlX3JlZ2lvblxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZDoxNDpsZGZsYWdzLXkgKz0gLS13cmFwPWRldm1fbWVtcmVtYXBfcGFnZXNcXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQtMTUtbGRmbGFncy15ICs9IC0td3JhcD1pbnNlcnRfcmVzb3VyY2VcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYz0xMDg9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMTQtXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjExNTp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNi17XFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIxLVxcdGlmICghbmZpdF9yZXMpXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEyMjpcXHRcXHRyZXR1cm4gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNC19XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEzNTpFWFBPUlRfU1lNQk9MX0dQTChfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNi1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg9MjEyPXZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxMy1cXHRcXHRzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaDoyMTQ6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxNS12b2lkICpfX3dyYXBfbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjE4LjUwNzYwNjQyNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTQ4MDk1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIFBhdGNoKipcblxuT2theSwgc28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMuIEkgc2VlIGl0J3MgdXNlZCBpbiBgbGliL3Rlc3RfaG1tLmNgLCB0aGF0J3Mgb3VyIHRlc3RpbmcgbW9kdWxlLCBhcyB3ZWxsIGFzIHRoZSBwbWVtIGRyaXZlciAoYGRyaXZlcnMvbnZkaW1tL3BtZW0uY2ApIGFuZCBhbHNvIGBkcml2ZXJzL2RheC9kZXZpY2UuY2AuIFNvLCBpdCdzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIHRoYXQncyBhY3RpdmVseSB1c2VkLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJldmlzaXQgdGhpcyBwYXRjaC4gSXQncyBhZGRpbmcgYSBgbWVtY3B5X250YCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQncyB0aGUgbm9uLXRlbXBvcmFsIG1lbWNweSB1c2luZyBgbW92bnRpYCBpbnN0cnVjdGlvbnMgb24geDg2XzY0LCBhIG5lYXQgb3B0aW1pemF0aW9uLiBUaGUgbWFpbiB0aGluZyB0aGlzIHBhdGNoIGRvZXMgaXMgbW9kaWZ5IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gbGV2ZXJhZ2UgYG1lbWNweV9udGAuIFRoZSBnb2FsIGlzIHRvIGNvcHkgZnJvbSBhIHRlbXBsYXRlIHBhZ2UgaW5zdGVhZCBvZiBwYWluc3Rha2luZ2x5IGluaXRpYWxpemluZyBlYWNoIGluZGl2aWR1YWwgcGFnZSBmcm9tIHNjcmF0Y2guIFNvdW5kcyBsaWtlIGEgbmljZSBvcHRpbWl6YXRpb24gZm9yIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGVzcGVjaWFsbHkgZm9yIGxhcmdlciBtZW1vcnkgcmVnaW9ucy5cblxuTm93LCBJJ20gc2VlaW5nIHRoaXMgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZGAgZnVuY3Rpb24gaW4gdGhlIHBhdGNoLiBUaGlzIGlzIGtleSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIG9wdGltaXphdGlvbiBpcyAqZW5hYmxlZCouIFdhaXQgYSBtaW51dGUuLi4gaWYgS0FTQU4gb3IgS01TQU4gYXJlIGVuYWJsZWQsIGl0IHJldHVybnMgZmFsc2UuIFRoZSBvcHRpbWl6YXRpb24gaXMgKmRpc2FibGVkKiEgQW5kIGFsc28gaWYgdGhlIGBwYWdlX3JlZl9zZXRgIHRyYWNlcG9pbnQgaXMgYWN0aXZlLCB0aGF0IGRpc2FibGVzIGl0IHRvby4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGF0LiBMZXQncyBkaWcgaW50byBgbW0vbW1faW5pdC5jYCBhbmQgY2hlY2sgaG93IGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhvc2UgcGFydGljdWxhciBjb25kaXRpb25zIHdhcnJhbnQgZGlzYWJsaW5nIHRoZSBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDgyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjI0LjIyMjQxOTA2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwNDc0MTY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTEwNTk9c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTA2Ny1cXG5tbS9tbV9pbml0LmM6MTA2ODpzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKHZvaWQpXFxubW0vbW1faW5pdC5jLTEwNjkte1xcbi0tXFxubW0vbW1faW5pdC5jPTEyMDQ9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21tX2luaXQuYy0xMjA4LXtcXG5tbS9tbV9pbml0LmM6MTIwOTpcXHRib29sIHVzZV90ZW1wbGF0ZSA9IHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9vcHRpbWl6YXRpb25fZW5hYmxlZCgpO1xcbm1tL21tX2luaXQuYy0xMjEwLVxcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gc3RhcnRfcGZuICsgbnJfcGFnZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjI4LjMyNzE2NzA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDM0NjMwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmbGFnLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkYCwgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGRpc3NlY3RpbmcgdGhlIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG9wdGltaXphdGlvbiBpcyBiZWluZyBlbmFibGVkIGhlcmUsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXQncyBiZWluZyBpbXBsZW1lbnRlZC4gXCJab25lIGRldmljZSBwYWdlIGluaXRcIiDigJMgdGhhdCBwaHJhc2UgYWxvbmUgdGVsbHMgbWUgdGhpcyByZWxhdGVzIHRvIHRoZSBpbml0aWFsIHNldHVwIG9mIG1lbW9yeSBwYWdlcyB3aXRoaW4gYSBwYXJ0aWN1bGFyIHpvbmUgYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBkZXZpY2UgbWVtb3J5IG9yIGEgRE1BIHpvbmUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYXJvdW5kIHRoZSB0cmFkZS1vZmZzLiBXaGF0IGFyZSB3ZSBvcHRpbWl6aW5nIGZvcj8gSXMgaXQgc3BlZWQgb2YgYWxsb2NhdGlvbj8gUmVkdWNpbmcgbWVtb3J5IG92ZXJoZWFkPyBQb3dlciBjb25zdW1wdGlvbiBkdXJpbmcgaW5pdGlhbCBzZXR1cD8gSXMgdGhpcyBhYm91dCBsYXp5IGluaXRpYWxpemF0aW9uPyBPciBwZXJoYXBzIGRlZmVycmluZyBhbGxvY2F0aW9uIGFsdG9nZXRoZXIgdW50aWwgYSBsYXRlciB0aW1lPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIE5VTUEgY29uc2lkZXJhdGlvbnMgYXQgcGxheSB0aGF0IHdvdWxkIGluZm9ybSB0aGlzIG9wdGltaXphdGlvbj9cblxuSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBwaXRmYWxscyB0b28uIFdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhpcyBvcHRpbWl6YXRpb24gaXMgbWlzYXBwbGllZCBvciBpZiB0aGUgYXNzdW1wdGlvbnMgaXQncyBiYXNlZCBvbiBhcmUgdmlvbGF0ZWQ/IE1lbW9yeSBsZWFrcz8gSW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWdlcyBjYXVzaW5nIGRvd25zdHJlYW0gaXNzdWVzPyBPciwgcGVyaGFwcywgY29udGVudGlvbiBpc3N1ZXMgaWYgd2UncmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBwYXRocz8gVGhlIGV4YWN0IGltcGFjdCBvbiB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHdvcmtsb2FkcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGNvbnNpZGVyOyBhcmUgdGhlcmUgZGlmZmVyZW50IHdvcmtsb2FkcyB3aGVyZSB0aGlzIGNhbiBjYXVzZSBhbiBpc3N1ZT9cblxuRnVuZGFtZW50YWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBjb250cm9sbGVkIGJ5IHRoaXMgZmxhZyBhbmQgbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIGJlZm9yZS1hbmQtYWZ0ZXIgYmVoYXZpb3IuIEEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsb2NrcyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW5kIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZWZmZWN0cyBvZiB0aGlzIG9wdGltaXphdGlvbiBmbGFnLiBJIHdpbGwgbmVlZCB0byB1c2UgbXkgZGVidWdnaW5nIHRvb2xzIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgYW5kIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgY291bnRlcnMgSSBjYW4gdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjMyLjU3MDYzMjgzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21tX2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDY4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWQodm9pZClcXG4xMDY5OlxcdHtcXG4xMDcwOlxcdFxcdC8qXFxuMTA3MTpcXHRcXHQgKiBLZWVwIHNhbml0aXplZCBidWlsZHMgb24gdGhlIHNsb3cgcGF0aCBzbyB0aGVpciBzdG9yZXMgc3RheVxcbjEwNzI6XFx0XFx0ICogaW5zdHJ1bWVudGVkLlxcbjEwNzM6XFx0XFx0ICovXFxuMTA3NDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX0tNU0FOKSlcXG4xMDc1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDc2OlxcdFxcbjEwNzc6XFx0XFx0LypcXG4xMDc4OlxcdFxcdCAqIFRoZSB0ZW1wbGF0ZSBmYXN0IHBhdGggY29waWVzIGEgcHJlaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2UgaW1hZ2UuXFxuMTA3OTpcXHRcXHQgKiBTa2lwIGl0IHdoZW4gdGhlIHBhZ2VfcmVmX3NldCB0cmFjZXBvaW50IGlzIGVuYWJsZWQuXFxuMTA4MDpcXHRcXHQgKi9cXG4xMDgxOlxcdFxcdGlmIChwYWdlX3JlZl90cmFjZXBvaW50X2FjdGl2ZShwYWdlX3JlZl9zZXQpKVxcbjEwODI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwODM6XFx0XFxuMTA4NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDg1OlxcdH1cXG4xMDg2OlxcdFxcbjEwODc6XFx0c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDozMi41NzE5ODc2NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgzOTQ3NzI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtBU0FOIEltcGFjdCBvbiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX0tBU0FOYCBvciBgQ09ORklHX0tNU0FOYC4gTXkgZ3V0IHJlYWN0aW9uIGlzLCBcIlVoIG9oLCB0aGlzIG1pZ2h0IGJlIGEgcHJvYmxlbS5cIiBTcGVjaWZpY2FsbHksIGlmIGVpdGhlciBvZiB0aG9zZSBpcyBlbmFibGVkLCB0aGUgb3B0aW1pemF0aW9uIGlzIGJ5cGFzc2VkLiBBbmQsIGxldCdzIGZhY2UgaXQsIHN5emthbGxlciwgd2hpY2ggaXMgdGhlIGZ1enplciB0aGF0J3MgcmVsZXZhbnQgaGVyZSwgKmxvdmVzKiBLQVNBTi4gU28sIHR5cGljYWxseSwgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIHdvdWxkIHNpbXBseSByZXR1cm4gYGZhbHNlYCwgdGFraW5nIHRoZSBzbG93IHBhdGguXG5cblJpZ2h0LCBzbyB0aGF0IG1lYW5zIGlmIEtBU0FOIGlzIG9uLCB3aGljaCBpcyB0eXBpY2FsIGZvciBzeXprYWxsZXIsIGB6b25lX2RldmljZV9wYWdlX2luaXRfb3B0aW1pemF0aW9uX2VuYWJsZWRgIHJldHVybnMgZmFsc2UuIEFuZCB0aHVzIGB1c2VfdGVtcGxhdGVgIGJlY29tZXMgZmFsc2UuIExvb2tpbmcgZnVydGhlciBkb3duIGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIEkgc2VlOlxuXG5gYGBjXG5cdFx0aWYgKCF1c2VfdGVtcGxhdGUpIHtcblx0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsXG5cdFx0XHRcdFx0XHQgICBuaWQsIHBnbWFwKTtcblx0XHR9IGVsc2UgaWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbmBgYFxuXG5Hb3QgaXQhIFRoZSBuZXcgZmFzdCBwYXRoIHdvbid0IGdldCBleGVjdXRlZCBhdCBhbGwgd2hlbiBLQVNBTiBpcyBlbmFibGVkLiAgTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBkaXNtaXNzIGl0LiBCdXQsIHdhaXQuLi4gc3l6a2FsbGVyICphbHNvKiB0ZXN0cyB3aXRob3V0IEtBU0FOIHNvbWV0aW1lcy4gIEFuZCBldmVuIGlmIG5vdCwgd2UgY2FuIGFsd2F5cyBqdXN0aWZ5IGZ1enppbmcgYSBwaWVjZSBvZiBjb2RlIGFuZCB0ZXN0IGl0IG9uIG5vbi1LQVNBTiBpbnN0YW5jZXMuXG5cbk5vdywgbGV0IG1lIGdvIGJhY2sgdG8gdGhlIHByb21wdCwgd2hpY2ggc2F5cywgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIE9rYXksIGl0IGRvZXNuJ3QgbWVudGlvbiBLQVNBTiBzcGVjaWZpY2FsbHkuIEl0IGlzIGp1c3QgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIFRoaXMgaXMgZGlmZmVyZW50LCBidXQgbm90IGltcG9zc2libGUuXG5cbkhvd2V2ZXIsIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjdHVhbGx5IGZ1enplci13b3J0aHksIGV2ZW4gaWYgcmVhY2hhYmxlPyAgVG8gbWFrZSBhIGNhbGwgZWl0aGVyIHdheSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLiBPa2F5LCBub3cgdGhhdCBJIGhhdmUgYXNzZXNzZWQgdGhlIHJlYWNoYWJpbGl0eSwgZG9lcyB0aGUgc2xvdyBwYXRoIGhhdmUgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcz8gSSBzaG91bGQgY2hlY2sgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDozOS40MTE0NjgyNjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21tX2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDU5LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDU5OlxcdHN0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxcbjEwNjA6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuMTA2MTpcXHRcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbjEwNjI6XFx0e1xcbjEwNjM6XFx0XFx0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuMTA2NDpcXHRcXHRpZiAoIXBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50KHBnbWFwKSlcXG4xMDY1OlxcdFxcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbjEwNjY6XFx0fVxcbjEwNjc6XFx0XFxuMTA2ODpcXHRzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKHZvaWQpXFxuMTA2OTpcXHR7XFxuMTA3MDpcXHRcXHQvKlxcbjEwNzE6XFx0XFx0ICogS2VlcCBzYW5pdGl6ZWQgYnVpbGRzIG9uIHRoZSBzbG93IHBhdGggc28gdGhlaXIgc3RvcmVzIHN0YXlcXG4xMDcyOlxcdFxcdCAqIGluc3RydW1lbnRlZC5cXG4xMDczOlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MDozOS40MTE2NzY0MDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkzMzgzNjgxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpPTkVfREVWSUNFIFBhZ2UgSW5pdGlhbGl6YXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYF9fem9uZV9kZXZpY2VfcGFnZV9pbml0YCBmdW5jdGlvbiBhbmQgdGhlIGFzc29jaWF0ZWQgYHBhZ2VtYXBfcmVzZXRzX3JlZmNvdW50YCBjaGVjay4gRXNzZW50aWFsbHksIHRoZSBcInNsb3cgcGF0aFwiIGhlcmUgaXMganVzdCB0aGUgb2xkIGNvZGUsIHJlZmFjdG9yZWQgZm9yIGNsYXJpdHkuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhhdCBwYXJ0LiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgbmV3IFwiZmFzdCBwYXRoLFwiIHdoaWNoIEknbSBpbnRlcmVzdGVkIGluIGJlY2F1c2UgaXQncyB3aGVyZSBwb3RlbnRpYWwgYnVncyBjb3VsZCBiZSBoaWRpbmcuXG5cblRoZSBjb3JlIG9mIHRoZSByZWZhY3RvcmluZyByZXZvbHZlcyBhcm91bmQgaG93IHBhZ2UgY291bnRzIGFyZSBoYW5kbGVkIGZvciBkaWZmZXJlbnQgZGV2aWNlIHBhZ2UgbWFwIHR5cGVzLiBUaGUgb2xkIGNvZGUgaGFkIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRoYXQgc3BlY2lmaWNhbGx5IHplcm9lZCB0aGUgcGFnZSBjb3VudCBmb3IgY2VydGFpbiBkZXZpY2UgdHlwZXMgKGBNRU1PUllfREVWSUNFX0ZTX0RBWGAsIGBNRU1PUllfREVWSUNFX1BSSVZBVEVgLCBgTUVNT1JZX0RFVklDRV9DT0hFUkVOVGAsIGBNRU1PUllfREVWSUNFX1BDSV9QMlBETUFgKS4gVGhlIHJlZmFjdG9yZWQgY29kZSBub3cgY2hlY2tzIGBwYWdlbWFwX3Jlc2V0c19yZWZjb3VudGAsIGVmZmVjdGl2ZWx5IGRvaW5nIHRoZSBzYW1lLlxuXG5UaGUgY2F0Y2ggaXMsIHRoaXMgZmFzdCBwYXRoIGlzIGRpc2FibGVkIHVuZGVyIGBDT05GSUdfS0FTQU5gIG9yIGBDT05GSUdfS01TQU5gLCBzbyBJIGNhbid0IGltbWVkaWF0ZWx5IHRlc3QgdGhlIGNoYW5nZXMuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIGl0IHdvcnRoIGZ1enppbmcgdGhpcyBjb2RlP1xuXG5ZZXMsIGl0IGlzLiBUaGUgZmFzdCBwYXRoIGNvbnRhaW5zIGNoYW5nZXMgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmb3Igc29tZSBkZXZpY2UgdHlwZXMuIElmIEkgd2FudCB0byBoaXQgdGhhdCBmYXN0IHBhdGgsIEknbGwgbmVlZCBhIGtlcm5lbCBidWlsZCB3aXRob3V0IHRob3NlIHNhbml0aXplcnMuIFN5emthbGxlciwgd2hpY2ggSSB1c2UgcmVndWxhcmx5LCBkb2VzIGhhdmUgaW5zdGFuY2VzIHdpdGhvdXQgS0FTQU4gYW5kIEtNU0FOLiBTbywgaXQncyBkZWZpbml0ZWx5IGZlYXNpYmxlIHRvIGZ1enogdGhpcy5cblxuTm93LCB3aGF0IGFib3V0IHRoZSBjb25maWd1cmF0aW9uPyBJIGtub3cgYENPTkZJR19aT05FX0RFVklDRWAgaXMgYSBtdXN0LCBidXQgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHBpZWNlcyBpbiBwbGFjZSBmb3IgdGhlIGZ1enppbmcgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTc5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDA6NDkuMzQ1NTE1OTI4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIxODIzMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIzNS1cXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjM3LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjU0LjI2NzM0NjAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTY0NTE5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgWk9ORV9ERVZJQ0UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYFpPTkVfREVWSUNFYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIGl0cyBkZWNsYXJhdGlvbiBpcyB3aXRoaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUsIHRoaXMgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyB0aGVyZSBhbmQgdGhlbiBzZWUgaG93IGl0J3MgYmVpbmcgY29uZGl0aW9uZWQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCBkZWZpbmUgd2hldGhlciBvciBub3QgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDA6NTcuNDYzODAwNTc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMzYsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMzY6XFx0Y29uZmlnIFpPTkVfREVWSUNFXFxuMTIzNzpcXHRcXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbjEyMzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xcbjEyMzk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxuMTI0MDpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuMTI0MTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuMTI0MjpcXHRcXG4xMjQzOlxcdFxcdGhlbHBcXG4xMjQ0OlxcdFxcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcXG4xMjQ1OlxcdFxcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcXG4xMjQ2OlxcdFxcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXFxuMTI0NzpcXHRcXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxuMTI0ODpcXHRcXHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHJlZHVjZSB0aGUgZW50cm9weSBvZiB4ODYgS0FTTFIgbWVtb3J5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQwOjU3LjQ2NDAwNDQ2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzE4MzI2MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1lbW9yeSBDb3B5IE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYFpPTkVfREVWSUNFYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIG5vdGUuIFRoZSBtYWluIHRoaW5nIGhlcmUgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBJdCBpbnRyb2R1Y2VzIHNvbWUgbmV3IGludHJpbnNpY3M6IGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYG1vdm50aV82NGAsIGBtZW1jcHlfbnRgLCBhbmQgYG1lbWNweV9udF9kcmFpbmAuIFRoZXNlIGFyZSBzcGVjaWZpY2FsbHkgdXRpbGl6ZWQgYnkgYG1lbWNweV9mbHVzaGNhY2hlYCBhbmQgYG1lbWNweV9udGAuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgYG1lbWNweV9udGAgdXNlZCBhbnl3aGVyZSBlbHNlPyBBIHF1aWNrIHNjYW4gc2hvd3MgaXQncyBjdXJyZW50bHkgb25seSB1c2VkIGluIGBtbS9tbV9pbml0LmNgLiBJbnRlcmVzdGluZy5cblxuTm93LCBsZXQncyBsb29rIGZvciBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gRGl2aW5nIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgSSBzZWU6XG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcbnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG5gYGBcblxuQWgsIHJpZ2h0LiBUaGUgeDg2IG9wdGltaXplZCBgbWVtY3B5X250YCBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gYENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVgLiBTbywgdGhhdCdzIGFub3RoZXIgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSB0byBrZWVwIGluIG1pbmQuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAgZnVydGhlciB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MTowNS43ODIzMzM3NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwNjU5OTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnPTU0Mj1jb25maWcgVUFDQ0VTU19NRU1DUFlcXG4tLVxcbmxpYi9LY29uZmlnLTU0NC1cXG5saWIvS2NvbmZpZzo1NDU6Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmxpYi9LY29uZmlnLTU0Ni1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQxOjA5Ljk4ODk0MzE1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk3NTg1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBhYm91dCB0byBkbzpcblxuKipFeGFtaW5pbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCoqXG5cblJpZ2h0LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgY2xlYXJseS4gSXQncyBpbmRpY2F0aW5nIHNvbWUgbGV2ZWwgb2Ygb3B0aW1pemF0aW9uLCBwb3NzaWJseSByZWxhdGVkIHRvIG1lbW9yeSBjb2hlcmVuY3kgb3IgY2FjaGUgbWFuYWdlbWVudCwgd2l0aGluIHRoZSBjb250ZXh0IG9mIHVzZXItc3BhY2UgYWNjZXNzLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZGVmaW5lcyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gaWRlbnRpZnkgd2hhdCBzZWxlY3RzIGl0LiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgcHJvY2Vzc29yIGZhbWlseSwgYSBwYXJ0aWN1bGFyIG1lbW9yeSBtb2RlbCwgb3IgcGVyaGFwcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHN1YnN5c3RlbT8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIHNpbWlsYXIgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSBjb2RlIHRvIHRyYWNlIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQsIGNyaXRpY2FsbHksICpzZWxlY3RlZCouIFRoYXQgc2hvdWxkIHJhcGlkbHkgdW5jb3ZlciB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGZlYXR1cmUgYmVjb21lcyByZWxldmFudC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLiBJdCdzIGFsbCBhYm91dCBjb250ZXh0IGFuZCBob3cgdGhpcyBmZWF0dXJlIGNoYW5nZXMgb3IgaW1wcm92ZXMgdGhlIG5vcm1hbCBvcGVyYXRpb24sIGVzcGVjaWFsbHkgaW4gYXJlYXMgb2YgdXNlci1zcGFjZSBhbmQga2VybmVsIGFjY2Vzcy4gS25vd2luZyB0aGUgY29kZSBwYXRocyB0aGF0ICpkZXBlbmQqIG9uIHRoaXMgZGVmaW5pdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIGl0cyBhY3R1YWwgdXRpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NTEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MToxMy41ODY1MzI2NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjI1NjAwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9MTkyMj1jb25maWcgQVJNNjRfUE1FTVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE5MjQtXFx0c2VsZWN0IEFSQ0hfSEFTX1BNRU1fQVBJXFxuYXJjaC9hcm02NC9LY29uZmlnOjE5MjU6XFx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI2LVxcdGhlbHBcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNTgtXFx0c2VsZWN0IEFSQ0hfSEFTX1RJQ0tfQlJPQURDQVNUXFx0XFx0aWYgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1RcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxNTk6XFx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE2MC1cXHRzZWxlY3QgQVJDSF9IQVNfVUJTQU5cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMDItXFx0c2VsZWN0IEFSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HXFx0aWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuYXJjaC94ODYvS2NvbmZpZzoxMDM6XFx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMTA0LVxcdHNlbGVjdCBBUkNIX0hBU19DT1BZX01DXFx0XFx0XFx0aWYgWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQxOjE3LjU0OTA5ODQwNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUxODIxMTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFpvbmUgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBteSBicmFpbiBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgc2VlIHRoaXMgcGFydGljdWxhciBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYFg4Nl82NGAuIFJpZ2h0LCBzbyB0aGF0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBnZW5lcmFsIHByZXZhbGVuY2Ugb2YgdGhhdCBhcmNoaXRlY3R1cmUuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYnJvYWRlciBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYCBiZWluZyBlbmFibGVkLiBUaGVzZSBvcHRpb25zIGltcGx5IHRoZSBzdXBwb3J0IG9mIGR5bmFtaWMgbWVtb3J5IGFuZCB0aGUgdmlydHVhbCBtZW1vcnkgbWFwLCBzbyBJIGdldCB0aGUgY29ubmVjdGlvbi5cblxuQmV5b25kIHRoYXQsIHRoZSBjb2RlJ3MgdXN1YWxseSBzZWxlY3RlZCBieSBgTlZESU1NYCwgYERBWGAsIG9yIGBITU1gLiBUaGlzIHJlYWxseSBzaGFycGVucyB0aGUgZm9jdXMgb24gc3BlY2lhbGl6ZWQgbWVtb3J5IGhhcmR3YXJlIGFuZCBkYXRhIGFjY2VzcyBtZXRob2RzLiBJ4oCZbGwgbWFrZSBhIG5vdGUgb2YgdGhvc2Ugc2VsZWN0b3JzLiBJdCBzdWdnZXN0cyB0aGUgbWFpbiB1c2UgY2FzZXMgY2VudGVyIGFyb3VuZCB0aG9zZSB0ZWNobm9sb2dpZXMuIFRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIHdoZXJlIGl04oCZcyBhcHBsaWNhYmxlLCBJJ20gZ29pbmcgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIHdoaWNoIHNwZWNpZmljIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5IGVuYWJsZSBgWk9ORV9ERVZJQ0VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA5OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MToyMS42MDA5MjMxNjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTc4MTY2NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDE6MjYuMjE4NzQ4Mzk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NDY1NjM4NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gVmFyaWFibGUgJ1pPTkVfREVWSUNFJyoqXG5cblJpZ2h0LCBzbyBgWk9ORV9ERVZJQ0VgIGlzIGEgQm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBlaXRoZXIgKm9uKiBvciAqb2ZmKiwgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBlc3RhYmxpc2guIE5vdywgdGhlIGtleSBxdWVzdGlvbiwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggem9uZS1iYXNlZCBjb25maWd1cmF0aW9ucyBpcy4uLiBJcyB0aGlzIHZhcmlhYmxlIGVuYWJsZWQgYnkgZGVmYXVsdD8gVGhhdCdzIHdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93IHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHN5c3RlbSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIExldCdzIGRpZyBkZWVwZXIgYW5kIGZpZ3VyZSBvdXQgdGhhdCBkZWZhdWx0IHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDE6NDEuNjg0Mzg5NTYyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTMxMjczMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTgyLVxcdGRlcGVuZHMgb24gIVVNTFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjgzOlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NC1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9NjI9Y29uZmlnIE5WRElNTV9QRk5cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjQtXFx0ZGVmYXVsdCBMSUJOVkRJTU1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjY1OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTY2LVxcdHNlbGVjdCBORF9DTEFJTVxcbi0tXFxuZHJpdmVycy9wY2kvS2NvbmZpZz0yMDY9Y29uZmlnIFBDSV9QMlBETUFcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDg6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA5LVxcdCNcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWc9MzM2PWNvbmZpZyBYRU5fVU5QT1BVTEFURURfQUxMT0NcXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzNy1cXHRib29sIFxcXCJVc2UgdW5wb3B1bGF0ZWQgbWVtb3J5IHJhbmdlcyBmb3IgZ3Vlc3QgbWFwcGluZ3NcXFwiXFxuZHJpdmVycy94ZW4vS2NvbmZpZzozMzg6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmRyaXZlcnMveGVuL0tjb25maWctMzM5LVxcdGRlZmF1bHQgWEVOX0JBQ0tFTkQgfHwgWEVOX0dOVERFViB8fCBYRU5fRE9NMFxcbi0tXFxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYwLVxcdGRlcGVuZHMgb24gTU1VXFxuZnMvS2NvbmZpZzo2MTpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZy02Mi1cXHRzZWxlY3QgRlNfSU9NQVBcXG4tLVxcbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcXG4tLVxcbmZzL0tjb25maWctOTMtXFx0ZGVwZW5kcyBvbiBGU19EQVhcXG5mcy9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnLTk1LVxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4tLVxcbm1tL0tjb25maWc9MTI2Nz1jb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjgtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbm1tL0tjb25maWc6MTI2OTpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjcwLVxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDE6NDcuMjE1NjczOTI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNDU1Nzk1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBIb3QgUGF0aCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGl0J3MgY2xlYXIgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIGEgbmVjZXNzYXJ5IGNvbXBvbmVudCBmb3Igc2V2ZXJhbCBvdGhlciBmZWF0dXJlcywgbmFtZWx5IGBGU19EQVhgLCBgUENJX1AyUERNQWAsIGBOVkRJTU1fUEZOYCwgYW5kIGBERVZJQ0VfUFJJVkFURWAuIEJhc2VkIG9uIHRoaXMgcmVsYXRpb25zaGlwLCB0aGUgbG9naWNhbCBzdGVwIGlzIHRvIGluY2x1ZGUgYFpPTkVfREVWSUNFYCB3aXRoaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgcmVzb2x1dGlvbi5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGFmZmVjdGVkLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGhlYXZpbHkgbW9kaWZ5aW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEJlc2lkZXMgdGhhdCwgaXQgaXMgYWxzbyBpbnRyb2R1Y2luZyBhIGhhbmRmdWwgb2YgbmV3IGZ1bmN0aW9uczogYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YCwgYW5kIGB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZWAuIFRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IEknbSBzZWVpbmcgaGVyZSBpcyBpbmRlZWQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC5cblxuTXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZmFsbHMgd2l0aGluIGEgaG90IHBhdGguIEl0IGxvb2tzIGxpa2UgaXQgZ2V0cyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnLCB3aGljaCBnZW5lcmFsbHkgaXMgbm90IGEgaGlnaC1mcmVxdWVuY3kgb3BlcmF0aW9uLiBLbm93aW5nIHRoYXQsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgc2VlbXMgbGlrZSBhIGdvb2QgZm9jYWwgcG9pbnQuXG5cbkkgc2VlIHRoYXQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBhbHNvIGJlaW5nIHRvdWNoZWQsIHNvIEkgd2lsbCBhZGQgdGhhdCB0byBteSBtZW50YWwgY2hlY2tsaXN0IGZvciBmdXJ0aGVyIHJldmlldy4gTGV0J3Mgc2VlIGhvdyBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGJlaW5nIGFmZmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIzNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MTo1My4zNjEyNTc1NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0MzgxNDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9MTEzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcG91bmRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmMtMTE0OS1cXG5tbS9tbV9pbml0LmM6MTE1MDpzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG5tbS9tbV9pbml0LmMtMTE1MS1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3BmbixcXG4tLVxcbm1tL21tX2luaXQuYz0xMjA0PXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTI2MS1cXHRcXHQgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXRoIGlzIGVuYWJsZWQsIG9yZGVyIHRoZSBwcmVjZWRpbmcgaGVhZC1wYWdlIGNvcHlcXG5tbS9tbV9pbml0LmM6MTI2MjpcXHRcXHQgKiBiZWZvcmUgbWVtbWFwX2luaXRfY29tcG91bmQoKSwgd2hpY2ggaW1tZWRpYXRlbHkgdXBkYXRlcyBjb21wb3VuZC1oZWFkXFxubW0vbW1faW5pdC5jLTEyNjMtXFx0XFx0ICogbWV0YWRhdGEuIElmIG1lbWNweV9udCgpIGZlbGwgYmFjayB0byByZWd1bGFyIGNhY2hlZCBzdG9yZXMsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTI2OC1cXG5tbS9tbV9pbml0LmM6MTI2OTpcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbm1tL21tX2luaXQuYy0xMjcwLVxcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDE6NTkuMDA1MTAxMTcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjE4MTE4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBvZiBNZW1vcnkgTWFwcGluZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFRoYXQgbWFrZXMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB0aGUgbGlrZWx5IHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgc2VjdGlvbi4gQnV0IGhvbGQgb24sIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLi4uIGhtbSwgdGhhdCBtZWFucyBpdCAqY291bGQqIGJlIGlubGluZWQsIHBvdGVudGlhbGx5IG9ic2N1cmluZyB0aGUgY2FsbCBjaGFpbi4gSSdsbCBmbGFnIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgZm9yIGEgZGVlcGVyIGRpdmUgaW4gYEZvY3VzU3ltYm9sc2AgdG8gZW5zdXJlIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgYWxsIHN0YXJ0cy5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gcGxheS4gTG9va3MgbGlrZSBgbWVtY3B5X250YCwgYG1lbWNweV9udF9kcmFpbmAsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAsIGFuZCBgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGVgLCBhcmUgYWxsIHN0YXRpYyBpbmxpbmUsIGFuZCBsaWtlbHkgb3B0aW1pemVkIGF3YXksIG9yIGlubGluZWQsIG1ha2luZyB0cmFjaW5nIHRocm91Z2ggdGhlc2UgZGlmZmljdWx0LiBBbHNvLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgIGFuZCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3dgIGFyZSBzdGF0aWMgYnV0IG5vdCBpbmxpbmUuXG5cblNvLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBnZXRzIG1vZGlmaWVkLiBCdXQgd2FpdCwgaXMgaXQgZXhwb3J0ZWQ/IE5vLCBpdCdzIG5vdCBleHBvcnRlZC4gRXZlbiB0aG91Z2ggaXQgaXMgbm90IGV4cG9ydGVkLCBpdCBpcyBnbG9iYWxseSB2aXNpYmxlLiBCZXN0IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIGxldCdzIGNoZWNrIG91dCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gYG1tL21tX2luaXQuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDI6MDQuNTI2OTE2NzQ0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tbV9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwNCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwNDpcXHR2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbjEyMDU6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuMTIwNjpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjEyMDc6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4xMjA4OlxcdHtcXG4xMjA5OlxcdFxcdGJvb2wgdXNlX3RlbXBsYXRlID0gem9uZV9kZXZpY2VfcGFnZV9pbml0X29wdGltaXphdGlvbl9lbmFibGVkKCk7XFxuMTIxMDpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIG5yX3BhZ2VzO1xcbjEyMTE6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxuMTIxMjpcXHRcXHRzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCA9IHBnbWFwX2FsdG1hcChwZ21hcCk7XFxuMTIxMzpcXHRcXHR1bnNpZ25lZCBpbnQgcGZuc19wZXJfY29tcG91bmQgPSBwZ21hcF92bWVtbWFwX25yKHBnbWFwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDI6MDQuNTI3MTE2NDU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTE4NjU2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiB0aGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IHRoaXMgaXMgYSBnbG9iYWxseSB2aXNpYmxlIGNoYW5nZSwgd2hpY2ggaW1tZWRpYXRlbHkgZGVtYW5kcyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCBidXQgd2hhdCAqZWxzZSogaXMgaW1wYWN0ZWQ/XCIgQSBnbG9iYWwgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIHJpcHBsZSBvdXR3YXJkIGluIHVuZXhwZWN0ZWQgd2F5cywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUuXG5cblJpZ2h0LCBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgbWVtY3B5X2ZsdXNoY2FjaGVgIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBOb3cgd2UncmUgZ2V0dGluZyBzb21ld2hlcmUuIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgY3JpdGljYWwgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9uIHg4NiwgcGFydGljdWxhcmx5IHdoZXJlIGNhY2hlIGNvaGVyZW5jZSBpcyBpbnZvbHZlZCwgc28gbGV0J3MgZGlnIGludG8gKnRoYXQqIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQncyBjaGFuZ2VkIHRoZXJlLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgYWNyb3NzIHRoZSBhcmNoaXRlY3R1cmUuIEl0J3MgdGltZSB0byBjaGVjayBgbWVtY3B5X2ZsdXNoY2FjaGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk5NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDY6NDI6MDguMjM4OTg1MjEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ4ODIwOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNweV9mbHVzaGNhY2hlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg9NDQ9ZXh0ZXJuIHZvaWQgKl9fbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpO1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0ODp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ5LSNlbmRpZlxcbi0tXFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtOS1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYzoxMDp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTExLXtcXG4tLVxcbmFyY2gvYXJtNjQvbGliL3VhY2Nlc3NfZmx1c2hjYWNoZS5jLTE5LX1cXG5hcmNoL2FybTY0L2xpYi91YWNjZXNzX2ZsdXNoY2FjaGUuYzoyMDpFWFBPUlRfU1lNQk9MX0dQTChtZW1jcHlfZmx1c2hjYWNoZSk7XFxuYXJjaC9hcm02NC9saWIvdWFjY2Vzc19mbHVzaGNhY2hlLmMtMjEtXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RyaW5nLmg9Mjg9ZXh0ZXJuIHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqLGludCxfX2tlcm5lbF9zaXplX3QpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaDoyOTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdHJpbmcuaC0zMC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY5PXNpemVfdCBjb3B5X2Zyb21fdXNlcl9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy04MC1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYzo4MTp2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNpemUpXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODIte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmMtODctfVxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jOjg4OkVYUE9SVF9TWU1CT0wobWVtY3B5X2ZsdXNoY2FjaGUpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODE9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODQtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6ODU6dm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04Ni1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTEwNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTEyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oOjExMzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjbnQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xMzItXFx0XFx0XFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg6MTMzOlxcdFxcdFxcdCAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTEzNC1cXHRcXHRcXHQgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTE1NS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNTY6XFx0X19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNTctfVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9MTY1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbnQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTY2LXtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNjc6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtMTY4LX1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTE3MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X250X2RyYWluKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNzMtXFx0LypcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDoxNzQ6XFx0ICogT3JkZXIgdGhlIHByaW9yIE1PVk5USSBzdG9yZXMgaXNzdWVkIGJ5IG1lbWNweV9mbHVzaGNhY2hlKClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC0xNzUtXFx0ICogYmVmb3JlIGxhdGVyIG5vcm1hbCBzdG9yZXMuXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYz01MTQ9dm9pZCBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICphcmcpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYy01NjUtXFx0eGNoZyhcXHUwMDI2a2V4ZWNfY3Jhc2hfaW1hZ2UsIE5VTEwpO1xcbmFyY2gveDg2L2tlcm5lbC9jcmFzaC5jOjU2NjpcXHRtZW1jcHlfZmx1c2hjYWNoZShvbGRfZWxmY29yZWhkciwgZWxmYnVmLCBlbGZzeik7XFxuYXJjaC94ODYva2VybmVsL2NyYXNoLmMtNTY3LVxcdHhjaGcoXFx1MDAyNmtleGVjX2NyYXNoX2ltYWdlLCBpbWFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYz00Nj1zaXplX3QgY29weV91c2VyX2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jLTc5LVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjgwOnZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpfZHN0LCBjb25zdCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSlcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy04MS17XFxuLS1cXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDItfVxcbmFyY2gveDg2L2xpYi91c2VyY29weV82NC5jOjE0MzpFWFBPUlRfU1lNQk9MX0dQTChfX21lbWNweV9mbHVzaGNhY2hlKTtcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xNDQtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jPTMxPXN0YXRpYyB2b2lkIGZzZGV2X3dyaXRlX2RheCh2b2lkICphZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMzctXFxuZHJpdmVycy9kYXgvZnNkZXYuYzozODpcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZShhZGRyLCBtZW0gKyBvZmYsIGNodW5rKTtcXG5kcml2ZXJzL2RheC9mc2Rldi5jLTM5LVxcdFxcdGt1bm1hcF9sb2NhbChtZW0pO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYz0xNz1zdGF0aWMgdm9pZCBjYWNoZV9pbmZvX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNS1cXHRjYWNoZS1cXHUwMDNlaW5mb19pbmRleCA9IChjYWNoZS1cXHUwMDNlaW5mb19pbmRleCArIDEpICUgUENBQ0hFX01FVEFfSU5ERVhfTUFYO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM6MjY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2NhY2hlX2luZm9fYWRkcihjYWNoZSksIGNhY2hlX2luZm8sXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGUuYy0yNy1cXHRcXHRcXHRzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9pbmZvKSk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jPTg3PXZvaWQgY2FjaGVfcG9zX2VuY29kZShzdHJ1Y3QgcGNhY2hlX2NhY2hlICpjYWNoZSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmMtMTAwLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlLmM6MTAxOlxcdG1lbWNweV9mbHVzaGNhY2hlKHBvc19vbm1lZGlhX2FkZHIsIFxcdTAwMjZwb3Nfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfcG9zX29ubWVkaWEpKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZS5jLTEwMi1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmM9MTQwPXN0YXRpYyB2b2lkIHNiX3dyaXRlKHN0cnVjdCBwY2FjaGVfY2FjaGVfZGV2ICpjYWNoZV9kZXYsIHN0cnVjdCBwY2FjaGVfc2IgKnNiKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfZGV2LmMtMTQzLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2Rldi5jOjE0NDpcXHRtZW1jcHlfZmx1c2hjYWNoZShzYl9hZGRyLCBzYiwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfc2IpKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9kZXYuYy0xNDUtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jPTExND1zdGF0aWMgdm9pZCBhcHBlbmRfbGFzdF9rc2V0KHN0cnVjdCBwY2FjaGVfY2FjaGUgKmNhY2hlLCB1MzIgbmV4dF9zZWcpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xMjItXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTIzOlxcdG1lbWNweV9mbHVzaGNhY2hlKGdldF9rZXlfaGVhZF9hZGRyKGNhY2hlKSwgXFx1MDAyNmtzZXRfb25tZWRpYSwgc2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTI0LVxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYz0xMjg9aW50IGNhY2hlX2tzZXRfY2xvc2Uoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldCAqa3NldClcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX2tleS5jLTE1My1cXHRcXHQvKiBjbGVhciBvdXRkYXRlZCBrc2V0IGluIG5leHQgc2VnICovXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmM6MTU0OlxcdFxcdG1lbWNweV9mbHVzaGNhY2hlKG5leHRfc2VnLVxcdTAwM2VzZWdtZW50LmRhdGEsIFxcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNTUtXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNjUtXFx0LyogY2xlYXIgb3V0ZGF0ZWQga3NldCBhZnRlciBjdXJyZW50IGtzZXQgKi9cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYzoxNjY6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpICsga3NldF9vbm1lZGlhX3NpemUsIFxcdTAwMjZwY2FjaGVfZW1wdHlfa3NldCxcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNjctXFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBwY2FjaGVfY2FjaGVfa3NldF9vbm1lZGlhKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfa2V5LmMtMTY4LVxcdC8qIHdyaXRlIGN1cnJlbnQga3NldCBpbnRvIHNlZ21lbnQgKi9cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYzoxNjk6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoZ2V0X2tleV9oZWFkX2FkZHIoY2FjaGUpLCBrc2V0X29ubWVkaWEsIGtzZXRfb25tZWRpYV9zaXplKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9rZXkuYy0xNzAtXFx0cG1lbV93bWIoKTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYz0yMD1zdGF0aWMgdm9pZCBjYWNoZV9zZWdfaW5mb193cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX3NlZ21lbnQgKmNhY2hlX3NlZylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMS1cXHRzZWdfaW5mb19hZGRyID0gZ2V0X3NlZ19pbmZvX2FkZHIoY2FjaGVfc2VnKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmM6MzI6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoc2VnX2luZm9fYWRkciwgc2VnX2luZm8sIHNpemVvZihzdHJ1Y3QgcGNhY2hlX3NlZ21lbnRfaW5mbykpO1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0zMy1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTEyNj1zdGF0aWMgdm9pZCBjYWNoZV9zZWdfY3RybF93cml0ZShzdHJ1Y3QgcGNhY2hlX2NhY2hlX3NlZ21lbnQgKmNhY2hlX3NlZylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYy0xMzYtXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jOjEzNzpcXHRtZW1jcHlfZmx1c2hjYWNoZShnZXRfY2FjaGVfc2VnX2dlbl9hZGRyKGNhY2hlX3NlZyksIFxcdTAwMjZjYWNoZV9zZWdfZ2VuLCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9zZWdfZ2VuKSk7XFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jLTEzOC1cXHRwbWVtX3dtYigpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS1wY2FjaGUvY2FjaGVfc2VnbWVudC5jPTE4Mj1pbnQgY2FjaGVfc2VnX2luaXQoc3RydWN0IHBjYWNoZV9jYWNoZSAqY2FjaGUsIHUzMiBzZWdfaWQsIHUzMiBjYWNoZV9zZWdfaWQsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMjE2LVxcdFxcdC8qIGNsZWFyIG91dGRhdGVkIGtzZXQgaW4gc2VnbWVudCAqL1xcbmRyaXZlcnMvbWQvZG0tcGNhY2hlL2NhY2hlX3NlZ21lbnQuYzoyMTc6XFx0XFx0bWVtY3B5X2ZsdXNoY2FjaGUoc2VnbWVudC1cXHUwMDNlZGF0YSwgXFx1MDAyNnBjYWNoZV9lbXB0eV9rc2V0LCBzaXplb2Yoc3RydWN0IHBjYWNoZV9jYWNoZV9rc2V0X29ubWVkaWEpKTtcXG5kcml2ZXJzL21kL2RtLXBjYWNoZS9jYWNoZV9zZWdtZW50LmMtMjE4LVxcdFxcdHBtZW1fd21iKCk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz00Nj1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQ3LVxcdHR5cGVvZihkZXN0KSB1bmlxID0gKHNyYyk7XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjQ4OlxcdG1lbWNweV9mbHVzaGNhY2hlKFxcdTAwMjYoZGVzdCksIFxcdTAwMjZ1bmlxLCBzaXplb2YoZGVzdCkpO1xcdFxcXFxcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00OS19IHdoaWxlICgwKVxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTE5MD1zdGF0aWMgaW50IHdyaXRlY2FjaGVfbWVzc2FnZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2LFxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIwOS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjEwOnN0YXRpYyB2b2lkIG1lbWNweV9mbHVzaGNhY2hlX29wdGltaXplZCh2b2lkICpkZXN0LCB2b2lkICpzb3VyY2UsIHNpemVfdCBzaXplKVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMTEte1xcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIyNC1cXHQgKiBOT1RFOiB0aGlzIGhhcHBlbnMgdG8gYmUgdGhlIGNhc2Ugbm93ICh3aXRoIGRtLXdyaXRlY2FjaGUncyBzaW5nbGVcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjI1OlxcdCAqIHRocmVhZGVkIG1vZGVsKSBidXQgcmUtZXZhbHVhdGUgdGhpcyBvbmNlIG1lbWNweV9mbHVzaGNhY2hlKCkgaXNcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI2LVxcdCAqIGVuYWJsZWQgdG8gdXNlIG1vdmRpcjY0YiB3aGljaCBtaWdodCBpbnZhbGlkYXRlIHRoaXMgcGVyZm9ybWFuY2VcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNDItI2VuZGlmXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI0MzpcXHRtZW1jcHlfZmx1c2hjYWNoZShkZXN0LCBzb3VyY2UsIHNpemUpO1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNDQtfVxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM9MTI0Nj1zdGF0aWMgdm9pZCBiaW9fY29weV9ibG9jayhzdHJ1Y3QgZG1fd3JpdGVjYWNoZSAqd2MsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzEtXFx0XFx0XFx0Zmx1c2hfZGNhY2hlX3BhZ2UoYmlvX3BhZ2UoYmlvKSk7XFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6MTI3MjpcXHRcXHRcXHRtZW1jcHlfZmx1c2hjYWNoZV9vcHRpbWl6ZWQoZGF0YSwgYnVmLCBzaXplKTtcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjczLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM9MjMzPXN0YXRpYyBpbnQgbnNpb19yd19ieXRlcyhzdHJ1Y3QgbmRfbmFtZXNwYWNlX2NvbW1vbiAqbmRucyxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjc2LVxcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM6Mjc3OlxcdG1lbWNweV9mbHVzaGNhY2hlKG5zaW8tXFx1MDAzZWFkZHIgKyBvZmZzZXQsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNzgtXFx0cmV0ID0gbnZkaW1tX2ZsdXNoKHRvX25kX3JlZ2lvbihuZG5zLVxcdTAwM2VkZXYucGFyZW50KSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MTI0PXN0YXRpYyB2b2lkIHdyaXRlX3BtZW0odm9pZCAqcG1lbV9hZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0xMzItXFx0XFx0Y2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2ZmKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6MTMzOlxcdFxcdG1lbWNweV9mbHVzaGNhY2hlKHBtZW1fYWRkciwgbWVtICsgb2ZmLCBjaHVuayk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTEzNC1cXHRcXHRrdW5tYXBfbG9jYWwobWVtKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9MTEwNj1pbnQgZ2VuZXJpY19udmRpbW1fZmx1c2goc3RydWN0IG5kX3JlZ2lvbiAqbmRfcmVnaW9uKVxcbi0tXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYy0xMTIxLVxcdCAqIHRoZSBwbGF0Zm9ybSBidWZmZXIgZmx1c2guIE5vdGUgdGhhdCB3ZSd2ZSBhbHJlYWR5IGFycmFuZ2VkIGZvciBwbWVtXFxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzoxMTIyOlxcdCAqIHdyaXRlcyB0byBhdm9pZCB0aGUgY2FjaGUgdmlhIG1lbWNweV9mbHVzaGNhY2hlKCkuICBUaGUgZmluYWxcXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTExMjMtXFx0ICogd21iKCkgZW5zdXJlcyBvcmRlcmluZyBmb3IgdGhlIE5WRElNTSBmbHVzaCB3cml0ZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmg9MjcyPWV4dGVybiB2b2lkICogbWVtY2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3RyaW5nLmgtMjc0LSNpZm5kZWYgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEVcXG5pbmNsdWRlL2xpbnV4L3N0cmluZy5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuaW5jbHVkZS9saW51eC9zdHJpbmcuaC0yNzYte1xcbi0tXFxubGliL2lvdl9pdGVyLmM9MzAzPXNpemVfdCBtZW1jcHlfZnJvbV9pdGVyX2ZsdXNoY2FjaGUodm9pZCAqaXRlcl9mcm9tLCBzaXplX3QgcHJvZ3Jlc3MsXFxuLS1cXG5saWIvaW92X2l0ZXIuYy0zMDUte1xcbmxpYi9pb3ZfaXRlci5jOjMwNjpcXHRtZW1jcHlfZmx1c2hjYWNoZSh0byArIHByb2dyZXNzLCBpdGVyX2Zyb20sIGxlbik7XFxubGliL2lvdl9pdGVyLmMtMzA3LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MjoxMi41ODc4MTI2MTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2ODQ4MTAyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIE5ldyBgbWVtY3B5X250YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgbWVtY3B5X250YCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gSXQncyBkZWZpbmVkIGluIGJvdGggYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgIGFuZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBUaGlzIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhbmQgSSBzZWUgaXQncyBiZWluZyB1c2VkIGluIGBtbS9tbV9pbml0LmNgLiBCdXQgaG9sZCBvbiwgdGhlIHJlYWwgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLCB3aGVyZSB0aGUgZXhpc3RpbmcgYG1lbWNweV9mbHVzaGNhY2hlYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgdGhpcyBpc24ndCBqdXN0IGEgc2ltcGxlIHJlcGxhY2VtZW50LiBJdCdzIGFuIG9wdGltaXphdGlvbiBvZiBgbWVtY3B5X2ZsdXNoY2FjaGVgIHNwZWNpZmljYWxseSBmb3IgZml4ZWQgc2l6ZXMgbGlrZSAzMiwgNDgsIDY0LCA4MCwgYW5kIDk2IGJ5dGVzLCB3aGljaCBpcyBjbGV2ZXIuIGBtZW1jcHlfbnRgIGlzIGxldmVyYWdpbmcgdGhpcyBvcHRpbWl6ZWQgdmVyc2lvbi4gVGhlIGltcGFjdCBpcyBkZWZpbml0ZWx5IGJyb2FkZXIgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LlxuXG5Ob3csIGBtZW1jcHlfZmx1c2hjYWNoZWAgZ2V0cyB1c2VkIGFjcm9zcyBhIGJ1bmNoIG9mIHBsYWNlczogYGRyaXZlcnMvZGF4L2ZzZGV2LmNgLCBgZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmNgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCwgYW5kIGBsaWIvaW92X2l0ZXIuY2AsIHRvIG5hbWUgYSBmZXcuIFRoYXQncyBhIGdvb2QgY3Jvc3Mtc2VjdGlvbiBvZiB0aGUga2VybmVsLiBUaGlzIG1lYW5zIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhcmVuJ3QgbGltaXRlZCB0byBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFzIEkgaGFkIGZpcnN0IGFzc3VtZWQuXG5cbkhvd2V2ZXIsIHNpbmNlIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBJIGNhbid0IGRpcmVjdGx5IGFkZCBpdCB0byBgRm9jdXNTeW1ib2xzYC4gU28sIEknbGwgbmVlZCB0byBmb2N1cyBvbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGluc3RlYWQuIFRoaXMgYmVjb21lcyB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19aT05FX0RFVklDRWAgaXMga2V5IGhlcmUuIE90aGVyIHJlbGV2YW50IG9wdGlvbnMgdGhhdCBjb3VsZCBlbmFibGUgYFpPTkVfREVWSUNFYCB1c2FnZSBhcmU6IGBDT05GSUdfRlNfREFYYCwgYENPTkZJR19OVkRJTU1fUEZOYCwgYENPTkZJR19QQ0lfUDJQRE1BYCwgb3IgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEknbGwgYWRkIGBaT05FX0RFVklDRWAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LlxuXG5CdXQgd2hhdCBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzPyBBaCwgcmlnaHQsIGBDT05GSUdfS0FTQU5gIGFuZCBgQ09ORklHX0tNU0FOYCBkaXNhYmxlIG9wdGltaXphdGlvbnMgaW4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gQnV0IHdhaXQsIHRoaXMgaXMgYSBiaXQgbWlzbGVhZGluZy4gVGhlIGBtZW1jcHlfZmx1c2hjYWNoZWAgKm9wdGltaXphdGlvbiogaXNuJ3QgZGlzYWJsZWQgYnkgS0FTQU4hIFRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGlubGluZSBmdW5jdGlvbiAqaXMqIHVzZWQgYnkgYG1lbWNweV9udGAgKmFuZCogYnkgdGhpbmdzIGxpa2UgYGRtLXdyaXRlY2FjaGVgLCBgcG1lbWAsIGFuZCBgZGF4YC4gVGhpcyBtZWFucyB0aGUgY2hhbmdlcyB0byBgbWVtY3B5X2ZsdXNoY2FjaGVgIGFyZSBzdGlsbCByZWxldmFudCwgZXZlbiB3aXRoIEtBU0FOIGVuYWJsZWQsICphcyBsb25nIGFzIHRoZSBzaXplIGlzIGZpeGVkKiB0byAzMiwgNDgsIDY0LCA4MCwgb3IgOTYuXG5cbkknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaG93IGBkbS13cml0ZWNhY2hlYCB1c2VzIGBtZW1jcHlfZmx1c2hjYWNoZWAuIERvZXMgaXQgcHJpbWFyaWx5IHdvcmsgd2l0aCB2YXJpYWJsZSBvciBmaXhlZCBzaXplcz8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBkbS13cml0ZWNhY2hlLmNgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQyOjI0LjI3MjYyNTE4MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTc3MzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNweV9mbHVzaGNhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jPTQ2PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtNDctXFx0dHlwZW9mKGRlc3QpIHVuaXEgPSAoc3JjKTtcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmM6NDg6XFx0bWVtY3B5X2ZsdXNoY2FjaGUoXFx1MDAyNihkZXN0KSwgXFx1MDAyNnVuaXEsIHNpemVvZihkZXN0KSk7XFx0XFxcXFxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQ5LX0gd2hpbGUgKDApXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMTkwPXN0YXRpYyBpbnQgd3JpdGVjYWNoZV9tZXNzYWdlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjA5LVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMTA6c3RhdGljIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGVfb3B0aW1pemVkKHZvaWQgKmRlc3QsIHZvaWQgKnNvdXJjZSwgc2l6ZV90IHNpemUpXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTIxMS17XFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0xMjI0LVxcdCAqIE5PVEU6IHRoaXMgaGFwcGVucyB0byBiZSB0aGUgY2FzZSBub3cgKHdpdGggZG0td3JpdGVjYWNoZSdzIHNpbmdsZVxcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjEyMjU6XFx0ICogdGhyZWFkZWQgbW9kZWwpIGJ1dCByZS1ldmFsdWF0ZSB0aGlzIG9uY2UgbWVtY3B5X2ZsdXNoY2FjaGUoKSBpc1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyMjYtXFx0ICogZW5hYmxlZCB0byB1c2UgbW92ZGlyNjRiIHdoaWNoIG1pZ2h0IGludmFsaWRhdGUgdGhpcyBwZXJmb3JtYW5jZVxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0Mi0jZW5kaWZcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjQzOlxcdG1lbWNweV9mbHVzaGNhY2hlKGRlc3QsIHNvdXJjZSwgc2l6ZSk7XFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI0NC19XFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYz0xMjQ2PXN0YXRpYyB2b2lkIGJpb19jb3B5X2Jsb2NrKHN0cnVjdCBkbV93cml0ZWNhY2hlICp3Yywgc3RydWN0IGJpbyAqYmlvLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9tZC9kbS13cml0ZWNhY2hlLmMtMTI3MS1cXHRcXHRcXHRmbHVzaF9kY2FjaGVfcGFnZShiaW9fcGFnZShiaW8pKTtcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzoxMjcyOlxcdFxcdFxcdG1lbWNweV9mbHVzaGNhY2hlX29wdGltaXplZChkYXRhLCBidWYsIHNpemUpO1xcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTEyNzMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MjoyNC40NDQyMDkxODhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU1MDAzNDM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdyaXRlY2FjaGUgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRtLXdyaXRlY2FjaGUuY2AgYW5kIGhvdyBpdCBoYW5kbGVzIGZsdXNoaW5nLiBJIHNlZSBgd3JpdGVjYWNoZV9jb21taXRfZmx1c2hlZGAgdXNlcyBgd3JpdGVjYWNoZV9mbHVzaF9yZWdpb25gLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBtZW1jcHlfZmx1c2hjYWNoZWAuIFdhaXQgYSBtaW51dGUuLi4gbG9va2luZyBhdCB0aGF0IG1hY3JvOlxuXG5gYGBjXG4jZGVmaW5lIHdyaXRlY2FjaGVfZmx1c2hfcmVnaW9uKHdjLCBkZXN0LCBzcmMpXHRcdFx0XHRcXFxuZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuXHR0eXBlb2YoZGVzdCkgdW5pcSA9IChzcmMpO1x0XHRcdFx0XFxcblx0bWVtY3B5X2ZsdXNoY2FjaGUoXHUwMDI2KGRlc3QpLCBcdTAwMjZ1bmlxLCBzaXplb2YoZGVzdCkpO1x0XFxcbn0gd2hpbGUgKDApXG5gYGBcblxuYHNpemVvZihkZXN0KWAgaXMgYSAqY29uc3RhbnQqIGhlcmUhIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgc2l6ZSBvZiBgZGVzdGAgYWN0dWFsbHkgaXMgaW4gdGhlc2UgdmFyaW91cyBjb250ZXh0cywgYnV0IGlmIGl0ICppcyogYSBjb25zdGFudCBzaXplLCB0aGVuIHRoZSBpbmxpbmUgb3B0aW1pemF0aW9uIHdpdGhpbiBgbWVtY3B5X2ZsdXNoY2FjaGVgIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqdGVzdGFibGUqLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgbGV0J3MgcmVjYXAgdGhlIHdob2xlIHBpY3R1cmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHRvIHVzZSBhIHRlbXBsYXRlIGFuZCBgbWVtY3B5X250YCBmb3IgZmFzdGVyIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFBsdXMsIGFuZCB0aGlzIGlzIGdvb2QsIGl0IGFkZHMgaW5saW5lIG9wdGltaXphdGlvbnMgZm9yIGBtZW1jcHlfZmx1c2hjYWNoZWAgZm9yIHNpemVzIGxpa2UgMzIsIDQ4LCA2NCwgZXRjLiBJbXBvcnRhbnRseSwgdGhlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgb3B0aW1pemF0aW9uIGlzICpkaXNhYmxlZCogaWYgS0FTQU4gb3IgS01TQU4gaXMgZW5hYmxlZCwgYnV0IHRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIG9wdGltaXphdGlvbiBpcyAqYWx3YXlzKiBlbmFibGVkIGlmIHRoZSBzaXplIGlzIGNvbnN0YW50LiBUaGlzIG1lYW5zIHRoZSBwcm9wb3NlZCBjb2RlIGlzLCBmdW5jdGlvbmFsbHksIHNvdW5kIGFuZCByZWFjaGFibGUuXG5cbmBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgc2VlbXMgbGlrZSBhIHNvbGlkIGZvY3VzIHN5bWJvbCBoZXJlLiBJdCdzIGEgY2xlYXIgZW50cnkgcG9pbnQgdG8gZXhhbWluZSB0aGUgZWZmZWN0cyBvZiB0aGUgb3B0aW1pemF0aW9uLiBXZSAqbmVlZCogYENPTkZJR19aT05FX0RFVklDRWAgdG8gZXZlbiBnZXQgdG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdGVzdGluZy5cblxuSSBzaG91bGQgYWxzbyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgbWFpbiBvbmUsIGFuZCBJIHNlZSBgcGFnZW1hcF9yYW5nZWAgaXMgdGhlIGNhbGxlciBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBJIHNob3VsZCBhZGQgYHBhZ2VtYXBfcmFuZ2VgIHRvIGBGb2N1c1N5bWJvbHNgIGFzIHdlbGwuIEknbGwgbmVlZCB0byBjaGVjayBgcGFnZW1hcF9yYW5nZWAgaW4gYG1tL21lbXJlbWFwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcxOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MjozMS45OTQyNDY2MjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTE3OTg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXJlbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcmVtYXAuYz0xMzc9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTQzLVxcbm1tL21lbXJlbWFwLmM6MTQ0OnN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbm1tL21lbXJlbWFwLmMtMTQ1LVxcdFxcdGludCByYW5nZV9pZCwgaW50IG5pZClcXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTMzNy1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcmFuZ2U7IGkrKykge1xcbm1tL21lbXJlbWFwLmM6MzM4OlxcdFxcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXFx1MDAyNnBhcmFtcywgaSwgbmlkKTtcXG5tbS9tZW1yZW1hcC5jLTMzOS1cXHRcXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQyOjMyLjE2NTQzNTUyMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTM1MDc1OTkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBab25lIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IGBwYWdlbWFwX3JhbmdlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkuIFRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBmdW5jdGlvbiBgbWVtcmVtYXBfcGFnZXNgIGlzIGV4cG9ydGVkLCB3aGljaCBpcyB1c2VmdWwgZm9yIG91ciB3b3JrLiBJIHRoaW5rIHdlIGNhbiBzYWZlbHkgYWRkIGJvdGggYG1lbXJlbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHN0ZXAuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gbWFrZSBzdXJlIHdlJ3JlIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMuIGBaT05FX0RFVklDRWAgaXMgY2xlYXJseSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEFyZSB0aGVyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IExldCBtZSBxdWlja2x5IHNjYW4gZm9yIHRoaW5ncyBsaWtlIGBDT05GSUdfRlNfREFYYCwgYENPTkZJR19OVkRJTU1fUEZOYCwgYENPTkZJR19QQ0lfUDJQRE1BYCwgb3IgZXZlbiBgQ09ORklHX0RFVklDRV9QUklWQVRFYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgYW5kIGNvbnNpZGVyaW5nIGhvdyBTeXprYWxsZXIgdXN1YWxseSBzZXRzIHRoaW5ncyB1cCwgYENPTkZJR19GU19EQVhgIGFuZCBgQ09ORklHX1BDSV9QMlBETUFgIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gQnV0LCBmb3Igbm93LCB0byBrZWVwIGl0IHNpbXBsZSwgd2UgY2FuIGp1c3QgZm9jdXMgb24gbGlzdGluZyBgWk9ORV9ERVZJQ0VgLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgcmVhY2hhYmlsaXR5IG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIENhbiBpdCBiZSBjYWxsZWQgd2l0aG91dCBgWk9ORV9ERVZJQ0VgIGVuYWJsZWQ/IE5vLCBsb29raW5nIGF0IGl0LCBpdCBhcHBlYXJzIGl0J3MgZWl0aGVyIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIG9yIHRoZSB3aG9sZSBmaWxlIHRoYXQgY29udGFpbnMgaXQgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGVuYWJsZWQuIFdhaXQsIGhvbGQgb24uLi4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBpbiBgbW0vbW1faW5pdC5jYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGl0J3MgYWN0dWFsbHkgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19aT05FX0RFVklDRWAuIEp1c3Qgd2FudCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTM3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQyOjQ3LjUxNjE5OTExOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1ODUzMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19aT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbV9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTY3ND1zdGF0aWMgaW5saW5lIHZvaWQgZml4dXBfaGFzaGRpc3Qodm9pZCkge31cXG4tLVxcbm1tL21tX2luaXQuYy02NzYtXFxubW0vbW1faW5pdC5jOjY3NzojaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxubW0vbW1faW5pdC5jLTY3OC1zdGF0aWMgX19tZW1pbml0IHZvaWQgcGFnZWJsb2NrX21pZ3JhdGV0eXBlX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmM9ODc0PXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxcbi0tXFxubW0vbW1faW5pdC5jLTg4NS1cXG5tbS9tbV9pbml0LmM6ODg2OiNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VcXG5tbS9tbV9pbml0LmMtODg3LVxcdC8qXFxuLS1cXG5tbS9tbV9pbml0LmMtOTIwLVxcdFxcdGlmIChjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykge1xcbm1tL21tX2luaXQuYzo5MjE6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbm1tL21tX2luaXQuYy05MjItXFx0XFx0XFx0aWYgKHpvbmUgPT0gWk9ORV9ERVZJQ0UpXFxuLS1cXG5tbS9tbV9pbml0LmM9OTY4PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTEwMDYtXFxubW0vbW1faW5pdC5jOjEwMDc6I2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbm1tL21tX2luaXQuYy0xMDA4LS8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA2OjQyOjQ3LjcxMjA1ODk2NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDI5NDQ4MDgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBaT05FX0RFVklDRSBNZW1vcnkgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgc29tZSBrZXkgY2hhbmdlcyByZWxhdGVkIHRvIGBaT05FX0RFVklDRWAgbWVtb3J5IGluaXRpYWxpemF0aW9uLiBUaGUgcHJlc2VuY2Ugb2YgYCNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0VgIGNvbmZpcm1zIHRoYXQgYFpPTkVfREVWSUNFYCBpcyB0aGUgcHJpbWFyeSBmb2N1cy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGZ1enppbmcgc3RyYXRlZ3kgaXMgc291bmQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBgbWVtY3B5X250YCBhbmQgYG1lbWNweV9udF9kcmFpbmAsIGltcGxlbWVudGVkIGluIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlJ3Mgc3RyaW5nIGhhbmRsaW5nIChgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgKSwgYWxvbmcgd2l0aCBvcHRpbWl6YXRpb25zIGZvciBgbWVtY3B5X2ZsdXNoY2FjaGVgIGluIHRoZSBzYW1lIGZpbGUuIFRoZXNlIGFyZSB1c2VkIHdpdGhpbiBgbW0vbW1faW5pdC5jYCwgc3BlY2lmaWNhbGx5IGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFRoZSBuaWNlIHRoaW5nIGlzIHRoZSBmYWxsYmFjayBpbiBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAsIG1lYW5pbmcgb3RoZXIgYXJjaGl0ZWN0dXJlcyBzaG91bGRuJ3QgYmUgYWZmZWN0ZWQuXG5cblRoZSByZWFzb25pbmcgZm9yIGZ1enppbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggc2lnbmlmaWNhbnRseSBhbHRlcnMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvcHkgcm91dGluZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBub24tdGVtcG9yYWwgY29waWVzIGZvciBpbml0aWFsaXppbmcgYFpPTkVfREVWSUNFYCBwYWdlcy4gVGhlc2Ugcm91dGluZXMgYXJlIHRvdWNoZWQgZHVyaW5nIGhvdHBsdWdnaW5nLCBkZXZpY2UgbWVtb3J5IGluaXRpYWxpemF0aW9uIChEQVgsIHBtZW0sIGV0Yy4pLCBzbyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciByZWdyZXNzaW9ucyBpcyBkZWZpbml0ZWx5IHRoZXJlLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1yZW1hcF9wYWdlc2AuIEkndmUgdmVyaWZpZWQgdGhhdCBgbWVtcmVtYXBfcGFnZXNgIGlzIGEgZ29vZCBjaG9pY2UgYmVjYXVzZSBpdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkcml2ZXJzIG1hcHBpbmcgYFpPTkVfREVWSUNFYCBtZW1vcnkuIEkndmUgYWxzbyBjb25zaWRlcmVkIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgYnV0IGRlY2lkZWQgdGhhdCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtcmVtYXBfcGFnZXNgIGNvdmVyIHRoZSBjb3JlIGxvZ2ljIHN1ZmZpY2llbnRseS5cblxuSSBjb25zaWRlcmVkIGBkbS13cml0ZWNhY2hlLmNgIGFuZCBgbWVtY3B5X2ZsdXNoY2FjaGVgLiBXaGlsZSBpdCdzIHVzZWQgdGhlcmUsIGBtZW1jcHlfZmx1c2hjYWNoZWAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyBmdXp6aW5nIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB3aWxsIGNvdmVyIHRoYXQuIEkgY291bGQgYWRkIGZ1bmN0aW9ucyBsaWtlIGB3cml0ZWNhY2hlX2NvbW1pdF9mbHVzaGVkYCBvciBgcG1lbV9kb193cml0ZWAgZm9yIGV4dHJhIGNvdmVyYWdlLCBidXQgdGhlIG1haW4gY2hhbmdlIGlzIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIG9wdGltaXphdGlvbiwgYW5kIHRob3NlIGFyZSBtb3JlIHNwZWNpZmljIHRvIHRob3NlIGRyaXZlcnMuXG5cbk5vdywgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb246IEl0IGxvb2tzIGxpa2UgSSBvbmx5IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgYFpPTkVfREVWSUNFYC4gYFg4Nl82NGAgaXMgYXNzdW1lZCBhbmQgYEtBU0FOYCBjYW4gYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBzeXprYWxsZXIgd2lsbCBoYW5kbGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBpdCBhcyByZXF1aXJlZCwgSSBjYW4ndCBzcGVjaWZ5IGRpc2FibGluZyBpdCBpbiB0aGUgY29uZmlnIGZpbGUuIFNpbmNlIEknbSBhaW1pbmcgZm9yIHRoZSBmYXN0IHBhdGgsIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5zdGFuY2Ugb2Ygc3l6a2FsbGVyIGRvZXNuJ3QgZW5hYmxlIEtBU0FOLCBzaW5jZSBJIGRvbid0IHNlZSBhbnkgd2F5IHRvIHNwZWNpZnkgYSBcImRpc2FibGUgS0FTQU5cIiBkaXJlY3RpdmUuXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTM1LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNjo0MzowOC4wMDY1NTIxMjVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcxNTc3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbXJlbWFwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbXJlbWFwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGluaXRpYWxpemluZyBaT05FX0RFVklDRSBtZW1vcnkgcGFnZXMgdXNpbmcgbm9uLXRlbXBvcmFsIG1lbW9yeSBjb3BpZXMgKG1lbWNweV9udCkuIEl0IGFsc28gYWRkcyBpbmxpbmUgb3B0aW1pemF0aW9ucyBmb3IgbWVtY3B5X2ZsdXNoY2FjaGUgb24geDg2XzY0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzdHJpbmcgY29weSByb3V0aW5lcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGRldmljZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKGUuZy4sIERBWCwgcG1lbSkuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBhbmQgdGhlIG9wdGltaXplZCBtZW1vcnkgY29weSByb3V0aW5lcyBkbyBub3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[1] Phase: Succeeded StartedAt: 2026-07-10 06:43:20 +0000 UTC FinishedAt: 2026-07-10 06:43:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 06:43:20 +0000 UTC FinishedAt: 2026-07-10 06:43:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2] Phase: Succeeded StartedAt: 2026-07-10 06:43:20 +0000 UTC FinishedAt: 2026-07-10 11:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 06:43:20 +0000 UTC FinishedAt: 2026-07-10 11:10:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 06:43:20 +0000 UTC FinishedAt: 2026-07-10 06:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 06:43:20 +0000 UTC FinishedAt: 2026-07-10 06:43:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflownd558/series-workflownd558-convert-artifact-1069370470/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 06:43:58 +0000 UTC FinishedAt: 2026-07-10 07:16:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 06:43:58 +0000 UTC FinishedAt: 2026-07-10 07:16:29 +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:*56771bab-2738-4d59-9067-2cf6a077b5f8,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-workflownd558/series-workflownd558-convert-artifact-1069370470/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": "556d0f0c-ac98-45d7-8b79-d05dbf749548", "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-workflownd558/series-workflownd558-build-action-398322684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 06:43:58 +0000 UTC FinishedAt: 2026-07-10 07:16:18 +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:*56771bab-2738-4d59-9067-2cf6a077b5f8,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-workflownd558/series-workflownd558-convert-artifact-1069370470/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": "556d0f0c-ac98-45d7-8b79-d05dbf749548", "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-workflownd558/series-workflownd558-build-action-398322684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 07:16:29 +0000 UTC FinishedAt: 2026-07-10 07:16:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 07:16:29 +0000 UTC FinishedAt: 2026-07-10 07:16:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 07:16:29 +0000 UTC FinishedAt: 2026-07-10 07:16:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 07:16:29 +0000 UTC FinishedAt: 2026-07-10 07:16:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflownd558/series-workflownd558-convert-artifact-1265945785/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 07:16:39 +0000 UTC FinishedAt: 2026-07-10 07:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 07:16:39 +0000 UTC FinishedAt: 2026-07-10 07:18:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*556d0f0c-ac98-45d7-8b79-d05dbf749548,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-workflownd558/series-workflownd558-build-action-398322684/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-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 07:18:55 +0000 UTC FinishedAt: 2026-07-10 07:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 07:18:55 +0000 UTC FinishedAt: 2026-07-10 07:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 07:18:55 +0000 UTC FinishedAt: 2026-07-10 07:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 07:18:55 +0000 UTC FinishedAt: 2026-07-10 07:58:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56771bab-2738-4d59-9067-2cf6a077b5f8,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-workflownd558/series-workflownd558-convert-artifact-1265945785/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": "40f250a2-7422-462b-9167-9ecb8981049c", "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-workflownd558/series-workflownd558-build-action-271623573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 07:18:55 +0000 UTC FinishedAt: 2026-07-10 07:58:24 +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:*56771bab-2738-4d59-9067-2cf6a077b5f8,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-workflownd558/series-workflownd558-convert-artifact-1265945785/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": "40f250a2-7422-462b-9167-9ecb8981049c", "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-workflownd558/series-workflownd558-build-action-271623573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 07:58:29 +0000 UTC FinishedAt: 2026-07-10 07:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 07:58:29 +0000 UTC FinishedAt: 2026-07-10 07:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 07:58:29 +0000 UTC FinishedAt: 2026-07-10 08:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 07:58:29 +0000 UTC FinishedAt: 2026-07-10 08:00:35 +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:*40f250a2-7422-462b-9167-9ecb8981049c,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-workflownd558/series-workflownd558-build-action-271623573/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-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 08:00:44 +0000 UTC FinishedAt: 2026-07-10 11:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 08:00:44 +0000 UTC FinishedAt: 2026-07-10 11:10:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},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:*556d0f0c-ac98-45d7-8b79-d05dbf749548,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40f250a2-7422-462b-9167-9ecb8981049c,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-workflownd558/series-workflownd558-build-action-398322684/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-workflownd558/series-workflownd558-build-action-271623573/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 08:00:44 +0000 UTC FinishedAt: 2026-07-10 08:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 08:00:44 +0000 UTC FinishedAt: 2026-07-10 08:00: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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},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-workflownd558/series-workflownd558-convert-artifact-4011092526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 08:00:44 +0000 UTC FinishedAt: 2026-07-10 08:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 08:00:44 +0000 UTC FinishedAt: 2026-07-10 08:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 08:00:44 +0000 UTC FinishedAt: 2026-07-10 08:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 08:00:54 +0000 UTC FinishedAt: 2026-07-10 11:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflownd558[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memremap_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6763d3f95456c0850a20c8676a1032c8216eda56","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"da87b656-168c-4c5b-a7bf-18da1eb94602","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 08:00:54 +0000 UTC FinishedAt: 2026-07-10 11:10:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*556d0f0c-ac98-45d7-8b79-d05dbf749548,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40f250a2-7422-462b-9167-9ecb8981049c,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-workflownd558/series-workflownd558-build-action-398322684/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-workflownd558/series-workflownd558-build-action-271623573/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-workflownd558/series-workflownd558-convert-artifact-4011092526/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,}