Name: series-workflow6dxzs Phase: Succeeded StartedAt: 2026-08-02 19:21:28 +0000 UTC FinishedAt: 2026-08-02 20:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[0] Phase: Succeeded StartedAt: 2026-08-02 19:21:29 +0000 UTC FinishedAt: 2026-08-02 19:42:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 19:21:29 +0000 UTC FinishedAt: 2026-08-02 19:42:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "RSI_SDIO", "RSI_COEX", "MAC80211", "MMC", "BT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "RSI_SDIO", "RSI_COEX", "MAC80211", "MMC", "BT" ], "series_id": "43f9f32a-34de-4e73-b92f-08d56acddae4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rsi_sdio_rx_thread", "rsi_usb_rx_thread", "rsi_91x_init", "rsi_coex_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7UlNJX1NESU8mIzM0OywKICAgICYjMzQ7UlNJX0NPRVgmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TU1DJiMzNDssCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnNpX3NkaW9fcnhfdGhyZWFkJiMzNDssCiAgICAmIzM0O3JzaV91c2JfcnhfdGhyZWFkJiMzNDssCiAgICAmIzM0O3JzaV85MXhfaW5pdCYjMzQ7LAogICAgJiMzNDtyc2lfY29leF9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBDb250cm9sLUZsb3cgSW50ZWdyaXR5IChDRkkpIHZpb2xhdGlvbiBieSBjb3JyZWN0aW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIG9mIHNldmVyYWwga3RocmVhZCBmdW5jdGlvbnMgaW4gdGhlIFJTSSA5MXggd2lyZWxlc3MgZHJpdmVyLiBUaGVzZSB0aHJlYWRzIGFyZSBjcmVhdGVkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gKGZ1enppbmcpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWMwMjc4YTcyMzc1MDA5YmVjZjNlMDkyYjkwOTRhOTYyOWQ2NWQ2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTk6NDE6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXG5pbmRleCBlZTYwM2E1MTczZmIzLi4wMjNjNTM5ZmMzODQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmNcbkBAIC01MCw4ICYjNDM7NTAsOSBAQCBzdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZF90eF9wa3RzKHN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiKVxuIFx0fSB3aGlsZSAoY29leF9xICE9IFJTSV9DT0VYX1FfSU5WQUxJRCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbiYjNDM7c3RhdGljIGludCByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpXG4ge1xuJiM0MztcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xuIFx0c3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IgPSBjb21tb24tXHUwMDNlY29leF9jYjtcbiBcdHUzMiB0aW1lb3V0ID0gRVZFTlRfV0FJVF9GT1JFVkVSO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uY1xuaW5kZXggNjYyZTQyZDFlNWU4ZC4uNjFkYjJiMzYzZDExNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jXG5AQCAtMjQ2LDEyICYjNDM7MjQ2LDEzIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHJzaV9yZWFkX3BrdCk7XG4gLyoqXG4gICogcnNpX3R4X3NjaGVkdWxlcl90aHJlYWQoKSAtIFRoaXMgZnVuY3Rpb24gaXMgYSBrZXJuZWwgdGhyZWFkIHRvIHNlbmQgdGhlXG4gICpcdFx0XHQgICAgICAgcGFja2V0cyB0byB0aGUgZGV2aWNlLlxuLSAqIEBjb21tb246IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZS5cbiYjNDM7ICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZS5cbiAgKlxuICAqIFJldHVybjogTm9uZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCByc2lfdHhfc2NoZWR1bGVyX3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuJiM0MztzdGF0aWMgaW50IHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpXG4ge1xuJiM0MztcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xuIFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cdTAwM2Vwcml2O1xuIFx0dTMyIHRpbWVvdXQgPSBFVkVOVF9XQUlUX0ZPUkVWRVI7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmNcbmluZGV4IDU5N2IyMzhlMjI5NDkuLjE4YTI4YWE5NzQ0NjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jXG5AQCAtNjIsOCAmIzQzOzYyLDkgQEAgaW50IHJzaV9zZGlvX21hc3Rlcl9hY2Nlc3NfbXN3b3JkKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHUxNiBtc193b3JkKVxuIFxuIHN0YXRpYyB2b2lkIHJzaV9yeF9oYW5kbGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xuIFxuLXZvaWQgcnNpX3NkaW9fcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4mIzQzO2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSlcbiB7XG4mIzQzO1x0c3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiA9IGRhdGE7XG4gXHRzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyID0gY29tbW9uLVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3QgcnNpXzkxeF9zZGlvZGV2ICpzZGV2ID0gYWRhcHRlci1cdTAwM2Vyc2lfZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuY1xuaW5kZXggMjVjMmIyMzIzOTRhNi4uNTEzZDJmZGZiNTEwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXG5AQCAtMjUsOCAmIzQzOzI1LDkgQEBcbiAgKlxuICAqIFJldHVybjogTm9uZS5cbiAgKi9cbi12b2lkIHJzaV91c2JfcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4mIzQzO2ludCByc2lfdXNiX3J4X3RocmVhZCh2b2lkICpkYXRhKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uID0gZGF0YTtcbiBcdHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCByc2lfOTF4X3VzYmRldiAqZGV2ID0gYWRhcHRlci1cdTAwM2Vyc2lfZGV2O1xuIFx0aW50IHN0YXR1cztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxuaW5kZXggM2NkZjlkZWQ4NzZkOS4uMmEzM2E4MWY3MWEzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmhcbkBAIC01OCw3ICYjNDM7NTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnNpX3Jlc2V0X2V2ZW50KHN0cnVjdCByc2lfZXZlbnQgKmV2ZW50KVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHJzaV9jcmVhdGVfa3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgcnNpX3RocmVhZCAqdGhyZWFkLFxuLVx0XHRcdFx0ICAgICB2b2lkICpmdW5jX3B0cixcbiYjNDM7XHRcdFx0XHQgICAgIGludCAoKmZ1bmNfcHRyKSh2b2lkICpkYXRhKSxcbiBcdFx0XHRcdCAgICAgdTggKm5hbWUpXG4ge1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnRocmVhZC1cdTAwM2Vjb21wbGV0aW9uKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXG5pbmRleCA3YzkxYjEyNmIzNTBmLi5lYjJiN2YzNmE3ZTRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXG5AQCAtMTM0LDUgJiM0MzsxMzQsNSBAQCBpbnQgcnNpX3NkaW9fbWFzdGVyX2FjY2Vzc19tc3dvcmQoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTE2IG1zX3dvcmQpO1xuIHZvaWQgcnNpX3NkaW9fYWNrX2ludHIoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTggaW50X2JpdCk7XG4gaW50IHJzaV9zZGlvX2RldGVybWluZV9ldmVudF90aW1lb3V0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xuIGludCByc2lfc2Rpb19jaGVja19idWZmZXJfc3RhdHVzKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IHFfbnVtKTtcbi12b2lkIHJzaV9zZGlvX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcbiYjNDM7aW50IHJzaV9zZGlvX3J4X3RocmVhZCh2b2lkICpkYXRhKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaFxuaW5kZXggOTYxODUxNzQ4YmM0Yy4uNzgwNjdlYWZmZThiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmhcbkBAIC04MSw1ICYjNDM7ODEsNSBAQCBzdGF0aWMgaW5saW5lIGludCByc2lfdXNiX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbiBcdHJldHVybiBFVkVOVF9XQUlUX0ZPUkVWRVI7XG4gfVxuIFxuLXZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XG4mIzQzO2ludCByc2lfdXNiX3J4X3RocmVhZCh2b2lkICpkYXRhKTtcbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTl9WRU5ET1JfUlNJJiMzNDssCiAgICAmIzM0O1JTSV85MVgmIzM0OywKICAgICYjMzQ7UlNJX1VTQiYjMzQ7LAogICAgJiMzNDtSU0lfU0RJTyYjMzQ7LAogICAgJiMzNDtSU0lfQ09FWCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNTUMmIzM0OywKICAgICYjMzQ7QlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfc2Rpb19yeF90aHJlYWQmIzM0OywKICAgICYjMzQ7cnNpX3VzYl9yeF90aHJlYWQmIzM0OywKICAgICYjMzQ7cnNpXzkxeF9pbml0JiMzNDssCiAgICAmIzM0O3JzaV9jb2V4X2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YzAyNzhhNzIzNzUwMDliZWNmM2UwOTJiOTA5NGE5NjI5ZDY1ZDZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAxOTo0MToxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYwppbmRleCBlZTYwM2E1MTczZmIzLi4wMjNjNTM5ZmMzODQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jCkBAIC01MCw4ICYjNDM7NTAsOSBAQCBzdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZF90eF9wa3RzKHN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiKQogCX0gd2hpbGUgKGNvZXhfcSAhPSBSU0lfQ09FWF9RX0lOVkFMSUQpOwogfQogCi1zdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pCiYjNDM7c3RhdGljIGludCByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiYjNDM7CXN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhOwogCXN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiID0gY29tbW9uLSZndDtjb2V4X2NiOwogCXUzMiB0aW1lb3V0ID0gRVZFTlRfV0FJVF9GT1JFVkVSOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMKaW5kZXggNjYyZTQyZDFlNWU4ZC4uNjFkYjJiMzYzZDExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYwpAQCAtMjQ2LDEyICYjNDM7MjQ2LDEzIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHJzaV9yZWFkX3BrdCk7CiAvKioKICAqIHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKCkgLSBUaGlzIGZ1bmN0aW9uIGlzIGEga2VybmVsIHRocmVhZCB0byBzZW5kIHRoZQogICoJCQkgICAgICAgcGFja2V0cyB0byB0aGUgZGV2aWNlLgotICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLgomIzQzOyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUuCiAgKgogICogUmV0dXJuOiBOb25lLgogICovCi1zdGF0aWMgdm9pZCByc2lfdHhfc2NoZWR1bGVyX3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKQomIzQzO3N0YXRpYyBpbnQgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWQodm9pZCAqZGF0YSkKIHsKJiM0MzsJc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiA9IGRhdGE7CiAJc3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi0mZ3Q7cHJpdjsKIAl1MzIgdGltZW91dCA9IEVWRU5UX1dBSVRfRk9SRVZFUjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmMKaW5kZXggNTk3YjIzOGUyMjk0OS4uMThhMjhhYTk3NDQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jCkBAIC02Miw4ICYjNDM7NjIsOSBAQCBpbnQgcnNpX3NkaW9fbWFzdGVyX2FjY2Vzc19tc3dvcmQoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTE2IG1zX3dvcmQpCiAKIHN0YXRpYyB2b2lkIHJzaV9yeF9oYW5kbGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpOwogCi12b2lkIHJzaV9zZGlvX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKQomIzQzO2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSkKIHsKJiM0MzsJc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiA9IGRhdGE7CiAJc3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi0mZ3Q7cHJpdjsKIAlzdHJ1Y3QgcnNpXzkxeF9zZGlvZGV2ICpzZGV2ID0gYWRhcHRlci0mZ3Q7cnNpX2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jCmluZGV4IDI1YzJiMjMyMzk0YTYuLjUxM2QyZmRmYjUxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMKQEAgLTI1LDggJiM0MzsyNSw5IEBACiAgKgogICogUmV0dXJuOiBOb25lLgogICovCi12b2lkIHJzaV91c2JfcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pCiYjNDM7aW50IHJzaV91c2JfcnhfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiYjNDM7CXN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhOwogCXN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tJmd0O3ByaXY7CiAJc3RydWN0IHJzaV85MXhfdXNiZGV2ICpkZXYgPSBhZGFwdGVyLSZndDtyc2lfZGV2OwogCWludCBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaAppbmRleCAzY2RmOWRlZDg3NmQ5Li4yYTMzYTgxZjcxYTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmgKQEAgLTU4LDcgJiM0Mzs1OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByc2lfcmVzZXRfZXZlbnQoc3RydWN0IHJzaV9ldmVudCAqZXZlbnQpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHJzaV9jcmVhdGVfa3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLAogCQkJCSAgICAgc3RydWN0IHJzaV90aHJlYWQgKnRocmVhZCwKLQkJCQkgICAgIHZvaWQgKmZ1bmNfcHRyLAomIzQzOwkJCQkgICAgIGludCAoKmZ1bmNfcHRyKSh2b2lkICpkYXRhKSwKIAkJCQkgICAgIHU4ICpuYW1lKQogewogCWluaXRfY29tcGxldGlvbigmYW1wO3RocmVhZC0mZ3Q7Y29tcGxldGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oCmluZGV4IDdjOTFiMTI2YjM1MGYuLmViMmI3ZjM2YTdlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oCkBAIC0xMzQsNSAmIzQzOzEzNCw1IEBAIGludCByc2lfc2Rpb19tYXN0ZXJfYWNjZXNzX21zd29yZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgbXNfd29yZCk7CiB2b2lkIHJzaV9zZGlvX2Fja19pbnRyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IGludF9iaXQpOwogaW50IHJzaV9zZGlvX2RldGVybWluZV9ldmVudF90aW1lb3V0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpOwogaW50IHJzaV9zZGlvX2NoZWNrX2J1ZmZlcl9zdGF0dXMoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTggcV9udW0pOwotdm9pZCByc2lfc2Rpb19yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7CiYjNDM7aW50IHJzaV9zZGlvX3J4X3RocmVhZCh2b2lkICpkYXRhKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmgKaW5kZXggOTYxODUxNzQ4YmM0Yy4uNzgwNjdlYWZmZThiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oCkBAIC04MSw1ICYjNDM7ODEsNSBAQCBzdGF0aWMgaW5saW5lIGludCByc2lfdXNiX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcikKIAlyZXR1cm4gRVZFTlRfV0FJVF9GT1JFVkVSOwogfQogCi12b2lkIHJzaV91c2JfcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pOwomIzQzO2ludCByc2lfdXNiX3J4X3RocmVhZCh2b2lkICpkYXRhKTsKICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjUxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtZXNzaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgc2NyZWFtcyBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gSSBrbm93IHRoaXMgZHJpdmVyOyBpdCYjMzk7cyBmb3IgUmVkcGluZSBTaWduYWxzJiMzOTsgV0xBTiBhbmQgQmx1ZXRvb3RoIGNvbWJvIGRldmljZS4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyBob3cgcmVhY2hhYmxlIGFyZSB0aGVzZSB0aHJlYWQgZnVuY3Rpb25zPyBJcyB0aGlzIGRyaXZlciBhY3RpdmUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KCkl0JiMzOTtzIGEgd2lyZWxlc3MgZHJpdmVyLCBidXQgdGhlIHByZXNlbmNlIG9mIFNESU8gYW5kIFVTQiBpbnRlcmZhY2VzIHNwYXJrcyBhbiBpbnRlcmVzdGluZyB0aG91Z2h0LiBVU0IgZGV2aWNlcyBhcmUgb2Z0ZW4gZW11bGF0ZWQgZm9yIHRlc3RpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBVU0IgZ2FkZ2V0LCBkdW1teV9oY2QsIG9yIGV2ZW4gc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgKHVzaW5nIHZoY2kpLiBUaGUgYHJzaV91c2JfcnhfdGhyZWFkYCBpcyB0aGUgbW9zdCBpbnRyaWd1aW5nIG9uZSBmb3IgdGhpcyBsaW5lIG9mIHRob3VnaHQgLSBDb3VsZCBpdCBiZSB0YXJnZXRlZCB3aXRoIGZ1enppbmc/IFRoZW4gaXQgaGl0cyBtZSwgc3l6a2FsbGVyIGhhcyBhIFVTQiBmdXp6ZXIgd2hpY2ggY2FuIGVtdWxhdGUgYXJiaXRyYXJ5IFVTQiBkZXZpY2VzLiBZZXMsIHRoYXQgbWFrZXMgVVNCIGRyaXZlcnMgcmVhY2hhYmxlIGJ5IGZ1enppbmcuIE9rYXksIHRoYXQmIzM5O3MgZXhjaXRpbmcgLSBJIHRoaW5rIHRoaXMgZHJpdmVyIGNvdWxkIGJlIGZ1enplZCB2aWEgVVNCLCB3aGljaCBsZWFkcyB0byB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSByZWFsIGJ1Z3MgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGBSU0lfOTFYYCBpcyB0aGUgY29ycmVjdCBLY29uZmlnIHN5bWJvbC4gVGltZSB0byBzZWFyY2ggZm9yIHRoZSBkcml2ZXImIzM5O3MgS2NvbmZpZyBkZWZpbml0aW9uIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJTSV85MVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1JTSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzoxNTpjb25maWcgUlNJXzkxWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIDkxeCBXTEFOIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBSU0lfOTFYKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYFJTSV85MVhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgb3IgY29uc2lkZXJpbmcgaW50ZWdyYXRpb24gd2l0aCBhbnl0aGluZyBuZXcuIExldCYjMzk7cyBzZWUuLi4gZmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyBpdCYjMzk7cyBsaWtlbHkgdXNpbmcuIFdlIGhhdmUgdGhlIHVzdWFsIHN1c3BlY3RzIC0gTnVtUHksIFNjaVB5LCBtYXliZSBQYW5kYXMgZm9yIGRhdGEgaGFuZGxpbmcgaWYgaXQmIzM5O3MgcHJvY2Vzc2luZyB0aW1lIHNlcmllcyBkYXRhLiBUaGVuIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3BlY2lhbGl6ZWQgbGlicmFyaWVzIGZvciBzaWduYWwgcHJvY2Vzc2luZyBvciBmaW5hbmNpYWwgYW5hbHlzaXMsIGRlcGVuZGluZyBvbiB3aGF0IHRoZSA5MVggdmVyc2lvbiByZXByZXNlbnRzIGFuZCB0aGUgc2NvcGUuCgpJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHZlcnNpb24gY29tcGF0aWJpbGl0eSBvZiBlYWNoIGRlcGVuZGVudCBsaWJyYXJ5LiBBcmUgdGhlcmUgYW55IGtub3duIGNvbmZsaWN0cz8gQXJlIHdlIHN0aWxsIHJ1bm5pbmcgb24gb3V0ZGF0ZWQgdmVyc2lvbnMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBJIHdhbnQgdG8gYXZvaWQgdGhlICYjMzQ7ZGVwZW5kZW5jeSBoZWxsJiMzNDsgc2NlbmFyaW8gYXQgYWxsIGNvc3RzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBvcnQgc3RhdGVtZW50cyBhbmQgdGhlIHByb2plY3QmIzM5O3Mgc2V0dXAgZmlsZXMgKHB5cHJvamVjdC50b21sLCByZXF1aXJlbWVudHMudHh0LCBzZXR1cC5weSwgZXRjLikgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KCkl04oCZcyBhbHNvIGltcG9ydGFudCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2Vzcy4gV2hhdCB0b29scyBhcmUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZT8gSXMgaXQgdXNpbmcgc2V0dXB0b29scywgZmxpdCwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgY2FuIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIGRlcGVuZGVuY2llcy4KCkJleW9uZCB0aGUgaW1tZWRpYXRlIGltcG9ydHMsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMuIFdoYXQgbGlicmFyaWVzIGRvZXMgKnRob3NlKiBsaWJyYXJpZXMgcmVseSBvbj8gU29tZXRpbWVzLCBoaWRkZW4gZGVwZW5kZW5jaWVzIGNhbiBpbnRyb2R1Y2UgdW5leHBlY3RlZCBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgcG9vcmx5IG1haW50YWluZWQgb3IgaGF2ZSBsaWNlbnNpbmcgY29uY2VybnMuIFRpbWUgZm9yIGEgZGVlcGVyIGRpdmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJTSV85MVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz0xMz1pZiBXTEFOX1ZFTkRPUl9SU0lcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTU6Y29uZmlnIFJTSV85MVhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UmVkcGluZSBTaWduYWxzIEluYyA5MXggV0xBTiBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEaXZpbmcgaW50byB0aGUgUlNJIFdpcmVsZXNzIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBSU0kgd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUg4oCTIGxldCYjMzk7cyBvcGVuIHVwIHRoYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgdGhlIGJ1aWxkIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIFJTSSB3aXJlbGVzcyBkcml2ZXIuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IGdyYW51bGFyIHRoZSBjb250cm9sIGlzLiBBcmUgd2UgbG9va2luZyBhdCBpbmRpdmlkdWFsIGZlYXR1cmUgZmxhZ3MgZm9yIGRpZmZlcmVudCA4MDIuMTEgc3RhbmRhcmRzLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGJyb2FkZXIsIG1vcmUgZW5jb21wYXNzaW5nIG9wdGlvbnM/IFdoYXQgYWJvdXQgaGFyZHdhcmUgc3VwcG9ydCDigJMgaXMgaXQgYWxsIGJ1bmRsZWQgdW5kZXIgb25lIHVtYnJlbGxhLCBvciBhcmUgdGhlcmUgZGlzdGluY3QgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudCBSU0kgY2hpcHNldHM/IFRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIGhvdyBmbGV4aWJsZSB0aGlzIGRyaXZlciBpcyBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgY2F1c2UgaGVhZGFjaGVzIGRvd24gdGhlIHJvYWQsIGVzcGVjaWFsbHkgd2hlbiBpbnRlZ3JhdGluZyBpdCB3aXRoIG90aGVyIHdpcmVsZXNzIHN0YWNrcyBvciBuZXR3b3JrIHN1YnN5c3RlbXMuIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhYmlsaXR5IGFuZCBleHRlbnNpYmlsaXR5IG9mIHRoaXMgZHJpdmVyJiMzOTtzIGJ1aWxkIHByb2Nlc3MuIExldCYjMzk7cyBnZXQgY3JhY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9SU0lcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7UmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gICA5Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDEwOlx0XHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTE6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxMjpcdFxuICAxMzpcdGlmIFdMQU5fVkVORE9SX1JTSVxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBSU0lfOTFYXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIDkxeCBXTEFOIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQlRfSENJUlNJIGlmIFJTSV9DT0VYXG4gIDE4Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJlcyBzdXBwb3J0IGZvciBSU0kgMXgxIGRldmljZXMuXG4gIDIxOlx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFJTSV9ERUJVR0ZTXG4gIDI0Olx0XHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgZGVidWcgc3VwcG9ydFwmIzM0O1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBSU0lfOTFYXG4gIDI2Olx0XHRkZWZhdWx0IHlcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCBTYXkgWSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGRlYnVnIHN1cHBvcnQuIFRoaXMgb3B0aW9uXG4gIDI5Olx0XHQgY3JlYXRlcyBkZWJ1Z2ZzIGVudHJpZXNcbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgUlNJX1NESU9cbiAgMzI6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBTRElPIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIE1NQyBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuICAzNDpcdFx0ZGVmYXVsdCBtXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXG4gIDM3Olx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIFJTSV9VU0JcbiAgNDA6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBVU0IgYnVzIHN1cHBvcnRcJiMzNDtcbiAgNDE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG4gIDQyOlx0XHRkZWZhdWx0IG1cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxuICA0NTpcdFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBSU0lfQ09FWFxuICA0ODpcdFx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgV0xBTiBCVCBDb2V4aXN0ZW5jZSBzdXBwb3J0XCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIEJUIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG4gIDUwOlx0XHRkZXBlbmRzIG9uICEoQlQ9bSBcdTAwMjZcdTAwMjYgUlNJXzkxWD15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgRHJpdmVyIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQmIzM5O3MgY2F0Y2hpbmcgbXkgYXR0ZW50aW9uLiBUaGV5JiMzOTtyZSBhbHRlcmluZyB0aGUgdGhyZWFkIGZ1bmN0aW9uIHNpZ25hdHVyZS4gUHJldmlvdXNseSwgd2UgaGFkIGB2b2lkIGZ1bmMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilgLCBidXQgbm93IGl0JiMzOTtzIGBpbnQgZnVuYyh2b2lkICpkYXRhKWAuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBpbXBsaWNhdGlvbnMg4oCTIGBrdGhyZWFkX3J1bmAgYW5kIG90aGVyIHRocmVhZCBjcmVhdGlvbiBmdW5jdGlvbnMgZXhwZWN0IHRoYXQgYGludCAoKnRocmVhZGZuKSh2b2lkICpkYXRhKWAgc2lnbmF0dXJlLiBQYXNzaW5nIHRoZSB3cm9uZyBzaWduYXR1cmUgd291bGQgYWJzb2x1dGVseSB0cmlnZ2VyIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9ucywgYW5kIHRoYXQmIzM5O3MgYSBzZXJpb3VzIHNlY3VyaXR5IGNvbmNlcm4uIFNvLCB0aGlzIHBhdGNoIGlzIGRpcmVjdGx5IGFkZHJlc3NpbmcgYW5kIGZpeGluZyBhIENGSSB2aW9sYXRpb24uIFRoYXQgbWFrZXMgdGhpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgZml4LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBob3cgdGhlIGRyaXZlciBpcyBiZWluZyBhY2Nlc3NlZC4gVGhlIHRleHQgc2F5cyBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZy4gSW50ZXJlc3RpbmcuIEl0IHNvdW5kcyBsaWtlIHRoaXMgaXMgaG93IHRoZSB2dWxuZXJhYmlsaXR5IHdhcyBmb3VuZCwgYnkgbGV2ZXJhZ2luZyBVU0IuIEFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgdGhhdCB0aGV5IHVzZWQgYXJlIGBXTEFOX1ZFTkRPUl9SU0lgLCBgUlNJXzkxWGAsIGBSU0lfVVNCYCwgYFJTSV9DT0VYYCwgYW5kIGBSU0lfU0RJT2AuIEhvbGQgb24uLi4gYFJTSV9DT0VYYCBkZXBlbmRzIG9uIGBCVGAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGRlcGVuZGVuY3kgYW5kIGtlZXAgaXQgaW4gbWluZCBhcyBJIGtlZXAgcmV2aWV3aW5nLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGByc2lfY3JlYXRlX2t0aHJlYWRgIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2lfY3JlYXRlX2t0aHJlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYz0xMzk9aW50IHJzaV9jb2V4X2F0dGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xNTYtXHQvKiBJbml0aWFsaXplIGNvLWV4IHRocmVhZCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjE1NzpcdGlmIChyc2lfY3JlYXRlX2t0aHJlYWQoY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTE1OC1cdFx0XHQgICAgICAgXHUwMDI2Y29leF9jYi1cdTAwM2Vjb2V4X3R4X3RocmVhZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM9MzAyPXN0cnVjdCByc2lfaHcgKnJzaV85MXhfaW5pdCh1MTYgb3Blcl9tb2RlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM6MzMyOlx0aWYgKHJzaV9jcmVhdGVfa3RocmVhZChjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzMzLVx0XHRcdCAgICAgICBcdTAwMjZjb21tb24tXHUwMDNldHhfdGhyZWFkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYz0xMDAxPXN0YXRpYyBpbnQgcnNpX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnBmdW5jdGlvbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTA0MC1cdHJzaV9pbml0X2V2ZW50KFx1MDAyNnNkZXYtXHUwMDNlcnhfdGhyZWFkLmV2ZW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYzoxMDQxOlx0c3RhdHVzID0gcnNpX2NyZWF0ZV9rdGhyZWFkKGFkYXB0ZXItXHUwMDNlcHJpdiwgXHUwMDI2c2Rldi1cdTAwM2VyeF90aHJlYWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTA0Mi1cdFx0XHRcdCAgICByc2lfc2Rpb19yeF90aHJlYWQsIFwmIzM0O1NESU8tUlgtVGhyZWFkXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NzM9c3RhdGljIGludCByc2lfdXNiX2luaXRfcngoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01OTMtXHRyc2lfaW5pdF9ldmVudChcdTAwMjZkZXYtXHUwMDNlcnhfdGhyZWFkLmV2ZW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU5NDpcdGlmIChyc2lfY3JlYXRlX2t0aHJlYWQoYWRhcHRlci1cdTAwM2Vwcml2LCBcdTAwMjZkZXYtXHUwMDNlcnhfdGhyZWFkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTk1LVx0XHRcdCAgICAgICByc2lfdXNiX3J4X3RocmVhZCwgXCYjMzQ7UlgtVGhyZWFkXCYjMzQ7KSkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmg9NTQ9c3RhdGljIGlubGluZSB2b2lkIHJzaV9yZXNldF9ldmVudChzdHJ1Y3QgcnNpX2V2ZW50ICpldmVudClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oLTU4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaDo1OTpzdGF0aWMgaW5saW5lIGludCByc2lfY3JlYXRlX2t0aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmgtNjAtXHRcdFx0XHQgICAgIHN0cnVjdCByc2lfdGhyZWFkICp0aHJlYWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQ29uZmlndXJhdGlvbiBhbmQgVGhyZWFkIFN5bWJvbCBTZWxlY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgQ0ZJIHZ1bG5lcmFiaWxpdHkgZml4LiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBlbmFibGUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIFdpLUZpIHZlbmRvciYjMzk7cyBSU0kgaGFyZHdhcmUuIFRoZSBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlciBhcmUgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgUlNJX1NESU9gLCBhbmQgYFJTSV9DT0VYYC4gSG9sZCBvbiwgYFJTSV9DT0VYYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBCVGAsIHNvIHRoYXQgbmVlZHMgdG8gYmUga2VwdCBpbiBtaW5kLgoKVGhlIHByb21wdCBoYXMgZ2l2ZW4gbWUgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgd2hpY2ggaW5jbHVkZSwgYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGFyZSBleHBvcnRlZCBvciBzdGF0aWMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZS4gTG9va2luZyBhdCBgcnNpXzkxeF9zZGlvX29wcy5jYCBJIGZpbmQgYGludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSlgLiBJbiBgcnNpXzkxeF91c2Jfb3BzLmNgIHRoZXJlJiMzOTtzIGBpbnQgcnNpX3VzYl9yeF90aHJlYWQodm9pZCAqZGF0YSlgLiBBbmQgaW4gYHJzaV85MXhfY29leC5jYCB0aGVyZSBpcyBgc3RhdGljIGludCByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpYCBhbmQgdGhlbiBpbiBgcnNpXzkxeF9tYWluLmNgIHRoZXJlJiMzOTtzIGBzdGF0aWMgaW50IHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpYC4KCkFoYSwgdGhlIGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCBhbmQgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCBhcmUgKnN0YXRpYyouIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGV5IG1pZ2h0IG5vdCBoYXZlIHVuaXF1ZSBzeW1ib2xzIGlmIHRoZSBjb21waWxlciBpbmxpbmVzIHRoZW0uIEhvd2V2ZXIsIEkgcmVhbGl6ZSB0aGV5IGFyZSBhY3R1YWxseSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYHJzaV9jcmVhdGVfa3RocmVhZGAsIG1lYW5pbmcgdGhleSAqY2FuJiMzOTt0KiBiZSBpbmxpbmVkLiBUaGlzIG1lYW5zIHRoZXkgd2lsbCBkZWZpbml0ZWx5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHNheWluZyB0byBwcmVmZXIgbm9uLXN0YXRpYyBvbmVzIGJ1dCBzaW5jZSB0aGVzZSBhcmUgcGFzc2VkIGFzIHBvaW50ZXJzIHRvIGByc2lfY3JlYXRlX2t0aHJlYWRgLCB0aGV5IHdpbGwgbm90IGJlIGlubGluZWQuIEJ1dCB0byBiZSBzYWZlLCBJIGNvdWxkIGNvbnNpZGVyIGluY2x1ZGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIHRoZSB0aHJlYWRzIG9yIHRoZSB0aHJlYWQgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEFjdHVhbGx5LCB0aGUgdGhyZWFkIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSB0aGUgb25lcyB0aGF0IHdlcmUgbW9kaWZpZWQuCgpUaGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLiBTaW5jZSBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAgaXMgc3RhdGljLCBJIG1pZ2h0IG5lZWQgdG8gYWRkIGByc2lfY29leF9hdHRhY2hgLCBgcnNpXzkxeF9pbml0YCwgYHJzaV9wcm9iZWAgKGZvciBTRElPKSwgYHJzaV91c2JfaW5pdF9yeGAuCgpCdXQgd2FpdCwgdGhlIHJlYWwgaXNzdWUgc2VlbXMgdG8gYmUgdGhlIHRocmVhZHMgYW5kIHRocmVhZCBleGVjdXRpb24uIEl0JiMzOTtzIHRoZSBleGVjdXRpb24gb2YgdGhlc2UgdGhyZWFkcyB0aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlIENGSSB2aW9sYXRpb24sIG9yIGF0IGxlYXN0IHdoZW4gdGhlIHRocmVhZCBpcyBjcmVhdGVkLiBTbywgdGhlIGZ1enppbmcgbmVlZHMgdG8gZm9jdXMgb24gc3RhcnRpbmcgdGhlc2UgdGhyZWFkcy4gSSB0aGluayBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLgoKVGhlc2UgdGhyZWFkcyBhcmUgc3RhcnRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gLSBgcnNpXzkxeF9pbml0YCwgYW5kIHRoZW4gYHJzaV9wcm9iZWAgZm9yIGJvdGggU0RJTyBhbmQgVVNCLiBXYWl0Li4uIGlzIGByc2lfdXNiX2luaXRfcnhgIGNhbGxlZCBmcm9tIGByc2lfcHJvYmVgPyBUaGlzIG1ha2VzIG1lIHRoaW5rIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSB0aHJlYWQgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEkgdGhpbmsgdGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIENGSSB2aW9sYXRpb24gYXJpc2VzIHdoZW4gdGhlIHRocmVhZHMgYmVnaW4gdG8gKmV4ZWN1dGUqLiBTbywgZnV6emluZyBuZWVkcyB0byBleGVyY2lzZSB0aG9zZSB0aHJlYWQgZW50cnkgcG9pbnRzLCBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpX3VzYl9pbml0X3J4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NjA9c3RhdGljIHZvaWQgcnNpX2RlaW5pdF91c2JfaW50ZXJmYWNlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTczOnN0YXRpYyBpbnQgcnNpX3VzYl9pbml0X3J4KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NzQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTYxNz1zdGF0aWMgaW50IHJzaV9pbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02NDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2NDU6XHRpZiAocnNpX3VzYl9pbml0X3J4KGFkYXB0ZXIpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02NDYtXHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0O0ZhaWxlZCB0byBpbml0IFJYIGhhbmRsZVxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGByc2lfaW5pdF91c2JfaW50ZXJmYWNlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgcnNpX2luaXRfdXNiX2ludGVyZmFjZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gaXRzIG5hbWluZyBjb252ZW50aW9uLiBUaGUgJiMzNDtpbml0JiMzNDsgc3VnZ2VzdHMgaXQmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICYjMzQ7VVNCJiMzNDsgY2xlYXJseSBwb2ludHMgdG8gVW5pdmVyc2FsIFNlcmlhbCBCdXMsIGFuZCAmIzM0O2ludGVyZmFjZSYjMzQ7IGltcGxpZXMgaXQmIzM5O3Mgc2V0dGluZyB1cCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGZvciBhIFVTQiBkZXZpY2UuIEZyb20gdGhhdCwgSSBjYW4gaW5mZXIgaXQgbGlrZWx5IGNvbmZpZ3VyZXMgYSBVU0IgaW50ZXJmYWNlIGZvciBhIHNwZWNpZmljIGRldmljZSwgZHJpdmVyIG9yIGNvbW11bmljYXRpb24gZW5kcG9pbnQuIAoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGluaXRpYWwgaHlwb3RoZXNpcyBhbmQgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvbnRleHQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtb2R1bGVzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHdoYXQgZXJyb3IgY29uZGl0aW9ucyBpdCBoYW5kbGVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVVNCIGludGVyZmFjZSBpcyBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBwYXJhbWV0ZXJzIGFuZCBpbnRlcm5hbCBsb2dpYyB0byBmdWxseSBhcHByZWNpYXRlIGl0cyBmdW5jdGlvbi4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGV2aWNlIGRldGVjdGlvbiwgYW5kIGludGVycnVwdCBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGdvYWwgaXMgdG8gZGV2ZWxvcCBhIGNvbXBsZXRlIGFuZCBpbmZvcm1lZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2lfaW5pdF91c2JfaW50ZXJmYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NzM9c3RhdGljIGludCByc2lfdXNiX2luaXRfcngoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02MTAtLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2MTE6ICogcnNpX2luaXRfdXNiX2ludGVyZmFjZSgpIC0gVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdXNiIGludGVyZmFjZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTYxMi0gKiBAYWRhcHRlcjogUG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjE2LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjE3OnN0YXRpYyBpbnQgcnNpX2luaXRfdXNiX2ludGVyZmFjZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjE4LVx0XHRcdFx0ICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcGZ1bmN0aW9uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTc4NT1zdGF0aWMgaW50IHJzaV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcGZ1bmN0aW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTgwMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjgwMzpcdHN0YXR1cyA9IHJzaV9pbml0X3VzYl9pbnRlcmZhY2UoYWRhcHRlciwgcGZ1bmN0aW9uKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTgwNC1cdGlmIChzdGF0dXMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJTSSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcnNpXzkxeF91c2IuY2AgZmlsZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgcnNpX3Byb2JlYC4gVGhhdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHRoZSBkcml2ZXImIzM5O3MgZW50cnkgcG9pbnQsIHJpZ2h0PyAgSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoZSBVU0Igc3Vic3lzdGVtIHdpbGwgY2FsbCB3aGVuIGEgZGV2aWNlIG1hdGNoaW5nIHRoZSBkcml2ZXImIzM5O3MgSUQgaXMgcGx1Z2dlZCBpbi4gIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hhdCBpdCBhY3R1YWxseSAqZG9lcyouICBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIGByc2lfOTF4X2luaXRgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgc2V0dXAgc2hvdWxkIGJlLiBHb3R0YSB1bmRlcnN0YW5kIGhvdyB0aGlzIG1vZHVsZSBpbml0aWFsaXplcyB0aGUgaGFyZHdhcmUgYWZ0ZXIgaXQmIzM5O3MgbG9hZGVkIGFuZCBwcm9iZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV85MXhfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jPTI4Nz12b2lkIHJzaV9hdHRhY2hfYnQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMjk2LS8qKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jOjI5NzogKiByc2lfOTF4X2luaXQoKSAtIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgb3MgaW50ZXJmYWNlIG9wZXJhdGlvbnMuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMjk4LSAqIEBvcGVyX21vZGU6IE9uZSBvZiBERVZfT1BNT0RFXyouXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTMwMS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzozMDI6c3RydWN0IHJzaV9odyAqcnNpXzkxeF9pbml0KHUxNiBvcGVyX21vZGUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzAzLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzkwLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzozOTE6RVhQT1JUX1NZTUJPTF9HUEwocnNpXzkxeF9pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zOTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jPTEwMDE9c3RhdGljIGludCByc2lfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqcGZ1bmN0aW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xMDA5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjEwMTA6XHRhZGFwdGVyID0gcnNpXzkxeF9pbml0KGRldl9vcGVyX21vZGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTEwMTEtXHRpZiAoIWFkYXB0ZXIpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz03ODU9c3RhdGljIGludCByc2lfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnBmdW5jdGlvbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3OTU6XHRhZGFwdGVyID0gcnNpXzkxeF9pbml0KGRldl9vcGVyX21vZGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzk2LVx0aWYgKCFhZGFwdGVyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaD04Mj11MTYgcnNpX2dldF9jb25uZWN0ZWRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmg6ODM6c3RydWN0IHJzaV9odyAqcnNpXzkxeF9pbml0KHUxNiBvcGVyX21vZGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaC04NC12b2lkIHJzaV85MXhfZGVpbml0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBSU0kgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBoZXJlLCB3aGV0aGVyIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggU0RJTyBvciBVU0IsIHRoZSBgcnNpX3Byb2JlYCBmdW5jdGlvbiBpcyB0aGUgaW5pdGlhbCBwb2ludCBvZiBlbnRyeS4gSXQmIzM5O3MgdGhlIG9uZSB0aGF0IGV2ZW50dWFsbHkga2lja3Mgb2ZmIGByc2lfOTF4X2luaXRgLiBOb3csIGByc2lfOTF4X2luaXRgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3Igc3Bhd25pbmcgdGhlIGB0eF90aHJlYWRgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkIGEgdHJhbnNtaXQgdGhyZWFkIHJpZ2h0IGZyb20gdGhlIGJlZ2lubmluZy4KCk5vdywgaXQgZ2V0cyBhIGJpdCBtb3JlIHNwZWNpZmljIGJhc2VkIG9uIHRoZSBidXMgdHlwZS4gRm9yIFVTQiwgYHJzaV9wcm9iZWAgc3Vic2VxdWVudGx5IGNhbGxzIGByc2lfaW5pdF91c2JfaW50ZXJmYWNlYCwgd2hpY2ggdGhlbiBsZWFkcyB0byBgcnNpX3VzYl9pbml0X3J4YC4gQW5kIHRoaXMsIGNyaXRpY2FsbHksIGNyZWF0ZXMgdGhlIGByeF90aHJlYWRgIGZvciBVU0IuIEZvciBTRElPLCB0aG91Z2gsIHRoZSBgcnhfdGhyZWFkYCBpcyBjcmVhdGVkIGRpcmVjdGx5IHdpdGhpbiB0aGUgYHJzaV9wcm9iZWAgZnVuY3Rpb24gaXRzZWxmLiBTbywgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGRpZmZlcnMgZXZlciBzbyBzbGlnaHRseSBkZXBlbmRpbmcgb24gaWYgd2UgYXJlIGRvaW5nIFNESU8gb3IgVVNCLgoKSSB1bmRlcnN0YW5kIHRoZSBjb3JlIGZsb3csIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hhdCBgcnNpX2NvZXhfYXR0YWNoYCBpcyBhYm91dC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byByZXZpc2l0IHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIHNlZSB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBpcyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV9jb2V4X2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTEwMT1pbnQgcnNpX2NvZXhfc2VuZF9wa3Qodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaGFsX3F1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MTM5OmludCByc2lfY29leF9hdHRhY2goc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xNDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYz0zMDI9c3RydWN0IHJzaV9odyAqcnNpXzkxeF9pbml0KHUxNiBvcGVyX21vZGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTM3NC1cdGlmIChjb21tb24tXHUwMDNlY29leF9tb2RlIFx1MDAzZSAxKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM6Mzc1Olx0XHRpZiAocnNpX2NvZXhfYXR0YWNoKGNvbW1vbikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zNzYtXHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgY29leCBtb2R1bGVcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29leC5oPTI2PXN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvZXguaC0zMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29leC5oOjMyOmludCByc2lfY29leF9hdHRhY2goc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvZXguaC0zMy12b2lkIHJzaV9jb2V4X2RldGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN5emthbGxlciBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIFJTSSBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGluIHRoaXMgUlNJIGRyaXZlciBhcmUgdGhlIGJlc3QgdGFyZ2V0cyBmb3IgU3l6a2FsbGVyIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgcnNpXzkxeF9pbml0YCBjYWxscyBgcnNpX2NvZXhfYXR0YWNoYCwgd2hpY2ggdGhlbiBzcGF3bnMgdGhlIGBjb2V4X3R4X3RocmVhZGAuIFRoaXMgd2hvbGUgc2VxdWVuY2Ugc3RhcnRzIGZyb20gYHJzaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgY2FsbGJhY2suIFRoZSBkb2N1bWVudGF0aW9uIG1lbnRpb25zIHRoYXQgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYGlnYl9yZW1vdmVgIG9ubHkgcnVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kcywgc28gbWF5YmUgYHJzaV9wcm9iZWAgaXMgbGltaXRlZCB0byBob3QtcGx1ZyBzY2VuYXJpb3M/IE5vLCB0aGF0JiMzOTtzIHdyb25nLiBgcnNpX3Byb2JlYCBleGVjdXRlcyB3aGVuIHRoZSBVU0IgZGV2aWNlIGlzIGNvbm5lY3RlZCwgd2hpY2ggU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgKndpbGwqIHRyaWdnZXIuIE9rYXksIHNvIGByc2lfcHJvYmVgIGlzIGRlZmluaXRlbHkgZnV6emFibGUuCgpCdXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgYW5kIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBrZXkgZnVuY3Rpb25zIGlkZW50aWZpZWQgYXJlOiBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4gSG1tLCB0aG9zZSBhcmUgKnRocmVhZCogZnVuY3Rpb25zLiBDYW4gU3l6a2FsbGVyIHJlYWNoIHRob3NlPyBZZXMsIGBrdGhyZWFkX3J1bmAgc3RhcnRzIHRoZW0gZHVyaW5nIHRoZSBwcm9iZSBwcm9jZXNzLiBBbmQgc2luY2UgU3l6a2FsbGVyIHRyYWNlcyBhbGwga2VybmVsIGV4ZWN1dGlvbiwgaXQgKmNhbiogdHJhY2UgdGhvc2UgdGhyZWFkcyBldmVuIGlmIHRoZXkmIzM5O3JlIGFzeW5jaHJvbm91cy4KCk5vdywgYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgIGFuZCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpcyBub3QgaWRlYWwuIEJ1dCwgYXQgbGVhc3QsIEkgY2FuIGxpc3QgdGhlaXIgY2FsbGVycyBgcnNpXzkxeF9pbml0YCBhbmQgYHJzaV9jb2V4X2F0dGFjaGAuIGByc2lfY29leF9hdHRhY2hgIGlzIG5vbi1zdGF0aWMuIFRoZSBrZXkgaGVyZSBpcyB0byBsaXN0IG5vbi1zdGF0aWMgZnVuY3Rpb25zLgoKU28sIGxldCYjMzk7cyBsaXN0IHRoZSBub24tc3RhdGljIHRocmVhZCBmdW5jdGlvbnM6IGByc2lfc2Rpb19yeF90aHJlYWRgIGFuZCBgcnNpX3VzYl9yeF90aHJlYWRgLiBQbHVzLCBgcnNpXzkxeF9pbml0YCBhbmQgYHJzaV9jb2V4X2F0dGFjaGAuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgYHJzaV9zZGlvX3J4X3RocmVhZGAgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAgYXJlIGFjdHVhbGx5IGV4cG9ydGVkLiBXaGlsZSBub3QgZXhwbGljaXRseSBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCwgdGhleSAqYXJlKiBub24tc3RhdGljIGFuZCBkZWNsYXJlZCBpbiBoZWFkZXJzLCB3aGljaCBtZWFucyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdC4KClRoZSBgcnNpX3Byb2JlYCBmdW5jdGlvbiBpcyBzdGF0aWMuIFNvLCBJIGRvbiYjMzk7dCBsaXN0IHRoYXQuCgpgcnNpXzkxeF9pbml0YCBpcyBgRVhQT1JUX1NZTUJPTF9HUExgIGFuZCBgcnNpX2NvZXhfYXR0YWNoYCBpcyBub24tc3RhdGljLCBzbyBnb29kIHRvIGdvLgoKQW5kIGByc2lfY3JlYXRlX2t0aHJlYWRgIGlzIGEgc3RhdGljIGlubGluZSwgc28gdGhhdCYjMzk7cyBvdXQuCgpUaGVyZWZvcmUsIHRoZSBtYWluIGZ1enppbmcgdGFyZ2V0cyBzaG91bGQgYmU6CgoqICAgYHJzaV9zZGlvX3J4X3RocmVhZGAKKiAgIGByc2lfdXNiX3J4X3RocmVhZGAKKiAgIGByc2lfOTF4X2luaXRgCiogICBgcnNpX2NvZXhfYXR0YWNoYAoKSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbG9jYXRlZC4gYHJzaV9zZGlvX3J4X3RocmVhZGAgaXMgaW4gYHJzaV85MXhfc2Rpb19vcHMuY2AgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAgaXMgaW4gYHJzaV85MXhfdXNiX29wcy5jYC4KCk9rYXksIG5leHQgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaGFzOiBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBSU0lfU0RJT2AsIGFuZCBgUlNJX0NPRVhgIHNldC4gT2gsIGFuZCBgUlNJX0NPRVhgIGRlcGVuZHMgb24gYEJUYCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQgYXMgd2VsbC4gVGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYEtjb25maWdgIGZvciB0aGUgYHJzaWAgZHJpdmVyIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUlNJX0NPRVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz0zOT1jb25maWcgUlNJX1VTQlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQ2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NDc6Y29uZmlnIFJTSV9DT0VYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7UmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM3OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBSU0lfQ09FWCoqCgpPa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIGFuZCByZWFsbHkgZHJpbGwgZG93biBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBSU0lfQ09FWGAuIEkmIzM5O20gZ29pbmcgdG8gcmUtZXhhbWluZSB0aGUgZnVsbCBkZXBlbmRlbmN5IHRyZWUsIGFuZCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBpbiB0aGUgaW5pdGlhbCByZXZpZXcuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGltcGFjdCBmcm9tIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBjb3JlIGZyYW1ld29ya3MsIGxpYnJhcmllcywgb3Igc3lzdGVtIGFyY2hpdGVjdHVyZSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBvdmVybG9va2VkLiBUaGUgZ29hbCBpc24mIzM5O3QganVzdCB0byBzZWUgKndoYXQqIGBSU0lfQ09FWGAgZGVwZW5kcyBvbiwgYnV0ICp3aHkqLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgaXRzIHN0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCBmdXR1cmUgZGV2ZWxvcG1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvdXBsaW5nIGlzc3VlcyBvciBoaWRkZW4gYm90dGxlbmVja3MgbHVya2luZyBpbiB0aGUgZGVwZW5kZW5jeSBncmFwaC4gSSYjMzk7bSB0aGlua2luZyBwYXJ0aWN1bGFybHkgYWJvdXQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLCB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyB0aGF0IGNyZWF0ZSB1bmV4cGVjdGVkIGNvbmZsaWN0cywgb3IgZXZlbiB0aG9zZSBkZXBlbmRlbmNpZXMgd2hpY2ggYWRkIHVubmVjZXNzYXJ5IHdlaWdodC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGRlZXBlciBkaXZlIHJldmVhbHMgYW55dGhpbmcgbmV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydFwmIzM0O1xuICA0MTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IFJTSV85MVhcbiAgNDI6XHRcdGRlZmF1bHQgbVxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXG4gIDQ1Olx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIFJTSV9DT0VYXG4gIDQ4Olx0XHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBXTEFOIEJUIENvZXhpc3RlbmNlIHN1cHBvcnRcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gQlQgXHUwMDI2XHUwMDI2IFJTSV85MVhcbiAgNTA6XHRcdGRlcGVuZHMgb24gIShCVD1tIFx1MDAyNlx1MDAyNiBSU0lfOTFYPXkpXG4gIDUxOlx0XHRkZWZhdWx0IHlcbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgV0xBTiBCVCBjb2V4IHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXG4gIDU0Olx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIHdhbnQgdG8gdXNlIHRoaXMgZmVhdHVyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2OQoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiAxMDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUlNJIDkxeCBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBDRkkgdmlvbGF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIFJTSSA5MXggd2lyZWxlc3MgZHJpdmVyLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gdGhlIGRlcGVuZGVuY2llcywgaXQgbG9va3MgbGlrZTogYFJTSV9DT0VYYCBuZWVkcyBgQlRgIGFuZCBgUlNJXzkxWGAuIGBSU0lfU0RJT2AgcmVsaWVzIG9uIGBNTUNgIGFuZCBgUlNJXzkxWGAuIGBSU0lfVVNCYCBkZXBlbmRzIG9uIGBVU0JgIGFuZCBgUlNJXzkxWGAuIEFuZCBmaW5hbGx5LCBgUlNJXzkxWGAgaXRzZWxmIG5lZWRzIGBNQUM4MDIxMWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuYWJsZSBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBSU0lfU0RJT2AsIGBSU0lfQ09FWGAsIGFuZCBgTUFDODAyMTFgIGFzIHRoZSBrZXkgUlNJLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbG9uZyB3aXRoIGBNTUNgLCBgVVNCYCwgYW5kIGBCVGAuIFdoaWxlIGBNQUM4MDIxMWAsIGBVU0JgLCBgTU1DYCwgYW5kIGBCVGAgYXJlIGZhaXJseSBzdGFuZGFyZCwgaXQmIzM5O3Mgc2FmZXIgdG8gaW5jbHVkZSB0aGVtIGhlcmUuCgpTaW5jZSB0aGUgcHJvbXB0IHNwZWNpZmllcyBOT1QgYWRkaW5nIHRoZSBgQ09ORklHX2AgcHJlZml4IHRvIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwgSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpUaGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgY3Jhc2ggdW5kZXIgQ0ZJLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZyAoYW5kIHBvdGVudGlhbGx5IFNESU8gZW11bGF0ZWQgZW52aXJvbm1lbnRzKS4gU28sIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIG9idmlvdXMgY29uY2x1c2lvbi4KCk5vdywgZm9jdXNpbmcgb24gdGhlIGNyaXRpY2FsIHN5bWJvbHMsIEkgaWRlbnRpZnkgYHJzaV9zZGlvX3J4X3RocmVhZGAsIGByc2lfdXNiX3J4X3RocmVhZGAsIGByc2lfOTF4X2luaXRgLCBhbmQgYHJzaV9jb2V4X2F0dGFjaGAuIFRoaXMgaXMgYmVjYXVzZSB0aGUgcGF0Y2ggbW9kaWZpZXMgZnVuY3Rpb24gc2lnbmF0dXJlcywgc28gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGNoYW5nZWQgaXMgYSBnb29kIHN0YXJ0LiBJIGNhbiB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBieSBleGFtaW5pbmcgdGhlIGRpZmYuCgpJIHRoZW4gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBtb2RpZmllZDogYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAuIGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCBhbmQgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCBhcmUgc3RhdGljIGFuZCBwb3RlbnRpYWxseSBpbmxpbmVkLCBidXQgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgcnNpX2NyZWF0ZV9rdGhyZWFkYCwgc28gdGhlaXIgc3ltYm9sIGFkZHJlc3Mgd2lsbCBiZSBkaXN0aW5jdC4gVGhlIGluc3RydWN0aW9ucyBmYXZvciBub24tc3RhdGljIGZ1bmN0aW9ucywgc28gSSB3aWxsIGxpc3QgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIHRoZSB0aHJlYWRzLiBUaHVzIEkmIzM5O2xsIGxpc3QgdGhlIHRocmVhZCBmdW5jdGlvbnMuCgpJIHZlcmlmaWVkIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgc3ltYm9scyBpbiBxdWVzdGlvbiAoYHJzaV9zZGlvX3J4X3RocmVhZGAsIGByc2lfdXNiX3J4X3RocmVhZGAsIGByc2lfOTF4X2luaXRgLCBhbmQgYHJzaV9jb2V4X2F0dGFjaGApLCBjb25maXJtaW5nIHRoYXQgdGhleSBhcmUgZGVjbGFyZWQgaW4gaGVhZGVycyBhbmQgZGVmaW5lZCBpbiBzb3VyY2UgZmlsZXMgYW5kIGV4cG9ydGVkIHdoZXJlIGFwcGxpY2FibGUuCgpUaHVzLCB0aGUgZmluYWwgYEVuYWJsZUNvbmZpZ3NgIGFyZTogYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgUlNJX1NESU9gLCBgUlNJX0NPRVhgLCBgTUFDODAyMTFgLCBgTU1DYCwgYEJUYC4KClRoaXMgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOX1ZFTkRPUl9SU0kmIzM0OywKICAgICYjMzQ7UlNJXzkxWCYjMzQ7LAogICAgJiMzNDtSU0lfVVNCJiMzNDssCiAgICAmIzM0O1JTSV9TRElPJiMzNDssCiAgICAmIzM0O1JTSV9DT0VYJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01NQyYjMzQ7LAogICAgJiMzNDtCVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JzaV9zZGlvX3J4X3RocmVhZCYjMzQ7LAogICAgJiMzNDtyc2lfdXNiX3J4X3RocmVhZCYjMzQ7LAogICAgJiMzNDtyc2lfOTF4X2luaXQmIzM0OywKICAgICYjMzQ7cnNpX2NvZXhfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgQ29udHJvbC1GbG93IEludGVncml0eSAoQ0ZJKSB2aW9sYXRpb24gYnkgY29ycmVjdGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBvZiBzZXZlcmFsIGt0aHJlYWQgZnVuY3Rpb25zIGluIHRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gVGhlc2UgdGhyZWFkcyBhcmUgY3JlYXRlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChmdXp6aW5nKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTl9WRU5ET1JfUlNJJiMzNDssCiAgICAmIzM0O1JTSV85MVgmIzM0OywKICAgICYjMzQ7UlNJX1VTQiYjMzQ7LAogICAgJiMzNDtSU0lfU0RJTyYjMzQ7LAogICAgJiMzNDtSU0lfQ09FWCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNTUMmIzM0OywKICAgICYjMzQ7QlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfc2Rpb19yeF90aHJlYWQmIzM0OywKICAgICYjMzQ7cnNpX3VzYl9yeF90aHJlYWQmIzM0OywKICAgICYjMzQ7cnNpXzkxeF9pbml0JiMzNDssCiAgICAmIzM0O3JzaV9jb2V4X2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MToxNi45ODU5NjY5MzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTU1ODE4NDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOX1ZFTkRPUl9SU0lcIixcbiAgICBcIlJTSV85MVhcIixcbiAgICBcIlJTSV9VU0JcIixcbiAgICBcIlJTSV9TRElPXCIsXG4gICAgXCJSU0lfQ09FWFwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1NQ1wiLFxuICAgIFwiQlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyc2lfc2Rpb19yeF90aHJlYWRcIixcbiAgICBcInJzaV91c2JfcnhfdGhyZWFkXCIsXG4gICAgXCJyc2lfOTF4X2luaXRcIixcbiAgICBcInJzaV9jb2V4X2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgQ29udHJvbC1GbG93IEludGVncml0eSAoQ0ZJKSB2aW9sYXRpb24gYnkgY29ycmVjdGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBvZiBzZXZlcmFsIGt0aHJlYWQgZnVuY3Rpb25zIGluIHRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gVGhlc2UgdGhyZWFkcyBhcmUgY3JlYXRlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChmdXp6aW5nKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6MTYuOTg1OTcyODI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkyMjEyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YzAyNzhhNzIzNzUwMDliZWNmM2UwOTJiOTA5NGE5NjI5ZDY1ZDZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTk6NDE6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXFxuaW5kZXggZWU2MDNhNTE3M2ZiMy4uMDIzYzUzOWZjMzg0MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmNcXG5AQCAtNTAsOCArNTAsOSBAQCBzdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZF90eF9wa3RzKHN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiKVxcbiBcXHR9IHdoaWxlIChjb2V4X3EgIT0gUlNJX0NPRVhfUV9JTlZBTElEKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbitzdGF0aWMgaW50IHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWQodm9pZCAqZGF0YSlcXG4ge1xcbitcXHRzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uID0gZGF0YTtcXG4gXFx0c3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IgPSBjb21tb24tXFx1MDAzZWNvZXhfY2I7XFxuIFxcdHUzMiB0aW1lb3V0ID0gRVZFTlRfV0FJVF9GT1JFVkVSO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jXFxuaW5kZXggNjYyZTQyZDFlNWU4ZC4uNjFkYjJiMzYzZDExNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmNcXG5AQCAtMjQ2LDEyICsyNDYsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwocnNpX3JlYWRfcGt0KTtcXG4gLyoqXFxuICAqIHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKCkgLSBUaGlzIGZ1bmN0aW9uIGlzIGEga2VybmVsIHRocmVhZCB0byBzZW5kIHRoZVxcbiAgKlxcdFxcdFxcdCAgICAgICBwYWNrZXRzIHRvIHRoZSBkZXZpY2UuXFxuLSAqIEBjb21tb246IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZS5cXG4rICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZS5cXG4gICpcXG4gICogUmV0dXJuOiBOb25lLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4rc3RhdGljIGludCByc2lfdHhfc2NoZWR1bGVyX3RocmVhZCh2b2lkICpkYXRhKVxcbiB7XFxuK1xcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xcbiBcXHRzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyID0gY29tbW9uLVxcdTAwM2Vwcml2O1xcbiBcXHR1MzIgdGltZW91dCA9IEVWRU5UX1dBSVRfRk9SRVZFUjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jXFxuaW5kZXggNTk3YjIzOGUyMjk0OS4uMThhMjhhYTk3NDQ2MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuY1xcbkBAIC02Miw4ICs2Miw5IEBAIGludCByc2lfc2Rpb19tYXN0ZXJfYWNjZXNzX21zd29yZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgbXNfd29yZClcXG4gXFxuIHN0YXRpYyB2b2lkIHJzaV9yeF9oYW5kbGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xcbiBcXG4tdm9pZCByc2lfc2Rpb19yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4raW50IHJzaV9zZGlvX3J4X3RocmVhZCh2b2lkICpkYXRhKVxcbiB7XFxuK1xcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xcbiBcXHRzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyID0gY29tbW9uLVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3QgcnNpXzkxeF9zZGlvZGV2ICpzZGV2ID0gYWRhcHRlci1cXHUwMDNlcnNpX2RldjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuY1xcbmluZGV4IDI1YzJiMjMyMzk0YTYuLjUxM2QyZmRmYjUxMDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXFxuQEAgLTI1LDggKzI1LDkgQEBcXG4gICpcXG4gICogUmV0dXJuOiBOb25lLlxcbiAgKi9cXG4tdm9pZCByc2lfdXNiX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbitpbnQgcnNpX3VzYl9yeF90aHJlYWQodm9pZCAqZGF0YSlcXG4ge1xcbitcXHRzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uID0gZGF0YTtcXG4gXFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cXHUwMDNlcHJpdjtcXG4gXFx0c3RydWN0IHJzaV85MXhfdXNiZGV2ICpkZXYgPSBhZGFwdGVyLVxcdTAwM2Vyc2lfZGV2O1xcbiBcXHRpbnQgc3RhdHVzO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxcbmluZGV4IDNjZGY5ZGVkODc2ZDkuLjJhMzNhODFmNzFhM2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmhcXG5AQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnNpX3Jlc2V0X2V2ZW50KHN0cnVjdCByc2lfZXZlbnQgKmV2ZW50KVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgcnNpX2NyZWF0ZV9rdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJzaV90aHJlYWQgKnRocmVhZCxcXG4tXFx0XFx0XFx0XFx0ICAgICB2b2lkICpmdW5jX3B0cixcXG4rXFx0XFx0XFx0XFx0ICAgICBpbnQgKCpmdW5jX3B0cikodm9pZCAqZGF0YSksXFxuIFxcdFxcdFxcdFxcdCAgICAgdTggKm5hbWUpXFxuIHtcXG4gXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZ0aHJlYWQtXFx1MDAzZWNvbXBsZXRpb24pO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXFxuaW5kZXggN2M5MWIxMjZiMzUwZi4uZWIyYjdmMzZhN2U0YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXFxuQEAgLTEzNCw1ICsxMzQsNSBAQCBpbnQgcnNpX3NkaW9fbWFzdGVyX2FjY2Vzc19tc3dvcmQoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTE2IG1zX3dvcmQpO1xcbiB2b2lkIHJzaV9zZGlvX2Fja19pbnRyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IGludF9iaXQpO1xcbiBpbnQgcnNpX3NkaW9fZGV0ZXJtaW5lX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcik7XFxuIGludCByc2lfc2Rpb19jaGVja19idWZmZXJfc3RhdHVzKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IHFfbnVtKTtcXG4tdm9pZCByc2lfc2Rpb19yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XFxuK2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaFxcbmluZGV4IDk2MTg1MTc0OGJjNGMuLjc4MDY3ZWFmZmU4YjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmhcXG5AQCAtODEsNSArODEsNSBAQCBzdGF0aWMgaW5saW5lIGludCByc2lfdXNiX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4gXFx0cmV0dXJuIEVWRU5UX1dBSVRfRk9SRVZFUjtcXG4gfVxcbiBcXG4tdm9pZCByc2lfdXNiX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcXG4raW50IHJzaV91c2JfcnhfdGhyZWFkKHZvaWQgKmRhdGEpO1xcbiAjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6MTcuMjY1ODc3MTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzUyNzgyNjQwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJSU0lfU0RJT1wiLFxuICAgIFwiUlNJX0NPRVhcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNTUNcIixcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnNpX3NkaW9fcnhfdGhyZWFkXCIsXG4gICAgXCJyc2lfdXNiX3J4X3RocmVhZFwiLFxuICAgIFwicnNpXzkxeF9pbml0XCIsXG4gICAgXCJyc2lfY29leF9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljMDI3OGE3MjM3NTAwOWJlY2YzZTA5MmI5MDk0YTk2MjlkNjVkNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE5OjQxOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXG5pbmRleCBlZTYwM2E1MTczZmIzLi4wMjNjNTM5ZmMzODQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmNcbkBAIC01MCw4ICs1MCw5IEBAIHN0YXRpYyB2b2lkIHJzaV9jb2V4X3NjaGVkX3R4X3BrdHMoc3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IpXG4gXHR9IHdoaWxlIChjb2V4X3EgIT0gUlNJX0NPRVhfUV9JTlZBTElEKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuK3N0YXRpYyBpbnQgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZCh2b2lkICpkYXRhKVxuIHtcbitcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xuIFx0c3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IgPSBjb21tb24tXHUwMDNlY29leF9jYjtcbiBcdHUzMiB0aW1lb3V0ID0gRVZFTlRfV0FJVF9GT1JFVkVSO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uY1xuaW5kZXggNjYyZTQyZDFlNWU4ZC4uNjFkYjJiMzYzZDExNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jXG5AQCAtMjQ2LDEyICsyNDYsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwocnNpX3JlYWRfcGt0KTtcbiAvKipcbiAgKiByc2lfdHhfc2NoZWR1bGVyX3RocmVhZCgpIC0gVGhpcyBmdW5jdGlvbiBpcyBhIGtlcm5lbCB0aHJlYWQgdG8gc2VuZCB0aGVcbiAgKlx0XHRcdCAgICAgICBwYWNrZXRzIHRvIHRoZSBkZXZpY2UuXG4tICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLlxuKyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUuXG4gICpcbiAgKiBSZXR1cm46IE5vbmUuXG4gICovXG4tc3RhdGljIHZvaWQgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbitzdGF0aWMgaW50IHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpXG4ge1xuK1x0c3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiA9IGRhdGE7XG4gXHRzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyID0gY29tbW9uLVx1MDAzZXByaXY7XG4gXHR1MzIgdGltZW91dCA9IEVWRU5UX1dBSVRfRk9SRVZFUjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuY1xuaW5kZXggNTk3YjIzOGUyMjk0OS4uMThhMjhhYTk3NDQ2MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmNcbkBAIC02Miw4ICs2Miw5IEBAIGludCByc2lfc2Rpb19tYXN0ZXJfYWNjZXNzX21zd29yZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgbXNfd29yZClcbiBcbiBzdGF0aWMgdm9pZCByc2lfcnhfaGFuZGxlcihzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKTtcbiBcbi12b2lkIHJzaV9zZGlvX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuK2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSlcbiB7XG4rXHRzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uID0gZGF0YTtcbiBcdHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCByc2lfOTF4X3NkaW9kZXYgKnNkZXYgPSBhZGFwdGVyLVx1MDAzZXJzaV9kZXY7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXG5pbmRleCAyNWMyYjIzMjM5NGE2Li41MTNkMmZkZmI1MTA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmNcbkBAIC0yNSw4ICsyNSw5IEBAXG4gICpcbiAgKiBSZXR1cm46IE5vbmUuXG4gICovXG4tdm9pZCByc2lfdXNiX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuK2ludCByc2lfdXNiX3J4X3RocmVhZCh2b2lkICpkYXRhKVxuIHtcbitcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xuIFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHJzaV85MXhfdXNiZGV2ICpkZXYgPSBhZGFwdGVyLVx1MDAzZXJzaV9kZXY7XG4gXHRpbnQgc3RhdHVzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oXG5pbmRleCAzY2RmOWRlZDg3NmQ5Li4yYTMzYTgxZjcxYTNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxuQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJzaV9yZXNldF9ldmVudChzdHJ1Y3QgcnNpX2V2ZW50ICpldmVudClcbiBcbiBzdGF0aWMgaW5saW5lIGludCByc2lfY3JlYXRlX2t0aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbixcbiBcdFx0XHRcdCAgICAgc3RydWN0IHJzaV90aHJlYWQgKnRocmVhZCxcbi1cdFx0XHRcdCAgICAgdm9pZCAqZnVuY19wdHIsXG4rXHRcdFx0XHQgICAgIGludCAoKmZ1bmNfcHRyKSh2b2lkICpkYXRhKSxcbiBcdFx0XHRcdCAgICAgdTggKm5hbWUpXG4ge1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnRocmVhZC1cdTAwM2Vjb21wbGV0aW9uKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXG5pbmRleCA3YzkxYjEyNmIzNTBmLi5lYjJiN2YzNmE3ZTRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9zZGlvLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXG5AQCAtMTM0LDUgKzEzNCw1IEBAIGludCByc2lfc2Rpb19tYXN0ZXJfYWNjZXNzX21zd29yZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgbXNfd29yZCk7XG4gdm9pZCByc2lfc2Rpb19hY2tfaW50cihzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCBpbnRfYml0KTtcbiBpbnQgcnNpX3NkaW9fZGV0ZXJtaW5lX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcik7XG4gaW50IHJzaV9zZGlvX2NoZWNrX2J1ZmZlcl9zdGF0dXMoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTggcV9udW0pO1xuLXZvaWQgcnNpX3NkaW9fcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pO1xuK2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmhcbmluZGV4IDk2MTg1MTc0OGJjNGMuLjc4MDY3ZWFmZmU4YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oXG5AQCAtODEsNSArODEsNSBAQCBzdGF0aWMgaW5saW5lIGludCByc2lfdXNiX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbiBcdHJldHVybiBFVkVOVF9XQUlUX0ZPUkVWRVI7XG4gfVxuIFxuLXZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XG4raW50IHJzaV91c2JfcnhfdGhyZWFkKHZvaWQgKmRhdGEpO1xuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6MTcuMjY1ODc4MzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM4NjU0MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtZXNzaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgc2NyZWFtcyBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gSSBrbm93IHRoaXMgZHJpdmVyOyBpdCdzIGZvciBSZWRwaW5lIFNpZ25hbHMnIFdMQU4gYW5kIEJsdWV0b290aCBjb21ibyBkZXZpY2UuIE15IG1haW4gY29uY2VybiByaWdodCBub3cgaXMgaG93IHJlYWNoYWJsZSBhcmUgdGhlc2UgdGhyZWFkIGZ1bmN0aW9ucz8gSXMgdGhpcyBkcml2ZXIgYWN0aXZlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/XG5cbkl0J3MgYSB3aXJlbGVzcyBkcml2ZXIsIGJ1dCB0aGUgcHJlc2VuY2Ugb2YgU0RJTyBhbmQgVVNCIGludGVyZmFjZXMgc3BhcmtzIGFuIGludGVyZXN0aW5nIHRob3VnaHQuIFVTQiBkZXZpY2VzIGFyZSBvZnRlbiBlbXVsYXRlZCBmb3IgdGVzdGluZy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgVVNCIGdhZGdldCwgZHVtbXlfaGNkLCBvciBldmVuIHN5emthbGxlcidzIFVTQiBmdXp6ZXIgKHVzaW5nIHZoY2kpLiBUaGUgYHJzaV91c2JfcnhfdGhyZWFkYCBpcyB0aGUgbW9zdCBpbnRyaWd1aW5nIG9uZSBmb3IgdGhpcyBsaW5lIG9mIHRob3VnaHQgLSBDb3VsZCBpdCBiZSB0YXJnZXRlZCB3aXRoIGZ1enppbmc/IFRoZW4gaXQgaGl0cyBtZSwgc3l6a2FsbGVyIGhhcyBhIFVTQiBmdXp6ZXIgd2hpY2ggY2FuIGVtdWxhdGUgYXJiaXRyYXJ5IFVTQiBkZXZpY2VzLiBZZXMsIHRoYXQgbWFrZXMgVVNCIGRyaXZlcnMgcmVhY2hhYmxlIGJ5IGZ1enppbmcuIE9rYXksIHRoYXQncyBleGNpdGluZyAtIEkgdGhpbmsgdGhpcyBkcml2ZXIgY291bGQgYmUgZnV6emVkIHZpYSBVU0IsIHdoaWNoIGxlYWRzIHRvIHRoaW5raW5nIHRoZXJlIGNvdWxkIGJlIHJlYWwgYnVncyBoZXJlLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBSU0lfOTFYYCBpcyB0aGUgY29ycmVjdCBLY29uZmlnIHN5bWJvbC4gVGltZSB0byBzZWFyY2ggZm9yIHRoZSBkcml2ZXIncyBLY29uZmlnIGRlZmluaXRpb24gdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY1MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjIyLjkwNDUzNjEyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYyMDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUlNJXzkxWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE1OmNvbmZpZyBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTYtXFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjIyLjk0NzE2MDU2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTYyNjkwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBSU0lfOTFYKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgUlNJXzkxWGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYmVmb3JlIG1ha2luZyBhbnkgY2hhbmdlcyBvciBjb25zaWRlcmluZyBpbnRlZ3JhdGlvbiB3aXRoIGFueXRoaW5nIG5ldy4gTGV0J3Mgc2VlLi4uIGZpcnN0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyBpdCdzIGxpa2VseSB1c2luZy4gV2UgaGF2ZSB0aGUgdXN1YWwgc3VzcGVjdHMgLSBOdW1QeSwgU2NpUHksIG1heWJlIFBhbmRhcyBmb3IgZGF0YSBoYW5kbGluZyBpZiBpdCdzIHByb2Nlc3NpbmcgdGltZSBzZXJpZXMgZGF0YS4gVGhlbiB0aGVyZSBtaWdodCBiZSBzb21lIHNwZWNpYWxpemVkIGxpYnJhcmllcyBmb3Igc2lnbmFsIHByb2Nlc3Npbmcgb3IgZmluYW5jaWFsIGFuYWx5c2lzLCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgOTFYIHZlcnNpb24gcmVwcmVzZW50cyBhbmQgdGhlIHNjb3BlLlxuXG5JIGhhdmUgdG8gY29uc2lkZXIgdGhlIHZlcnNpb24gY29tcGF0aWJpbGl0eSBvZiBlYWNoIGRlcGVuZGVudCBsaWJyYXJ5LiBBcmUgdGhlcmUgYW55IGtub3duIGNvbmZsaWN0cz8gQXJlIHdlIHN0aWxsIHJ1bm5pbmcgb24gb3V0ZGF0ZWQgdmVyc2lvbnMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBJIHdhbnQgdG8gYXZvaWQgdGhlIFwiZGVwZW5kZW5jeSBoZWxsXCIgc2NlbmFyaW8gYXQgYWxsIGNvc3RzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGltcG9ydCBzdGF0ZW1lbnRzIGFuZCB0aGUgcHJvamVjdCdzIHNldHVwIGZpbGVzIChweXByb2plY3QudG9tbCwgcmVxdWlyZW1lbnRzLnR4dCwgc2V0dXAucHksIGV0Yy4pIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY3kgZ3JhcGguXG5cbkl04oCZcyBhbHNvIGltcG9ydGFudCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2Vzcy4gV2hhdCB0b29scyBhcmUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZT8gSXMgaXQgdXNpbmcgc2V0dXB0b29scywgZmxpdCwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgY2FuIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIGRlcGVuZGVuY2llcy5cblxuQmV5b25kIHRoZSBpbW1lZGlhdGUgaW1wb3J0cywgSSdtIHRoaW5raW5nIGFib3V0IHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzLiBXaGF0IGxpYnJhcmllcyBkb2VzICp0aG9zZSogbGlicmFyaWVzIHJlbHkgb24/IFNvbWV0aW1lcywgaGlkZGVuIGRlcGVuZGVuY2llcyBjYW4gaW50cm9kdWNlIHVuZXhwZWN0ZWQgaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHBvb3JseSBtYWludGFpbmVkIG9yIGhhdmUgbGljZW5zaW5nIGNvbmNlcm5zLiBUaW1lIGZvciBhIGRlZXBlciBkaXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6MjYuNzYzNDMyMDU3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzU2NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSU0lfOTFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE1OmNvbmZpZyBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTYtXFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjI2LjgwODE5NDA2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTA2ODQ2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEaXZpbmcgaW50byB0aGUgUlNJIFdpcmVsZXNzIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIFJTSSB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUg4oCTIGxldCdzIG9wZW4gdXAgdGhhdCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWdgIGZpbGUuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY2VudHJhbCBodWIgZm9yIGRlZmluaW5nIHRoZSBidWlsZCBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBSU0kgd2lyZWxlc3MgZHJpdmVyLiBJJ20gY3VyaW91cyB0byBzZWUgaG93IGdyYW51bGFyIHRoZSBjb250cm9sIGlzLiBBcmUgd2UgbG9va2luZyBhdCBpbmRpdmlkdWFsIGZlYXR1cmUgZmxhZ3MgZm9yIGRpZmZlcmVudCA4MDIuMTEgc3RhbmRhcmRzLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGJyb2FkZXIsIG1vcmUgZW5jb21wYXNzaW5nIG9wdGlvbnM/IFdoYXQgYWJvdXQgaGFyZHdhcmUgc3VwcG9ydCDigJMgaXMgaXQgYWxsIGJ1bmRsZWQgdW5kZXIgb25lIHVtYnJlbGxhLCBvciBhcmUgdGhlcmUgZGlzdGluY3QgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudCBSU0kgY2hpcHNldHM/IFRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIGhvdyBmbGV4aWJsZSB0aGlzIGRyaXZlciBpcyBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBjYXVzZSBoZWFkYWNoZXMgZG93biB0aGUgcm9hZCwgZXNwZWNpYWxseSB3aGVuIGludGVncmF0aW5nIGl0IHdpdGggb3RoZXIgd2lyZWxlc3Mgc3RhY2tzIG9yIG5ldHdvcmsgc3Vic3lzdGVtcy4gVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmFiaWxpdHkgYW5kIGV4dGVuc2liaWxpdHkgb2YgdGhpcyBkcml2ZXIncyBidWlsZCBwcm9jZXNzLiBMZXQncyBnZXQgY3JhY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MTozMC4yNTg4ODEwNjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdMQU5fVkVORE9SX1JTSVxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgd2lyZWxlc3MgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAgNzpcXHRcXG4gICA4OlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gICA5OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG4gIDEwOlxcdFxcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxcbiAgMTE6XFx0XFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIFdMQU5fVkVORE9SX1JTSVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgUlNJXzkxWFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQlRfSENJUlNJIGlmIFJTSV9DT0VYXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAxOTpcXHRcXHRoZWxwXFxuICAyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJlcyBzdXBwb3J0IGZvciBSU0kgMXgxIGRldmljZXMuXFxuICAyMTpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBSU0lfREVCVUdGU1xcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZWJ1ZyBzdXBwb3J0XFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBSU0lfOTFYXFxuICAyNjpcXHRcXHRkZWZhdWx0IHlcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCBTYXkgWSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGRlYnVnIHN1cHBvcnQuIFRoaXMgb3B0aW9uXFxuICAyOTpcXHRcXHQgY3JlYXRlcyBkZWJ1Z2ZzIGVudHJpZXNcXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIFJTSV9TRElPXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVkcGluZSBTaWduYWxzIFNESU8gYnVzIHN1cHBvcnRcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIE1NQyBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuICAzNDpcXHRcXHRkZWZhdWx0IG1cXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cXG4gIDM3OlxcdFxcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIFJTSV9VU0JcXG4gIDQwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgVVNCIGJ1cyBzdXBwb3J0XFxcIlxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgNDI6XFx0XFx0ZGVmYXVsdCBtXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cXG4gIDQ1OlxcdFxcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIFJTSV9DT0VYXFxuICA0ODpcXHRcXHRib29sIFxcXCJSZWRwaW5lIFNpZ25hbHMgV0xBTiBCVCBDb2V4aXN0ZW5jZSBzdXBwb3J0XFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBCVCBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuICA1MDpcXHRcXHRkZXBlbmRzIG9uICEoQlQ9bSBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYPXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjMwLjI1ODk1NjI1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODIzMjc5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgRHJpdmVyIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCdzIGNhdGNoaW5nIG15IGF0dGVudGlvbi4gVGhleSdyZSBhbHRlcmluZyB0aGUgdGhyZWFkIGZ1bmN0aW9uIHNpZ25hdHVyZS4gUHJldmlvdXNseSwgd2UgaGFkIGB2b2lkIGZ1bmMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilgLCBidXQgbm93IGl0J3MgYGludCBmdW5jKHZvaWQgKmRhdGEpYC4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIGltcGxpY2F0aW9ucyDigJMgYGt0aHJlYWRfcnVuYCBhbmQgb3RoZXIgdGhyZWFkIGNyZWF0aW9uIGZ1bmN0aW9ucyBleHBlY3QgdGhhdCBgaW50ICgqdGhyZWFkZm4pKHZvaWQgKmRhdGEpYCBzaWduYXR1cmUuIFBhc3NpbmcgdGhlIHdyb25nIHNpZ25hdHVyZSB3b3VsZCBhYnNvbHV0ZWx5IHRyaWdnZXIgQ29udHJvbC1GbG93IEludGVncml0eSAoQ0ZJKSB2aW9sYXRpb25zLCBhbmQgdGhhdCdzIGEgc2VyaW91cyBzZWN1cml0eSBjb25jZXJuLiBTbywgdGhpcyBwYXRjaCBpcyBkaXJlY3RseSBhZGRyZXNzaW5nIGFuZCBmaXhpbmcgYSBDRkkgdmlvbGF0aW9uLiBUaGF0IG1ha2VzIHRoaXMgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGZpeC5cblxuTm93LCBsZXQncyBsb29rIGF0IGhvdyB0aGUgZHJpdmVyIGlzIGJlaW5nIGFjY2Vzc2VkLiBUaGUgdGV4dCBzYXlzIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGZ1enppbmcuIEludGVyZXN0aW5nLiBJdCBzb3VuZHMgbGlrZSB0aGlzIGlzIGhvdyB0aGUgdnVsbmVyYWJpbGl0eSB3YXMgZm91bmQsIGJ5IGxldmVyYWdpbmcgVVNCLiBBbmQgdGhlIG5lY2Vzc2FyeSBjb25maWdzIHRoYXQgdGhleSB1c2VkIGFyZSBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBSU0lfQ09FWGAsIGFuZCBgUlNJX1NESU9gLiBIb2xkIG9uLi4uIGBSU0lfQ09FWGAgZGVwZW5kcyBvbiBgQlRgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBkZXBlbmRlbmN5IGFuZCBrZWVwIGl0IGluIG1pbmQgYXMgSSBrZWVwIHJldmlld2luZy4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBgcnNpX2NyZWF0ZV9rdGhyZWFkYCB0byBjb25maXJtIHRoaXMgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjM0Ljk0MTI4NzI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2Nzc3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNpX2NyZWF0ZV9rdGhyZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTEzOT1pbnQgcnNpX2NvZXhfYXR0YWNoKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTU2LVxcdC8qIEluaXRpYWxpemUgY28tZXggdGhyZWFkICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjE1NzpcXHRpZiAocnNpX2NyZWF0ZV9rdGhyZWFkKGNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTU4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y29leF9jYi1cXHUwMDNlY29leF90eF90aHJlYWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM9MzAyPXN0cnVjdCByc2lfaHcgKnJzaV85MXhfaW5pdCh1MTYgb3Blcl9tb2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTMzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM6MzMyOlxcdGlmIChyc2lfY3JlYXRlX2t0aHJlYWQoY29tbW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zMzMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjb21tb24tXFx1MDAzZXR4X3RocmVhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYz0xMDAxPXN0YXRpYyBpbnQgcnNpX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnBmdW5jdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xMDQwLVxcdHJzaV9pbml0X2V2ZW50KFxcdTAwMjZzZGV2LVxcdTAwM2VyeF90aHJlYWQuZXZlbnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYzoxMDQxOlxcdHN0YXR1cyA9IHJzaV9jcmVhdGVfa3RocmVhZChhZGFwdGVyLVxcdTAwM2Vwcml2LCBcXHUwMDI2c2Rldi1cXHUwMDNlcnhfdGhyZWFkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xMDQyLVxcdFxcdFxcdFxcdCAgICByc2lfc2Rpb19yeF90aHJlYWQsIFxcXCJTRElPLVJYLVRocmVhZFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9NTczPXN0YXRpYyBpbnQgcnNpX3VzYl9pbml0X3J4KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01OTMtXFx0cnNpX2luaXRfZXZlbnQoXFx1MDAyNmRldi1cXHUwMDNlcnhfdGhyZWFkLmV2ZW50KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1OTQ6XFx0aWYgKHJzaV9jcmVhdGVfa3RocmVhZChhZGFwdGVyLVxcdTAwM2Vwcml2LCBcXHUwMDI2ZGV2LVxcdTAwM2VyeF90aHJlYWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTk1LVxcdFxcdFxcdCAgICAgICByc2lfdXNiX3J4X3RocmVhZCwgXFxcIlJYLVRocmVhZFxcXCIpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oPTU0PXN0YXRpYyBpbmxpbmUgdm9pZCByc2lfcmVzZXRfZXZlbnQoc3RydWN0IHJzaV9ldmVudCAqZXZlbnQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oLTU4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmg6NTk6c3RhdGljIGlubGluZSBpbnQgcnNpX2NyZWF0ZV9rdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaC02MC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCByc2lfdGhyZWFkICp0aHJlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjM0Ljk4Mjk3NjQ0MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjgyOTcyNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIENvbmZpZ3VyYXRpb24gYW5kIFRocmVhZCBTeW1ib2wgU2VsZWN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgQ0ZJIHZ1bG5lcmFiaWxpdHkgZml4LiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBlbmFibGUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIFdpLUZpIHZlbmRvcidzIFJTSSBoYXJkd2FyZS4gVGhlIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyIGFyZSBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBSU0lfU0RJT2AsIGFuZCBgUlNJX0NPRVhgLiBIb2xkIG9uLCBgUlNJX0NPRVhgIGhhcyBhIGRlcGVuZGVuY3kgb24gYEJUYCwgc28gdGhhdCBuZWVkcyB0byBiZSBrZXB0IGluIG1pbmQuXG5cblRoZSBwcm9tcHQgaGFzIGdpdmVuIG1lIGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHdoaWNoIGluY2x1ZGUsIGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCwgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCwgYHJzaV9zZGlvX3J4X3RocmVhZGAsIGFuZCBgcnNpX3VzYl9yeF90aHJlYWRgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGFyZSBleHBvcnRlZCBvciBzdGF0aWMuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlLiBMb29raW5nIGF0IGByc2lfOTF4X3NkaW9fb3BzLmNgIEkgZmluZCBgaW50IHJzaV9zZGlvX3J4X3RocmVhZCh2b2lkICpkYXRhKWAuIEluIGByc2lfOTF4X3VzYl9vcHMuY2AgdGhlcmUncyBgaW50IHJzaV91c2JfcnhfdGhyZWFkKHZvaWQgKmRhdGEpYC4gQW5kIGluIGByc2lfOTF4X2NvZXguY2AgdGhlcmUgaXMgYHN0YXRpYyBpbnQgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZCh2b2lkICpkYXRhKWAgYW5kIHRoZW4gaW4gYHJzaV85MXhfbWFpbi5jYCB0aGVyZSdzIGBzdGF0aWMgaW50IHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpYC5cblxuQWhhLCB0aGUgYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgIGFuZCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgIGFyZSAqc3RhdGljKi4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXkgbWlnaHQgbm90IGhhdmUgdW5pcXVlIHN5bWJvbHMgaWYgdGhlIGNvbXBpbGVyIGlubGluZXMgdGhlbS4gSG93ZXZlciwgSSByZWFsaXplIHRoZXkgYXJlIGFjdHVhbGx5IHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgcnNpX2NyZWF0ZV9rdGhyZWFkYCwgbWVhbmluZyB0aGV5ICpjYW4ndCogYmUgaW5saW5lZC4gVGhpcyBtZWFucyB0aGV5IHdpbGwgZGVmaW5pdGVseSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBzYXlpbmcgdG8gcHJlZmVyIG5vbi1zdGF0aWMgb25lcyBidXQgc2luY2UgdGhlc2UgYXJlIHBhc3NlZCBhcyBwb2ludGVycyB0byBgcnNpX2NyZWF0ZV9rdGhyZWFkYCwgdGhleSB3aWxsIG5vdCBiZSBpbmxpbmVkLiBCdXQgdG8gYmUgc2FmZSwgSSBjb3VsZCBjb25zaWRlciBpbmNsdWRpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSB0aGUgdGhyZWFkcyBvciB0aGUgdGhyZWFkIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBBY3R1YWxseSwgdGhlIHRocmVhZCBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgdGhlIG9uZXMgdGhhdCB3ZXJlIG1vZGlmaWVkLlxuXG5UaGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLiBTaW5jZSBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAgaXMgc3RhdGljLCBJIG1pZ2h0IG5lZWQgdG8gYWRkIGByc2lfY29leF9hdHRhY2hgLCBgcnNpXzkxeF9pbml0YCwgYHJzaV9wcm9iZWAgKGZvciBTRElPKSwgYHJzaV91c2JfaW5pdF9yeGAuXG5cbkJ1dCB3YWl0LCB0aGUgcmVhbCBpc3N1ZSBzZWVtcyB0byBiZSB0aGUgdGhyZWFkcyBhbmQgdGhyZWFkIGV4ZWN1dGlvbi4gSXQncyB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlIHRocmVhZHMgdGhhdCdzIHRyaWdnZXJpbmcgdGhlIENGSSB2aW9sYXRpb24sIG9yIGF0IGxlYXN0IHdoZW4gdGhlIHRocmVhZCBpcyBjcmVhdGVkLiBTbywgdGhlIGZ1enppbmcgbmVlZHMgdG8gZm9jdXMgb24gc3RhcnRpbmcgdGhlc2UgdGhyZWFkcy4gSSB0aGluayBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuXG5cblRoZXNlIHRocmVhZHMgYXJlIHN0YXJ0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIC0gYHJzaV85MXhfaW5pdGAsIGFuZCB0aGVuIGByc2lfcHJvYmVgIGZvciBib3RoIFNESU8gYW5kIFVTQi4gV2FpdC4uLiBpcyBgcnNpX3VzYl9pbml0X3J4YCBjYWxsZWQgZnJvbSBgcnNpX3Byb2JlYD8gVGhpcyBtYWtlcyBtZSB0aGluayBJIHNob3VsZCBmb2N1cyBvbiB0aGUgdGhyZWFkIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBJIHRoaW5rIHRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBDRkkgdmlvbGF0aW9uIGFyaXNlcyB3aGVuIHRoZSB0aHJlYWRzIGJlZ2luIHRvICpleGVjdXRlKi4gU28sIGZ1enppbmcgbmVlZHMgdG8gZXhlcmNpc2UgdGhvc2UgdGhyZWFkIGVudHJ5IHBvaW50cywgYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NDQuNjY1OTUyNDg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYwMzYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfdXNiX2luaXRfcnhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NjA9c3RhdGljIHZvaWQgcnNpX2RlaW5pdF91c2JfaW50ZXJmYWNlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NzItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTczOnN0YXRpYyBpbnQgcnNpX3VzYl9pbml0X3J4KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTYxNz1zdGF0aWMgaW50IHJzaV9pbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2NDU6XFx0aWYgKHJzaV91c2JfaW5pdF9yeChhZGFwdGVyKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0Ni1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIGluaXQgUlggaGFuZGxlXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NDQuNzQ0NTYyNDE0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDE5MzY2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHJzaV9pbml0X3VzYl9pbnRlcmZhY2VgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IGByc2lfaW5pdF91c2JfaW50ZXJmYWNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIGl0cyBuYW1pbmcgY29udmVudGlvbi4gVGhlIFwiaW5pdFwiIHN1Z2dlc3RzIGl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIFwiVVNCXCIgY2xlYXJseSBwb2ludHMgdG8gVW5pdmVyc2FsIFNlcmlhbCBCdXMsIGFuZCBcImludGVyZmFjZVwiIGltcGxpZXMgaXQncyBzZXR0aW5nIHVwIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgZm9yIGEgVVNCIGRldmljZS4gRnJvbSB0aGF0LCBJIGNhbiBpbmZlciBpdCBsaWtlbHkgY29uZmlndXJlcyBhIFVTQiBpbnRlcmZhY2UgZm9yIGEgc3BlY2lmaWMgZGV2aWNlLCBkcml2ZXIgb3IgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpbml0aWFsIGh5cG90aGVzaXMgYW5kIGdldCBhIHNlbnNlIG9mIHRoZSBjb250ZXh0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtb2R1bGVzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHdoYXQgZXJyb3IgY29uZGl0aW9ucyBpdCBoYW5kbGVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVVNCIGludGVyZmFjZSBpcyBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBhbmQgaW50ZXJuYWwgbG9naWMgdG8gZnVsbHkgYXBwcmVjaWF0ZSBpdHMgZnVuY3Rpb24uIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGV2aWNlIGRldGVjdGlvbiwgYW5kIGludGVycnVwdCBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGdvYWwgaXMgdG8gZGV2ZWxvcCBhIGNvbXBsZXRlIGFuZCBpbmZvcm1lZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NDguMTQ2NTAyNzkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAyMzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfaW5pdF91c2JfaW50ZXJmYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9NTczPXN0YXRpYyBpbnQgcnNpX3VzYl9pbml0X3J4KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02MTAtLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjExOiAqIHJzaV9pbml0X3VzYl9pbnRlcmZhY2UoKSAtIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHVzYiBpbnRlcmZhY2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjEyLSAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTYxNi0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2MTc6c3RhdGljIGludCByc2lfaW5pdF91c2JfaW50ZXJmYWNlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjE4LVxcdFxcdFxcdFxcdCAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKnBmdW5jdGlvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTc4NT1zdGF0aWMgaW50IHJzaV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcGZ1bmN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtODAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjgwMzpcXHRzdGF0dXMgPSByc2lfaW5pdF91c2JfaW50ZXJmYWNlKGFkYXB0ZXIsIHBmdW5jdGlvbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtODA0LVxcdGlmIChzdGF0dXMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NDguMTkwNTM3MzIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTIzOTI4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJTSSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHJzaV85MXhfdXNiLmNgIGZpbGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYHJzaV9wcm9iZWAuIFRoYXQncyBhbG1vc3QgY2VydGFpbmx5IHRoZSBkcml2ZXIncyBlbnRyeSBwb2ludCwgcmlnaHQ/ICBJdCdzIHRoZSBmdW5jdGlvbiB0aGUgVVNCIHN1YnN5c3RlbSB3aWxsIGNhbGwgd2hlbiBhIGRldmljZSBtYXRjaGluZyB0aGUgZHJpdmVyJ3MgSUQgaXMgcGx1Z2dlZCBpbi4gIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hhdCBpdCBhY3R1YWxseSAqZG9lcyouICBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB3aGF0J3MgZ29pbmcgb24gaW4gYHJzaV85MXhfaW5pdGAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHNldHVwIHNob3VsZCBiZS4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlIGFmdGVyIGl0J3MgbG9hZGVkIGFuZCBwcm9iZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MTo1MS4yODI5MzIzMzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDA2MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJzaV85MXhfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYz0yODc9dm9pZCByc2lfYXR0YWNoX2J0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMjk2LS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzoyOTc6ICogcnNpXzkxeF9pbml0KCkgLSBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIG9zIGludGVyZmFjZSBvcGVyYXRpb25zLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0yOTgtICogQG9wZXJfbW9kZTogT25lIG9mIERFVl9PUE1PREVfKi5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zMDEtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jOjMwMjpzdHJ1Y3QgcnNpX2h3ICpyc2lfOTF4X2luaXQodTE2IG9wZXJfbW9kZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zOTAtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzozOTE6RVhQT1JUX1NZTUJPTF9HUEwocnNpXzkxeF9pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzkyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jPTEwMDE9c3RhdGljIGludCByc2lfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqcGZ1bmN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTEwMDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjEwMTA6XFx0YWRhcHRlciA9IHJzaV85MXhfaW5pdChkZXZfb3Blcl9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTAxMS1cXHRpZiAoIWFkYXB0ZXIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTc4NT1zdGF0aWMgaW50IHJzaV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcGZ1bmN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc5NTpcXHRhZGFwdGVyID0gcnNpXzkxeF9pbml0KGRldl9vcGVyX21vZGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc5Ni1cXHRpZiAoIWFkYXB0ZXIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmg9ODI9dTE2IHJzaV9nZXRfY29ubmVjdGVkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaDo4MzpzdHJ1Y3QgcnNpX2h3ICpyc2lfOTF4X2luaXQodTE2IG9wZXJfbW9kZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaC04NC12b2lkIHJzaV85MXhfZGVpbml0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MTo1MS4zMjQ5NDI2MTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1MzkzMzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBSU0kgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIFNESU8gb3IgVVNCLCB0aGUgYHJzaV9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGluaXRpYWwgcG9pbnQgb2YgZW50cnkuIEl0J3MgdGhlIG9uZSB0aGF0IGV2ZW50dWFsbHkga2lja3Mgb2ZmIGByc2lfOTF4X2luaXRgLiBOb3csIGByc2lfOTF4X2luaXRgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBzcGF3bmluZyB0aGUgYHR4X3RocmVhZGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgYSB0cmFuc21pdCB0aHJlYWQgcmlnaHQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuXG5Ob3csIGl0IGdldHMgYSBiaXQgbW9yZSBzcGVjaWZpYyBiYXNlZCBvbiB0aGUgYnVzIHR5cGUuIEZvciBVU0IsIGByc2lfcHJvYmVgIHN1YnNlcXVlbnRseSBjYWxscyBgcnNpX2luaXRfdXNiX2ludGVyZmFjZWAsIHdoaWNoIHRoZW4gbGVhZHMgdG8gYHJzaV91c2JfaW5pdF9yeGAuIEFuZCB0aGlzLCBjcml0aWNhbGx5LCBjcmVhdGVzIHRoZSBgcnhfdGhyZWFkYCBmb3IgVVNCLiBGb3IgU0RJTywgdGhvdWdoLCB0aGUgYHJ4X3RocmVhZGAgaXMgY3JlYXRlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGByc2lfcHJvYmVgIGZ1bmN0aW9uIGl0c2VsZi4gU28sIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBkaWZmZXJzIGV2ZXIgc28gc2xpZ2h0bHkgZGVwZW5kaW5nIG9uIGlmIHdlIGFyZSBkb2luZyBTRElPIG9yIFVTQi5cblxuSSB1bmRlcnN0YW5kIHRoZSBjb3JlIGZsb3csIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hhdCBgcnNpX2NvZXhfYXR0YWNoYCBpcyBhYm91dC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIHJldmlzaXQgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgc2VlIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NTUuOTc4ODc4OTgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY5MzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfY29leF9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM9MTAxPWludCByc2lfY29leF9zZW5kX3BrdCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBoYWxfcXVldWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoxMzk6aW50IHJzaV9jb2V4X2F0dGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jPTMwMj1zdHJ1Y3QgcnNpX2h3ICpyc2lfOTF4X2luaXQodTE2IG9wZXJfbW9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zNzQtXFx0aWYgKGNvbW1vbi1cXHUwMDNlY29leF9tb2RlIFxcdTAwM2UgMSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzozNzU6XFx0XFx0aWYgKHJzaV9jb2V4X2F0dGFjaChjb21tb24pKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTM3Ni1cXHRcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIGluaXQgY29leCBtb2R1bGVcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb2V4Lmg9MjY9c3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb2V4LmgtMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb2V4Lmg6MzI6aW50IHJzaV9jb2V4X2F0dGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvZXguaC0zMy12b2lkIHJzaV9jb2V4X2RldGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NTYuMDIxNTc5MzYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzUwMzg2NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeXprYWxsZXIgRnV6emluZyBUYXJnZXRzIGluIHRoZSBSU0kgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgaW4gdGhpcyBSU0kgZHJpdmVyIGFyZSB0aGUgYmVzdCB0YXJnZXRzIGZvciBTeXprYWxsZXIgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHJzaV85MXhfaW5pdGAgY2FsbHMgYHJzaV9jb2V4X2F0dGFjaGAsIHdoaWNoIHRoZW4gc3Bhd25zIHRoZSBgY29leF90eF90aHJlYWRgLiBUaGlzIHdob2xlIHNlcXVlbmNlIHN0YXJ0cyBmcm9tIGByc2lfcHJvYmVgLCB3aGljaCBpcyB0aGUgZHJpdmVyJ3MgcHJvYmUgY2FsbGJhY2suIFRoZSBkb2N1bWVudGF0aW9uIG1lbnRpb25zIHRoYXQgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYGlnYl9yZW1vdmVgIG9ubHkgcnVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kcywgc28gbWF5YmUgYHJzaV9wcm9iZWAgaXMgbGltaXRlZCB0byBob3QtcGx1ZyBzY2VuYXJpb3M/IE5vLCB0aGF0J3Mgd3JvbmcuIGByc2lfcHJvYmVgIGV4ZWN1dGVzIHdoZW4gdGhlIFVTQiBkZXZpY2UgaXMgY29ubmVjdGVkLCB3aGljaCBTeXprYWxsZXIncyBVU0IgZnV6emVyICp3aWxsKiB0cmlnZ2VyLiBPa2F5LCBzbyBgcnNpX3Byb2JlYCBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLlxuXG5CdXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgYW5kIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBrZXkgZnVuY3Rpb25zIGlkZW50aWZpZWQgYXJlOiBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4gSG1tLCB0aG9zZSBhcmUgKnRocmVhZCogZnVuY3Rpb25zLiBDYW4gU3l6a2FsbGVyIHJlYWNoIHRob3NlPyBZZXMsIGBrdGhyZWFkX3J1bmAgc3RhcnRzIHRoZW0gZHVyaW5nIHRoZSBwcm9iZSBwcm9jZXNzLiBBbmQgc2luY2UgU3l6a2FsbGVyIHRyYWNlcyBhbGwga2VybmVsIGV4ZWN1dGlvbiwgaXQgKmNhbiogdHJhY2UgdGhvc2UgdGhyZWFkcyBldmVuIGlmIHRoZXkncmUgYXN5bmNocm9ub3VzLlxuXG5Ob3csIGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCBhbmQgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaXMgbm90IGlkZWFsLiBCdXQsIGF0IGxlYXN0LCBJIGNhbiBsaXN0IHRoZWlyIGNhbGxlcnMgYHJzaV85MXhfaW5pdGAgYW5kIGByc2lfY29leF9hdHRhY2hgLiBgcnNpX2NvZXhfYXR0YWNoYCBpcyBub24tc3RhdGljLiBUaGUga2V5IGhlcmUgaXMgdG8gbGlzdCBub24tc3RhdGljIGZ1bmN0aW9ucy5cblxuU28sIGxldCdzIGxpc3QgdGhlIG5vbi1zdGF0aWMgdGhyZWFkIGZ1bmN0aW9uczogYHJzaV9zZGlvX3J4X3RocmVhZGAgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAuIFBsdXMsIGByc2lfOTF4X2luaXRgIGFuZCBgcnNpX2NvZXhfYXR0YWNoYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGByc2lfc2Rpb19yeF90aHJlYWRgIGFuZCBgcnNpX3VzYl9yeF90aHJlYWRgIGFyZSBhY3R1YWxseSBleHBvcnRlZC4gV2hpbGUgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAsIHRoZXkgKmFyZSogbm9uLXN0YXRpYyBhbmQgZGVjbGFyZWQgaW4gaGVhZGVycywgd2hpY2ggbWVhbnMgdGhleSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFBlcmZlY3QuXG5cblRoZSBgcnNpX3Byb2JlYCBmdW5jdGlvbiBpcyBzdGF0aWMuIFNvLCBJIGRvbid0IGxpc3QgdGhhdC5cblxuYHJzaV85MXhfaW5pdGAgaXMgYEVYUE9SVF9TWU1CT0xfR1BMYCBhbmQgYHJzaV9jb2V4X2F0dGFjaGAgaXMgbm9uLXN0YXRpYywgc28gZ29vZCB0byBnby5cblxuQW5kIGByc2lfY3JlYXRlX2t0aHJlYWRgIGlzIGEgc3RhdGljIGlubGluZSwgc28gdGhhdCdzIG91dC5cblxuVGhlcmVmb3JlLCB0aGUgbWFpbiBmdXp6aW5nIHRhcmdldHMgc2hvdWxkIGJlOlxuXG4qICAgYHJzaV9zZGlvX3J4X3RocmVhZGBcbiogICBgcnNpX3VzYl9yeF90aHJlYWRgXG4qICAgYHJzaV85MXhfaW5pdGBcbiogICBgcnNpX2NvZXhfYXR0YWNoYFxuXG5JIHNob3VsZCBkb3VibGUgY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBsb2NhdGVkLiBgcnNpX3NkaW9fcnhfdGhyZWFkYCBpcyBpbiBgcnNpXzkxeF9zZGlvX29wcy5jYCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYCBpcyBpbiBgcnNpXzkxeF91c2Jfb3BzLmNgLlxuXG5Pa2F5LCBuZXh0IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGhhczogYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgUlNJX1NESU9gLCBhbmQgYFJTSV9DT0VYYCBzZXQuIE9oLCBhbmQgYFJTSV9DT0VYYCBkZXBlbmRzIG9uIGBCVGAsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIGVuYWJsZWQgYXMgd2VsbC4gVGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYEtjb25maWdgIGZvciB0aGUgYHJzaWAgZHJpdmVyIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MjoxMC4zNzE5Njg1OTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDkzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSU0lfQ09FWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz0zOT1jb25maWcgUlNJX1VTQlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NDc6Y29uZmlnIFJTSV9DT0VYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDI6MTAuNDEzMDY3NzI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NTc1NDg2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBSU0lfQ09FWCoqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgYW5kIHJlYWxseSBkcmlsbCBkb3duIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFJTSV9DT0VYYC4gSSdtIGdvaW5nIHRvIHJlLWV4YW1pbmUgdGhlIGZ1bGwgZGVwZW5kZW5jeSB0cmVlLCBhbmQgSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBpbiB0aGUgaW5pdGlhbCByZXZpZXcuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGltcGFjdCBmcm9tIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBjb3JlIGZyYW1ld29ya3MsIGxpYnJhcmllcywgb3Igc3lzdGVtIGFyY2hpdGVjdHVyZSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBvdmVybG9va2VkLiBUaGUgZ29hbCBpc24ndCBqdXN0IHRvIHNlZSAqd2hhdCogYFJTSV9DT0VYYCBkZXBlbmRzIG9uLCBidXQgKndoeSosIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGZvciBpdHMgc3RhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIGZ1dHVyZSBkZXZlbG9wbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY291cGxpbmcgaXNzdWVzIG9yIGhpZGRlbiBib3R0bGVuZWNrcyBsdXJraW5nIGluIHRoZSBkZXBlbmRlbmN5IGdyYXBoLiBJJ20gdGhpbmtpbmcgcGFydGljdWxhcmx5IGFib3V0IGNpcmN1bGFyIGRlcGVuZGVuY2llcywgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgdGhhdCBjcmVhdGUgdW5leHBlY3RlZCBjb25mbGljdHMsIG9yIGV2ZW4gdGhvc2UgZGVwZW5kZW5jaWVzIHdoaWNoIGFkZCB1bm5lY2Vzc2FyeSB3ZWlnaHQuIExldCdzIHNlZSBpZiB0aGlzIGRlZXBlciBkaXZlIHJldmVhbHMgYW55dGhpbmcgbmV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM3OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQyOjE3Ljg3MDYxOTE4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydFxcXCJcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IFJTSV85MVhcXG4gIDQyOlxcdFxcdGRlZmF1bHQgbVxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXFxuICA0NTpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBSU0lfQ09FWFxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gQlQgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgNTA6XFx0XFx0ZGVwZW5kcyBvbiAhKEJUPW0gXFx1MDAyNlxcdTAwMjYgUlNJXzkxWD15KVxcbiAgNTE6XFx0XFx0ZGVmYXVsdCB5XFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFdMQU4gQlQgY29leCBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxcbiAgNTQ6XFx0XFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSB3YW50IHRvIHVzZSB0aGlzIGZlYXR1cmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDI6MTcuODcwNjc2MjYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NTkwMjY1NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUlNJIDkxeCBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgQ0ZJIHZpb2xhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMsIGl0IGxvb2tzIGxpa2U6IGBSU0lfQ09FWGAgbmVlZHMgYEJUYCBhbmQgYFJTSV85MVhgLiBgUlNJX1NESU9gIHJlbGllcyBvbiBgTU1DYCBhbmQgYFJTSV85MVhgLiBgUlNJX1VTQmAgZGVwZW5kcyBvbiBgVVNCYCBhbmQgYFJTSV85MVhgLiBBbmQgZmluYWxseSwgYFJTSV85MVhgIGl0c2VsZiBuZWVkcyBgTUFDODAyMTFgLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbmFibGUgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgUlNJX1NESU9gLCBgUlNJX0NPRVhgLCBhbmQgYE1BQzgwMjExYCBhcyB0aGUga2V5IFJTSS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYWxvbmcgd2l0aCBgTU1DYCwgYFVTQmAsIGFuZCBgQlRgLiBXaGlsZSBgTUFDODAyMTFgLCBgVVNCYCwgYE1NQ2AsIGFuZCBgQlRgIGFyZSBmYWlybHkgc3RhbmRhcmQsIGl0J3Mgc2FmZXIgdG8gaW5jbHVkZSB0aGVtIGhlcmUuXG5cblNpbmNlIHRoZSBwcm9tcHQgc3BlY2lmaWVzIE5PVCBhZGRpbmcgdGhlIGBDT05GSUdfYCBwcmVmaXggdG8gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LCBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5UaGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgY3Jhc2ggdW5kZXIgQ0ZJLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZyAoYW5kIHBvdGVudGlhbGx5IFNESU8gZW11bGF0ZWQgZW52aXJvbm1lbnRzKS4gU28sIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIG9idmlvdXMgY29uY2x1c2lvbi5cblxuTm93LCBmb2N1c2luZyBvbiB0aGUgY3JpdGljYWwgc3ltYm9scywgSSBpZGVudGlmeSBgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYHJzaV91c2JfcnhfdGhyZWFkYCwgYHJzaV85MXhfaW5pdGAsIGFuZCBgcnNpX2NvZXhfYXR0YWNoYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBmdW5jdGlvbiBzaWduYXR1cmVzLCBzbyBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgY2hhbmdlZCBpcyBhIGdvb2Qgc3RhcnQuIEkgY2FuIHZlcmlmeSB0aGVzZSBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIGJ5IGV4YW1pbmluZyB0aGUgZGlmZi5cblxuSSB0aGVuIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgbW9kaWZpZWQ6IGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCwgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCwgYHJzaV9zZGlvX3J4X3RocmVhZGAsIGFuZCBgcnNpX3VzYl9yeF90aHJlYWRgLiBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAgYW5kIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgYnV0IGFyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYHJzaV9jcmVhdGVfa3RocmVhZGAsIHNvIHRoZWlyIHN5bWJvbCBhZGRyZXNzIHdpbGwgYmUgZGlzdGluY3QuIFRoZSBpbnN0cnVjdGlvbnMgZmF2b3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIEkgd2lsbCBsaXN0IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSB0aGUgdGhyZWFkcy4gVGh1cyBJJ2xsIGxpc3QgdGhlIHRocmVhZCBmdW5jdGlvbnMuXG5cbkkgdmVyaWZpZWQgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIHRoZSBzeW1ib2xzIGluIHF1ZXN0aW9uIChgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYHJzaV91c2JfcnhfdGhyZWFkYCwgYHJzaV85MXhfaW5pdGAsIGFuZCBgcnNpX2NvZXhfYXR0YWNoYCksIGNvbmZpcm1pbmcgdGhhdCB0aGV5IGFyZSBkZWNsYXJlZCBpbiBoZWFkZXJzIGFuZCBkZWZpbmVkIGluIHNvdXJjZSBmaWxlcyBhbmQgZXhwb3J0ZWQgd2hlcmUgYXBwbGljYWJsZS5cblxuVGh1cywgdGhlIGZpbmFsIGBFbmFibGVDb25maWdzYCBhcmU6IGBXTEFOX1ZFTkRPUl9SU0lgLCBgUlNJXzkxWGAsIGBSU0lfVVNCYCwgYFJTSV9TRElPYCwgYFJTSV9DT0VYYCwgYE1BQzgwMjExYCwgYE1NQ2AsIGBCVGAuXG5cblRoaXMgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODY5LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MjozMi40NjA5NDU1NzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE5MjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJSU0lfU0RJT1wiLFxuICAgIFwiUlNJX0NPRVhcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNTUNcIixcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnNpX3NkaW9fcnhfdGhyZWFkXCIsXG4gICAgXCJyc2lfdXNiX3J4X3RocmVhZFwiLFxuICAgIFwicnNpXzkxeF9pbml0XCIsXG4gICAgXCJyc2lfY29leF9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJSU0lfU0RJT1wiLFxuICAgIFwiUlNJX0NPRVhcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNTUNcIixcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnNpX3NkaW9fcnhfdGhyZWFkXCIsXG4gICAgXCJyc2lfdXNiX3J4X3RocmVhZFwiLFxuICAgIFwicnNpXzkxeF9pbml0XCIsXG4gICAgXCJyc2lfY29leF9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 19:21:29 +0000 UTC FinishedAt: 2026-08-02 19:42:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "RSI_SDIO", "RSI_COEX", "MAC80211", "MMC", "BT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "RSI_SDIO", "RSI_COEX", "MAC80211", "MMC", "BT" ], "series_id": "43f9f32a-34de-4e73-b92f-08d56acddae4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rsi_sdio_rx_thread", "rsi_usb_rx_thread", "rsi_91x_init", "rsi_coex_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7UlNJX1NESU8mIzM0OywKICAgICYjMzQ7UlNJX0NPRVgmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TU1DJiMzNDssCiAgICAmIzM0O0JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnNpX3NkaW9fcnhfdGhyZWFkJiMzNDssCiAgICAmIzM0O3JzaV91c2JfcnhfdGhyZWFkJiMzNDssCiAgICAmIzM0O3JzaV85MXhfaW5pdCYjMzQ7LAogICAgJiMzNDtyc2lfY29leF9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBDb250cm9sLUZsb3cgSW50ZWdyaXR5IChDRkkpIHZpb2xhdGlvbiBieSBjb3JyZWN0aW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIG9mIHNldmVyYWwga3RocmVhZCBmdW5jdGlvbnMgaW4gdGhlIFJTSSA5MXggd2lyZWxlc3MgZHJpdmVyLiBUaGVzZSB0aHJlYWRzIGFyZSBjcmVhdGVkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gKGZ1enppbmcpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWMwMjc4YTcyMzc1MDA5YmVjZjNlMDkyYjkwOTRhOTYyOWQ2NWQ2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTk6NDE6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXG5pbmRleCBlZTYwM2E1MTczZmIzLi4wMjNjNTM5ZmMzODQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmNcbkBAIC01MCw4ICYjNDM7NTAsOSBAQCBzdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZF90eF9wa3RzKHN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiKVxuIFx0fSB3aGlsZSAoY29leF9xICE9IFJTSV9DT0VYX1FfSU5WQUxJRCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbiYjNDM7c3RhdGljIGludCByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpXG4ge1xuJiM0MztcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xuIFx0c3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IgPSBjb21tb24tXHUwMDNlY29leF9jYjtcbiBcdHUzMiB0aW1lb3V0ID0gRVZFTlRfV0FJVF9GT1JFVkVSO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uY1xuaW5kZXggNjYyZTQyZDFlNWU4ZC4uNjFkYjJiMzYzZDExNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jXG5AQCAtMjQ2LDEyICYjNDM7MjQ2LDEzIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHJzaV9yZWFkX3BrdCk7XG4gLyoqXG4gICogcnNpX3R4X3NjaGVkdWxlcl90aHJlYWQoKSAtIFRoaXMgZnVuY3Rpb24gaXMgYSBrZXJuZWwgdGhyZWFkIHRvIHNlbmQgdGhlXG4gICpcdFx0XHQgICAgICAgcGFja2V0cyB0byB0aGUgZGV2aWNlLlxuLSAqIEBjb21tb246IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZS5cbiYjNDM7ICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZS5cbiAgKlxuICAqIFJldHVybjogTm9uZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCByc2lfdHhfc2NoZWR1bGVyX3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuJiM0MztzdGF0aWMgaW50IHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpXG4ge1xuJiM0MztcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xuIFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cdTAwM2Vwcml2O1xuIFx0dTMyIHRpbWVvdXQgPSBFVkVOVF9XQUlUX0ZPUkVWRVI7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmNcbmluZGV4IDU5N2IyMzhlMjI5NDkuLjE4YTI4YWE5NzQ0NjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jXG5AQCAtNjIsOCAmIzQzOzYyLDkgQEAgaW50IHJzaV9zZGlvX21hc3Rlcl9hY2Nlc3NfbXN3b3JkKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHUxNiBtc193b3JkKVxuIFxuIHN0YXRpYyB2b2lkIHJzaV9yeF9oYW5kbGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xuIFxuLXZvaWQgcnNpX3NkaW9fcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4mIzQzO2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSlcbiB7XG4mIzQzO1x0c3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiA9IGRhdGE7XG4gXHRzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyID0gY29tbW9uLVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3QgcnNpXzkxeF9zZGlvZGV2ICpzZGV2ID0gYWRhcHRlci1cdTAwM2Vyc2lfZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuY1xuaW5kZXggMjVjMmIyMzIzOTRhNi4uNTEzZDJmZGZiNTEwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXG5AQCAtMjUsOCAmIzQzOzI1LDkgQEBcbiAgKlxuICAqIFJldHVybjogTm9uZS5cbiAgKi9cbi12b2lkIHJzaV91c2JfcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXG4mIzQzO2ludCByc2lfdXNiX3J4X3RocmVhZCh2b2lkICpkYXRhKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uID0gZGF0YTtcbiBcdHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCByc2lfOTF4X3VzYmRldiAqZGV2ID0gYWRhcHRlci1cdTAwM2Vyc2lfZGV2O1xuIFx0aW50IHN0YXR1cztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxuaW5kZXggM2NkZjlkZWQ4NzZkOS4uMmEzM2E4MWY3MWEzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmhcbkBAIC01OCw3ICYjNDM7NTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnNpX3Jlc2V0X2V2ZW50KHN0cnVjdCByc2lfZXZlbnQgKmV2ZW50KVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IHJzaV9jcmVhdGVfa3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgcnNpX3RocmVhZCAqdGhyZWFkLFxuLVx0XHRcdFx0ICAgICB2b2lkICpmdW5jX3B0cixcbiYjNDM7XHRcdFx0XHQgICAgIGludCAoKmZ1bmNfcHRyKSh2b2lkICpkYXRhKSxcbiBcdFx0XHRcdCAgICAgdTggKm5hbWUpXG4ge1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnRocmVhZC1cdTAwM2Vjb21wbGV0aW9uKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXG5pbmRleCA3YzkxYjEyNmIzNTBmLi5lYjJiN2YzNmE3ZTRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXG5AQCAtMTM0LDUgJiM0MzsxMzQsNSBAQCBpbnQgcnNpX3NkaW9fbWFzdGVyX2FjY2Vzc19tc3dvcmQoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTE2IG1zX3dvcmQpO1xuIHZvaWQgcnNpX3NkaW9fYWNrX2ludHIoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTggaW50X2JpdCk7XG4gaW50IHJzaV9zZGlvX2RldGVybWluZV9ldmVudF90aW1lb3V0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xuIGludCByc2lfc2Rpb19jaGVja19idWZmZXJfc3RhdHVzKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IHFfbnVtKTtcbi12b2lkIHJzaV9zZGlvX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcbiYjNDM7aW50IHJzaV9zZGlvX3J4X3RocmVhZCh2b2lkICpkYXRhKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaFxuaW5kZXggOTYxODUxNzQ4YmM0Yy4uNzgwNjdlYWZmZThiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmhcbkBAIC04MSw1ICYjNDM7ODEsNSBAQCBzdGF0aWMgaW5saW5lIGludCByc2lfdXNiX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbiBcdHJldHVybiBFVkVOVF9XQUlUX0ZPUkVWRVI7XG4gfVxuIFxuLXZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XG4mIzQzO2ludCByc2lfdXNiX3J4X3RocmVhZCh2b2lkICpkYXRhKTtcbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTl9WRU5ET1JfUlNJJiMzNDssCiAgICAmIzM0O1JTSV85MVgmIzM0OywKICAgICYjMzQ7UlNJX1VTQiYjMzQ7LAogICAgJiMzNDtSU0lfU0RJTyYjMzQ7LAogICAgJiMzNDtSU0lfQ09FWCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNTUMmIzM0OywKICAgICYjMzQ7QlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfc2Rpb19yeF90aHJlYWQmIzM0OywKICAgICYjMzQ7cnNpX3VzYl9yeF90aHJlYWQmIzM0OywKICAgICYjMzQ7cnNpXzkxeF9pbml0JiMzNDssCiAgICAmIzM0O3JzaV9jb2V4X2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YzAyNzhhNzIzNzUwMDliZWNmM2UwOTJiOTA5NGE5NjI5ZDY1ZDZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAxOTo0MToxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYwppbmRleCBlZTYwM2E1MTczZmIzLi4wMjNjNTM5ZmMzODQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jCkBAIC01MCw4ICYjNDM7NTAsOSBAQCBzdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZF90eF9wa3RzKHN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiKQogCX0gd2hpbGUgKGNvZXhfcSAhPSBSU0lfQ09FWF9RX0lOVkFMSUQpOwogfQogCi1zdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pCiYjNDM7c3RhdGljIGludCByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiYjNDM7CXN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhOwogCXN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiID0gY29tbW9uLSZndDtjb2V4X2NiOwogCXUzMiB0aW1lb3V0ID0gRVZFTlRfV0FJVF9GT1JFVkVSOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMKaW5kZXggNjYyZTQyZDFlNWU4ZC4uNjFkYjJiMzYzZDExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYwpAQCAtMjQ2LDEyICYjNDM7MjQ2LDEzIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHJzaV9yZWFkX3BrdCk7CiAvKioKICAqIHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKCkgLSBUaGlzIGZ1bmN0aW9uIGlzIGEga2VybmVsIHRocmVhZCB0byBzZW5kIHRoZQogICoJCQkgICAgICAgcGFja2V0cyB0byB0aGUgZGV2aWNlLgotICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLgomIzQzOyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUuCiAgKgogICogUmV0dXJuOiBOb25lLgogICovCi1zdGF0aWMgdm9pZCByc2lfdHhfc2NoZWR1bGVyX3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKQomIzQzO3N0YXRpYyBpbnQgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWQodm9pZCAqZGF0YSkKIHsKJiM0MzsJc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiA9IGRhdGE7CiAJc3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi0mZ3Q7cHJpdjsKIAl1MzIgdGltZW91dCA9IEVWRU5UX1dBSVRfRk9SRVZFUjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmMKaW5kZXggNTk3YjIzOGUyMjk0OS4uMThhMjhhYTk3NDQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jCkBAIC02Miw4ICYjNDM7NjIsOSBAQCBpbnQgcnNpX3NkaW9fbWFzdGVyX2FjY2Vzc19tc3dvcmQoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTE2IG1zX3dvcmQpCiAKIHN0YXRpYyB2b2lkIHJzaV9yeF9oYW5kbGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpOwogCi12b2lkIHJzaV9zZGlvX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKQomIzQzO2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSkKIHsKJiM0MzsJc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiA9IGRhdGE7CiAJc3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi0mZ3Q7cHJpdjsKIAlzdHJ1Y3QgcnNpXzkxeF9zZGlvZGV2ICpzZGV2ID0gYWRhcHRlci0mZ3Q7cnNpX2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jCmluZGV4IDI1YzJiMjMyMzk0YTYuLjUxM2QyZmRmYjUxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMKQEAgLTI1LDggJiM0MzsyNSw5IEBACiAgKgogICogUmV0dXJuOiBOb25lLgogICovCi12b2lkIHJzaV91c2JfcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pCiYjNDM7aW50IHJzaV91c2JfcnhfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiYjNDM7CXN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhOwogCXN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tJmd0O3ByaXY7CiAJc3RydWN0IHJzaV85MXhfdXNiZGV2ICpkZXYgPSBhZGFwdGVyLSZndDtyc2lfZGV2OwogCWludCBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaAppbmRleCAzY2RmOWRlZDg3NmQ5Li4yYTMzYTgxZjcxYTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmgKQEAgLTU4LDcgJiM0Mzs1OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByc2lfcmVzZXRfZXZlbnQoc3RydWN0IHJzaV9ldmVudCAqZXZlbnQpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHJzaV9jcmVhdGVfa3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLAogCQkJCSAgICAgc3RydWN0IHJzaV90aHJlYWQgKnRocmVhZCwKLQkJCQkgICAgIHZvaWQgKmZ1bmNfcHRyLAomIzQzOwkJCQkgICAgIGludCAoKmZ1bmNfcHRyKSh2b2lkICpkYXRhKSwKIAkJCQkgICAgIHU4ICpuYW1lKQogewogCWluaXRfY29tcGxldGlvbigmYW1wO3RocmVhZC0mZ3Q7Y29tcGxldGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oCmluZGV4IDdjOTFiMTI2YjM1MGYuLmViMmI3ZjM2YTdlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oCkBAIC0xMzQsNSAmIzQzOzEzNCw1IEBAIGludCByc2lfc2Rpb19tYXN0ZXJfYWNjZXNzX21zd29yZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgbXNfd29yZCk7CiB2b2lkIHJzaV9zZGlvX2Fja19pbnRyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IGludF9iaXQpOwogaW50IHJzaV9zZGlvX2RldGVybWluZV9ldmVudF90aW1lb3V0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpOwogaW50IHJzaV9zZGlvX2NoZWNrX2J1ZmZlcl9zdGF0dXMoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTggcV9udW0pOwotdm9pZCByc2lfc2Rpb19yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7CiYjNDM7aW50IHJzaV9zZGlvX3J4X3RocmVhZCh2b2lkICpkYXRhKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmgKaW5kZXggOTYxODUxNzQ4YmM0Yy4uNzgwNjdlYWZmZThiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oCkBAIC04MSw1ICYjNDM7ODEsNSBAQCBzdGF0aWMgaW5saW5lIGludCByc2lfdXNiX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcikKIAlyZXR1cm4gRVZFTlRfV0FJVF9GT1JFVkVSOwogfQogCi12b2lkIHJzaV91c2JfcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pOwomIzQzO2ludCByc2lfdXNiX3J4X3RocmVhZCh2b2lkICpkYXRhKTsKICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjUxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtZXNzaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgc2NyZWFtcyBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gSSBrbm93IHRoaXMgZHJpdmVyOyBpdCYjMzk7cyBmb3IgUmVkcGluZSBTaWduYWxzJiMzOTsgV0xBTiBhbmQgQmx1ZXRvb3RoIGNvbWJvIGRldmljZS4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyBob3cgcmVhY2hhYmxlIGFyZSB0aGVzZSB0aHJlYWQgZnVuY3Rpb25zPyBJcyB0aGlzIGRyaXZlciBhY3RpdmUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KCkl0JiMzOTtzIGEgd2lyZWxlc3MgZHJpdmVyLCBidXQgdGhlIHByZXNlbmNlIG9mIFNESU8gYW5kIFVTQiBpbnRlcmZhY2VzIHNwYXJrcyBhbiBpbnRlcmVzdGluZyB0aG91Z2h0LiBVU0IgZGV2aWNlcyBhcmUgb2Z0ZW4gZW11bGF0ZWQgZm9yIHRlc3RpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBVU0IgZ2FkZ2V0LCBkdW1teV9oY2QsIG9yIGV2ZW4gc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgKHVzaW5nIHZoY2kpLiBUaGUgYHJzaV91c2JfcnhfdGhyZWFkYCBpcyB0aGUgbW9zdCBpbnRyaWd1aW5nIG9uZSBmb3IgdGhpcyBsaW5lIG9mIHRob3VnaHQgLSBDb3VsZCBpdCBiZSB0YXJnZXRlZCB3aXRoIGZ1enppbmc/IFRoZW4gaXQgaGl0cyBtZSwgc3l6a2FsbGVyIGhhcyBhIFVTQiBmdXp6ZXIgd2hpY2ggY2FuIGVtdWxhdGUgYXJiaXRyYXJ5IFVTQiBkZXZpY2VzLiBZZXMsIHRoYXQgbWFrZXMgVVNCIGRyaXZlcnMgcmVhY2hhYmxlIGJ5IGZ1enppbmcuIE9rYXksIHRoYXQmIzM5O3MgZXhjaXRpbmcgLSBJIHRoaW5rIHRoaXMgZHJpdmVyIGNvdWxkIGJlIGZ1enplZCB2aWEgVVNCLCB3aGljaCBsZWFkcyB0byB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSByZWFsIGJ1Z3MgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGBSU0lfOTFYYCBpcyB0aGUgY29ycmVjdCBLY29uZmlnIHN5bWJvbC4gVGltZSB0byBzZWFyY2ggZm9yIHRoZSBkcml2ZXImIzM5O3MgS2NvbmZpZyBkZWZpbml0aW9uIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJTSV85MVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1JTSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzoxNTpjb25maWcgUlNJXzkxWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIDkxeCBXTEFOIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBSU0lfOTFYKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYFJTSV85MVhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgb3IgY29uc2lkZXJpbmcgaW50ZWdyYXRpb24gd2l0aCBhbnl0aGluZyBuZXcuIExldCYjMzk7cyBzZWUuLi4gZmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyBpdCYjMzk7cyBsaWtlbHkgdXNpbmcuIFdlIGhhdmUgdGhlIHVzdWFsIHN1c3BlY3RzIC0gTnVtUHksIFNjaVB5LCBtYXliZSBQYW5kYXMgZm9yIGRhdGEgaGFuZGxpbmcgaWYgaXQmIzM5O3MgcHJvY2Vzc2luZyB0aW1lIHNlcmllcyBkYXRhLiBUaGVuIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3BlY2lhbGl6ZWQgbGlicmFyaWVzIGZvciBzaWduYWwgcHJvY2Vzc2luZyBvciBmaW5hbmNpYWwgYW5hbHlzaXMsIGRlcGVuZGluZyBvbiB3aGF0IHRoZSA5MVggdmVyc2lvbiByZXByZXNlbnRzIGFuZCB0aGUgc2NvcGUuCgpJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHZlcnNpb24gY29tcGF0aWJpbGl0eSBvZiBlYWNoIGRlcGVuZGVudCBsaWJyYXJ5LiBBcmUgdGhlcmUgYW55IGtub3duIGNvbmZsaWN0cz8gQXJlIHdlIHN0aWxsIHJ1bm5pbmcgb24gb3V0ZGF0ZWQgdmVyc2lvbnMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBJIHdhbnQgdG8gYXZvaWQgdGhlICYjMzQ7ZGVwZW5kZW5jeSBoZWxsJiMzNDsgc2NlbmFyaW8gYXQgYWxsIGNvc3RzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbXBvcnQgc3RhdGVtZW50cyBhbmQgdGhlIHByb2plY3QmIzM5O3Mgc2V0dXAgZmlsZXMgKHB5cHJvamVjdC50b21sLCByZXF1aXJlbWVudHMudHh0LCBzZXR1cC5weSwgZXRjLikgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaC4KCkl04oCZcyBhbHNvIGltcG9ydGFudCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2Vzcy4gV2hhdCB0b29scyBhcmUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZT8gSXMgaXQgdXNpbmcgc2V0dXB0b29scywgZmxpdCwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgY2FuIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIGRlcGVuZGVuY2llcy4KCkJleW9uZCB0aGUgaW1tZWRpYXRlIGltcG9ydHMsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMuIFdoYXQgbGlicmFyaWVzIGRvZXMgKnRob3NlKiBsaWJyYXJpZXMgcmVseSBvbj8gU29tZXRpbWVzLCBoaWRkZW4gZGVwZW5kZW5jaWVzIGNhbiBpbnRyb2R1Y2UgdW5leHBlY3RlZCBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgcG9vcmx5IG1haW50YWluZWQgb3IgaGF2ZSBsaWNlbnNpbmcgY29uY2VybnMuIFRpbWUgZm9yIGEgZGVlcGVyIGRpdmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJTSV85MVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz0xMz1pZiBXTEFOX1ZFTkRPUl9SU0lcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTU6Y29uZmlnIFJTSV85MVhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UmVkcGluZSBTaWduYWxzIEluYyA5MXggV0xBTiBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEaXZpbmcgaW50byB0aGUgUlNJIFdpcmVsZXNzIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBSU0kgd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUg4oCTIGxldCYjMzk7cyBvcGVuIHVwIHRoYXQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgdGhlIGJ1aWxkIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIFJTSSB3aXJlbGVzcyBkcml2ZXIuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IGdyYW51bGFyIHRoZSBjb250cm9sIGlzLiBBcmUgd2UgbG9va2luZyBhdCBpbmRpdmlkdWFsIGZlYXR1cmUgZmxhZ3MgZm9yIGRpZmZlcmVudCA4MDIuMTEgc3RhbmRhcmRzLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGJyb2FkZXIsIG1vcmUgZW5jb21wYXNzaW5nIG9wdGlvbnM/IFdoYXQgYWJvdXQgaGFyZHdhcmUgc3VwcG9ydCDigJMgaXMgaXQgYWxsIGJ1bmRsZWQgdW5kZXIgb25lIHVtYnJlbGxhLCBvciBhcmUgdGhlcmUgZGlzdGluY3QgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudCBSU0kgY2hpcHNldHM/IFRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIGhvdyBmbGV4aWJsZSB0aGlzIGRyaXZlciBpcyBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgY2F1c2UgaGVhZGFjaGVzIGRvd24gdGhlIHJvYWQsIGVzcGVjaWFsbHkgd2hlbiBpbnRlZ3JhdGluZyBpdCB3aXRoIG90aGVyIHdpcmVsZXNzIHN0YWNrcyBvciBuZXR3b3JrIHN1YnN5c3RlbXMuIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhYmlsaXR5IGFuZCBleHRlbnNpYmlsaXR5IG9mIHRoaXMgZHJpdmVyJiMzOTtzIGJ1aWxkIHByb2Nlc3MuIExldCYjMzk7cyBnZXQgY3JhY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9SU0lcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7UmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gICA5Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDEwOlx0XHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTE6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxMjpcdFxuICAxMzpcdGlmIFdMQU5fVkVORE9SX1JTSVxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBSU0lfOTFYXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIDkxeCBXTEFOIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQlRfSENJUlNJIGlmIFJTSV9DT0VYXG4gIDE4Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJlcyBzdXBwb3J0IGZvciBSU0kgMXgxIGRldmljZXMuXG4gIDIxOlx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFJTSV9ERUJVR0ZTXG4gIDI0Olx0XHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgZGVidWcgc3VwcG9ydFwmIzM0O1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBSU0lfOTFYXG4gIDI2Olx0XHRkZWZhdWx0IHlcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCBTYXkgWSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGRlYnVnIHN1cHBvcnQuIFRoaXMgb3B0aW9uXG4gIDI5Olx0XHQgY3JlYXRlcyBkZWJ1Z2ZzIGVudHJpZXNcbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgUlNJX1NESU9cbiAgMzI6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBTRElPIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIE1NQyBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuICAzNDpcdFx0ZGVmYXVsdCBtXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXG4gIDM3Olx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIFJTSV9VU0JcbiAgNDA6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBVU0IgYnVzIHN1cHBvcnRcJiMzNDtcbiAgNDE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG4gIDQyOlx0XHRkZWZhdWx0IG1cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxuICA0NTpcdFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBSU0lfQ09FWFxuICA0ODpcdFx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgV0xBTiBCVCBDb2V4aXN0ZW5jZSBzdXBwb3J0XCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIEJUIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG4gIDUwOlx0XHRkZXBlbmRzIG9uICEoQlQ9bSBcdTAwMjZcdTAwMjYgUlNJXzkxWD15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgRHJpdmVyIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQmIzM5O3MgY2F0Y2hpbmcgbXkgYXR0ZW50aW9uLiBUaGV5JiMzOTtyZSBhbHRlcmluZyB0aGUgdGhyZWFkIGZ1bmN0aW9uIHNpZ25hdHVyZS4gUHJldmlvdXNseSwgd2UgaGFkIGB2b2lkIGZ1bmMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilgLCBidXQgbm93IGl0JiMzOTtzIGBpbnQgZnVuYyh2b2lkICpkYXRhKWAuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBpbXBsaWNhdGlvbnMg4oCTIGBrdGhyZWFkX3J1bmAgYW5kIG90aGVyIHRocmVhZCBjcmVhdGlvbiBmdW5jdGlvbnMgZXhwZWN0IHRoYXQgYGludCAoKnRocmVhZGZuKSh2b2lkICpkYXRhKWAgc2lnbmF0dXJlLiBQYXNzaW5nIHRoZSB3cm9uZyBzaWduYXR1cmUgd291bGQgYWJzb2x1dGVseSB0cmlnZ2VyIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9ucywgYW5kIHRoYXQmIzM5O3MgYSBzZXJpb3VzIHNlY3VyaXR5IGNvbmNlcm4uIFNvLCB0aGlzIHBhdGNoIGlzIGRpcmVjdGx5IGFkZHJlc3NpbmcgYW5kIGZpeGluZyBhIENGSSB2aW9sYXRpb24uIFRoYXQgbWFrZXMgdGhpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgZml4LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBob3cgdGhlIGRyaXZlciBpcyBiZWluZyBhY2Nlc3NlZC4gVGhlIHRleHQgc2F5cyBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZy4gSW50ZXJlc3RpbmcuIEl0IHNvdW5kcyBsaWtlIHRoaXMgaXMgaG93IHRoZSB2dWxuZXJhYmlsaXR5IHdhcyBmb3VuZCwgYnkgbGV2ZXJhZ2luZyBVU0IuIEFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgdGhhdCB0aGV5IHVzZWQgYXJlIGBXTEFOX1ZFTkRPUl9SU0lgLCBgUlNJXzkxWGAsIGBSU0lfVVNCYCwgYFJTSV9DT0VYYCwgYW5kIGBSU0lfU0RJT2AuIEhvbGQgb24uLi4gYFJTSV9DT0VYYCBkZXBlbmRzIG9uIGBCVGAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGRlcGVuZGVuY3kgYW5kIGtlZXAgaXQgaW4gbWluZCBhcyBJIGtlZXAgcmV2aWV3aW5nLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGByc2lfY3JlYXRlX2t0aHJlYWRgIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2lfY3JlYXRlX2t0aHJlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYz0xMzk9aW50IHJzaV9jb2V4X2F0dGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xNTYtXHQvKiBJbml0aWFsaXplIGNvLWV4IHRocmVhZCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjE1NzpcdGlmIChyc2lfY3JlYXRlX2t0aHJlYWQoY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jLTE1OC1cdFx0XHQgICAgICAgXHUwMDI2Y29leF9jYi1cdTAwM2Vjb2V4X3R4X3RocmVhZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM9MzAyPXN0cnVjdCByc2lfaHcgKnJzaV85MXhfaW5pdCh1MTYgb3Blcl9tb2RlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM6MzMyOlx0aWYgKHJzaV9jcmVhdGVfa3RocmVhZChjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzMzLVx0XHRcdCAgICAgICBcdTAwMjZjb21tb24tXHUwMDNldHhfdGhyZWFkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYz0xMDAxPXN0YXRpYyBpbnQgcnNpX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnBmdW5jdGlvbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTA0MC1cdHJzaV9pbml0X2V2ZW50KFx1MDAyNnNkZXYtXHUwMDNlcnhfdGhyZWFkLmV2ZW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYzoxMDQxOlx0c3RhdHVzID0gcnNpX2NyZWF0ZV9rdGhyZWFkKGFkYXB0ZXItXHUwMDNlcHJpdiwgXHUwMDI2c2Rldi1cdTAwM2VyeF90aHJlYWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTA0Mi1cdFx0XHRcdCAgICByc2lfc2Rpb19yeF90aHJlYWQsIFwmIzM0O1NESU8tUlgtVGhyZWFkXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NzM9c3RhdGljIGludCByc2lfdXNiX2luaXRfcngoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01OTMtXHRyc2lfaW5pdF9ldmVudChcdTAwMjZkZXYtXHUwMDNlcnhfdGhyZWFkLmV2ZW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU5NDpcdGlmIChyc2lfY3JlYXRlX2t0aHJlYWQoYWRhcHRlci1cdTAwM2Vwcml2LCBcdTAwMjZkZXYtXHUwMDNlcnhfdGhyZWFkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTk1LVx0XHRcdCAgICAgICByc2lfdXNiX3J4X3RocmVhZCwgXCYjMzQ7UlgtVGhyZWFkXCYjMzQ7KSkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmg9NTQ9c3RhdGljIGlubGluZSB2b2lkIHJzaV9yZXNldF9ldmVudChzdHJ1Y3QgcnNpX2V2ZW50ICpldmVudClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oLTU4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaDo1OTpzdGF0aWMgaW5saW5lIGludCByc2lfY3JlYXRlX2t0aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmgtNjAtXHRcdFx0XHQgICAgIHN0cnVjdCByc2lfdGhyZWFkICp0aHJlYWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQ29uZmlndXJhdGlvbiBhbmQgVGhyZWFkIFN5bWJvbCBTZWxlY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgQ0ZJIHZ1bG5lcmFiaWxpdHkgZml4LiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBlbmFibGUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIFdpLUZpIHZlbmRvciYjMzk7cyBSU0kgaGFyZHdhcmUuIFRoZSBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlciBhcmUgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgUlNJX1NESU9gLCBhbmQgYFJTSV9DT0VYYC4gSG9sZCBvbiwgYFJTSV9DT0VYYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBCVGAsIHNvIHRoYXQgbmVlZHMgdG8gYmUga2VwdCBpbiBtaW5kLgoKVGhlIHByb21wdCBoYXMgZ2l2ZW4gbWUgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgd2hpY2ggaW5jbHVkZSwgYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGFyZSBleHBvcnRlZCBvciBzdGF0aWMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZS4gTG9va2luZyBhdCBgcnNpXzkxeF9zZGlvX29wcy5jYCBJIGZpbmQgYGludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSlgLiBJbiBgcnNpXzkxeF91c2Jfb3BzLmNgIHRoZXJlJiMzOTtzIGBpbnQgcnNpX3VzYl9yeF90aHJlYWQodm9pZCAqZGF0YSlgLiBBbmQgaW4gYHJzaV85MXhfY29leC5jYCB0aGVyZSBpcyBgc3RhdGljIGludCByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpYCBhbmQgdGhlbiBpbiBgcnNpXzkxeF9tYWluLmNgIHRoZXJlJiMzOTtzIGBzdGF0aWMgaW50IHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpYC4KCkFoYSwgdGhlIGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCBhbmQgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCBhcmUgKnN0YXRpYyouIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGV5IG1pZ2h0IG5vdCBoYXZlIHVuaXF1ZSBzeW1ib2xzIGlmIHRoZSBjb21waWxlciBpbmxpbmVzIHRoZW0uIEhvd2V2ZXIsIEkgcmVhbGl6ZSB0aGV5IGFyZSBhY3R1YWxseSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYHJzaV9jcmVhdGVfa3RocmVhZGAsIG1lYW5pbmcgdGhleSAqY2FuJiMzOTt0KiBiZSBpbmxpbmVkLiBUaGlzIG1lYW5zIHRoZXkgd2lsbCBkZWZpbml0ZWx5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHNheWluZyB0byBwcmVmZXIgbm9uLXN0YXRpYyBvbmVzIGJ1dCBzaW5jZSB0aGVzZSBhcmUgcGFzc2VkIGFzIHBvaW50ZXJzIHRvIGByc2lfY3JlYXRlX2t0aHJlYWRgLCB0aGV5IHdpbGwgbm90IGJlIGlubGluZWQuIEJ1dCB0byBiZSBzYWZlLCBJIGNvdWxkIGNvbnNpZGVyIGluY2x1ZGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIHRoZSB0aHJlYWRzIG9yIHRoZSB0aHJlYWQgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEFjdHVhbGx5LCB0aGUgdGhyZWFkIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSB0aGUgb25lcyB0aGF0IHdlcmUgbW9kaWZpZWQuCgpUaGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLiBTaW5jZSBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAgaXMgc3RhdGljLCBJIG1pZ2h0IG5lZWQgdG8gYWRkIGByc2lfY29leF9hdHRhY2hgLCBgcnNpXzkxeF9pbml0YCwgYHJzaV9wcm9iZWAgKGZvciBTRElPKSwgYHJzaV91c2JfaW5pdF9yeGAuCgpCdXQgd2FpdCwgdGhlIHJlYWwgaXNzdWUgc2VlbXMgdG8gYmUgdGhlIHRocmVhZHMgYW5kIHRocmVhZCBleGVjdXRpb24uIEl0JiMzOTtzIHRoZSBleGVjdXRpb24gb2YgdGhlc2UgdGhyZWFkcyB0aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlIENGSSB2aW9sYXRpb24sIG9yIGF0IGxlYXN0IHdoZW4gdGhlIHRocmVhZCBpcyBjcmVhdGVkLiBTbywgdGhlIGZ1enppbmcgbmVlZHMgdG8gZm9jdXMgb24gc3RhcnRpbmcgdGhlc2UgdGhyZWFkcy4gSSB0aGluayBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLgoKVGhlc2UgdGhyZWFkcyBhcmUgc3RhcnRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gLSBgcnNpXzkxeF9pbml0YCwgYW5kIHRoZW4gYHJzaV9wcm9iZWAgZm9yIGJvdGggU0RJTyBhbmQgVVNCLiBXYWl0Li4uIGlzIGByc2lfdXNiX2luaXRfcnhgIGNhbGxlZCBmcm9tIGByc2lfcHJvYmVgPyBUaGlzIG1ha2VzIG1lIHRoaW5rIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSB0aHJlYWQgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEkgdGhpbmsgdGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIENGSSB2aW9sYXRpb24gYXJpc2VzIHdoZW4gdGhlIHRocmVhZHMgYmVnaW4gdG8gKmV4ZWN1dGUqLiBTbywgZnV6emluZyBuZWVkcyB0byBleGVyY2lzZSB0aG9zZSB0aHJlYWQgZW50cnkgcG9pbnRzLCBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpX3VzYl9pbml0X3J4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NjA9c3RhdGljIHZvaWQgcnNpX2RlaW5pdF91c2JfaW50ZXJmYWNlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTcyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTczOnN0YXRpYyBpbnQgcnNpX3VzYl9pbml0X3J4KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NzQte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTYxNz1zdGF0aWMgaW50IHJzaV9pbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02NDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2NDU6XHRpZiAocnNpX3VzYl9pbml0X3J4KGFkYXB0ZXIpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02NDYtXHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0O0ZhaWxlZCB0byBpbml0IFJYIGhhbmRsZVxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGByc2lfaW5pdF91c2JfaW50ZXJmYWNlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgcnNpX2luaXRfdXNiX2ludGVyZmFjZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gaXRzIG5hbWluZyBjb252ZW50aW9uLiBUaGUgJiMzNDtpbml0JiMzNDsgc3VnZ2VzdHMgaXQmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICYjMzQ7VVNCJiMzNDsgY2xlYXJseSBwb2ludHMgdG8gVW5pdmVyc2FsIFNlcmlhbCBCdXMsIGFuZCAmIzM0O2ludGVyZmFjZSYjMzQ7IGltcGxpZXMgaXQmIzM5O3Mgc2V0dGluZyB1cCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGZvciBhIFVTQiBkZXZpY2UuIEZyb20gdGhhdCwgSSBjYW4gaW5mZXIgaXQgbGlrZWx5IGNvbmZpZ3VyZXMgYSBVU0IgaW50ZXJmYWNlIGZvciBhIHNwZWNpZmljIGRldmljZSwgZHJpdmVyIG9yIGNvbW11bmljYXRpb24gZW5kcG9pbnQuIAoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGluaXRpYWwgaHlwb3RoZXNpcyBhbmQgZ2V0IGEgc2Vuc2Ugb2YgdGhlIGNvbnRleHQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtb2R1bGVzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHdoYXQgZXJyb3IgY29uZGl0aW9ucyBpdCBoYW5kbGVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVVNCIGludGVyZmFjZSBpcyBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBwYXJhbWV0ZXJzIGFuZCBpbnRlcm5hbCBsb2dpYyB0byBmdWxseSBhcHByZWNpYXRlIGl0cyBmdW5jdGlvbi4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGV2aWNlIGRldGVjdGlvbiwgYW5kIGludGVycnVwdCBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGdvYWwgaXMgdG8gZGV2ZWxvcCBhIGNvbXBsZXRlIGFuZCBpbmZvcm1lZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2lfaW5pdF91c2JfaW50ZXJmYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NzM9c3RhdGljIGludCByc2lfdXNiX2luaXRfcngoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02MTAtLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2MTE6ICogcnNpX2luaXRfdXNiX2ludGVyZmFjZSgpIC0gVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdXNiIGludGVyZmFjZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTYxMi0gKiBAYWRhcHRlcjogUG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjE2LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjE3OnN0YXRpYyBpbnQgcnNpX2luaXRfdXNiX2ludGVyZmFjZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjE4LVx0XHRcdFx0ICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcGZ1bmN0aW9uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTc4NT1zdGF0aWMgaW50IHJzaV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcGZ1bmN0aW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTgwMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjgwMzpcdHN0YXR1cyA9IHJzaV9pbml0X3VzYl9pbnRlcmZhY2UoYWRhcHRlciwgcGZ1bmN0aW9uKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTgwNC1cdGlmIChzdGF0dXMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFJTSSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgcnNpXzkxeF91c2IuY2AgZmlsZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgcnNpX3Byb2JlYC4gVGhhdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHRoZSBkcml2ZXImIzM5O3MgZW50cnkgcG9pbnQsIHJpZ2h0PyAgSXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoZSBVU0Igc3Vic3lzdGVtIHdpbGwgY2FsbCB3aGVuIGEgZGV2aWNlIG1hdGNoaW5nIHRoZSBkcml2ZXImIzM5O3MgSUQgaXMgcGx1Z2dlZCBpbi4gIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hhdCBpdCBhY3R1YWxseSAqZG9lcyouICBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIGByc2lfOTF4X2luaXRgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgc2V0dXAgc2hvdWxkIGJlLiBHb3R0YSB1bmRlcnN0YW5kIGhvdyB0aGlzIG1vZHVsZSBpbml0aWFsaXplcyB0aGUgaGFyZHdhcmUgYWZ0ZXIgaXQmIzM5O3MgbG9hZGVkIGFuZCBwcm9iZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV85MXhfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jPTI4Nz12b2lkIHJzaV9hdHRhY2hfYnQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMjk2LS8qKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jOjI5NzogKiByc2lfOTF4X2luaXQoKSAtIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgb3MgaW50ZXJmYWNlIG9wZXJhdGlvbnMuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMjk4LSAqIEBvcGVyX21vZGU6IE9uZSBvZiBERVZfT1BNT0RFXyouXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTMwMS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzozMDI6c3RydWN0IHJzaV9odyAqcnNpXzkxeF9pbml0KHUxNiBvcGVyX21vZGUpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzAzLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzkwLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzozOTE6RVhQT1JUX1NZTUJPTF9HUEwocnNpXzkxeF9pbml0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zOTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jPTEwMDE9c3RhdGljIGludCByc2lfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqcGZ1bmN0aW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xMDA5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjEwMTA6XHRhZGFwdGVyID0gcnNpXzkxeF9pbml0KGRldl9vcGVyX21vZGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTEwMTEtXHRpZiAoIWFkYXB0ZXIpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz03ODU9c3RhdGljIGludCByc2lfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnBmdW5jdGlvbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3OTU6XHRhZGFwdGVyID0gcnNpXzkxeF9pbml0KGRldl9vcGVyX21vZGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzk2LVx0aWYgKCFhZGFwdGVyKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaD04Mj11MTYgcnNpX2dldF9jb25uZWN0ZWRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmg6ODM6c3RydWN0IHJzaV9odyAqcnNpXzkxeF9pbml0KHUxNiBvcGVyX21vZGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaC04NC12b2lkIHJzaV85MXhfZGVpbml0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBSU0kgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBoZXJlLCB3aGV0aGVyIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggU0RJTyBvciBVU0IsIHRoZSBgcnNpX3Byb2JlYCBmdW5jdGlvbiBpcyB0aGUgaW5pdGlhbCBwb2ludCBvZiBlbnRyeS4gSXQmIzM5O3MgdGhlIG9uZSB0aGF0IGV2ZW50dWFsbHkga2lja3Mgb2ZmIGByc2lfOTF4X2luaXRgLiBOb3csIGByc2lfOTF4X2luaXRgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3Igc3Bhd25pbmcgdGhlIGB0eF90aHJlYWRgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkIGEgdHJhbnNtaXQgdGhyZWFkIHJpZ2h0IGZyb20gdGhlIGJlZ2lubmluZy4KCk5vdywgaXQgZ2V0cyBhIGJpdCBtb3JlIHNwZWNpZmljIGJhc2VkIG9uIHRoZSBidXMgdHlwZS4gRm9yIFVTQiwgYHJzaV9wcm9iZWAgc3Vic2VxdWVudGx5IGNhbGxzIGByc2lfaW5pdF91c2JfaW50ZXJmYWNlYCwgd2hpY2ggdGhlbiBsZWFkcyB0byBgcnNpX3VzYl9pbml0X3J4YC4gQW5kIHRoaXMsIGNyaXRpY2FsbHksIGNyZWF0ZXMgdGhlIGByeF90aHJlYWRgIGZvciBVU0IuIEZvciBTRElPLCB0aG91Z2gsIHRoZSBgcnhfdGhyZWFkYCBpcyBjcmVhdGVkIGRpcmVjdGx5IHdpdGhpbiB0aGUgYHJzaV9wcm9iZWAgZnVuY3Rpb24gaXRzZWxmLiBTbywgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGRpZmZlcnMgZXZlciBzbyBzbGlnaHRseSBkZXBlbmRpbmcgb24gaWYgd2UgYXJlIGRvaW5nIFNESU8gb3IgVVNCLgoKSSB1bmRlcnN0YW5kIHRoZSBjb3JlIGZsb3csIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hhdCBgcnNpX2NvZXhfYXR0YWNoYCBpcyBhYm91dC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byByZXZpc2l0IHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIHNlZSB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBpcyBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV9jb2V4X2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTEwMT1pbnQgcnNpX2NvZXhfc2VuZF9wa3Qodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaGFsX3F1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM6MTM5OmludCByc2lfY29leF9hdHRhY2goc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xNDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYz0zMDI9c3RydWN0IHJzaV9odyAqcnNpXzkxeF9pbml0KHUxNiBvcGVyX21vZGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTM3NC1cdGlmIChjb21tb24tXHUwMDNlY29leF9tb2RlIFx1MDAzZSAxKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM6Mzc1Olx0XHRpZiAocnNpX2NvZXhfYXR0YWNoKGNvbW1vbikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zNzYtXHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgY29leCBtb2R1bGVcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29leC5oPTI2PXN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvZXguaC0zMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29leC5oOjMyOmludCByc2lfY29leF9hdHRhY2goc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvZXguaC0zMy12b2lkIHJzaV9jb2V4X2RldGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN5emthbGxlciBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIFJTSSBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGluIHRoaXMgUlNJIGRyaXZlciBhcmUgdGhlIGJlc3QgdGFyZ2V0cyBmb3IgU3l6a2FsbGVyIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgcnNpXzkxeF9pbml0YCBjYWxscyBgcnNpX2NvZXhfYXR0YWNoYCwgd2hpY2ggdGhlbiBzcGF3bnMgdGhlIGBjb2V4X3R4X3RocmVhZGAuIFRoaXMgd2hvbGUgc2VxdWVuY2Ugc3RhcnRzIGZyb20gYHJzaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgY2FsbGJhY2suIFRoZSBkb2N1bWVudGF0aW9uIG1lbnRpb25zIHRoYXQgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYGlnYl9yZW1vdmVgIG9ubHkgcnVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kcywgc28gbWF5YmUgYHJzaV9wcm9iZWAgaXMgbGltaXRlZCB0byBob3QtcGx1ZyBzY2VuYXJpb3M/IE5vLCB0aGF0JiMzOTtzIHdyb25nLiBgcnNpX3Byb2JlYCBleGVjdXRlcyB3aGVuIHRoZSBVU0IgZGV2aWNlIGlzIGNvbm5lY3RlZCwgd2hpY2ggU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgKndpbGwqIHRyaWdnZXIuIE9rYXksIHNvIGByc2lfcHJvYmVgIGlzIGRlZmluaXRlbHkgZnV6emFibGUuCgpCdXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgYW5kIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBrZXkgZnVuY3Rpb25zIGlkZW50aWZpZWQgYXJlOiBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4gSG1tLCB0aG9zZSBhcmUgKnRocmVhZCogZnVuY3Rpb25zLiBDYW4gU3l6a2FsbGVyIHJlYWNoIHRob3NlPyBZZXMsIGBrdGhyZWFkX3J1bmAgc3RhcnRzIHRoZW0gZHVyaW5nIHRoZSBwcm9iZSBwcm9jZXNzLiBBbmQgc2luY2UgU3l6a2FsbGVyIHRyYWNlcyBhbGwga2VybmVsIGV4ZWN1dGlvbiwgaXQgKmNhbiogdHJhY2UgdGhvc2UgdGhyZWFkcyBldmVuIGlmIHRoZXkmIzM5O3JlIGFzeW5jaHJvbm91cy4KCk5vdywgYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgIGFuZCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpcyBub3QgaWRlYWwuIEJ1dCwgYXQgbGVhc3QsIEkgY2FuIGxpc3QgdGhlaXIgY2FsbGVycyBgcnNpXzkxeF9pbml0YCBhbmQgYHJzaV9jb2V4X2F0dGFjaGAuIGByc2lfY29leF9hdHRhY2hgIGlzIG5vbi1zdGF0aWMuIFRoZSBrZXkgaGVyZSBpcyB0byBsaXN0IG5vbi1zdGF0aWMgZnVuY3Rpb25zLgoKU28sIGxldCYjMzk7cyBsaXN0IHRoZSBub24tc3RhdGljIHRocmVhZCBmdW5jdGlvbnM6IGByc2lfc2Rpb19yeF90aHJlYWRgIGFuZCBgcnNpX3VzYl9yeF90aHJlYWRgLiBQbHVzLCBgcnNpXzkxeF9pbml0YCBhbmQgYHJzaV9jb2V4X2F0dGFjaGAuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgYHJzaV9zZGlvX3J4X3RocmVhZGAgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAgYXJlIGFjdHVhbGx5IGV4cG9ydGVkLiBXaGlsZSBub3QgZXhwbGljaXRseSBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCwgdGhleSAqYXJlKiBub24tc3RhdGljIGFuZCBkZWNsYXJlZCBpbiBoZWFkZXJzLCB3aGljaCBtZWFucyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdC4KClRoZSBgcnNpX3Byb2JlYCBmdW5jdGlvbiBpcyBzdGF0aWMuIFNvLCBJIGRvbiYjMzk7dCBsaXN0IHRoYXQuCgpgcnNpXzkxeF9pbml0YCBpcyBgRVhQT1JUX1NZTUJPTF9HUExgIGFuZCBgcnNpX2NvZXhfYXR0YWNoYCBpcyBub24tc3RhdGljLCBzbyBnb29kIHRvIGdvLgoKQW5kIGByc2lfY3JlYXRlX2t0aHJlYWRgIGlzIGEgc3RhdGljIGlubGluZSwgc28gdGhhdCYjMzk7cyBvdXQuCgpUaGVyZWZvcmUsIHRoZSBtYWluIGZ1enppbmcgdGFyZ2V0cyBzaG91bGQgYmU6CgoqICAgYHJzaV9zZGlvX3J4X3RocmVhZGAKKiAgIGByc2lfdXNiX3J4X3RocmVhZGAKKiAgIGByc2lfOTF4X2luaXRgCiogICBgcnNpX2NvZXhfYXR0YWNoYAoKSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbG9jYXRlZC4gYHJzaV9zZGlvX3J4X3RocmVhZGAgaXMgaW4gYHJzaV85MXhfc2Rpb19vcHMuY2AgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAgaXMgaW4gYHJzaV85MXhfdXNiX29wcy5jYC4KCk9rYXksIG5leHQgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaGFzOiBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBSU0lfU0RJT2AsIGFuZCBgUlNJX0NPRVhgIHNldC4gT2gsIGFuZCBgUlNJX0NPRVhgIGRlcGVuZHMgb24gYEJUYCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQgYXMgd2VsbC4gVGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYEtjb25maWdgIGZvciB0aGUgYHJzaWAgZHJpdmVyIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUlNJX0NPRVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz0zOT1jb25maWcgUlNJX1VTQlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTQ2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NDc6Y29uZmlnIFJTSV9DT0VYXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7UmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM3OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBSU0lfQ09FWCoqCgpPa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIGFuZCByZWFsbHkgZHJpbGwgZG93biBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBSU0lfQ09FWGAuIEkmIzM5O20gZ29pbmcgdG8gcmUtZXhhbWluZSB0aGUgZnVsbCBkZXBlbmRlbmN5IHRyZWUsIGFuZCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBpbiB0aGUgaW5pdGlhbCByZXZpZXcuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGltcGFjdCBmcm9tIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBjb3JlIGZyYW1ld29ya3MsIGxpYnJhcmllcywgb3Igc3lzdGVtIGFyY2hpdGVjdHVyZSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBvdmVybG9va2VkLiBUaGUgZ29hbCBpc24mIzM5O3QganVzdCB0byBzZWUgKndoYXQqIGBSU0lfQ09FWGAgZGVwZW5kcyBvbiwgYnV0ICp3aHkqLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgaXRzIHN0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCBmdXR1cmUgZGV2ZWxvcG1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvdXBsaW5nIGlzc3VlcyBvciBoaWRkZW4gYm90dGxlbmVja3MgbHVya2luZyBpbiB0aGUgZGVwZW5kZW5jeSBncmFwaC4gSSYjMzk7bSB0aGlua2luZyBwYXJ0aWN1bGFybHkgYWJvdXQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLCB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyB0aGF0IGNyZWF0ZSB1bmV4cGVjdGVkIGNvbmZsaWN0cywgb3IgZXZlbiB0aG9zZSBkZXBlbmRlbmNpZXMgd2hpY2ggYWRkIHVubmVjZXNzYXJ5IHdlaWdodC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGRlZXBlciBkaXZlIHJldmVhbHMgYW55dGhpbmcgbmV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydFwmIzM0O1xuICA0MTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IFJTSV85MVhcbiAgNDI6XHRcdGRlZmF1bHQgbVxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXG4gIDQ1Olx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIFJTSV9DT0VYXG4gIDQ4Olx0XHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBXTEFOIEJUIENvZXhpc3RlbmNlIHN1cHBvcnRcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gQlQgXHUwMDI2XHUwMDI2IFJTSV85MVhcbiAgNTA6XHRcdGRlcGVuZHMgb24gIShCVD1tIFx1MDAyNlx1MDAyNiBSU0lfOTFYPXkpXG4gIDUxOlx0XHRkZWZhdWx0IHlcbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgV0xBTiBCVCBjb2V4IHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXG4gIDU0Olx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIHdhbnQgdG8gdXNlIHRoaXMgZmVhdHVyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2OQoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiAxMDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUlNJIDkxeCBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBDRkkgdmlvbGF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIFJTSSA5MXggd2lyZWxlc3MgZHJpdmVyLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gdGhlIGRlcGVuZGVuY2llcywgaXQgbG9va3MgbGlrZTogYFJTSV9DT0VYYCBuZWVkcyBgQlRgIGFuZCBgUlNJXzkxWGAuIGBSU0lfU0RJT2AgcmVsaWVzIG9uIGBNTUNgIGFuZCBgUlNJXzkxWGAuIGBSU0lfVVNCYCBkZXBlbmRzIG9uIGBVU0JgIGFuZCBgUlNJXzkxWGAuIEFuZCBmaW5hbGx5LCBgUlNJXzkxWGAgaXRzZWxmIG5lZWRzIGBNQUM4MDIxMWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuYWJsZSBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBSU0lfU0RJT2AsIGBSU0lfQ09FWGAsIGFuZCBgTUFDODAyMTFgIGFzIHRoZSBrZXkgUlNJLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbG9uZyB3aXRoIGBNTUNgLCBgVVNCYCwgYW5kIGBCVGAuIFdoaWxlIGBNQUM4MDIxMWAsIGBVU0JgLCBgTU1DYCwgYW5kIGBCVGAgYXJlIGZhaXJseSBzdGFuZGFyZCwgaXQmIzM5O3Mgc2FmZXIgdG8gaW5jbHVkZSB0aGVtIGhlcmUuCgpTaW5jZSB0aGUgcHJvbXB0IHNwZWNpZmllcyBOT1QgYWRkaW5nIHRoZSBgQ09ORklHX2AgcHJlZml4IHRvIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwgSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpUaGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgY3Jhc2ggdW5kZXIgQ0ZJLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZyAoYW5kIHBvdGVudGlhbGx5IFNESU8gZW11bGF0ZWQgZW52aXJvbm1lbnRzKS4gU28sIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIG9idmlvdXMgY29uY2x1c2lvbi4KCk5vdywgZm9jdXNpbmcgb24gdGhlIGNyaXRpY2FsIHN5bWJvbHMsIEkgaWRlbnRpZnkgYHJzaV9zZGlvX3J4X3RocmVhZGAsIGByc2lfdXNiX3J4X3RocmVhZGAsIGByc2lfOTF4X2luaXRgLCBhbmQgYHJzaV9jb2V4X2F0dGFjaGAuIFRoaXMgaXMgYmVjYXVzZSB0aGUgcGF0Y2ggbW9kaWZpZXMgZnVuY3Rpb24gc2lnbmF0dXJlcywgc28gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGNoYW5nZWQgaXMgYSBnb29kIHN0YXJ0LiBJIGNhbiB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBieSBleGFtaW5pbmcgdGhlIGRpZmYuCgpJIHRoZW4gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBtb2RpZmllZDogYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAuIGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCBhbmQgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCBhcmUgc3RhdGljIGFuZCBwb3RlbnRpYWxseSBpbmxpbmVkLCBidXQgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgcnNpX2NyZWF0ZV9rdGhyZWFkYCwgc28gdGhlaXIgc3ltYm9sIGFkZHJlc3Mgd2lsbCBiZSBkaXN0aW5jdC4gVGhlIGluc3RydWN0aW9ucyBmYXZvciBub24tc3RhdGljIGZ1bmN0aW9ucywgc28gSSB3aWxsIGxpc3QgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIHRoZSB0aHJlYWRzLiBUaHVzIEkmIzM5O2xsIGxpc3QgdGhlIHRocmVhZCBmdW5jdGlvbnMuCgpJIHZlcmlmaWVkIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgc3ltYm9scyBpbiBxdWVzdGlvbiAoYHJzaV9zZGlvX3J4X3RocmVhZGAsIGByc2lfdXNiX3J4X3RocmVhZGAsIGByc2lfOTF4X2luaXRgLCBhbmQgYHJzaV9jb2V4X2F0dGFjaGApLCBjb25maXJtaW5nIHRoYXQgdGhleSBhcmUgZGVjbGFyZWQgaW4gaGVhZGVycyBhbmQgZGVmaW5lZCBpbiBzb3VyY2UgZmlsZXMgYW5kIGV4cG9ydGVkIHdoZXJlIGFwcGxpY2FibGUuCgpUaHVzLCB0aGUgZmluYWwgYEVuYWJsZUNvbmZpZ3NgIGFyZTogYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgUlNJX1NESU9gLCBgUlNJX0NPRVhgLCBgTUFDODAyMTFgLCBgTU1DYCwgYEJUYC4KClRoaXMgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOX1ZFTkRPUl9SU0kmIzM0OywKICAgICYjMzQ7UlNJXzkxWCYjMzQ7LAogICAgJiMzNDtSU0lfVVNCJiMzNDssCiAgICAmIzM0O1JTSV9TRElPJiMzNDssCiAgICAmIzM0O1JTSV9DT0VYJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01NQyYjMzQ7LAogICAgJiMzNDtCVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JzaV9zZGlvX3J4X3RocmVhZCYjMzQ7LAogICAgJiMzNDtyc2lfdXNiX3J4X3RocmVhZCYjMzQ7LAogICAgJiMzNDtyc2lfOTF4X2luaXQmIzM0OywKICAgICYjMzQ7cnNpX2NvZXhfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgQ29udHJvbC1GbG93IEludGVncml0eSAoQ0ZJKSB2aW9sYXRpb24gYnkgY29ycmVjdGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBvZiBzZXZlcmFsIGt0aHJlYWQgZnVuY3Rpb25zIGluIHRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gVGhlc2UgdGhyZWFkcyBhcmUgY3JlYXRlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChmdXp6aW5nKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTl9WRU5ET1JfUlNJJiMzNDssCiAgICAmIzM0O1JTSV85MVgmIzM0OywKICAgICYjMzQ7UlNJX1VTQiYjMzQ7LAogICAgJiMzNDtSU0lfU0RJTyYjMzQ7LAogICAgJiMzNDtSU0lfQ09FWCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNTUMmIzM0OywKICAgICYjMzQ7QlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfc2Rpb19yeF90aHJlYWQmIzM0OywKICAgICYjMzQ7cnNpX3VzYl9yeF90aHJlYWQmIzM0OywKICAgICYjMzQ7cnNpXzkxeF9pbml0JiMzNDssCiAgICAmIzM0O3JzaV9jb2V4X2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MToxNi45ODU5NjY5MzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTU1ODE4NDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOX1ZFTkRPUl9SU0lcIixcbiAgICBcIlJTSV85MVhcIixcbiAgICBcIlJTSV9VU0JcIixcbiAgICBcIlJTSV9TRElPXCIsXG4gICAgXCJSU0lfQ09FWFwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1NQ1wiLFxuICAgIFwiQlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyc2lfc2Rpb19yeF90aHJlYWRcIixcbiAgICBcInJzaV91c2JfcnhfdGhyZWFkXCIsXG4gICAgXCJyc2lfOTF4X2luaXRcIixcbiAgICBcInJzaV9jb2V4X2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgQ29udHJvbC1GbG93IEludGVncml0eSAoQ0ZJKSB2aW9sYXRpb24gYnkgY29ycmVjdGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBvZiBzZXZlcmFsIGt0aHJlYWQgZnVuY3Rpb25zIGluIHRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gVGhlc2UgdGhyZWFkcyBhcmUgY3JlYXRlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgdmlhIFVTQiBkZXZpY2UgZW11bGF0aW9uIChmdXp6aW5nKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6MTYuOTg1OTcyODI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkyMjEyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YzAyNzhhNzIzNzUwMDliZWNmM2UwOTJiOTA5NGE5NjI5ZDY1ZDZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTk6NDE6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXFxuaW5kZXggZWU2MDNhNTE3M2ZiMy4uMDIzYzUzOWZjMzg0MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmNcXG5AQCAtNTAsOCArNTAsOSBAQCBzdGF0aWMgdm9pZCByc2lfY29leF9zY2hlZF90eF9wa3RzKHN0cnVjdCByc2lfY29leF9jdHJsX2Jsb2NrICpjb2V4X2NiKVxcbiBcXHR9IHdoaWxlIChjb2V4X3EgIT0gUlNJX0NPRVhfUV9JTlZBTElEKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbitzdGF0aWMgaW50IHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWQodm9pZCAqZGF0YSlcXG4ge1xcbitcXHRzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uID0gZGF0YTtcXG4gXFx0c3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IgPSBjb21tb24tXFx1MDAzZWNvZXhfY2I7XFxuIFxcdHUzMiB0aW1lb3V0ID0gRVZFTlRfV0FJVF9GT1JFVkVSO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jXFxuaW5kZXggNjYyZTQyZDFlNWU4ZC4uNjFkYjJiMzYzZDExNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmNcXG5AQCAtMjQ2LDEyICsyNDYsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwocnNpX3JlYWRfcGt0KTtcXG4gLyoqXFxuICAqIHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKCkgLSBUaGlzIGZ1bmN0aW9uIGlzIGEga2VybmVsIHRocmVhZCB0byBzZW5kIHRoZVxcbiAgKlxcdFxcdFxcdCAgICAgICBwYWNrZXRzIHRvIHRoZSBkZXZpY2UuXFxuLSAqIEBjb21tb246IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZS5cXG4rICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZS5cXG4gICpcXG4gICogUmV0dXJuOiBOb25lLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4rc3RhdGljIGludCByc2lfdHhfc2NoZWR1bGVyX3RocmVhZCh2b2lkICpkYXRhKVxcbiB7XFxuK1xcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xcbiBcXHRzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyID0gY29tbW9uLVxcdTAwM2Vwcml2O1xcbiBcXHR1MzIgdGltZW91dCA9IEVWRU5UX1dBSVRfRk9SRVZFUjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jXFxuaW5kZXggNTk3YjIzOGUyMjk0OS4uMThhMjhhYTk3NDQ2MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuY1xcbkBAIC02Miw4ICs2Miw5IEBAIGludCByc2lfc2Rpb19tYXN0ZXJfYWNjZXNzX21zd29yZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgbXNfd29yZClcXG4gXFxuIHN0YXRpYyB2b2lkIHJzaV9yeF9oYW5kbGVyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xcbiBcXG4tdm9pZCByc2lfc2Rpb19yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4raW50IHJzaV9zZGlvX3J4X3RocmVhZCh2b2lkICpkYXRhKVxcbiB7XFxuK1xcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xcbiBcXHRzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyID0gY29tbW9uLVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3QgcnNpXzkxeF9zZGlvZGV2ICpzZGV2ID0gYWRhcHRlci1cXHUwMDNlcnNpX2RldjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuY1xcbmluZGV4IDI1YzJiMjMyMzk0YTYuLjUxM2QyZmRmYjUxMDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXFxuQEAgLTI1LDggKzI1LDkgQEBcXG4gICpcXG4gICogUmV0dXJuOiBOb25lLlxcbiAgKi9cXG4tdm9pZCByc2lfdXNiX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbitpbnQgcnNpX3VzYl9yeF90aHJlYWQodm9pZCAqZGF0YSlcXG4ge1xcbitcXHRzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uID0gZGF0YTtcXG4gXFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cXHUwMDNlcHJpdjtcXG4gXFx0c3RydWN0IHJzaV85MXhfdXNiZGV2ICpkZXYgPSBhZGFwdGVyLVxcdTAwM2Vyc2lfZGV2O1xcbiBcXHRpbnQgc3RhdHVzO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxcbmluZGV4IDNjZGY5ZGVkODc2ZDkuLjJhMzNhODFmNzFhM2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmhcXG5AQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnNpX3Jlc2V0X2V2ZW50KHN0cnVjdCByc2lfZXZlbnQgKmV2ZW50KVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgcnNpX2NyZWF0ZV9rdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJzaV90aHJlYWQgKnRocmVhZCxcXG4tXFx0XFx0XFx0XFx0ICAgICB2b2lkICpmdW5jX3B0cixcXG4rXFx0XFx0XFx0XFx0ICAgICBpbnQgKCpmdW5jX3B0cikodm9pZCAqZGF0YSksXFxuIFxcdFxcdFxcdFxcdCAgICAgdTggKm5hbWUpXFxuIHtcXG4gXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZ0aHJlYWQtXFx1MDAzZWNvbXBsZXRpb24pO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXFxuaW5kZXggN2M5MWIxMjZiMzUwZi4uZWIyYjdmMzZhN2U0YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXFxuQEAgLTEzNCw1ICsxMzQsNSBAQCBpbnQgcnNpX3NkaW9fbWFzdGVyX2FjY2Vzc19tc3dvcmQoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTE2IG1zX3dvcmQpO1xcbiB2b2lkIHJzaV9zZGlvX2Fja19pbnRyKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IGludF9iaXQpO1xcbiBpbnQgcnNpX3NkaW9fZGV0ZXJtaW5lX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcik7XFxuIGludCByc2lfc2Rpb19jaGVja19idWZmZXJfc3RhdHVzKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IHFfbnVtKTtcXG4tdm9pZCByc2lfc2Rpb19yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XFxuK2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaFxcbmluZGV4IDk2MTg1MTc0OGJjNGMuLjc4MDY3ZWFmZmU4YjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmhcXG5AQCAtODEsNSArODEsNSBAQCBzdGF0aWMgaW5saW5lIGludCByc2lfdXNiX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4gXFx0cmV0dXJuIEVWRU5UX1dBSVRfRk9SRVZFUjtcXG4gfVxcbiBcXG4tdm9pZCByc2lfdXNiX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcXG4raW50IHJzaV91c2JfcnhfdGhyZWFkKHZvaWQgKmRhdGEpO1xcbiAjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6MTcuMjY1ODc3MTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzUyNzgyNjQwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJSU0lfU0RJT1wiLFxuICAgIFwiUlNJX0NPRVhcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNTUNcIixcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnNpX3NkaW9fcnhfdGhyZWFkXCIsXG4gICAgXCJyc2lfdXNiX3J4X3RocmVhZFwiLFxuICAgIFwicnNpXzkxeF9pbml0XCIsXG4gICAgXCJyc2lfY29leF9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljMDI3OGE3MjM3NTAwOWJlY2YzZTA5MmI5MDk0YTk2MjlkNjVkNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDE5OjQxOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXG5pbmRleCBlZTYwM2E1MTczZmIzLi4wMjNjNTM5ZmMzODQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmNcbkBAIC01MCw4ICs1MCw5IEBAIHN0YXRpYyB2b2lkIHJzaV9jb2V4X3NjaGVkX3R4X3BrdHMoc3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IpXG4gXHR9IHdoaWxlIChjb2V4X3EgIT0gUlNJX0NPRVhfUV9JTlZBTElEKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuK3N0YXRpYyBpbnQgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZCh2b2lkICpkYXRhKVxuIHtcbitcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xuIFx0c3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sgKmNvZXhfY2IgPSBjb21tb24tXHUwMDNlY29leF9jYjtcbiBcdHUzMiB0aW1lb3V0ID0gRVZFTlRfV0FJVF9GT1JFVkVSO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uY1xuaW5kZXggNjYyZTQyZDFlNWU4ZC4uNjFkYjJiMzYzZDExNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jXG5AQCAtMjQ2LDEyICsyNDYsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwocnNpX3JlYWRfcGt0KTtcbiAvKipcbiAgKiByc2lfdHhfc2NoZWR1bGVyX3RocmVhZCgpIC0gVGhpcyBmdW5jdGlvbiBpcyBhIGtlcm5lbCB0aHJlYWQgdG8gc2VuZCB0aGVcbiAgKlx0XHRcdCAgICAgICBwYWNrZXRzIHRvIHRoZSBkZXZpY2UuXG4tICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLlxuKyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUuXG4gICpcbiAgKiBSZXR1cm46IE5vbmUuXG4gICovXG4tc3RhdGljIHZvaWQgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbitzdGF0aWMgaW50IHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpXG4ge1xuK1x0c3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiA9IGRhdGE7XG4gXHRzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyID0gY29tbW9uLVx1MDAzZXByaXY7XG4gXHR1MzIgdGltZW91dCA9IEVWRU5UX1dBSVRfRk9SRVZFUjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuY1xuaW5kZXggNTk3YjIzOGUyMjk0OS4uMThhMjhhYTk3NDQ2MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmNcbkBAIC02Miw4ICs2Miw5IEBAIGludCByc2lfc2Rpb19tYXN0ZXJfYWNjZXNzX21zd29yZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgbXNfd29yZClcbiBcbiBzdGF0aWMgdm9pZCByc2lfcnhfaGFuZGxlcihzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKTtcbiBcbi12b2lkIHJzaV9zZGlvX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuK2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSlcbiB7XG4rXHRzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uID0gZGF0YTtcbiBcdHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIgPSBjb21tb24tXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCByc2lfOTF4X3NkaW9kZXYgKnNkZXYgPSBhZGFwdGVyLVx1MDAzZXJzaV9kZXY7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXG5pbmRleCAyNWMyYjIzMjM5NGE2Li41MTNkMmZkZmI1MTA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmNcbkBAIC0yNSw4ICsyNSw5IEBAXG4gICpcbiAgKiBSZXR1cm46IE5vbmUuXG4gICovXG4tdm9pZCByc2lfdXNiX3J4X3RocmVhZChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuK2ludCByc2lfdXNiX3J4X3RocmVhZCh2b2lkICpkYXRhKVxuIHtcbitcdHN0cnVjdCByc2lfY29tbW9uICpjb21tb24gPSBkYXRhO1xuIFx0c3RydWN0IHJzaV9odyAqYWRhcHRlciA9IGNvbW1vbi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHJzaV85MXhfdXNiZGV2ICpkZXYgPSBhZGFwdGVyLVx1MDAzZXJzaV9kZXY7XG4gXHRpbnQgc3RhdHVzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oXG5pbmRleCAzY2RmOWRlZDg3NmQ5Li4yYTMzYTgxZjcxYTNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaFxuQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJzaV9yZXNldF9ldmVudChzdHJ1Y3QgcnNpX2V2ZW50ICpldmVudClcbiBcbiBzdGF0aWMgaW5saW5lIGludCByc2lfY3JlYXRlX2t0aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbixcbiBcdFx0XHRcdCAgICAgc3RydWN0IHJzaV90aHJlYWQgKnRocmVhZCxcbi1cdFx0XHRcdCAgICAgdm9pZCAqZnVuY19wdHIsXG4rXHRcdFx0XHQgICAgIGludCAoKmZ1bmNfcHRyKSh2b2lkICpkYXRhKSxcbiBcdFx0XHRcdCAgICAgdTggKm5hbWUpXG4ge1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnRocmVhZC1cdTAwM2Vjb21wbGV0aW9uKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXG5pbmRleCA3YzkxYjEyNmIzNTBmLi5lYjJiN2YzNmE3ZTRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9zZGlvLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfc2Rpby5oXG5AQCAtMTM0LDUgKzEzNCw1IEBAIGludCByc2lfc2Rpb19tYXN0ZXJfYWNjZXNzX21zd29yZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgbXNfd29yZCk7XG4gdm9pZCByc2lfc2Rpb19hY2tfaW50cihzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCBpbnRfYml0KTtcbiBpbnQgcnNpX3NkaW9fZGV0ZXJtaW5lX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcik7XG4gaW50IHJzaV9zZGlvX2NoZWNrX2J1ZmZlcl9zdGF0dXMoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTggcV9udW0pO1xuLXZvaWQgcnNpX3NkaW9fcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pO1xuK2ludCByc2lfc2Rpb19yeF90aHJlYWQodm9pZCAqZGF0YSk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmhcbmluZGV4IDk2MTg1MTc0OGJjNGMuLjc4MDY3ZWFmZmU4YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oXG5AQCAtODEsNSArODEsNSBAQCBzdGF0aWMgaW5saW5lIGludCByc2lfdXNiX2V2ZW50X3RpbWVvdXQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbiBcdHJldHVybiBFVkVOVF9XQUlUX0ZPUkVWRVI7XG4gfVxuIFxuLXZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XG4raW50IHJzaV91c2JfcnhfdGhyZWFkKHZvaWQgKmRhdGEpO1xuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6MTcuMjY1ODc4MzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM4NjU0MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtZXNzaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgc2NyZWFtcyBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gSSBrbm93IHRoaXMgZHJpdmVyOyBpdCdzIGZvciBSZWRwaW5lIFNpZ25hbHMnIFdMQU4gYW5kIEJsdWV0b290aCBjb21ibyBkZXZpY2UuIE15IG1haW4gY29uY2VybiByaWdodCBub3cgaXMgaG93IHJlYWNoYWJsZSBhcmUgdGhlc2UgdGhyZWFkIGZ1bmN0aW9ucz8gSXMgdGhpcyBkcml2ZXIgYWN0aXZlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/XG5cbkl0J3MgYSB3aXJlbGVzcyBkcml2ZXIsIGJ1dCB0aGUgcHJlc2VuY2Ugb2YgU0RJTyBhbmQgVVNCIGludGVyZmFjZXMgc3BhcmtzIGFuIGludGVyZXN0aW5nIHRob3VnaHQuIFVTQiBkZXZpY2VzIGFyZSBvZnRlbiBlbXVsYXRlZCBmb3IgdGVzdGluZy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgVVNCIGdhZGdldCwgZHVtbXlfaGNkLCBvciBldmVuIHN5emthbGxlcidzIFVTQiBmdXp6ZXIgKHVzaW5nIHZoY2kpLiBUaGUgYHJzaV91c2JfcnhfdGhyZWFkYCBpcyB0aGUgbW9zdCBpbnRyaWd1aW5nIG9uZSBmb3IgdGhpcyBsaW5lIG9mIHRob3VnaHQgLSBDb3VsZCBpdCBiZSB0YXJnZXRlZCB3aXRoIGZ1enppbmc/IFRoZW4gaXQgaGl0cyBtZSwgc3l6a2FsbGVyIGhhcyBhIFVTQiBmdXp6ZXIgd2hpY2ggY2FuIGVtdWxhdGUgYXJiaXRyYXJ5IFVTQiBkZXZpY2VzLiBZZXMsIHRoYXQgbWFrZXMgVVNCIGRyaXZlcnMgcmVhY2hhYmxlIGJ5IGZ1enppbmcuIE9rYXksIHRoYXQncyBleGNpdGluZyAtIEkgdGhpbmsgdGhpcyBkcml2ZXIgY291bGQgYmUgZnV6emVkIHZpYSBVU0IsIHdoaWNoIGxlYWRzIHRvIHRoaW5raW5nIHRoZXJlIGNvdWxkIGJlIHJlYWwgYnVncyBoZXJlLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBSU0lfOTFYYCBpcyB0aGUgY29ycmVjdCBLY29uZmlnIHN5bWJvbC4gVGltZSB0byBzZWFyY2ggZm9yIHRoZSBkcml2ZXIncyBLY29uZmlnIGRlZmluaXRpb24gdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY1MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjIyLjkwNDUzNjEyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYyMDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUlNJXzkxWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE1OmNvbmZpZyBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTYtXFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjIyLjk0NzE2MDU2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTYyNjkwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBSU0lfOTFYKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgUlNJXzkxWGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYmVmb3JlIG1ha2luZyBhbnkgY2hhbmdlcyBvciBjb25zaWRlcmluZyBpbnRlZ3JhdGlvbiB3aXRoIGFueXRoaW5nIG5ldy4gTGV0J3Mgc2VlLi4uIGZpcnN0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIGxpYnJhcmllcyBpdCdzIGxpa2VseSB1c2luZy4gV2UgaGF2ZSB0aGUgdXN1YWwgc3VzcGVjdHMgLSBOdW1QeSwgU2NpUHksIG1heWJlIFBhbmRhcyBmb3IgZGF0YSBoYW5kbGluZyBpZiBpdCdzIHByb2Nlc3NpbmcgdGltZSBzZXJpZXMgZGF0YS4gVGhlbiB0aGVyZSBtaWdodCBiZSBzb21lIHNwZWNpYWxpemVkIGxpYnJhcmllcyBmb3Igc2lnbmFsIHByb2Nlc3Npbmcgb3IgZmluYW5jaWFsIGFuYWx5c2lzLCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgOTFYIHZlcnNpb24gcmVwcmVzZW50cyBhbmQgdGhlIHNjb3BlLlxuXG5JIGhhdmUgdG8gY29uc2lkZXIgdGhlIHZlcnNpb24gY29tcGF0aWJpbGl0eSBvZiBlYWNoIGRlcGVuZGVudCBsaWJyYXJ5LiBBcmUgdGhlcmUgYW55IGtub3duIGNvbmZsaWN0cz8gQXJlIHdlIHN0aWxsIHJ1bm5pbmcgb24gb3V0ZGF0ZWQgdmVyc2lvbnMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBJIHdhbnQgdG8gYXZvaWQgdGhlIFwiZGVwZW5kZW5jeSBoZWxsXCIgc2NlbmFyaW8gYXQgYWxsIGNvc3RzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGltcG9ydCBzdGF0ZW1lbnRzIGFuZCB0aGUgcHJvamVjdCdzIHNldHVwIGZpbGVzIChweXByb2plY3QudG9tbCwgcmVxdWlyZW1lbnRzLnR4dCwgc2V0dXAucHksIGV0Yy4pIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY3kgZ3JhcGguXG5cbkl04oCZcyBhbHNvIGltcG9ydGFudCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2Vzcy4gV2hhdCB0b29scyBhcmUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZT8gSXMgaXQgdXNpbmcgc2V0dXB0b29scywgZmxpdCwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgY2FuIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIGRlcGVuZGVuY2llcy5cblxuQmV5b25kIHRoZSBpbW1lZGlhdGUgaW1wb3J0cywgSSdtIHRoaW5raW5nIGFib3V0IHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzLiBXaGF0IGxpYnJhcmllcyBkb2VzICp0aG9zZSogbGlicmFyaWVzIHJlbHkgb24/IFNvbWV0aW1lcywgaGlkZGVuIGRlcGVuZGVuY2llcyBjYW4gaW50cm9kdWNlIHVuZXhwZWN0ZWQgaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHBvb3JseSBtYWludGFpbmVkIG9yIGhhdmUgbGljZW5zaW5nIGNvbmNlcm5zLiBUaW1lIGZvciBhIGRlZXBlciBkaXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzc4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6MjYuNzYzNDMyMDU3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzU2NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSU0lfOTFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjE1OmNvbmZpZyBSU0lfOTFYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTYtXFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjI2LjgwODE5NDA2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTA2ODQ2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEaXZpbmcgaW50byB0aGUgUlNJIFdpcmVsZXNzIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIFJTSSB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUg4oCTIGxldCdzIG9wZW4gdXAgdGhhdCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWdgIGZpbGUuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY2VudHJhbCBodWIgZm9yIGRlZmluaW5nIHRoZSBidWlsZCBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBSU0kgd2lyZWxlc3MgZHJpdmVyLiBJJ20gY3VyaW91cyB0byBzZWUgaG93IGdyYW51bGFyIHRoZSBjb250cm9sIGlzLiBBcmUgd2UgbG9va2luZyBhdCBpbmRpdmlkdWFsIGZlYXR1cmUgZmxhZ3MgZm9yIGRpZmZlcmVudCA4MDIuMTEgc3RhbmRhcmRzLCBvciBhcmUgd2UgZGVhbGluZyB3aXRoIGJyb2FkZXIsIG1vcmUgZW5jb21wYXNzaW5nIG9wdGlvbnM/IFdoYXQgYWJvdXQgaGFyZHdhcmUgc3VwcG9ydCDigJMgaXMgaXQgYWxsIGJ1bmRsZWQgdW5kZXIgb25lIHVtYnJlbGxhLCBvciBhcmUgdGhlcmUgZGlzdGluY3QgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudCBSU0kgY2hpcHNldHM/IFRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIGhvdyBmbGV4aWJsZSB0aGlzIGRyaXZlciBpcyBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBjYXVzZSBoZWFkYWNoZXMgZG93biB0aGUgcm9hZCwgZXNwZWNpYWxseSB3aGVuIGludGVncmF0aW5nIGl0IHdpdGggb3RoZXIgd2lyZWxlc3Mgc3RhY2tzIG9yIG5ldHdvcmsgc3Vic3lzdGVtcy4gVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmFiaWxpdHkgYW5kIGV4dGVuc2liaWxpdHkgb2YgdGhpcyBkcml2ZXIncyBidWlsZCBwcm9jZXNzLiBMZXQncyBnZXQgY3JhY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MTozMC4yNTg4ODEwNjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdMQU5fVkVORE9SX1JTSVxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgd2lyZWxlc3MgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAgNzpcXHRcXG4gICA4OlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gICA5OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG4gIDEwOlxcdFxcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxcbiAgMTE6XFx0XFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIFdMQU5fVkVORE9SX1JTSVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgUlNJXzkxWFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQlRfSENJUlNJIGlmIFJTSV9DT0VYXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAxOTpcXHRcXHRoZWxwXFxuICAyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJlcyBzdXBwb3J0IGZvciBSU0kgMXgxIGRldmljZXMuXFxuICAyMTpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBSU0lfREVCVUdGU1xcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZWJ1ZyBzdXBwb3J0XFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBSU0lfOTFYXFxuICAyNjpcXHRcXHRkZWZhdWx0IHlcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCBTYXkgWSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGRlYnVnIHN1cHBvcnQuIFRoaXMgb3B0aW9uXFxuICAyOTpcXHRcXHQgY3JlYXRlcyBkZWJ1Z2ZzIGVudHJpZXNcXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIFJTSV9TRElPXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVkcGluZSBTaWduYWxzIFNESU8gYnVzIHN1cHBvcnRcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIE1NQyBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuICAzNDpcXHRcXHRkZWZhdWx0IG1cXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cXG4gIDM3OlxcdFxcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIFJTSV9VU0JcXG4gIDQwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgVVNCIGJ1cyBzdXBwb3J0XFxcIlxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgNDI6XFx0XFx0ZGVmYXVsdCBtXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cXG4gIDQ1OlxcdFxcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIFJTSV9DT0VYXFxuICA0ODpcXHRcXHRib29sIFxcXCJSZWRwaW5lIFNpZ25hbHMgV0xBTiBCVCBDb2V4aXN0ZW5jZSBzdXBwb3J0XFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBCVCBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuICA1MDpcXHRcXHRkZXBlbmRzIG9uICEoQlQ9bSBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYPXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjMwLjI1ODk1NjI1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODIzMjc5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgRHJpdmVyIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCdzIGNhdGNoaW5nIG15IGF0dGVudGlvbi4gVGhleSdyZSBhbHRlcmluZyB0aGUgdGhyZWFkIGZ1bmN0aW9uIHNpZ25hdHVyZS4gUHJldmlvdXNseSwgd2UgaGFkIGB2b2lkIGZ1bmMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilgLCBidXQgbm93IGl0J3MgYGludCBmdW5jKHZvaWQgKmRhdGEpYC4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIGltcGxpY2F0aW9ucyDigJMgYGt0aHJlYWRfcnVuYCBhbmQgb3RoZXIgdGhyZWFkIGNyZWF0aW9uIGZ1bmN0aW9ucyBleHBlY3QgdGhhdCBgaW50ICgqdGhyZWFkZm4pKHZvaWQgKmRhdGEpYCBzaWduYXR1cmUuIFBhc3NpbmcgdGhlIHdyb25nIHNpZ25hdHVyZSB3b3VsZCBhYnNvbHV0ZWx5IHRyaWdnZXIgQ29udHJvbC1GbG93IEludGVncml0eSAoQ0ZJKSB2aW9sYXRpb25zLCBhbmQgdGhhdCdzIGEgc2VyaW91cyBzZWN1cml0eSBjb25jZXJuLiBTbywgdGhpcyBwYXRjaCBpcyBkaXJlY3RseSBhZGRyZXNzaW5nIGFuZCBmaXhpbmcgYSBDRkkgdmlvbGF0aW9uLiBUaGF0IG1ha2VzIHRoaXMgYSBjcml0aWNhbCBmdW5jdGlvbmFsIGZpeC5cblxuTm93LCBsZXQncyBsb29rIGF0IGhvdyB0aGUgZHJpdmVyIGlzIGJlaW5nIGFjY2Vzc2VkLiBUaGUgdGV4dCBzYXlzIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGZ1enppbmcuIEludGVyZXN0aW5nLiBJdCBzb3VuZHMgbGlrZSB0aGlzIGlzIGhvdyB0aGUgdnVsbmVyYWJpbGl0eSB3YXMgZm91bmQsIGJ5IGxldmVyYWdpbmcgVVNCLiBBbmQgdGhlIG5lY2Vzc2FyeSBjb25maWdzIHRoYXQgdGhleSB1c2VkIGFyZSBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBSU0lfQ09FWGAsIGFuZCBgUlNJX1NESU9gLiBIb2xkIG9uLi4uIGBSU0lfQ09FWGAgZGVwZW5kcyBvbiBgQlRgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBkZXBlbmRlbmN5IGFuZCBrZWVwIGl0IGluIG1pbmQgYXMgSSBrZWVwIHJldmlld2luZy4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBgcnNpX2NyZWF0ZV9rdGhyZWFkYCB0byBjb25maXJtIHRoaXMgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjM0Ljk0MTI4NzI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2Nzc3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNpX2NyZWF0ZV9rdGhyZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jPTEzOT1pbnQgcnNpX2NvZXhfYXR0YWNoKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTU2LVxcdC8qIEluaXRpYWxpemUgY28tZXggdGhyZWFkICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfY29leC5jOjE1NzpcXHRpZiAocnNpX2NyZWF0ZV9rdGhyZWFkKGNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTU4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y29leF9jYi1cXHUwMDNlY29leF90eF90aHJlYWQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM9MzAyPXN0cnVjdCByc2lfaHcgKnJzaV85MXhfaW5pdCh1MTYgb3Blcl9tb2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTMzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmM6MzMyOlxcdGlmIChyc2lfY3JlYXRlX2t0aHJlYWQoY29tbW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zMzMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjb21tb24tXFx1MDAzZXR4X3RocmVhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYz0xMDAxPXN0YXRpYyBpbnQgcnNpX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnBmdW5jdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xMDQwLVxcdHJzaV9pbml0X2V2ZW50KFxcdTAwMjZzZGV2LVxcdTAwM2VyeF90aHJlYWQuZXZlbnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYzoxMDQxOlxcdHN0YXR1cyA9IHJzaV9jcmVhdGVfa3RocmVhZChhZGFwdGVyLVxcdTAwM2Vwcml2LCBcXHUwMDI2c2Rldi1cXHUwMDNlcnhfdGhyZWFkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xMDQyLVxcdFxcdFxcdFxcdCAgICByc2lfc2Rpb19yeF90aHJlYWQsIFxcXCJTRElPLVJYLVRocmVhZFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9NTczPXN0YXRpYyBpbnQgcnNpX3VzYl9pbml0X3J4KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01OTMtXFx0cnNpX2luaXRfZXZlbnQoXFx1MDAyNmRldi1cXHUwMDNlcnhfdGhyZWFkLmV2ZW50KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1OTQ6XFx0aWYgKHJzaV9jcmVhdGVfa3RocmVhZChhZGFwdGVyLVxcdTAwM2Vwcml2LCBcXHUwMDI2ZGV2LVxcdTAwM2VyeF90aHJlYWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTk1LVxcdFxcdFxcdCAgICAgICByc2lfdXNiX3J4X3RocmVhZCwgXFxcIlJYLVRocmVhZFxcXCIpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oPTU0PXN0YXRpYyBpbmxpbmUgdm9pZCByc2lfcmVzZXRfZXZlbnQoc3RydWN0IHJzaV9ldmVudCAqZXZlbnQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvbW1vbi5oLTU4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmg6NTk6c3RhdGljIGlubGluZSBpbnQgcnNpX2NyZWF0ZV9rdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaC02MC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCByc2lfdGhyZWFkICp0aHJlYWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQxOjM0Ljk4Mjk3NjQ0MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjgyOTcyNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIENvbmZpZ3VyYXRpb24gYW5kIFRocmVhZCBTeW1ib2wgU2VsZWN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgQ0ZJIHZ1bG5lcmFiaWxpdHkgZml4LiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBlbmFibGUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIFdpLUZpIHZlbmRvcidzIFJTSSBoYXJkd2FyZS4gVGhlIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyIGFyZSBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBSU0lfU0RJT2AsIGFuZCBgUlNJX0NPRVhgLiBIb2xkIG9uLCBgUlNJX0NPRVhgIGhhcyBhIGRlcGVuZGVuY3kgb24gYEJUYCwgc28gdGhhdCBuZWVkcyB0byBiZSBrZXB0IGluIG1pbmQuXG5cblRoZSBwcm9tcHQgaGFzIGdpdmVuIG1lIGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHdoaWNoIGluY2x1ZGUsIGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCwgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCwgYHJzaV9zZGlvX3J4X3RocmVhZGAsIGFuZCBgcnNpX3VzYl9yeF90aHJlYWRgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGFyZSBleHBvcnRlZCBvciBzdGF0aWMuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlLiBMb29raW5nIGF0IGByc2lfOTF4X3NkaW9fb3BzLmNgIEkgZmluZCBgaW50IHJzaV9zZGlvX3J4X3RocmVhZCh2b2lkICpkYXRhKWAuIEluIGByc2lfOTF4X3VzYl9vcHMuY2AgdGhlcmUncyBgaW50IHJzaV91c2JfcnhfdGhyZWFkKHZvaWQgKmRhdGEpYC4gQW5kIGluIGByc2lfOTF4X2NvZXguY2AgdGhlcmUgaXMgYHN0YXRpYyBpbnQgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZCh2b2lkICpkYXRhKWAgYW5kIHRoZW4gaW4gYHJzaV85MXhfbWFpbi5jYCB0aGVyZSdzIGBzdGF0aWMgaW50IHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkKHZvaWQgKmRhdGEpYC5cblxuQWhhLCB0aGUgYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgIGFuZCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgIGFyZSAqc3RhdGljKi4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXkgbWlnaHQgbm90IGhhdmUgdW5pcXVlIHN5bWJvbHMgaWYgdGhlIGNvbXBpbGVyIGlubGluZXMgdGhlbS4gSG93ZXZlciwgSSByZWFsaXplIHRoZXkgYXJlIGFjdHVhbGx5IHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgcnNpX2NyZWF0ZV9rdGhyZWFkYCwgbWVhbmluZyB0aGV5ICpjYW4ndCogYmUgaW5saW5lZC4gVGhpcyBtZWFucyB0aGV5IHdpbGwgZGVmaW5pdGVseSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBzYXlpbmcgdG8gcHJlZmVyIG5vbi1zdGF0aWMgb25lcyBidXQgc2luY2UgdGhlc2UgYXJlIHBhc3NlZCBhcyBwb2ludGVycyB0byBgcnNpX2NyZWF0ZV9rdGhyZWFkYCwgdGhleSB3aWxsIG5vdCBiZSBpbmxpbmVkLiBCdXQgdG8gYmUgc2FmZSwgSSBjb3VsZCBjb25zaWRlciBpbmNsdWRpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSB0aGUgdGhyZWFkcyBvciB0aGUgdGhyZWFkIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBBY3R1YWxseSwgdGhlIHRocmVhZCBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgdGhlIG9uZXMgdGhhdCB3ZXJlIG1vZGlmaWVkLlxuXG5UaGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzLiBTaW5jZSBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAgaXMgc3RhdGljLCBJIG1pZ2h0IG5lZWQgdG8gYWRkIGByc2lfY29leF9hdHRhY2hgLCBgcnNpXzkxeF9pbml0YCwgYHJzaV9wcm9iZWAgKGZvciBTRElPKSwgYHJzaV91c2JfaW5pdF9yeGAuXG5cbkJ1dCB3YWl0LCB0aGUgcmVhbCBpc3N1ZSBzZWVtcyB0byBiZSB0aGUgdGhyZWFkcyBhbmQgdGhyZWFkIGV4ZWN1dGlvbi4gSXQncyB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlIHRocmVhZHMgdGhhdCdzIHRyaWdnZXJpbmcgdGhlIENGSSB2aW9sYXRpb24sIG9yIGF0IGxlYXN0IHdoZW4gdGhlIHRocmVhZCBpcyBjcmVhdGVkLiBTbywgdGhlIGZ1enppbmcgbmVlZHMgdG8gZm9jdXMgb24gc3RhcnRpbmcgdGhlc2UgdGhyZWFkcy4gSSB0aGluayBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuXG5cblRoZXNlIHRocmVhZHMgYXJlIHN0YXJ0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIC0gYHJzaV85MXhfaW5pdGAsIGFuZCB0aGVuIGByc2lfcHJvYmVgIGZvciBib3RoIFNESU8gYW5kIFVTQi4gV2FpdC4uLiBpcyBgcnNpX3VzYl9pbml0X3J4YCBjYWxsZWQgZnJvbSBgcnNpX3Byb2JlYD8gVGhpcyBtYWtlcyBtZSB0aGluayBJIHNob3VsZCBmb2N1cyBvbiB0aGUgdGhyZWFkIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBJIHRoaW5rIHRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBDRkkgdmlvbGF0aW9uIGFyaXNlcyB3aGVuIHRoZSB0aHJlYWRzIGJlZ2luIHRvICpleGVjdXRlKi4gU28sIGZ1enppbmcgbmVlZHMgdG8gZXhlcmNpc2UgdGhvc2UgdGhyZWFkIGVudHJ5IHBvaW50cywgYHJzaV9jb2V4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3R4X3NjaGVkdWxlcl90aHJlYWRgLCBgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NDQuNjY1OTUyNDg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYwMzYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfdXNiX2luaXRfcnhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NjA9c3RhdGljIHZvaWQgcnNpX2RlaW5pdF91c2JfaW50ZXJmYWNlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NzItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTczOnN0YXRpYyBpbnQgcnNpX3VzYl9pbml0X3J4KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTYxNz1zdGF0aWMgaW50IHJzaV9pbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2NDU6XFx0aWYgKHJzaV91c2JfaW5pdF9yeChhZGFwdGVyKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0Ni1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIGluaXQgUlggaGFuZGxlXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NDQuNzQ0NTYyNDE0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDE5MzY2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHJzaV9pbml0X3VzYl9pbnRlcmZhY2VgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IGByc2lfaW5pdF91c2JfaW50ZXJmYWNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBwdXJwb3NlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIGl0cyBuYW1pbmcgY29udmVudGlvbi4gVGhlIFwiaW5pdFwiIHN1Z2dlc3RzIGl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIFwiVVNCXCIgY2xlYXJseSBwb2ludHMgdG8gVW5pdmVyc2FsIFNlcmlhbCBCdXMsIGFuZCBcImludGVyZmFjZVwiIGltcGxpZXMgaXQncyBzZXR0aW5nIHVwIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgZm9yIGEgVVNCIGRldmljZS4gRnJvbSB0aGF0LCBJIGNhbiBpbmZlciBpdCBsaWtlbHkgY29uZmlndXJlcyBhIFVTQiBpbnRlcmZhY2UgZm9yIGEgc3BlY2lmaWMgZGV2aWNlLCBkcml2ZXIgb3IgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBpbml0aWFsIGh5cG90aGVzaXMgYW5kIGdldCBhIHNlbnNlIG9mIHRoZSBjb250ZXh0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtb2R1bGVzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHdoYXQgZXJyb3IgY29uZGl0aW9ucyBpdCBoYW5kbGVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVVNCIGludGVyZmFjZSBpcyBpbml0aWFsaXplZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBhbmQgaW50ZXJuYWwgbG9naWMgdG8gZnVsbHkgYXBwcmVjaWF0ZSBpdHMgZnVuY3Rpb24uIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGV2aWNlIGRldGVjdGlvbiwgYW5kIGludGVycnVwdCBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGdvYWwgaXMgdG8gZGV2ZWxvcCBhIGNvbXBsZXRlIGFuZCBpbmZvcm1lZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NDguMTQ2NTAyNzkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAyMzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfaW5pdF91c2JfaW50ZXJmYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9NTczPXN0YXRpYyBpbnQgcnNpX3VzYl9pbml0X3J4KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02MTAtLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjExOiAqIHJzaV9pbml0X3VzYl9pbnRlcmZhY2UoKSAtIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHVzYiBpbnRlcmZhY2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjEyLSAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTYxNi0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2MTc6c3RhdGljIGludCByc2lfaW5pdF91c2JfaW50ZXJmYWNlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjE4LVxcdFxcdFxcdFxcdCAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKnBmdW5jdGlvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTc4NT1zdGF0aWMgaW50IHJzaV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcGZ1bmN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtODAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjgwMzpcXHRzdGF0dXMgPSByc2lfaW5pdF91c2JfaW50ZXJmYWNlKGFkYXB0ZXIsIHBmdW5jdGlvbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtODA0LVxcdGlmIChzdGF0dXMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NDguMTkwNTM3MzIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTIzOTI4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFJTSSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHJzaV85MXhfdXNiLmNgIGZpbGUgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYHJzaV9wcm9iZWAuIFRoYXQncyBhbG1vc3QgY2VydGFpbmx5IHRoZSBkcml2ZXIncyBlbnRyeSBwb2ludCwgcmlnaHQ/ICBJdCdzIHRoZSBmdW5jdGlvbiB0aGUgVVNCIHN1YnN5c3RlbSB3aWxsIGNhbGwgd2hlbiBhIGRldmljZSBtYXRjaGluZyB0aGUgZHJpdmVyJ3MgSUQgaXMgcGx1Z2dlZCBpbi4gIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hhdCBpdCBhY3R1YWxseSAqZG9lcyouICBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB3aGF0J3MgZ29pbmcgb24gaW4gYHJzaV85MXhfaW5pdGAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHNldHVwIHNob3VsZCBiZS4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlIGFmdGVyIGl0J3MgbG9hZGVkIGFuZCBwcm9iZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MTo1MS4yODI5MzIzMzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDA2MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJzaV85MXhfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYz0yODc9dm9pZCByc2lfYXR0YWNoX2J0KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMjk2LS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzoyOTc6ICogcnNpXzkxeF9pbml0KCkgLSBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIG9zIGludGVyZmFjZSBvcGVyYXRpb25zLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0yOTgtICogQG9wZXJfbW9kZTogT25lIG9mIERFVl9PUE1PREVfKi5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zMDEtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jOjMwMjpzdHJ1Y3QgcnNpX2h3ICpyc2lfOTF4X2luaXQodTE2IG9wZXJfbW9kZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zOTAtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzozOTE6RVhQT1JUX1NZTUJPTF9HUEwocnNpXzkxeF9pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWluLmMtMzkyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jPTEwMDE9c3RhdGljIGludCByc2lfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqcGZ1bmN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTEwMDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjEwMTA6XFx0YWRhcHRlciA9IHJzaV85MXhfaW5pdChkZXZfb3Blcl9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTAxMS1cXHRpZiAoIWFkYXB0ZXIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTc4NT1zdGF0aWMgaW50IHJzaV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcGZ1bmN0aW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc5NTpcXHRhZGFwdGVyID0gcnNpXzkxeF9pbml0KGRldl9vcGVyX21vZGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc5Ni1cXHRpZiAoIWFkYXB0ZXIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfY29tbW9uLmg9ODI9dTE2IHJzaV9nZXRfY29ubmVjdGVkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaDo4MzpzdHJ1Y3QgcnNpX2h3ICpyc2lfOTF4X2luaXQodTE2IG9wZXJfbW9kZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb21tb24uaC04NC12b2lkIHJzaV85MXhfZGVpbml0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MTo1MS4zMjQ5NDI2MTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1MzkzMzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBSU0kgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIHdoZXRoZXIgd2UncmUgZGVhbGluZyB3aXRoIFNESU8gb3IgVVNCLCB0aGUgYHJzaV9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGluaXRpYWwgcG9pbnQgb2YgZW50cnkuIEl0J3MgdGhlIG9uZSB0aGF0IGV2ZW50dWFsbHkga2lja3Mgb2ZmIGByc2lfOTF4X2luaXRgLiBOb3csIGByc2lfOTF4X2luaXRgIGlzIGNydWNpYWwgYmVjYXVzZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBzcGF3bmluZyB0aGUgYHR4X3RocmVhZGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgYSB0cmFuc21pdCB0aHJlYWQgcmlnaHQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuXG5Ob3csIGl0IGdldHMgYSBiaXQgbW9yZSBzcGVjaWZpYyBiYXNlZCBvbiB0aGUgYnVzIHR5cGUuIEZvciBVU0IsIGByc2lfcHJvYmVgIHN1YnNlcXVlbnRseSBjYWxscyBgcnNpX2luaXRfdXNiX2ludGVyZmFjZWAsIHdoaWNoIHRoZW4gbGVhZHMgdG8gYHJzaV91c2JfaW5pdF9yeGAuIEFuZCB0aGlzLCBjcml0aWNhbGx5LCBjcmVhdGVzIHRoZSBgcnhfdGhyZWFkYCBmb3IgVVNCLiBGb3IgU0RJTywgdGhvdWdoLCB0aGUgYHJ4X3RocmVhZGAgaXMgY3JlYXRlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGByc2lfcHJvYmVgIGZ1bmN0aW9uIGl0c2VsZi4gU28sIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBkaWZmZXJzIGV2ZXIgc28gc2xpZ2h0bHkgZGVwZW5kaW5nIG9uIGlmIHdlIGFyZSBkb2luZyBTRElPIG9yIFVTQi5cblxuSSB1bmRlcnN0YW5kIHRoZSBjb3JlIGZsb3csIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hhdCBgcnNpX2NvZXhfYXR0YWNoYCBpcyBhYm91dC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIHJldmlzaXQgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgc2VlIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NTUuOTc4ODc4OTgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY5MzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfY29leF9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmM9MTAxPWludCByc2lfY29leF9zZW5kX3BrdCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBoYWxfcXVldWUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9jb2V4LmMtMTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYzoxMzk6aW50IHJzaV9jb2V4X2F0dGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X2NvZXguYy0xNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jPTMwMj1zdHJ1Y3QgcnNpX2h3ICpyc2lfOTF4X2luaXQodTE2IG9wZXJfbW9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0zNzQtXFx0aWYgKGNvbW1vbi1cXHUwMDNlY29leF9tb2RlIFxcdTAwM2UgMSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzozNzU6XFx0XFx0aWYgKHJzaV9jb2V4X2F0dGFjaChjb21tb24pKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTM3Ni1cXHRcXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIGluaXQgY29leCBtb2R1bGVcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb2V4Lmg9MjY9c3RydWN0IHJzaV9jb2V4X2N0cmxfYmxvY2sge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb2V4LmgtMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9jb2V4Lmg6MzI6aW50IHJzaV9jb2V4X2F0dGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX2NvZXguaC0zMy12b2lkIHJzaV9jb2V4X2RldGFjaChzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDE6NTYuMDIxNTc5MzYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzUwMzg2NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeXprYWxsZXIgRnV6emluZyBUYXJnZXRzIGluIHRoZSBSU0kgRHJpdmVyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgaW4gdGhpcyBSU0kgZHJpdmVyIGFyZSB0aGUgYmVzdCB0YXJnZXRzIGZvciBTeXprYWxsZXIgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHJzaV85MXhfaW5pdGAgY2FsbHMgYHJzaV9jb2V4X2F0dGFjaGAsIHdoaWNoIHRoZW4gc3Bhd25zIHRoZSBgY29leF90eF90aHJlYWRgLiBUaGlzIHdob2xlIHNlcXVlbmNlIHN0YXJ0cyBmcm9tIGByc2lfcHJvYmVgLCB3aGljaCBpcyB0aGUgZHJpdmVyJ3MgcHJvYmUgY2FsbGJhY2suIFRoZSBkb2N1bWVudGF0aW9uIG1lbnRpb25zIHRoYXQgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYGlnYl9yZW1vdmVgIG9ubHkgcnVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBkcml2ZXIgdW5iaW5kcywgc28gbWF5YmUgYHJzaV9wcm9iZWAgaXMgbGltaXRlZCB0byBob3QtcGx1ZyBzY2VuYXJpb3M/IE5vLCB0aGF0J3Mgd3JvbmcuIGByc2lfcHJvYmVgIGV4ZWN1dGVzIHdoZW4gdGhlIFVTQiBkZXZpY2UgaXMgY29ubmVjdGVkLCB3aGljaCBTeXprYWxsZXIncyBVU0IgZnV6emVyICp3aWxsKiB0cmlnZ2VyLiBPa2F5LCBzbyBgcnNpX3Byb2JlYCBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLlxuXG5CdXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgYW5kIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBrZXkgZnVuY3Rpb25zIGlkZW50aWZpZWQgYXJlOiBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAsIGByc2lfc2Rpb19yeF90aHJlYWRgLCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYC4gSG1tLCB0aG9zZSBhcmUgKnRocmVhZCogZnVuY3Rpb25zLiBDYW4gU3l6a2FsbGVyIHJlYWNoIHRob3NlPyBZZXMsIGBrdGhyZWFkX3J1bmAgc3RhcnRzIHRoZW0gZHVyaW5nIHRoZSBwcm9iZSBwcm9jZXNzLiBBbmQgc2luY2UgU3l6a2FsbGVyIHRyYWNlcyBhbGwga2VybmVsIGV4ZWN1dGlvbiwgaXQgKmNhbiogdHJhY2UgdGhvc2UgdGhyZWFkcyBldmVuIGlmIHRoZXkncmUgYXN5bmNocm9ub3VzLlxuXG5Ob3csIGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCBhbmQgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaXMgbm90IGlkZWFsLiBCdXQsIGF0IGxlYXN0LCBJIGNhbiBsaXN0IHRoZWlyIGNhbGxlcnMgYHJzaV85MXhfaW5pdGAgYW5kIGByc2lfY29leF9hdHRhY2hgLiBgcnNpX2NvZXhfYXR0YWNoYCBpcyBub24tc3RhdGljLiBUaGUga2V5IGhlcmUgaXMgdG8gbGlzdCBub24tc3RhdGljIGZ1bmN0aW9ucy5cblxuU28sIGxldCdzIGxpc3QgdGhlIG5vbi1zdGF0aWMgdGhyZWFkIGZ1bmN0aW9uczogYHJzaV9zZGlvX3J4X3RocmVhZGAgYW5kIGByc2lfdXNiX3J4X3RocmVhZGAuIFBsdXMsIGByc2lfOTF4X2luaXRgIGFuZCBgcnNpX2NvZXhfYXR0YWNoYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGByc2lfc2Rpb19yeF90aHJlYWRgIGFuZCBgcnNpX3VzYl9yeF90aHJlYWRgIGFyZSBhY3R1YWxseSBleHBvcnRlZC4gV2hpbGUgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAsIHRoZXkgKmFyZSogbm9uLXN0YXRpYyBhbmQgZGVjbGFyZWQgaW4gaGVhZGVycywgd2hpY2ggbWVhbnMgdGhleSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFBlcmZlY3QuXG5cblRoZSBgcnNpX3Byb2JlYCBmdW5jdGlvbiBpcyBzdGF0aWMuIFNvLCBJIGRvbid0IGxpc3QgdGhhdC5cblxuYHJzaV85MXhfaW5pdGAgaXMgYEVYUE9SVF9TWU1CT0xfR1BMYCBhbmQgYHJzaV9jb2V4X2F0dGFjaGAgaXMgbm9uLXN0YXRpYywgc28gZ29vZCB0byBnby5cblxuQW5kIGByc2lfY3JlYXRlX2t0aHJlYWRgIGlzIGEgc3RhdGljIGlubGluZSwgc28gdGhhdCdzIG91dC5cblxuVGhlcmVmb3JlLCB0aGUgbWFpbiBmdXp6aW5nIHRhcmdldHMgc2hvdWxkIGJlOlxuXG4qICAgYHJzaV9zZGlvX3J4X3RocmVhZGBcbiogICBgcnNpX3VzYl9yeF90aHJlYWRgXG4qICAgYHJzaV85MXhfaW5pdGBcbiogICBgcnNpX2NvZXhfYXR0YWNoYFxuXG5JIHNob3VsZCBkb3VibGUgY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBsb2NhdGVkLiBgcnNpX3NkaW9fcnhfdGhyZWFkYCBpcyBpbiBgcnNpXzkxeF9zZGlvX29wcy5jYCBhbmQgYHJzaV91c2JfcnhfdGhyZWFkYCBpcyBpbiBgcnNpXzkxeF91c2Jfb3BzLmNgLlxuXG5Pa2F5LCBuZXh0IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGhhczogYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgUlNJX1NESU9gLCBhbmQgYFJTSV9DT0VYYCBzZXQuIE9oLCBhbmQgYFJTSV9DT0VYYCBkZXBlbmRzIG9uIGBCVGAsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIGVuYWJsZWQgYXMgd2VsbC4gVGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYEtjb25maWdgIGZvciB0aGUgYHJzaWAgZHJpdmVyIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MjoxMC4zNzE5Njg1OTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDkzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSU0lfQ09FWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz0zOT1jb25maWcgUlNJX1VTQlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6NDc6Y29uZmlnIFJTSV9DT0VYXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDI6MTAuNDEzMDY3NzI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NTc1NDg2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBSU0lfQ09FWCoqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgYW5kIHJlYWxseSBkcmlsbCBkb3duIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFJTSV9DT0VYYC4gSSdtIGdvaW5nIHRvIHJlLWV4YW1pbmUgdGhlIGZ1bGwgZGVwZW5kZW5jeSB0cmVlLCBhbmQgSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBpbiB0aGUgaW5pdGlhbCByZXZpZXcuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGltcGFjdCBmcm9tIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBjb3JlIGZyYW1ld29ya3MsIGxpYnJhcmllcywgb3Igc3lzdGVtIGFyY2hpdGVjdHVyZSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBvdmVybG9va2VkLiBUaGUgZ29hbCBpc24ndCBqdXN0IHRvIHNlZSAqd2hhdCogYFJTSV9DT0VYYCBkZXBlbmRzIG9uLCBidXQgKndoeSosIGFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGZvciBpdHMgc3RhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIGZ1dHVyZSBkZXZlbG9wbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY291cGxpbmcgaXNzdWVzIG9yIGhpZGRlbiBib3R0bGVuZWNrcyBsdXJraW5nIGluIHRoZSBkZXBlbmRlbmN5IGdyYXBoLiBJJ20gdGhpbmtpbmcgcGFydGljdWxhcmx5IGFib3V0IGNpcmN1bGFyIGRlcGVuZGVuY2llcywgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgdGhhdCBjcmVhdGUgdW5leHBlY3RlZCBjb25mbGljdHMsIG9yIGV2ZW4gdGhvc2UgZGVwZW5kZW5jaWVzIHdoaWNoIGFkZCB1bm5lY2Vzc2FyeSB3ZWlnaHQuIExldCdzIHNlZSBpZiB0aGlzIGRlZXBlciBkaXZlIHJldmVhbHMgYW55dGhpbmcgbmV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM3OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE5OjQyOjE3Ljg3MDYxOTE4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydFxcXCJcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gVVNCIFxcdTAwMjZcXHUwMDI2IFJTSV85MVhcXG4gIDQyOlxcdFxcdGRlZmF1bHQgbVxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXFxuICA0NTpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBSU0lfQ09FWFxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIFdMQU4gQlQgQ29leGlzdGVuY2Ugc3VwcG9ydFxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gQlQgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgNTA6XFx0XFx0ZGVwZW5kcyBvbiAhKEJUPW0gXFx1MDAyNlxcdTAwMjYgUlNJXzkxWD15KVxcbiAgNTE6XFx0XFx0ZGVmYXVsdCB5XFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFdMQU4gQlQgY29leCBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxcbiAgNTQ6XFx0XFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSB3YW50IHRvIHVzZSB0aGlzIGZlYXR1cmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTk6NDI6MTcuODcwNjc2MjYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NTkwMjY1NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUlNJIDkxeCBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgQ0ZJIHZpb2xhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBSU0kgOTF4IHdpcmVsZXNzIGRyaXZlci4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMsIGl0IGxvb2tzIGxpa2U6IGBSU0lfQ09FWGAgbmVlZHMgYEJUYCBhbmQgYFJTSV85MVhgLiBgUlNJX1NESU9gIHJlbGllcyBvbiBgTU1DYCBhbmQgYFJTSV85MVhgLiBgUlNJX1VTQmAgZGVwZW5kcyBvbiBgVVNCYCBhbmQgYFJTSV85MVhgLiBBbmQgZmluYWxseSwgYFJTSV85MVhgIGl0c2VsZiBuZWVkcyBgTUFDODAyMTFgLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbmFibGUgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgUlNJX1NESU9gLCBgUlNJX0NPRVhgLCBhbmQgYE1BQzgwMjExYCBhcyB0aGUga2V5IFJTSS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYWxvbmcgd2l0aCBgTU1DYCwgYFVTQmAsIGFuZCBgQlRgLiBXaGlsZSBgTUFDODAyMTFgLCBgVVNCYCwgYE1NQ2AsIGFuZCBgQlRgIGFyZSBmYWlybHkgc3RhbmRhcmQsIGl0J3Mgc2FmZXIgdG8gaW5jbHVkZSB0aGVtIGhlcmUuXG5cblNpbmNlIHRoZSBwcm9tcHQgc3BlY2lmaWVzIE5PVCBhZGRpbmcgdGhlIGBDT05GSUdfYCBwcmVmaXggdG8gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LCBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5UaGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgY3Jhc2ggdW5kZXIgQ0ZJLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdGhyb3VnaCBVU0IgZnV6emluZyAoYW5kIHBvdGVudGlhbGx5IFNESU8gZW11bGF0ZWQgZW52aXJvbm1lbnRzKS4gU28sIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIG9idmlvdXMgY29uY2x1c2lvbi5cblxuTm93LCBmb2N1c2luZyBvbiB0aGUgY3JpdGljYWwgc3ltYm9scywgSSBpZGVudGlmeSBgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYHJzaV91c2JfcnhfdGhyZWFkYCwgYHJzaV85MXhfaW5pdGAsIGFuZCBgcnNpX2NvZXhfYXR0YWNoYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBmdW5jdGlvbiBzaWduYXR1cmVzLCBzbyBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgY2hhbmdlZCBpcyBhIGdvb2Qgc3RhcnQuIEkgY2FuIHZlcmlmeSB0aGVzZSBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIGJ5IGV4YW1pbmluZyB0aGUgZGlmZi5cblxuSSB0aGVuIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgbW9kaWZpZWQ6IGByc2lfY29leF9zY2hlZHVsZXJfdGhyZWFkYCwgYHJzaV90eF9zY2hlZHVsZXJfdGhyZWFkYCwgYHJzaV9zZGlvX3J4X3RocmVhZGAsIGFuZCBgcnNpX3VzYl9yeF90aHJlYWRgLiBgcnNpX2NvZXhfc2NoZWR1bGVyX3RocmVhZGAgYW5kIGByc2lfdHhfc2NoZWR1bGVyX3RocmVhZGAgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgYnV0IGFyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYHJzaV9jcmVhdGVfa3RocmVhZGAsIHNvIHRoZWlyIHN5bWJvbCBhZGRyZXNzIHdpbGwgYmUgZGlzdGluY3QuIFRoZSBpbnN0cnVjdGlvbnMgZmF2b3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIEkgd2lsbCBsaXN0IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSB0aGUgdGhyZWFkcy4gVGh1cyBJJ2xsIGxpc3QgdGhlIHRocmVhZCBmdW5jdGlvbnMuXG5cbkkgdmVyaWZpZWQgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIG9mIHRoZSBzeW1ib2xzIGluIHF1ZXN0aW9uIChgcnNpX3NkaW9fcnhfdGhyZWFkYCwgYHJzaV91c2JfcnhfdGhyZWFkYCwgYHJzaV85MXhfaW5pdGAsIGFuZCBgcnNpX2NvZXhfYXR0YWNoYCksIGNvbmZpcm1pbmcgdGhhdCB0aGV5IGFyZSBkZWNsYXJlZCBpbiBoZWFkZXJzIGFuZCBkZWZpbmVkIGluIHNvdXJjZSBmaWxlcyBhbmQgZXhwb3J0ZWQgd2hlcmUgYXBwbGljYWJsZS5cblxuVGh1cywgdGhlIGZpbmFsIGBFbmFibGVDb25maWdzYCBhcmU6IGBXTEFOX1ZFTkRPUl9SU0lgLCBgUlNJXzkxWGAsIGBSU0lfVVNCYCwgYFJTSV9TRElPYCwgYFJTSV9DT0VYYCwgYE1BQzgwMjExYCwgYE1NQ2AsIGBCVGAuXG5cblRoaXMgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODY5LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxOTo0MjozMi40NjA5NDU1NzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE5MjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJSU0lfU0RJT1wiLFxuICAgIFwiUlNJX0NPRVhcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNTUNcIixcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnNpX3NkaW9fcnhfdGhyZWFkXCIsXG4gICAgXCJyc2lfdXNiX3J4X3RocmVhZFwiLFxuICAgIFwicnNpXzkxeF9pbml0XCIsXG4gICAgXCJyc2lfY29leF9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gICAgXCJSU0lfOTFYXCIsXG4gICAgXCJSU0lfVVNCXCIsXG4gICAgXCJSU0lfU0RJT1wiLFxuICAgIFwiUlNJX0NPRVhcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNTUNcIixcbiAgICBcIkJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnNpX3NkaW9fcnhfdGhyZWFkXCIsXG4gICAgXCJyc2lfdXNiX3J4X3RocmVhZFwiLFxuICAgIFwicnNpXzkxeF9pbml0XCIsXG4gICAgXCJyc2lfY29leF9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIENvbnRyb2wtRmxvdyBJbnRlZ3JpdHkgKENGSSkgdmlvbGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2Ygc2V2ZXJhbCBrdGhyZWFkIGZ1bmN0aW9ucyBpbiB0aGUgUlNJIDkxeCB3aXJlbGVzcyBkcml2ZXIuIFRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAoZnV6emluZykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[1] Phase: Succeeded StartedAt: 2026-08-02 19:42:43 +0000 UTC FinishedAt: 2026-08-02 19:42:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 19:42:43 +0000 UTC FinishedAt: 2026-08-02 19:42:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2] Phase: Succeeded StartedAt: 2026-08-02 19:42:43 +0000 UTC FinishedAt: 2026-08-02 20:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 19:42:43 +0000 UTC FinishedAt: 2026-08-02 20:43:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 19:42:43 +0000 UTC FinishedAt: 2026-08-02 19:42:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 19:42:43 +0000 UTC FinishedAt: 2026-08-02 19:42:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6dxzs/series-workflow6dxzs-convert-artifact-898048730/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 19:42:53 +0000 UTC FinishedAt: 2026-08-02 20:03:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 19:42:53 +0000 UTC FinishedAt: 2026-08-02 20:03:33 +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:*3dba2b4b-20ca-45da-bbc2-5ba10a37ca49,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-workflow6dxzs/series-workflow6dxzs-convert-artifact-898048730/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": "75f6f753-1ddf-4783-8d19-fce5a47e456a", "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-workflow6dxzs/series-workflow6dxzs-build-action-3535099784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 19:42:53 +0000 UTC FinishedAt: 2026-08-02 20:03:23 +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:*3dba2b4b-20ca-45da-bbc2-5ba10a37ca49,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-workflow6dxzs/series-workflow6dxzs-convert-artifact-898048730/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": "75f6f753-1ddf-4783-8d19-fce5a47e456a", "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-workflow6dxzs/series-workflow6dxzs-build-action-3535099784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 20:03:33 +0000 UTC FinishedAt: 2026-08-02 20:03:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 20:03:33 +0000 UTC FinishedAt: 2026-08-02 20:03:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 20:03:33 +0000 UTC FinishedAt: 2026-08-02 20:03:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 20:03:33 +0000 UTC FinishedAt: 2026-08-02 20:03:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6dxzs/series-workflow6dxzs-convert-artifact-1318827061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 20:03:56 +0000 UTC FinishedAt: 2026-08-02 20:06:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 20:03:56 +0000 UTC FinishedAt: 2026-08-02 20:06:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*75f6f753-1ddf-4783-8d19-fce5a47e456a,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-workflow6dxzs/series-workflow6dxzs-build-action-3535099784/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-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 20:06:10 +0000 UTC FinishedAt: 2026-08-02 20:06:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 20:06:10 +0000 UTC FinishedAt: 2026-08-02 20:06:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 20:06:10 +0000 UTC FinishedAt: 2026-08-02 20:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 20:06:10 +0000 UTC FinishedAt: 2026-08-02 20:40:26 +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:*3dba2b4b-20ca-45da-bbc2-5ba10a37ca49,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-workflow6dxzs/series-workflow6dxzs-convert-artifact-1318827061/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": "0b404f07-32b7-403a-9d74-8bc8e531f4cb", "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-workflow6dxzs/series-workflow6dxzs-build-action-3811042625/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 20:06:10 +0000 UTC FinishedAt: 2026-08-02 20:40:15 +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:*3dba2b4b-20ca-45da-bbc2-5ba10a37ca49,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-workflow6dxzs/series-workflow6dxzs-convert-artifact-1318827061/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": "0b404f07-32b7-403a-9d74-8bc8e531f4cb", "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-workflow6dxzs/series-workflow6dxzs-build-action-3811042625/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 20:40:26 +0000 UTC FinishedAt: 2026-08-02 20:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 20:40:26 +0000 UTC FinishedAt: 2026-08-02 20:40:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 20:40:26 +0000 UTC FinishedAt: 2026-08-02 20:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 20:40:26 +0000 UTC FinishedAt: 2026-08-02 20:42:15 +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:*0b404f07-32b7-403a-9d74-8bc8e531f4cb,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-workflow6dxzs/series-workflow6dxzs-build-action-3811042625/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-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 20:42:26 +0000 UTC FinishedAt: 2026-08-02 20:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 20:42:26 +0000 UTC FinishedAt: 2026-08-02 20:43:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*75f6f753-1ddf-4783-8d19-fce5a47e456a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b404f07-32b7-403a-9d74-8bc8e531f4cb,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-workflow6dxzs/series-workflow6dxzs-build-action-3535099784/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-workflow6dxzs/series-workflow6dxzs-build-action-3811042625/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 20:42:26 +0000 UTC FinishedAt: 2026-08-02 20:42:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 20:42:26 +0000 UTC FinishedAt: 2026-08-02 20:42:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6dxzs/series-workflow6dxzs-convert-artifact-1248582938/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 20:42:26 +0000 UTC FinishedAt: 2026-08-02 20:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 20:42:26 +0000 UTC FinishedAt: 2026-08-02 20:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 20:42:26 +0000 UTC FinishedAt: 2026-08-02 20:42:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 20:42:37 +0000 UTC FinishedAt: 2026-08-02 20:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dxzs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_sdio_rx_thread","rsi_usb_rx_thread","rsi_91x_init","rsi_coex_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_RSI","RSI_91X","RSI_USB","RSI_SDIO","RSI_COEX","MAC80211","MMC","BT"],"series_id":"43f9f32a-34de-4e73-b92f-08d56acddae4","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 20:42:37 +0000 UTC FinishedAt: 2026-08-02 20:43:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*75f6f753-1ddf-4783-8d19-fce5a47e456a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b404f07-32b7-403a-9d74-8bc8e531f4cb,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-workflow6dxzs/series-workflow6dxzs-build-action-3535099784/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-workflow6dxzs/series-workflow6dxzs-build-action-3811042625/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-workflow6dxzs/series-workflow6dxzs-convert-artifact-1248582938/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,}