Name: series-workflowxbzh9 Phase: Succeeded StartedAt: 2026-07-24 12:54:34 +0000 UTC FinishedAt: 2026-07-24 18:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[0] Phase: Succeeded StartedAt: 2026-07-24 12:54:34 +0000 UTC FinishedAt: 2026-07-24 13:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 12:54:34 +0000 UTC FinishedAt: 2026-07-24 13:27:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "SPARSEMEM_VMEMMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "SPARSEMEM_VMEMMAP" ], "series_id": "c0883d4b-8b87-4817-9e9f-ee8001046266" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_block_online", "memory_block_offline", "find_smallest_section_pfn", "find_biggest_section_pfn", "remove_pfn_range_from_zone", "move_pfn_range_to_zone", "update_zone_online_memmap_pages", "page_alloc_init_late", "adjust_present_page_count" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2Jsb2NrX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfYmxvY2tfb2ZmbGluZSYjMzQ7LAogICAgJiMzNDtmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuJiMzNDssCiAgICAmIzM0O2ZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbiYjMzQ7LAogICAgJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICAgJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgICAmIzM0O3VwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19pbml0X2xhdGUmIzM0OywKICAgICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgc3BlY2lmaWNhbGx5IHpvbmUgY29udGlndWl0eSB0cmFja2luZyBhbmQgc2VjdGlvbiBQRk4gZmluZGluZy4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2EzNjNhMTJmNDM4YzY1NTIwMzhhNjUxN2E0ZWYyMjQ4YzY0YzQ0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDEzOjI2OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxuaW5kZXggYjc2MTgzNTQ1ZTViZjUuLjBhYTY1ZTZiNTQ5OTU3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcbkBAIC00ODMsNiAmIzQzOzQ4MywxOSBAQCBHZW5lcmFsXG4gICBgYHByZXNlbnRfcGFnZXNgYCBzaG91bGQgdXNlIGBgZ2V0X29ubGluZV9tZW1zKClgYCB0byBnZXQgYSBzdGFibGUgdmFsdWUuIEl0XG4gICBpcyBpbml0aWFsaXplZCBieSBgYGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoKWBgLlxuIFxuJiM0MztgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgXG4mIzQzOyAgVHJhY2tzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSB0aGF0IGhhdmUgYW4gb25saW5lIG1lbW9yeSBtYXAgKHByZXNlbnQgcGFnZXNcbiYjNDM7ICBhbmQgbWVtb3J5IGhvbGVzIHdob3NlIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQpLiBXaGVuXG4mIzQzOyAgYGBzcGFubmVkX3BhZ2VzYGAgPT0gYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYCwgYGBwZm5fdG9fcGFnZSgpYGAgY2FuIGJlXG4mIzQzOyAgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55IFBGTiB3aXRoaW4gdGhlIHpvbmUgc3Bhbi5cbiYjNDM7XG4mIzQzOyAgTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhbiBvbmxpbmVcbiYjNDM7ICBtZW1vcnkgbWFwIGV4aXN0IG91dHNpZGUgdGhlIGN1cnJlbnQgem9uZSBzcGFuLiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBkdXJpbmdcbiYjNDM7ICBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZiBwYWdlcyB0aGF0IGRvIG5vdCBmYWxsIGludG8gYW55XG4mIzQzOyAgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvIGNvdmVyIHN1Y2ggcGFnZXMgYW5kIGxhdGVyIHNocmlua2luZyBpdCBiYWNrXG4mIzQzOyAgbWF5IHJlc3VsdCBpbiBhIFwmIzM0O3RvbyBzbWFsbFwmIzM0OyB2YWx1ZS4gVGhpcyBpcyBzYWZlOiBpdCBtZXJlbHkgcHJldmVudHNcbiYjNDM7ICBkZXRlY3RpbmcgYSBjb250aWd1b3VzIHpvbmUuXG4mIzQzO1xuIGBgcHJlc2VudF9lYXJseV9wYWdlc2BgXG4gICBUaGUgcHJlc2VudCBwYWdlcyBleGlzdGluZyB3aXRoaW4gdGhlIHpvbmUgbG9jYXRlZCBvbiBtZW1vcnkgYXZhaWxhYmxlIHNpbmNlXG4gICBlYXJseSBib290LCBleGNsdWRpbmcgaG90cGx1Z2dlZCBtZW1vcnkuIERlZmluZWQgb25seSB3aGVuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5pbmRleCBiY2ZlMmQ5ZjRhZGJkOS4uMjM3YWNlNDM1MzcyNGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTI0Niw2ICYjNDM7MjQ2LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcdFx0bnJfdm1lbW1hcF9wYWdlcyA9IG1lbS1cdTAwM2VhbHRtYXAtXHUwMDNlZnJlZTtcbiBcbiBcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XG4mIzQzO1x0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHtcbiBcdFx0cmV0ID0gbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeShzdGFydF9wZm4sIG5yX3ZtZW1tYXBfcGFnZXMsIHpvbmUpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTI3MCw2ICYjNDM7MjcxLDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcbiBcdG1lbS1cdTAwM2V6b25lID0gem9uZTtcbiBvdXQ6XG4mIzQzO1x0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdG1lbV9ob3RwbHVnX2RvbmUoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI4Miw2ICYjNDM7Mjg0LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IHNlY3Rpb25fbnJfdG9fcGZuKG1lbS1cdTAwM2VzdGFydF9zZWN0aW9uX25yKTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBQQUdFU19QRVJfU0VDVElPTiAqIHNlY3Rpb25zX3Blcl9ibG9jaztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdm1lbW1hcF9wYWdlcyA9IDA7XG4mIzQzO1x0c3RydWN0IHpvbmUgKnpvbmU7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFtZW0tXHUwMDNlem9uZSlcbkBAIC0yOTQsNyAmIzQzOzI5Nyw5IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0aWYgKG1lbS1cdTAwM2VhbHRtYXApXG4gXHRcdG5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tXHUwMDNlYWx0bWFwLVx1MDAzZWZyZWU7XG4gXG4mIzQzO1x0em9uZSA9IG1lbS1cdTAwM2V6b25lO1xuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbiYjNDM7XHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG4gXHRcdFx0XHRcdCAgLW5yX3ZtZW1tYXBfcGFnZXMpO1xuQEAgLTMxNCw2ICYjNDM7MzE5LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXG4gXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuJiM0MztcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gXHRtZW1faG90cGx1Z19kb25lKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLmFjMTQ2N2FjMzMzNjRhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTEwMzIsNiAmIzQzOzEwMzIsMjAgQEAgc3RydWN0IHpvbmUge1xuIFx0ICogY21hIHBhZ2VzIGlzIHByZXNlbnQgcGFnZXMgdGhhdCBhcmUgYXNzaWduZWQgZm9yIENNQSB1c2VcbiBcdCAqIChNSUdSQVRFX0NNQSkuXG4gXHQgKlxuJiM0MztcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxuJiM0MztcdCAqIGFuIG9ubGluZSBtZW1vcnkgbWFwIChwcmVzZW50IHBhZ2VzIGFuZCBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5XG4mIzQzO1x0ICogbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkKS4gV2hlbiBzcGFubmVkX3BhZ2VzID09XG4mIzQzO1x0ICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLCBwZm5fdG9fcGFnZSgpIGNhbiBiZSBwZXJmb3JtZWQgd2l0aG91dFxuJiM0MztcdCAqIGZ1cnRoZXIgY2hlY2tzIG9uIGFueSBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuXG4mIzQzO1x0ICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuXG4mIzQzO1x0ICogb25seSBoYXBwZW4gZHVyaW5nIGJvb3QsIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgbWFwIG9mXG4mIzQzO1x0ICogcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueSB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG9cbiYjNDM7XHQgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGFcbiYjNDM7XHQgKiBcJiMzNDt0b28gc21hbGxcJiMzNDsgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhXG4mIzQzO1x0ICogY29udGlndW91cyB6b25lLlxuJiM0MztcdCAqXG4gXHQgKiBTbyBwcmVzZW50X3BhZ2VzIG1heSBiZSB1c2VkIGJ5IG1lbW9yeSBob3RwbHVnIG9yIG1lbW9yeSBwb3dlclxuIFx0ICogbWFuYWdlbWVudCBsb2dpYyB0byBmaWd1cmUgb3V0IHVubWFuYWdlZCBwYWdlcyBieSBjaGVja2luZ1xuIFx0ICogKHByZXNlbnRfcGFnZXMgLSBtYW5hZ2VkX3BhZ2VzKS4gQW5kIG1hbmFnZWRfcGFnZXMgc2hvdWxkIGJlIHVzZWRcbkBAIC0xMDU2LDYgJiM0MzsxMDcwLDcgQEAgc3RydWN0IHpvbmUge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRtYW5hZ2VkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRzcGFubmVkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X3BhZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwO1xuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbiBcdHVuc2lnbmVkIGxvbmdcdFx0cHJlc2VudF9lYXJseV9wYWdlcztcbiAjZW5kaWZcbkBAIC0xNjgxLDYgJiM0MzsxNjk2LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpvbmVfaXNfY29udGlndW91cyAtIHRlc3Qgd2hldGhlciBhIHpvbmUgaXMgY29udGlndW91c1xuJiM0MzsgKiBAem9uZTogdGhlIHpvbmUgdG8gdGVzdC5cbiYjNDM7ICpcbiYjNDM7ICogSW4gYSBjb250aWd1b3VzIHpvbmUsIGl0IGlzIHZhbGlkIHRvIGNhbGwgcGZuX3RvX3BhZ2UoKSBvbiBhbnkgUEZOIGluIHRoZVxuJiM0MzsgKiBzcGFubmVkIHpvbmUgd2l0aG91dCByZXF1aXJpbmcgcGZuX3ZhbGlkKCkgb3IgcGZuX3RvX29ubGluZV9wYWdlKCkgY2hlY2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBOb3RlIHRoYXQgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gd2l0aCBtZW1vcnkgb2ZmbGluaW5nIG1ha2VzIGFueSBQRk5cbiYjNDM7ICogdHJhdmVyc2FsIHByb25lIHRvIHJhY2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBaT05FX0RFVklDRSB6b25lcyBhcmUgYWx3YXlzIG1hcmtlZCBub24tY29udGlndW91cy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gem9uZS1cdTAwM2Vjb250aWd1b3VzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbiYjNDM7e1xuJiM0MztcdGlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4mIzQzO1x0XHR6b25lLVx1MDAzZWNvbnRpZ3VvdXMgPSB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxuJiM0Mzt7XG4mIzQzO1x0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBSZXR1cm5zIHRydWUgaWYgYSB6b25lIGhhcyBwYWdlcyBtYW5hZ2VkIGJ5IHRoZSBidWRkeSBhbGxvY2F0b3IuXG4gICogQWxsIHRoZSByZWNsYWltIGRlY2lzaW9ucyBoYXZlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li5mOTMyYjc1NzdjOTJhYyAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC04MDUsMjEgJiM0Mzs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbi1cdGlmICh6b25lLVx1MDAzZWNvbnRpZ3VvdXMpXG4mIzQzO1x0aWYgKHpvbmVfaXNfY29udGlndW91cyh6b25lKSlcbiBcdFx0cmV0dXJuIHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7XG4gXG4gXHRyZXR1cm4gX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLCB6b25lKTtcbiB9XG4gXG4tdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKTtcbiBib29sIHBmbl9yYW5nZV9pbnRlcnNlY3RzX3pvbmVzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4te1xuLVx0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gZmFsc2U7XG4tfVxuLVxuIGV4dGVybiBpbnQgX19pc29sYXRlX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBleHRlcm4gdm9pZCBfX3B1dGJhY2tfaXNvbGF0ZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRcdFx0ICAgIGludCBtdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li4zYTI4MWQ1OTUyMDcxMCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC00MjcsMTcgJiM0Mzs0MjcsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4tXHRmb3IgKDsgc3RhcnRfcGZuIFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gJiM0Mzs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV4dF9wZm47XG4gXG4tXHRcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHN0YXJ0X3BmbikgIT0gbmlkKSlcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRmb3IgKDsgc3RhcnRfcGZuIFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gPSBuZXh0X3Bmbikge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyB0YWlsX3BmbjtcbiYjNDM7XG4mIzQzO1x0XHRuZXh0X3BmbiA9IHN0YXJ0X3BmbiAmIzQzOyBQQUdFU19QRVJfU1VCU0VDVElPTjtcbiYjNDM7XHRcdHRhaWxfcGZuID0gbmV4dF9wZm4gLSAxO1xuIFxuLVx0XHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0cmV0dXJuIHN0YXJ0X3BmbjtcbiYjNDM7XHRcdGlmIChsaWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpXG4mIzQzO1x0XHRcdHJldHVybiBzdGFydF9wZm47XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxpa2VseShwZm5fdG9fbmlkKHRhaWxfcGZuKSA9PSBuaWQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKHRhaWxfcGZuKSkpXG4mIzQzO1x0XHRcdHJldHVybiBzdGFydF9wZm47XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC00NDgsMjEgJiM0Mzs0NTUsMjYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBmbjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbiwgcHJldl9wZm47XG4gXG4gXHQvKiBwZm4gaXMgdGhlIGVuZCBwZm4gb2YgYSBtZW1vcnkgc2VjdGlvbi4gKi9cbiBcdHBmbiA9IGVuZF9wZm4gLSAxO1xuLVx0Zm9yICg7IHBmbiBcdTAwM2U9IHN0YXJ0X3BmbjsgcGZuIC09IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHBmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdGZvciAoOyBwZm4gXHUwMDNlPSBzdGFydF9wZm47IHBmbiA9IHByZXZfcGZuKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGhlYWRfcGZuO1xuIFxuLVx0XHRpZiAodW5saWtlbHkocGZuX3RvX25pZChwZm4pICE9IG5pZCkpXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRwcmV2X3BmbiA9IHBmbiAtIFBBR0VTX1BFUl9TVUJTRUNUSU9OO1xuJiM0MztcdFx0aGVhZF9wZm4gPSBwcmV2X3BmbiAmIzQzOyAxO1xuIFxuLVx0XHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZuKSkpXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0cmV0dXJuIHBmbjtcbiYjNDM7XHRcdGlmIChsaWtlbHkocGZuX3RvX25pZChwZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZuKSkpXG4mIzQzO1x0XHRcdHJldHVybiBwZm47XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxpa2VseShwZm5fdG9fbmlkKGhlYWRfcGZuKSA9PSBuaWQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGhlYWRfcGZuKSkpXG4mIzQzO1x0XHRcdHJldHVybiBwZm47XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTcsMTggJiM0Mzs1NjksMTMgQEAgdm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdC8qXG4gXHQgKiBab25lIHNocmlua2luZyBjb2RlIGNhbm5vdCBwcm9wZXJseSBkZWFsIHdpdGggWk9ORV9ERVZJQ0UuIFNvXG4tXHQgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIHRoZSB6b25lcyAtIHdoaWNoIGlzIG9rYXkgYXNcbi1cdCAqIHNldF96b25lX2NvbnRpZ3VvdXMoKSBjYW5ub3QgZGVhbCB3aXRoIFpPTkVfREVWSUNFIGVpdGhlciB3YXkuXG4mIzQzO1x0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cbiBcdCAqL1xuIFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXMpO1xuIFx0dXBkYXRlX3BnZGF0X3NwYW4ocGdkYXQpO1xuLVxuLVx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiB9XG4gXG4gLyoqXG5AQCAtNzQ2LDggJiM0Mzs3NTMsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbiBcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuIFxuLVx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuLVxuIFx0aWYgKHpvbmVfaXNfZW1wdHkoem9uZSkpXG4gXHRcdGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XG4gXHRyZXNpemVfem9uZV9yYW5nZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcbkBAIC03NzUsOCAmIzQzOzc4MCw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxuIFx0XHRcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXG4gXHRcdFx0IGlzb2xhdGVfcGFnZWJsb2NrKTtcbi1cbi1cdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gfVxuIFxuIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMge1xuQEAgLTEwNzIsNiAmIzQzOzEwNzUsNyBAQCB2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxuIFx0aWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKVxuIFx0XHR6b25lLVx1MDAzZXByZXNlbnRfZWFybHlfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzO1xuIFx0em9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gbnJfcGFnZXM7XG4gXHR6b25lLVx1MDAzZXpvbmVfcGdkYXQtXHUwMDNlbm9kZV9wcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbiBcbiBcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgbW92YWJsZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGYxYWZlMDIzZTRlNzIxLi43M2QxZmRlMTcwNDA1MCAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtOTE2LDYgJiM0Mzs5MTYsNDAgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpob2xlX3BmbilcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG4mIzQzO1x0dW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB6b25lX2VuZF9wZm4gPSB6b25lX3N0YXJ0X3BmbiAmIzQzOyB6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdWJfc3RhcnQsIHN1Yl9lbmQ7XG4mIzQzO1xuJiM0MztcdHN1Yl9zdGFydCA9IG1heChBTElHTl9ET1dOKHN0YXJ0X3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxuJiM0MztcdFx0XHR6b25lX3N0YXJ0X3Bmbik7XG4mIzQzO1x0c3ViX2VuZCA9IG1pbihBTElHTihlbmRfcGZuLCBQQUdFU19QRVJfU1VCU0VDVElPTiksIHpvbmVfZW5kX3Bmbik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIGFuIGluLXpvbmUgaG9sZSBzbWFsbGVyIHRoYW4gYSBzdWJzZWN0aW9uLCB0aGUgYWRqYWNlbnRcbiYjNDM7XHQgKiBtZW1ibG9jayByYW5nZXMgc2hhcmUgYSBzdWJzZWN0aW9uLiBBdm9pZCBjb3VudGluZyB0aGUgc2FtZVxuJiM0MztcdCAqIHN1YnNlY3Rpb24mIzM5O3MgcGFnZXMgdHdpY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCpob2xlX3BmbiBcdTAwM2Ugem9uZV9zdGFydF9wZm4pIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcHJldl9zdWJfZW5kO1xuJiM0MztcbiYjNDM7XHRcdHByZXZfc3ViX2VuZCA9IG1pbihBTElHTigqaG9sZV9wZm4sIFBBR0VTX1BFUl9TVUJTRUNUSU9OKSxcbiYjNDM7XHRcdFx0XHQgICB6b25lX2VuZF9wZm4pO1xuJiM0MztcdFx0c3ViX3N0YXJ0ID0gbWF4KHN1Yl9zdGFydCwgcHJldl9zdWJfZW5kKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdWJfc3RhcnQgXHUwMDNjIHN1Yl9lbmQpXG4mIzQzO1x0XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gc3ViX2VuZCAtIHN1Yl9zdGFydDtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuQEAgLTkzMiw2ICYjNDM7OTY2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRpZiAoc3RhcnRfcGZuIFx1MDAzZT0gZW5kX3BmbilcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCBob2xlX3Bmbik7XG4mIzQzO1xuIFx0bWVtbWFwX2luaXRfcmFuZ2UoZW5kX3BmbiAtIHN0YXJ0X3BmbiwgbmlkLCB6b25lX2lkLCBzdGFydF9wZm4sXG4gXHRcdFx0ICB6b25lX2VuZF9wZm4sIE1FTUlOSVRfRUFSTFksIE5VTEwsIG10LCBmYWxzZSk7XG4gXG5AQCAtMjE5NSwyOCAmIzQzOzIyMzEsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcbi1cbi1cdFx0YmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCB6b25lX2VuZF9wZm4oem9uZSkpO1xuLVxuLVx0XHRpZiAoIV9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKGJsb2NrX3N0YXJ0X3Bmbixcbi1cdFx0XHRcdFx0ICAgICBibG9ja19lbmRfcGZuLCB6b25lKSlcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0fVxuLVxuLVx0LyogV2UgY29uZmlybSB0aGF0IHRoZXJlIGlzIG5vIGhvbGUgKi9cbi1cdHpvbmUtXHUwMDNlY29udGlndW91cyA9IHRydWU7XG4tfVxuLVxuIC8qXG4gICogQ2hlY2sgaWYgYSBQRk4gcmFuZ2UgaW50ZXJzZWN0cyBtdWx0aXBsZSB6b25lcyBvbiBvbmUgb3IgbW9yZVxuICAqIE5VTUEgbm9kZXMuIFNwZWNpZnkgdGhlIEBuaWQgYXJndW1lbnQgaWYgaXQgaXMga25vd24gdGhhdCB0aGlzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2Jsb2NrX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfYmxvY2tfb2ZmbGluZSYjMzQ7LAogICAgJiMzNDtmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuJiMzNDssCiAgICAmIzM0O2ZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbiYjMzQ7LAogICAgJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICAgJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgICAmIzM0O3VwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19pbml0X2xhdGUmIzM0OywKICAgICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgc3BlY2lmaWNhbGx5IHpvbmUgY29udGlndWl0eSB0cmFja2luZyBhbmQgc2VjdGlvbiBQRk4gZmluZGluZy4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTM2M2ExMmY0MzhjNjU1MjAzOGE2NTE3YTRlZjIyNDhjNjRjNDQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMTM6MjY6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QKaW5kZXggYjc2MTgzNTQ1ZTViZjUuLjBhYTY1ZTZiNTQ5OTU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0CkBAIC00ODMsNiAmIzQzOzQ4MywxOSBAQCBHZW5lcmFsCiAgIGBgcHJlc2VudF9wYWdlc2BgIHNob3VsZCB1c2UgYGBnZXRfb25saW5lX21lbXMoKWBgIHRvIGdldCBhIHN0YWJsZSB2YWx1ZS4gSXQKICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC4KIAomIzQzO2BgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYGAKJiM0MzsgIFRyYWNrcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUgdGhhdCBoYXZlIGFuIG9ubGluZSBtZW1vcnkgbWFwIChwcmVzZW50IHBhZ2VzCiYjNDM7ICBhbmQgbWVtb3J5IGhvbGVzIHdob3NlIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQpLiBXaGVuCiYjNDM7ICBgYHNwYW5uZWRfcGFnZXNgYCA9PSBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgLCBgYHBmbl90b19wYWdlKClgYCBjYW4gYmUKJiM0MzsgIHBlcmZvcm1lZCB3aXRob3V0IGZ1cnRoZXIgY2hlY2tzIG9uIGFueSBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uCiYjNDM7CiYjNDM7ICBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuIG9ubGluZQomIzQzOyAgbWVtb3J5IG1hcCBleGlzdCBvdXRzaWRlIHRoZSBjdXJyZW50IHpvbmUgc3Bhbi4gVGhpcyBjYW4gb25seSBoYXBwZW4gZHVyaW5nCiYjNDM7ICBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZiBwYWdlcyB0aGF0IGRvIG5vdCBmYWxsIGludG8gYW55CiYjNDM7ICB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG8gY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2sKJiM0MzsgIG1heSByZXN1bHQgaW4gYSAmIzM0O3RvbyBzbWFsbCYjMzQ7IHZhbHVlLiBUaGlzIGlzIHNhZmU6IGl0IG1lcmVseSBwcmV2ZW50cwomIzQzOyAgZGV0ZWN0aW5nIGEgY29udGlndW91cyB6b25lLgomIzQzOwogYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGAKICAgVGhlIHByZXNlbnQgcGFnZXMgZXhpc3Rpbmcgd2l0aGluIHRoZSB6b25lIGxvY2F0ZWQgb24gbWVtb3J5IGF2YWlsYWJsZSBzaW5jZQogICBlYXJseSBib290LCBleGNsdWRpbmcgaG90cGx1Z2dlZCBtZW1vcnkuIERlZmluZWQgb25seSB3aGVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKaW5kZXggYmNmZTJkOWY0YWRiZDkuLjIzN2FjZTQzNTM3MjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCkBAIC0yNDYsNiAmIzQzOzI0Niw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJCW5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tJmd0O2FsdG1hcC0mZ3Q7ZnJlZTsKIAogCW1lbV9ob3RwbHVnX2JlZ2luKCk7CiYjNDM7CWNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTsKIAlpZiAobnJfdm1lbW1hcF9wYWdlcykgewogCQlyZXQgPSBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcywgem9uZSk7CiAJCWlmIChyZXQpCkBAIC0yNzAsNiAmIzQzOzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAKIAltZW0tJmd0O3pvbmUgPSB6b25lOwogb3V0OgomIzQzOwlzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpOwogCW1lbV9ob3RwbHVnX2RvbmUoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjgyLDYgJiM0MzsyODQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSkKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IHNlY3Rpb25fbnJfdG9fcGZuKG1lbS0mZ3Q7c3RhcnRfc2VjdGlvbl9ucik7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrOwogCXVuc2lnbmVkIGxvbmcgbnJfdm1lbW1hcF9wYWdlcyA9IDA7CiYjNDM7CXN0cnVjdCB6b25lICp6b25lOwogCWludCByZXQ7CiAKIAlpZiAoIW1lbS0mZ3Q7em9uZSkKQEAgLTI5NCw3ICYjNDM7Mjk3LDkgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJaWYgKG1lbS0mZ3Q7YWx0bWFwKQogCQlucl92bWVtbWFwX3BhZ2VzID0gbWVtLSZndDthbHRtYXAtJmd0O2ZyZWU7CiAKJiM0MzsJem9uZSA9IG1lbS0mZ3Q7em9uZTsKIAltZW1faG90cGx1Z19iZWdpbigpOwomIzQzOwljbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7CiAJaWYgKG5yX3ZtZW1tYXBfcGFnZXMpCiAJCWFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgbWVtLSZndDtncm91cCwKIAkJCQkJICAtbnJfdm1lbW1hcF9wYWdlcyk7CkBAIC0zMTQsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKQogCiAJbWVtLSZndDt6b25lID0gTlVMTDsKIG91dDoKJiM0MzsJc2V0X3pvbmVfY29udGlndW91cyh6b25lKTsKIAltZW1faG90cGx1Z19kb25lKCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi5hYzE0NjdhYzMzMzY0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0xMDMyLDYgJiM0MzsxMDMyLDIwIEBAIHN0cnVjdCB6b25lIHsKIAkgKiBjbWEgcGFnZXMgaXMgcHJlc2VudCBwYWdlcyB0aGF0IGFyZSBhc3NpZ25lZCBmb3IgQ01BIHVzZQogCSAqIChNSUdSQVRFX0NNQSkuCiAJICoKJiM0MzsJICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwIHRyYWNrcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUgdGhhdCBoYXZlCiYjNDM7CSAqIGFuIG9ubGluZSBtZW1vcnkgbWFwIChwcmVzZW50IHBhZ2VzIGFuZCBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5CiYjNDM7CSAqIG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCkuIFdoZW4gc3Bhbm5lZF9wYWdlcyA9PQomIzQzOwkgKiBwYWdlc193aXRoX29ubGluZV9tZW1tYXAsIHBmbl90b19wYWdlKCkgY2FuIGJlIHBlcmZvcm1lZCB3aXRob3V0CiYjNDM7CSAqIGZ1cnRoZXIgY2hlY2tzIG9uIGFueSBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGU6IHRoaXMgY291bnRlciBtYXkgdGVtcG9yYXJpbHkgdW5kZXJjb3VudCB3aGVuIHBhZ2VzIHdpdGggYW4KJiM0MzsJICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuCiYjNDM7CSAqIG9ubHkgaGFwcGVuIGR1cmluZyBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZgomIzQzOwkgKiBwYWdlcyB0aGF0IGRvIG5vdCBmYWxsIGludG8gYW55IHpvbmUgc3Bhbi4gR3Jvd2luZyB0aGUgem9uZSB0bwomIzQzOwkgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGEKJiM0MzsJICogJiMzNDt0b28gc21hbGwmIzM0OyB2YWx1ZS4gVGhpcyBpcyBzYWZlOiBpdCBtZXJlbHkgcHJldmVudHMgZGV0ZWN0aW5nIGEKJiM0MzsJICogY29udGlndW91cyB6b25lLgomIzQzOwkgKgogCSAqIFNvIHByZXNlbnRfcGFnZXMgbWF5IGJlIHVzZWQgYnkgbWVtb3J5IGhvdHBsdWcgb3IgbWVtb3J5IHBvd2VyCiAJICogbWFuYWdlbWVudCBsb2dpYyB0byBmaWd1cmUgb3V0IHVubWFuYWdlZCBwYWdlcyBieSBjaGVja2luZwogCSAqIChwcmVzZW50X3BhZ2VzIC0gbWFuYWdlZF9wYWdlcykuIEFuZCBtYW5hZ2VkX3BhZ2VzIHNob3VsZCBiZSB1c2VkCkBAIC0xMDU2LDYgJiM0MzsxMDcwLDcgQEAgc3RydWN0IHpvbmUgewogCWF0b21pY19sb25nX3QJCW1hbmFnZWRfcGFnZXM7CiAJdW5zaWduZWQgbG9uZwkJc3Bhbm5lZF9wYWdlczsKIAl1bnNpZ25lZCBsb25nCQlwcmVzZW50X3BhZ2VzOwomIzQzOwl1bnNpZ25lZCBsb25nCQlwYWdlc193aXRoX29ubGluZV9tZW1tYXA7CiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpCiAJdW5zaWduZWQgbG9uZwkJcHJlc2VudF9lYXJseV9wYWdlczsKICNlbmRpZgpAQCAtMTY4MSw2ICYjNDM7MTY5NiwzOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKIH0KICNlbmRpZgogCiYjNDM7LyoqCiYjNDM7ICogem9uZV9pc19jb250aWd1b3VzIC0gdGVzdCB3aGV0aGVyIGEgem9uZSBpcyBjb250aWd1b3VzCiYjNDM7ICogQHpvbmU6IHRoZSB6b25lIHRvIHRlc3QuCiYjNDM7ICoKJiM0MzsgKiBJbiBhIGNvbnRpZ3VvdXMgem9uZSwgaXQgaXMgdmFsaWQgdG8gY2FsbCBwZm5fdG9fcGFnZSgpIG9uIGFueSBQRk4gaW4gdGhlCiYjNDM7ICogc3Bhbm5lZCB6b25lIHdpdGhvdXQgcmVxdWlyaW5nIHBmbl92YWxpZCgpIG9yIHBmbl90b19vbmxpbmVfcGFnZSgpIGNoZWNrcy4KJiM0MzsgKgomIzQzOyAqIE5vdGUgdGhhdCBtaXNzaW5nIHN5bmNocm9uaXphdGlvbiB3aXRoIG1lbW9yeSBvZmZsaW5pbmcgbWFrZXMgYW55IFBGTgomIzQzOyAqIHRyYXZlcnNhbCBwcm9uZSB0byByYWNlcy4KJiM0MzsgKgomIzQzOyAqIFpPTkVfREVWSUNFIHpvbmVzIGFyZSBhbHdheXMgbWFya2VkIG5vbi1jb250aWd1b3VzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19jb250aWd1b3VzKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpvbmUtJmd0O2NvbnRpZ3VvdXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJaWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICh6b25lLSZndDtzcGFubmVkX3BhZ2VzID09IHpvbmUtJmd0O3BhZ2VzX3dpdGhfb25saW5lX21lbW1hcCkKJiM0MzsJCXpvbmUtJmd0O2NvbnRpZ3VvdXMgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJem9uZS0mZ3Q7Y29udGlndW91cyA9IGZhbHNlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBSZXR1cm5zIHRydWUgaWYgYSB6b25lIGhhcyBwYWdlcyBtYW5hZ2VkIGJ5IHRoZSBidWRkeSBhbGxvY2F0b3IuCiAgKiBBbGwgdGhlIHJlY2xhaW0gZGVjaXNpb25zIGhhdmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDE4MWU3OWYxZDZhMjA3Li5mOTMyYjc1NzdjOTJhYyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC04MDUsMjEgJiM0Mzs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKQogewotCWlmICh6b25lLSZndDtjb250aWd1b3VzKQomIzQzOwlpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKQogCQlyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTsKIAogCXJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpOwogfQogCi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpOwogYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQotewotCXpvbmUtJmd0O2NvbnRpZ3VvdXMgPSBmYWxzZTsKLX0KLQogZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHZvaWQgX19wdXRiYWNrX2lzb2xhdGVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkgICAgaW50IG10KTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDdhYzE5ZmFiMjI2MzI0Li4zYTI4MWQ1OTUyMDcxMCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC00MjcsMTcgJiM0Mzs0MjcsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCWZvciAoOyBzdGFydF9wZm4gJmx0OyBlbmRfcGZuOyBzdGFydF9wZm4gJiM0Mzs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7Ci0JCWlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKQotCQkJY29udGludWU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV4dF9wZm47CiAKLQkJaWYgKHVubGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSAhPSBuaWQpKQotCQkJY29udGludWU7CiYjNDM7CWZvciAoOyBzdGFydF9wZm4gJmx0OyBlbmRfcGZuOyBzdGFydF9wZm4gPSBuZXh0X3BmbikgewomIzQzOwkJdW5zaWduZWQgbG9uZyB0YWlsX3BmbjsKJiM0MzsKJiM0MzsJCW5leHRfcGZuID0gc3RhcnRfcGZuICYjNDM7IFBBR0VTX1BFUl9TVUJTRUNUSU9OOwomIzQzOwkJdGFpbF9wZm4gPSBuZXh0X3BmbiAtIDE7CiAKLQkJaWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpKQomIzQzOwkJaWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpCiAJCQljb250aW51ZTsKIAotCQlyZXR1cm4gc3RhcnRfcGZuOwomIzQzOwkJaWYgKGxpa2VseShwZm5fdG9fbmlkKHN0YXJ0X3BmbikgPT0gbmlkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpCiYjNDM7CQkJcmV0dXJuIHN0YXJ0X3BmbjsKJiM0MzsKJiM0MzsJCWlmIChsaWtlbHkocGZuX3RvX25pZCh0YWlsX3BmbikgPT0gbmlkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UodGFpbF9wZm4pKSkKJiM0MzsJCQlyZXR1cm4gc3RhcnRfcGZuOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDQ4LDIxICYjNDM7NDU1LDI2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKLQl1bnNpZ25lZCBsb25nIHBmbjsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIHByZXZfcGZuOwogCiAJLyogcGZuIGlzIHRoZSBlbmQgcGZuIG9mIGEgbWVtb3J5IHNlY3Rpb24uICovCiAJcGZuID0gZW5kX3BmbiAtIDE7Ci0JZm9yICg7IHBmbiAmZ3Q7PSBzdGFydF9wZm47IHBmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikgewotCQlpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSkKLQkJCWNvbnRpbnVlOwomIzQzOwlmb3IgKDsgcGZuICZndDs9IHN0YXJ0X3BmbjsgcGZuID0gcHJldl9wZm4pIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaGVhZF9wZm47CiAKLQkJaWYgKHVubGlrZWx5KHBmbl90b19uaWQocGZuKSAhPSBuaWQpKQotCQkJY29udGludWU7CiYjNDM7CQlwcmV2X3BmbiA9IHBmbiAtIFBBR0VTX1BFUl9TVUJTRUNUSU9OOwomIzQzOwkJaGVhZF9wZm4gPSBwcmV2X3BmbiAmIzQzOyAxOwogCi0JCWlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSkKJiM0MzsJCWlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHBmbikpKQogCQkJY29udGludWU7CiAKLQkJcmV0dXJuIHBmbjsKJiM0MzsJCWlmIChsaWtlbHkocGZuX3RvX25pZChwZm4pID09IG5pZCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpKQomIzQzOwkJCXJldHVybiBwZm47CiYjNDM7CiYjNDM7CQlpZiAobGlrZWx5KHBmbl90b19uaWQoaGVhZF9wZm4pID09IG5pZCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGhlYWRfcGZuKSkpCiYjNDM7CQkJcmV0dXJuIHBmbjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU1NywxOCAmIzQzOzU2OSwxMyBAQCB2b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLAogCiAJLyoKIAkgKiBab25lIHNocmlua2luZyBjb2RlIGNhbm5vdCBwcm9wZXJseSBkZWFsIHdpdGggWk9ORV9ERVZJQ0UuIFNvCi0JICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayB0aGUgem9uZXMgLSB3aGljaCBpcyBva2F5IGFzCi0JICogc2V0X3pvbmVfY29udGlndW91cygpIGNhbm5vdCBkZWFsIHdpdGggWk9ORV9ERVZJQ0UgZWl0aGVyIHdheS4KJiM0MzsJICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC4KIAkgKi8KIAlpZiAoem9uZV9pc196b25lX2RldmljZSh6b25lKSkKIAkJcmV0dXJuOwogCi0JY2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpOwotCiAJc2hyaW5rX3pvbmVfc3Bhbih6b25lLCBzdGFydF9wZm4sIHN0YXJ0X3BmbiAmIzQzOyBucl9wYWdlcyk7CiAJdXBkYXRlX3BnZGF0X3NwYW4ocGdkYXQpOwotCi0Jc2V0X3pvbmVfY29udGlndW91cyh6b25lKTsKIH0KIAogLyoqCkBAIC03NDYsOCAmIzQzOzc1Myw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtJmd0O3pvbmVfcGdkYXQ7CiAJaW50IG5pZCA9IHBnZGF0LSZndDtub2RlX2lkOwogCi0JY2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpOwotCiAJaWYgKHpvbmVfaXNfZW1wdHkoem9uZSkpCiAJCWluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CiAJcmVzaXplX3pvbmVfcmFuZ2Uoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CkBAIC03NzUsOCAmIzQzOzc4MCw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJbWVtbWFwX2luaXRfcmFuZ2UobnJfcGFnZXMsIG5pZCwgem9uZV9pZHgoem9uZSksIHN0YXJ0X3BmbiwgMCwKIAkJCSBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsCiAJCQkgaXNvbGF0ZV9wYWdlYmxvY2spOwotCi0Jc2V0X3pvbmVfY29udGlndW91cyh6b25lKTsKIH0KIAogc3RydWN0IGF1dG9fbW92YWJsZV9zdGF0cyB7CkBAIC0xMDcyLDYgJiM0MzsxMDc1LDcgQEAgdm9pZCBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCwKIAlpZiAoZWFybHlfc2VjdGlvbihfX3Bmbl90b19zZWN0aW9uKHBhZ2VfdG9fcGZuKHBhZ2UpKSkpCiAJCXpvbmUtJmd0O3ByZXNlbnRfZWFybHlfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzOwogCXpvbmUtJmd0O3ByZXNlbnRfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwl6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXAgJiM0Mzs9IG5yX3BhZ2VzOwogCXpvbmUtJmd0O3pvbmVfcGdkYXQtJmd0O25vZGVfcHJlc2VudF9wYWdlcyAmIzQzOz0gbnJfcGFnZXM7CiAKIAlpZiAoZ3JvdXAgJmFtcDsmYW1wOyBtb3ZhYmxlKQpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IGYxYWZlMDIzZTRlNzIxLi43M2QxZmRlMTcwNDA1MCAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtOTE2LDYgJiM0Mzs5MTYsNDAgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmUKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKJiM0MzsJCQkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKJiM0MzsJCQkJCQkgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyAqaG9sZV9wZm4pCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKJiM0MzsJdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbiA9IHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuOwomIzQzOwl1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbiA9IHpvbmVfc3RhcnRfcGZuICYjNDM7IHpvbmUtJmd0O3NwYW5uZWRfcGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3ViX3N0YXJ0LCBzdWJfZW5kOwomIzQzOwomIzQzOwlzdWJfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydF9wZm4sIFBBR0VTX1BFUl9TVUJTRUNUSU9OKSwKJiM0MzsJCQl6b25lX3N0YXJ0X3Bmbik7CiYjNDM7CXN1Yl9lbmQgPSBtaW4oQUxJR04oZW5kX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLCB6b25lX2VuZF9wZm4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3IgYW4gaW4tem9uZSBob2xlIHNtYWxsZXIgdGhhbiBhIHN1YnNlY3Rpb24sIHRoZSBhZGphY2VudAomIzQzOwkgKiBtZW1ibG9jayByYW5nZXMgc2hhcmUgYSBzdWJzZWN0aW9uLiBBdm9pZCBjb3VudGluZyB0aGUgc2FtZQomIzQzOwkgKiBzdWJzZWN0aW9uJiMzOTtzIHBhZ2VzIHR3aWNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCpob2xlX3BmbiAmZ3Q7IHpvbmVfc3RhcnRfcGZuKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHByZXZfc3ViX2VuZDsKJiM0MzsKJiM0MzsJCXByZXZfc3ViX2VuZCA9IG1pbihBTElHTigqaG9sZV9wZm4sIFBBR0VTX1BFUl9TVUJTRUNUSU9OKSwKJiM0MzsJCQkJICAgem9uZV9lbmRfcGZuKTsKJiM0MzsJCXN1Yl9zdGFydCA9IG1heChzdWJfc3RhcnQsIHByZXZfc3ViX2VuZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN1Yl9zdGFydCAmbHQ7IHN1Yl9lbmQpCiYjNDM7CQl6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXAgJiM0Mzs9IHN1Yl9lbmQgLSBzdWJfc3RhcnQ7CiYjNDM7I2Vsc2UKJiM0MzsJem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbiwKQEAgLTkzMiw2ICYjNDM7OTY2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJaWYgKHN0YXJ0X3BmbiAmZ3Q7PSBlbmRfcGZuKQogCQlyZXR1cm47CiAKJiM0MzsJdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIGVuZF9wZm4sIGhvbGVfcGZuKTsKJiM0MzsKIAltZW1tYXBfaW5pdF9yYW5nZShlbmRfcGZuIC0gc3RhcnRfcGZuLCBuaWQsIHpvbmVfaWQsIHN0YXJ0X3BmbiwKIAkJCSAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpOwogCkBAIC0yMTk1LDI4ICYjNDM7MjIzMSw2IEBAIHZvaWQgX19pbml0IGluaXRfY21hX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKIH0KICNlbmRpZgogCi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpCi17Ci0JdW5zaWduZWQgbG9uZyBibG9ja19zdGFydF9wZm4gPSB6b25lLSZndDt6b25lX3N0YXJ0X3BmbjsKLQl1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47Ci0KLQlibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTsKLQlmb3IgKDsgYmxvY2tfc3RhcnRfcGZuICZsdDsgem9uZV9lbmRfcGZuKHpvbmUpOwotCQkJYmxvY2tfc3RhcnRfcGZuID0gYmxvY2tfZW5kX3BmbiwKLQkJCSBibG9ja19lbmRfcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHsKLQotCQlibG9ja19lbmRfcGZuID0gbWluKGJsb2NrX2VuZF9wZm4sIHpvbmVfZW5kX3Bmbih6b25lKSk7Ci0KLQkJaWYgKCFfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShibG9ja19zdGFydF9wZm4sCi0JCQkJCSAgICAgYmxvY2tfZW5kX3Bmbiwgem9uZSkpCi0JCQlyZXR1cm47Ci0JCWNvbmRfcmVzY2hlZCgpOwotCX0KLQotCS8qIFdlIGNvbmZpcm0gdGhhdCB0aGVyZSBpcyBubyBob2xlICovCi0Jem9uZS0mZ3Q7Y29udGlndW91cyA9IHRydWU7Ci19Ci0KIC8qCiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlCiAgKiBOVU1BIG5vZGVzLiBTcGVjaWZ5IHRoZSBAbmlkIGFyZ3VtZW50IGlmIGl0IGlzIGtub3duIHRoYXQgdGhpcwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDMyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgY3J1Y2lhbCBzdHVmZiDigJMgbWVtb3J5IGhvdHBsdWcgYW5kIGhvdyB0aGUga2VybmVsIHRyYWNrcyB6b25lIGNvbnRpZ3VpdHkuIEludGVyZXN0aW5nLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY291bnRlciwgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIHdpdGhpbiB0aGUgYHN0cnVjdCB6b25lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gQmFzaWNhbGx5IGl0IGlzIGdvaW5nIHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgd2F5IG9mIHZlcmlmeWluZyBjb250aWd1b3VzIG1lbW9yeSBieSBjb21wYXJpbmcgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSB6b25lIGFnYWluc3QgdGhlIG51bWJlciBvZiBwYWdlcyB3aXRoIG9ubGluZSBtZW1vcnkgbWFwcy4KClJpZ2h0LCBzbyB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGhvdyBgc2V0X3pvbmVfY29udGlndW91c2Agb3BlcmF0ZXMuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzaGlmdCwgYW5kIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyBnb2luZyB0byBiZSBmYXN0ZXIsIHNsb3dlciwgYW5kIHRoZSBpbXBsaWNhdGlvbnMuIEluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggcGFnZWJsb2NrcyB0byBsb29rIGZvciBob2xlcywgaXQmIzM5O3MganVzdCBhIHNpbXBsZSBjb21wYXJpc29uIG5vdy4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4KCk9rYXksIGFuZCBpdCBsb29rcyBsaWtlIHRoZXnigJl2ZSBvcHRpbWl6ZWQgYGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm5gIGFuZCBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYCBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgYXMgd2VsbC4gU2VlbXMgbGlrZSBpdCBoYXMgc29tZSBuaWNlIG9wdGltaXphdGlvbnMgaW4gdGhlcmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBjb2RlPyBJcyBpdCBmdW5jdGlvbmFsPyBJIG1lYW4sIGl0JiMzOTtzIHBva2luZyBhdCB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG90cGx1Zywgc28gSSYjMzk7ZCBzYXkgeWVhaCwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuIE1lbW9yeSBob3RwbHVnIGlzbiYjMzk7dCBzb21lIG9ic2N1cmUgZmVhdHVyZTsgeW91IGNhbiB0cmlnZ2VyIGl0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgcmlnaHQ/IFN5c2ZzIG9yIEFDUEksIHRoYXTigJlzIGdvaW5nIHRvIHRyaXAgYWxsIHRoaXMuIEFuZCB0aGUgY2hhbmdlcyB0byB0aG9zZSBgZmluZF8uLi5gIGZ1bmN0aW9ucz8gVG90YWxseSBmdW5jdGlvbmFsIGR1cmluZyBob3RwbHVnLiBBbmQgYHNldF96b25lX2NvbnRpZ3VvdXNgIHRvby4KCk5vdywgd2hhdCBhYm91dCBmdXp6aW5nIHRoaXM/IFdvcnRoIHRoZSBlZmZvcnQ/IEFic29sdXRlbHkuIEFueSBjaGFuZ2UgaW4gdGhpcyBhcmVhIGNhbiBoYXZlIG5hc3R5IGNvbnNlcXVlbmNlcyBpZiB0aGVyZSBhcmUgaG9sZXMsIHNvIGxldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGRvIGluIHRoYXQgcmVnYXJkLgoKTGV0JiMzOTtzIGxvb2sgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9idmlvdXMgY2FuZGlkYXRlIGlzIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCByaWdodD8gVGltZSB0byBjaGVjayBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgYW5kIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTU9SWV9IT1RQTFVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTYyPXBhZ2UtYWxsb2MtJChDT05GSUdfU0hVRkZMRV9QQUdFX0FMTE9DQVRPUikgJiM0Mzs9IHNodWZmbGUub1xuLS1cbm1tL01ha2VmaWxlLTY0LSMgR2l2ZSAmIzM5O21lbW9yeV9ob3RwbHVnJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxubW0vTWFrZWZpbGU6NjU6bWVtb3J5LWhvdHBsdWctJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICYjNDM7PSBtZW1vcnlfaG90cGx1Zy5vXG5tbS9NYWtlZmlsZS02Ni1cbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz05OT1zdGF0aWMgaW50IHZtZW1tYXBfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMjUtXHQgKi9cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjEyNjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1PUllfSE9UUExVRykgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCF2bWVtbWFwX3dhbGstXHUwMDNlbnJfd2Fsa2VkKSkge1xubW0vaHVnZXRsYl92bWVtbWFwLmMtMTI3LVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGhlYWQgPyBoZWFkICYjNDM7IHB0ZV9pbmRleChhZGRyKSA6XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MTYzPXZvaWQga2FzYW5fdW5wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgaW5pdClcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0xODQtXG5tbS9rYXNhbi9zaGFkb3cuYzoxODU6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xubW0va2FzYW4vc2hhZG93LmMtMTg2LXN0YXRpYyBib29sIHNoYWRvd19tYXBwZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9NjQ5PUVYUE9SVF9TWU1CT0xfR1BMKHJlc3RvcmVfb25saW5lX3BhZ2VfY2FsbGJhY2spO1xubW0vbWVtb3J5X2hvdHBsdWcuYy02NTAtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjY1MTovKiB3ZSBhcmUgT0sgY2FsbGluZyBfX21lbWluaXQgc3R1ZmYgaGVyZSAtIHdlIGhhdmUgQ09ORklHX01FTU9SWV9IT1RQTFVHICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTY1Mi12b2lkIGdlbmVyaWNfb25saW5lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTExNDE9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyNTUtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyNTY6Lyogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjU3LXN0YXRpYyBwZ19kYXRhX3QgKmhvdGFkZF9pbml0X3BnZGF0KGludCBuaWQpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ0PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDk1LSAqXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0OTY6ICogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVR1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDk3LSAqL1xuLS1cbm1tL21tX2luaXQuYz0xMjc3PXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9tZW1vcnlsZXNzX25vZGVfdG90YWxwYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL21tX2luaXQuYy0xMjg0LVx0XHR6LVx1MDAzZXByZXNlbnRfcGFnZXMgPSAwO1xubW0vbW1faW5pdC5jOjEyODU6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxubW0vbW1faW5pdC5jLTEyODYtXHRcdHotXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyA9IDA7XG4tLVxubW0vbW1faW5pdC5jPTEzMTk9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS9tbV9pbml0LmMtMTM0OC1cdFx0em9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzID0gcmVhbF9zaXplO1xubW0vbW1faW5pdC5jOjEzNDk6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxubW0vbW1faW5pdC5jLTEzNTAtXHRcdHpvbmUtXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyA9IHJlYWxfc2l6ZTtcbi0tXG5tbS9tbV9pbml0LmM9MTUwNj12b2lkIF9faW5pdCBzZXRfcGFnZWJsb2NrX29yZGVyKHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTE1MTgtICovXG5tbS9tbV9pbml0LmM6MTUxOTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXG5tbS9tbV9pbml0LmMtMTUyMC12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xNTg4PXZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTE2MDItXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzoxNjAzOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2VfYWxsb2MuYy0xNjA0LVx0ICAgIHVubGlrZWx5KGNvbnRleHQgPT0gTUVNSU5JVF9IT1RQTFVHKSkge1xuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9NjA0PXZvaWQgX19pbml0IHNwYXJzZV9pbml0X3N1YnNlY3Rpb25fbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmMtNjI2LVxubW0vc3BhcnNlLXZtZW1tYXAuYzo2Mjc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xubW0vc3BhcnNlLXZtZW1tYXAuYy02MjgtXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYz05MTc9dm9pZCBzcGFyc2VfcmVtb3ZlX3NlY3Rpb24odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYy05MjYtfVxubW0vc3BhcnNlLXZtZW1tYXAuYzo5Mjc6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZ29vZCBudW1iZXIgb2YgZmlsZXMg4oCTIHNwZWNpZmljYWxseSwgYG1tL21lbW9yeV9ob3RwbHVnLmNgLCBgbW0vbW1faW5pdC5jYCwgYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYW5kIGBtbS9pbnRlcm5hbC5oYC4gQmFzZWQgb24gdGhlIGZpbGUgbGlzdCwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBtZW1vcnkgaG90cGx1ZyBhbmQgdGhlIHJlbGF0ZWQgem9uZSBjb250aWd1aXR5IHRyYWNraW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBrZWVwaW5nIHRyYWNrIG9mIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zIHdoZW4geW91JiMzOTtyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgdGhlbSBvbiB0aGUgZmx5IGlzIGNydWNpYWwgZm9yIGVmZmljaWVudCByZXNvdXJjZSBtYW5hZ2VtZW50LgoKVGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gd2F0Y2ggb3V0IGZvciB3aWxsIGJlIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCBvYnZpb3VzbHkuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gaG93IGl0JiMzOTtzIHVzZWQgdGhyb3VnaG91dCB0aGUgY2hhbmdlcy4KCkkgc2VlIHRoYXQgYENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUGAgaXMgYWxzbyBpbXBsaWNhdGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2AgZnVuY3Rpb24gaW4gYG1tL21tX2luaXQuY2AuIFRoYXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGlzIGhvdHBsdWcgd29yayBhbmQgc3BhcnNlIG1lbW9yeSBjb25maWd1cmF0aW9ucyB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IuCgpOb3csIEkmIzM5O2xsIGZvY3VzIG9uIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIHNwZWNpZmljYWxseSwgYmVjYXVzZSBJIHN1c3BlY3QgaXQgbWlnaHQgY29udGFpbiBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBpbnRvIHRoYXQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgY29uZGl0aW9uYWxzIEkgbmVlZCB0byB1bmRlcnN0YW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1PUllfSE9UUExVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19OVU1BKVx0JiM0Mzs9IG5vZGUub1xuZHJpdmVycy9iYXNlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19NRU1PUllfSE9UUExVRykgJiM0Mzs9IG1lbW9yeS5vXG5kcml2ZXJzL2Jhc2UvTWFrZWZpbGUtMTctaWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTIwNz1pbnQgbWVtb3J5X25vdGlmeShlbnVtIG1lbW9yeV9ibG9ja19zdGF0ZSBzdGF0ZSwgdm9pZCAqdilcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjExLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjIxMjojaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yMTMtc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtYmxrX25yX3BvaXNvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xMjAyPWludCB3YWxrX2R5bmFtaWNfbWVtb3J5X2dyb3VwcyhpbnQgbmlkLCB3YWxrX21lbW9yeV9ncm91cHNfZnVuY190IGZ1bmMsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTEyMjMtXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MTIyNDojaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xMjI1LXZvaWQgbWVtYmxrX25yX3BvaXNvbl9pbmModW5zaWduZWQgbG9uZyBwZm4pXG4tLVxuZHJpdmVycy9iYXNlL25vZGUuYz0xMDk9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm5vZGVfYWNjZXNzX25vZGVfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9iYXNlL25vZGUuYy0xMTQtXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjExNTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTExNi1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChub2RlX2NoYWluKTtcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTc2ND1pbnQgdW5yZWdpc3Rlcl9jcHVfdW5kZXJfbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbmlkKVxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmMtNzgyLVxuZHJpdmVycy9iYXNlL25vZGUuYzo3ODM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xuZHJpdmVycy9iYXNlL25vZGUuYy03ODQtc3RhdGljIHZvaWQgZG9fcmVnaXN0ZXJfbWVtb3J5X2Jsb2NrX3VuZGVyX25vZGUoaW50IG5pZCxcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTg2ND12b2lkIHJlZ2lzdGVyX21lbW9yeV9ibG9ja3NfdW5kZXJfbm9kZV9ob3RwbHVnKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmMtODcwLX1cbmRyaXZlcnMvYmFzZS9ub2RlLmM6ODcxOiNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi9cbmRyaXZlcnMvYmFzZS9ub2RlLmMtODcyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgaG90cGx1ZyBzaXR1YXRpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIG9idmlvdXNseS4gQnV0IGhvbGQgb24sIEkgc2VlIGBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBgIG1lbnRpb25lZCB0b28uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQmIzM5O3MgYSAqaGFyZCogcmVxdWlyZW1lbnQgb3IgaWYgaXQganVzdCBjaGFuZ2VzIHRoZSBpbXBsZW1lbnRhdGlvbi4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG1tL21tX2luaXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXNgIGZ1bmN0aW9uLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBgIGRlZmluaXRlbHkgYWZmZWN0cyB0aGUgY29kZSBwYXRoLiBXaXRob3V0IGl0LCB3ZSYjMzk7cmUgZG9pbmcgYSBzaW1wbGUgaW5jcmVtZW50LiBXaXRoIGl0Li4uIHdlbGwsIGl0JiMzOTtzIGRpZmZlcmVudC4gTm90IHN0cmljdGx5ICpyZXF1aXJlZCosIGl0IHNlZW1zLCBidXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBiZWhhdmlvciBzaWduaWZpY2FudGx5LiBJIHRoaW5rIHdlIGNhbiBpbmNsdWRlIHRoYXQgd2l0aG91dCBhIHByb2JsZW0uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB0aGUgY29yZSBvZiB0aGlzLiBGcm9tIHdoYXQgSSBzZWUsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gYG1lbW9yeV9ibG9ja19vbmxpbmVgLCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLCBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAsIGBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5gLCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGZvciBtYW5hZ2luZyBtZW1vcnkgc2VjdGlvbnMuCgpUaW1lIHRvIHNlZSBob3cgdGhvc2UgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGFuZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gQXJlIHRoZXkgZXhwb3J0ZWQsIG9yIGFyZSB0aGV5IHN0YXRpYyB3aXRoaW4gdGhlaXIgbW9kdWxlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIHNvdXJjZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiBgZHJpdmVycy9iYXNlL21lbW9yeS5jYC4gWWVwLCBzdGF0aWMuIE9rYXksIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgbm93LiBMZXQmIzM5O3MgdHJhY2UgdGhlaXIgdXNhZ2UgYW5kIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5X2Jsb2NrX29ubGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9MjE1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1ibGtfbnJfcG9pc29uKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjIzLSAqL1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjIyNDpzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTIyNS17XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTMzMj1tZW1vcnlfYmxvY2tfYWN0aW9uKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdW5zaWduZWQgbG9uZyBhY3Rpb24pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMzNy1cdGNhc2UgTUVNX09OTElORTpcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMzg6XHRcdHJldCA9IG1lbW9yeV9ibG9ja19vbmxpbmUobWVtKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMzktXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDcyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRnV6emluZyB0aGUgTWVtb3J5IFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBgbWVtb3J5X2Jsb2NrX2FjdGlvbmAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLiAgSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGBtZW1vcnlfc3Vic3lzX29ubGluZWAgYW5kIGBtZW1vcnlfc3Vic3lzX29mZmxpbmVgLiAgQWhhISBBbmQgKnRob3NlKiBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aGVuIHN5c2ZzIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3N0YXRlYCBpcyB3cml0dGVuIHRvLiAgVGhhdCYjMzk7cyBteSBhdHRhY2sgdmVjdG9yISAgSWYgSSB3YW50IHRvIGZ1enogdGhpcyBwcm9wZXJseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGhhbW1lcmluZyBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBsb2dpYyBpcy4gIFRoaXMgc291bmRzIGxpa2UgYSBnb29kIGFwcHJvYWNoLgoKTm93LCBsZXQmIzM5O3MgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgYGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm5gIGFuZCBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYCBmdW5jdGlvbnMuIFRoZXNlIGNvdWxkIGJlIHBvdGVudGlhbCBhcmVhcyBmb3IgaW50ZXJlc3RpbmcgaXNzdWVzIHRvbywgYW5kIEkmIzM5O2QgbGlrZSB0byB1bmRlcnN0YW5kIHdoYXQgcm9sZSB0aGV5IHBsYXkgaW4gdGhlIG92ZXJhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0zODE9aW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNDI1LS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6NDI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTQyNy1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz00ODM9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy00OTUtXHRcdCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzo0OTY6XHRcdHBmbiA9IGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4obmlkLCB6b25lLCBlbmRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy00OTctXHRcdFx0XHRcdFx0em9uZV9lbmRfcGZuKHpvbmUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNzMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgTWVtb3J5IEhvdHBsdWcgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSByZW1vdmluZyBwYWdlIGZyYW1lIG51bWJlcnMgKFBGTnMpIGZyb20gYSB6b25lLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYCB0aGF0IGdldCBpbnZva2VkIGR1cmluZyB0aGlzIHByb2Nlc3MuIEkmIzM5O3ZlIHRyYWNlZCB0aGUgY2FsbCBzdGFjaywgc28gSSBrbm93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHRyaWdnZXJlZCBieSBgc2hyaW5rX3pvbmVfc3BhbmAuIFRoYXQgaW4gdHVybiBpcyBjYWxsZWQgYnkgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYC4gRGl2aW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgIGlzIGEgZGlyZWN0IGNhbGxlciBvZiBgX19yZW1vdmVfcGFnZXNgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHByb2Nlc3MuIEFuZCBmaW5hbGx5LCBgX19yZW1vdmVfcGFnZXNgIGlzIHRoZSBkaXJlY3QgcGFyZW50IG9mIGBvZmZsaW5lX3BhZ2VzYCBhbmQgYGFyY2hfcmVtb3ZlX21lbW9yeWAsIHdoaWNoIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgZm9yIHJlbW92aW5nIG1lbW9yeS4KCk5vdywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgcmVhbGxvY2F0aW5nIHRoZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiByZW1vdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTczND1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdGlvbl90YWludF96b25lX2RldmljZSh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc0Ny0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6NzQ4OnZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc0OS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTEwODc9aW50IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDk2LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMDk3Olx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzLCBOVUxMLCBNSUdSQVRFX1VOTU9WQUJMRSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA5OC1cdFx0XHQgICAgICAgZmFsc2UpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MT1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE2OC1cdC8qIGFzc29jaWF0ZSBwZm4gcmFuZ2Ugd2l0aCB0aGUgem9uZSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxMTY5Olx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzLCBOVUxMLCBNSUdSQVRFX01PVkFCTEUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExNzAtXHRcdFx0ICAgICAgIHRydWUpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MjE4OT12b2lkIHRyeV9vZmZsaW5lX25vZGUoaW50IG5pZClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxOTQtXHQgKiBJZiB0aGUgbm9kZSBzdGlsbCBzcGFucyBwYWdlcyAoZXNwZWNpYWxseSBaT05FX0RFVklDRSksIGRvbiYjMzk7dFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMTk1Olx0ICogb2ZmbGluZSBpdC4gQSBub2RlIHNwYW5zIG1lbW9yeSBhZnRlciBtb3ZlX3Bmbl9yYW5nZV90b196b25lKCksXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxOTYtXHQgKiBlLmcuLCBhZnRlciB0aGUgbWVtb3J5IGJsb2NrIHdhcyBvbmxpbmVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gaXMgd29ya2luZyBoZXJlLiBJdCBsb29rcyBsaWtlIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBtYWluIHBsYWNlczogYG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlgIGFuZCBgb25saW5lX3BhZ2VzYC4gVGhhdCB0ZWxscyBtZSB0aGVzZSBhcmUgdGhlIHBvaW50cyB3aGVyZSB3ZSYjMzk7cmUgc2hpZnRpbmcgYXJvdW5kIHBoeXNpY2FsIHBhZ2UgZnJhbWVzIChQRk5zKSBiZXR3ZWVuIG1lbW9yeSB6b25lcy4KClRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgSSBzaG91bGQgY2hlY2ssIGdpdmVuIHRoZSBjYWxsIGhpZXJhcmNoeSBvZiBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAuIFRoZXNlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGJsb2NrcyBhcmUgYnJvdWdodCBvbmxpbmUgYW5kIG9mZmxpbmUsIGFuZCBob3cgUEZOIHJhbmdlcyBhcmUgaWRlbnRpZmllZCBhbmQgbWFuaXB1bGF0ZWQ6CgotICAgYG1lbW9yeV9ibG9ja19vbmxpbmVgCi0gICBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgCi0gICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAKLSAgIGBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5gCi0gICBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgCi0gICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAKLSAgIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYAoKSSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBjb25maXJtIGlmIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyBpZiBpdCBpcyBzdGF0aWMgd2lsbCBoZWxwIHdpdGggdGhlIHNjb3BlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz04NTI9dm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTkxOC1cbm1tL21tX2luaXQuYzo5MTk6c3RhdGljIHZvaWQgX19pbml0IHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtOTIwLVx0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL21tX2luaXQuYz05NTM9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTk2OC1cbm1tL21tX2luaXQuYzo5Njk6XHR1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzKHpvbmUsIHN0YXJ0X3BmbiwgZW5kX3BmbiwgaG9sZV9wZm4pO1xubW0vbW1faW5pdC5jLTk3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCB5ZXMsIHRoaXMgZGVmaW5pdGVseSBsb29rcyBsaWtlIGl0IGludm9sdmVzIHN0YXRpYyBjb25maWd1cmF0aW9ucy4gSG1tLCBsZXQgbWUgc2VlLi4uIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBwbGF5IGhlcmU/IEFoLCBJIHNlZSBgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQYCBpcyBiZWluZyB1dGlsaXplZC4gUmlnaHQsIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jb3Jwb3JhdGUgdGhhdCBpbnRvIG15IHVuZGVyc3RhbmRpbmcuIFBsdXMsIG9mIGNvdXJzZSwgdGhlIGJpZyBvbmUsIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLgoKU28sIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gY2xlYXJseS4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIHRoZSBmb2xsb3dpbmcgYXBwbGllczoKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLCBhYnNvbHV0ZWx5LgoqICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFmZmVjdGluZyBob3cgdGhlIHN5c3RlbSB0cmFja3Mgem9uZSBjb250aWd1aXR5IGFuZCBob3cgaXQgbG9jYXRlcyBzZWN0aW9uIFBGTnMuIFRoaXMgaXMgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBzdWJ0bGUgaXNzdWVzIGNhbiBoYXZlIGEgbWFzc2l2ZSBpbXBhY3QuIEZ1cnRoZXJtb3JlLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBsaWtlbHkgaW52b2x2ZWQgd2l0aCBob3RwbHVnIG9wZXJhdGlvbnMsIGEgY29tbW9uIGZlYXR1cmUgZm91bmQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoqICAgKipGb2N1c1N5bWJvbHMqKjogT2theSwgc28gdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgYXJlOgogICAgKiAgIGBtZW1vcnlfYmxvY2tfb25saW5lYAogICAgKiAgIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAKICAgICogICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAKICAgICogICBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYAogICAgKiAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAKICAgICogICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAKICAgICogICBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2AKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIHRyaWdnZXIgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGFyZToKICAgICogICBgTUVNT1JZX0hPVFBMVUdgCiAgICAqICAgYFNQQVJTRU1FTV9WTUVNTUFQYAoKSSYjMzk7bSBqdXN0IGdvaW5nIHRvIGRvdWJsZSBjaGVjayByZWFsIHF1aWNrIHRvIG1ha2Ugc3VyZSBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGFjdHVhbGx5IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24gd2l0aGluIHRoZSBrZXJuZWwuIENhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbi0tXG5tbS9LY29uZmlnLTQ1NC1cbm1tL0tjb25maWc6NDU1OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDU2LVx0Ym9vbFxubW0vS2NvbmZpZy00NTctXG5tbS9LY29uZmlnOjQ1ODpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNDY1LVxubW0vS2NvbmZpZzo0NjY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVRcbm1tL0tjb25maWctNDY3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEJsb2NrIE1hbmFnZW1lbnQgaW4gTGludXgqKgoKT2theSwgc28gYFNQQVJTRU1FTV9WTUVNTUFQYCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbjsgdGhhdCYjMzk7cyBnb29kIHRvIGVzdGFibGlzaCByaWdodCBhd2F5LiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWVzIGZvciB0aGUgbWVtb3J5IGJsb2NrIG9ubGluZS9vZmZsaW5lIG9wZXJhdGlvbnMuIEEgcXVpY2sgY2hlY2sgb2YgYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AgY29uZmlybXMgdGhhdCBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAgYXJlLCBpbiBmYWN0LCB0aGUgZnVuY3Rpb25zIEkmIzM5O20gbG9va2luZyBmb3IuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNldF96b25lX2NvbnRpZ3VvdXNgIGFuZCBgY2xlYXJfem9uZV9jb250aWd1b3VzYCBhcmUgYmVpbmcgdXNlZC4gQWgsIHJpZ2h0LCB0aGV5JiMzOTtyZSBkZWZpbmVkIGFzIGlubGluZSBmdW5jdGlvbnMgaW4gYGluY2x1ZGUvbGludXgvbW16b25lLmhgLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZSBmb3IgZGlyZWN0IGZ1enppbmcsIGJ1dCBpdCYjMzk7cyBub3QgYSBzaG93c3RvcHBlci4gQmVjYXVzZSB0aGV5IGFyZSBpbmxpbmVkLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVpciBjYWxsaW5nIGZ1bmN0aW9ucy4gU2luY2UgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGFuZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgICpkbyogY2FsbCB0aGVtLCB0aG9zZSB3aWxsIGJlIG15IHByaW1hcnkgdGFyZ2V0cy4KClRvIGVuc3VyZSBJJiMzOTttIGdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIHNob3VsZCBub3cgY2hlY2sgZm9yIGFueSBvdGhlciBjYWxsZXJzIG9mIGBzZXRfem9uZV9jb250aWd1b3VzYCBhbmQgYGNsZWFyX3pvbmVfY29udGlndW91c2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgaGVyZSB0aGF0IGFyZSBlc2NhcGluZyBteSBub3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF96b25lX2NvbnRpZ3VvdXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTIyND1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNzMtb3V0OlxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI3NDpcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjc1LVx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMyMS1vdXQ6XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzIyOlx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMjMtXHRtZW1faG90cGx1Z19kb25lKCk7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNzEzPXN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNzE3LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNzE4OnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNzE5LXtcbi0tXG5tbS9tbV9pbml0LmM9MjI2MD12b2lkIF9faW5pdCBwYWdlX2FsbG9jX2luaXRfbGF0ZSh2b2lkKVxuLS1cbm1tL21tX2luaXQuYy0yMjk2LVx0Zm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSlcbm1tL21tX2luaXQuYzoyMjk3Olx0XHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xubW0vbW1faW5pdC5jLTIyOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzAyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQWRkaW5nIGBzZXRfem9uZV9jb250aWd1b3VzYCB0byB0aGUgRm9jdXMgTGlzdCoqCgpBbHJpZ2h0LCBzbyBgcGFnZV9hbGxvY19pbml0X2xhdGVgIGlzIGNhbGxpbmcgYHNldF96b25lX2NvbnRpZ3VvdXNgLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCB1c2VmdWwuIEkgc2hvdWxkIGRlZmluaXRlbHkgYWRkIHRoYXQgdG8gbXkgbWVudGFsIEZvY3VzU3ltYm9scyBsaXN0LiBUaGF04oCZcyBwcm9iYWJseSBpbXBvcnRhbnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSB3YW50IHRvIGtlZXAgdGhvc2Uga2V5IGZ1bmN0aW9ucyBlYXNpbHkgYWNjZXNzaWJsZSBpbiBteSBtaW5kIHdoZW4gSSYjMzk7bSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBhbmQgY29udGlndW91cyBtZW1vcnkuCgpOb3csIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgb24gYGNsZWFyX3pvbmVfY29udGlndW91c2AganVzdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB0aGVyZS4gSSBzaG91bGQgcHJvYmFibHkgaGF2ZSBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBlYXNpbHkgYWNjZXNzaWJsZSBpbiBteSBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbGVhcl96b25lX2NvbnRpZ3VvdXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTIyND1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNDgtXHRtZW1faG90cGx1Z19iZWdpbigpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI0OTpcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNTAtXHRpZiAobnJfdm1lbW1hcF9wYWdlcykge1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMS1cdG1lbV9ob3RwbHVnX2JlZ2luKCk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzAyOlx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMy1cdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTcxOD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE3MjUtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE3MjY6c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTcyNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFuYWx5emluZyBgY2xlYXJfem9uZV9jb250aWd1b3VzYCBDYWxsZXJzIGFuZCBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIHRoZSBjb2RlIGlzIHRlbGxpbmcgbWUgdGhhdCBvbmx5IGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBhcmUgY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIGltcGFjdC4gSXQgbWVhbnMgSSBjYW4gcHJvYmFibHkga2VlcCBteSBhbmFseXNpcyBwcmV0dHkgZm9jdXNlZCwgYXQgbGVhc3QgaW5pdGlhbGx5LiBUaG9zZSB0d28gY2FsbGVycyBhcmUgdGhlIGtleS4KCk5vdywgd2hlcmUgZG9lcyB0aGF0IGxlYWQgbWU/IEFoLCB5ZXMsIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyByZWxhdGVkIHRvIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGFuZCB0aGUgY29udGV4dCB0aG9zZSBjYWxscyBhcmUgYmVpbmcgbWFkZS4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJwbGF5IHRoZXJlLCBtYXliZSBldmVuIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIG9yIHNvbWUgc3VidGxldHkgaW4gaG93IHBhZ2UgY291bnRzIGFyZSBtYW5hZ2VkLCBnaXZlbiB0aGUgJiMzNDtvbmxpbmUmIzM0OyBhbmQgJiMzNDtvZmZsaW5lJiMzNDsgbmFtaW5nLiBDb3VsZCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZGlnIGludG8uIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xMDQ1PXN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLCBpbnQgbmlkLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA2NC0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTA2NTp2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDY2LVx0XHRcdCAgICAgICBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MT1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIwNC1cdG9ubGluZV9wYWdlc19yYW5nZShwZm4sIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIwNTpcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIwNi1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDY9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDY2LVx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCAtbWFuYWdlZF9wYWdlcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIwNjc6XHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIGdyb3VwLCAtbnJfcGFnZXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxMAoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIGFuZCBTb2xpZGlmeWluZyBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBTeW1ib2xzKioKClJpZ2h0LCBzbyBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAgZ2V0cyB1cGRhdGVkIHRvIGFsc28gbWFuYWdlIGB6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXBgLiBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aGF0IHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0aGF0JiMzOTtzIGNydWNpYWwuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBvdmVyIHRoZSBleGlzdGluZyBsaXN0OgoKKiAgIGBtZW1vcnlfYmxvY2tfb25saW5lYAoqICAgYG1lbW9yeV9ibG9ja19vZmZsaW5lYAoqICAgYGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm5gCiogICBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYAoqICAgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYAoqICAgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgCiogICBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2AKKiAgIGBwYWdlX2FsbG9jX2luaXRfbGF0ZWAKKiAgIGBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50YAoKWWVhaCwgdGhpcyBpcyBsb29raW5nIHByZXR0eSBnb29kLiBUaGlzIGNvdmVycyBhIGNvbXByZWhlbnNpdmUgc2V0IG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG9ubGluZSBtZW1vcnksIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50LCBQRk4gbWFuaXB1bGF0aW9uLCBhbmQgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgcmVjZW50IGluY2x1c2lvbiBvZiBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAgbG9va3MgY29ycmVjdC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHdlbGwtcm91bmRlZCBzZXQgb2Ygc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmsuIE5vdyBJIGNhbiBtb3ZlIG9uIHRvIGFjdHVhbGx5IHNldHRpbmcgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtTUEFSU0VNRU1fVk1FTU1BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9ibG9ja19vbmxpbmUmIzM0OywKICAgICYjMzQ7bWVtb3J5X2Jsb2NrX29mZmxpbmUmIzM0OywKICAgICYjMzQ7ZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbiYjMzQ7LAogICAgJiMzNDtmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4mIzM0OywKICAgICYjMzQ7cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUmIzM0OywKICAgICYjMzQ7bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSYjMzQ7LAogICAgJiMzNDt1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3BhZ2VfYWxsb2NfaW5pdF9sYXRlJiMzNDssCiAgICAmIzM0O2FkanVzdF9wcmVzZW50X3BhZ2VfY291bnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGhvdHBsdWcgbG9naWMsIHNwZWNpZmljYWxseSB6b25lIGNvbnRpZ3VpdHkgdHJhY2tpbmcgYW5kIHNlY3Rpb24gUEZOIGZpbmRpbmcuIFRoZXNlIHBhdGhzIGNhbiBiZSByZWFjaGVkIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7U1BBUlNFTUVNX1ZNRU1NQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfYmxvY2tfb25saW5lJiMzNDssCiAgICAmIzM0O21lbW9yeV9ibG9ja19vZmZsaW5lJiMzNDssCiAgICAmIzM0O2ZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4mIzM0OywKICAgICYjMzQ7ZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuJiMzNDssCiAgICAmIzM0O3JlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lJiMzNDssCiAgICAmIzM0O21vdmVfcGZuX3JhbmdlX3RvX3pvbmUmIzM0OywKICAgICYjMzQ7dXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDtwYWdlX2FsbG9jX2luaXRfbGF0ZSYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCBzcGVjaWZpY2FsbHkgem9uZSBjb250aWd1aXR5IHRyYWNraW5nIGFuZCBzZWN0aW9uIFBGTiBmaW5kaW5nLiBUaGVzZSBwYXRocyBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjowNy42ODM4MjEzMjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU2OTMyNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfYmxvY2tfb25saW5lXCIsXG4gICAgXCJtZW1vcnlfYmxvY2tfb2ZmbGluZVwiLFxuICAgIFwiZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmblwiLFxuICAgIFwiZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuXCIsXG4gICAgXCJyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZVwiLFxuICAgIFwibW92ZV9wZm5fcmFuZ2VfdG9fem9uZVwiLFxuICAgIFwidXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc1wiLFxuICAgIFwicGFnZV9hbGxvY19pbml0X2xhdGVcIixcbiAgICBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgc3BlY2lmaWNhbGx5IHpvbmUgY29udGlndWl0eSB0cmFja2luZyBhbmQgc2VjdGlvbiBQRk4gZmluZGluZy4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjowNy42ODM4MzExODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzY4MTA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhMzYzYTEyZjQzOGM2NTUyMDM4YTY1MTdhNGVmMjI0OGM2NGM0NDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTM6MjY6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XFxuaW5kZXggYjc2MTgzNTQ1ZTViZjUuLjBhYTY1ZTZiNTQ5OTU3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxcbkBAIC00ODMsNiArNDgzLDE5IEBAIEdlbmVyYWxcXG4gICBgYHByZXNlbnRfcGFnZXNgYCBzaG91bGQgdXNlIGBgZ2V0X29ubGluZV9tZW1zKClgYCB0byBnZXQgYSBzdGFibGUgdmFsdWUuIEl0XFxuICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC5cXG4gXFxuK2BgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYGBcXG4rICBUcmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcCAocHJlc2VudCBwYWdlc1xcbisgIGFuZCBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCkuIFdoZW5cXG4rICBgYHNwYW5uZWRfcGFnZXNgYCA9PSBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgLCBgYHBmbl90b19wYWdlKClgYCBjYW4gYmVcXG4rICBwZXJmb3JtZWQgd2l0aG91dCBmdXJ0aGVyIGNoZWNrcyBvbiBhbnkgUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLlxcbitcXG4rICBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuIG9ubGluZVxcbisgIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGR1cmluZ1xcbisgIGJvb3QsIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgbWFwIG9mIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnlcXG4rICB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG8gY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2tcXG4rICBtYXkgcmVzdWx0IGluIGEgXFxcInRvbyBzbWFsbFxcXCIgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzXFxuKyAgZGV0ZWN0aW5nIGEgY29udGlndW91cyB6b25lLlxcbitcXG4gYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGBcXG4gICBUaGUgcHJlc2VudCBwYWdlcyBleGlzdGluZyB3aXRoaW4gdGhlIHpvbmUgbG9jYXRlZCBvbiBtZW1vcnkgYXZhaWxhYmxlIHNpbmNlXFxuICAgZWFybHkgYm9vdCwgZXhjbHVkaW5nIGhvdHBsdWdnZWQgbWVtb3J5LiBEZWZpbmVkIG9ubHkgd2hlblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcXG5pbmRleCBiY2ZlMmQ5ZjRhZGJkOS4uMjM3YWNlNDM1MzcyNGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuKysrIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuQEAgLTI0Niw2ICsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbiBcXHRcXHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVxcdTAwM2VhbHRtYXAtXFx1MDAzZWZyZWU7XFxuIFxcbiBcXHRtZW1faG90cGx1Z19iZWdpbigpO1xcbitcXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIFxcdGlmIChucl92bWVtbWFwX3BhZ2VzKSB7XFxuIFxcdFxcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcXG4gXFx0XFx0aWYgKHJldClcXG5AQCAtMjcwLDYgKzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcbiBcXHRtZW0tXFx1MDAzZXpvbmUgPSB6b25lO1xcbiBvdXQ6XFxuK1xcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIFxcdG1lbV9ob3RwbHVnX2RvbmUoKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yODIsNiArMjg0LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc2VjdGlvbl9ucl90b19wZm4obWVtLVxcdTAwM2VzdGFydF9zZWN0aW9uX25yKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3ZtZW1tYXBfcGFnZXMgPSAwO1xcbitcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghbWVtLVxcdTAwM2V6b25lKVxcbkBAIC0yOTQsNyArMjk3LDkgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcdGlmIChtZW0tXFx1MDAzZWFsdG1hcClcXG4gXFx0XFx0bnJfdm1lbW1hcF9wYWdlcyA9IG1lbS1cXHUwMDNlYWx0bWFwLVxcdTAwM2VmcmVlO1xcbiBcXG4rXFx0em9uZSA9IG1lbS1cXHUwMDNlem9uZTtcXG4gXFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcXG4rXFx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbiBcXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcXG4gXFx0XFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXFx1MDAzZWdyb3VwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcXG5AQCAtMzE0LDYgKzMxOSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbiBcXG4gXFx0bWVtLVxcdTAwM2V6b25lID0gTlVMTDtcXG4gb3V0OlxcbitcXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbiBcXHRtZW1faG90cGx1Z19kb25lKCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uYWMxNDY3YWMzMzM2NGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtMTAzMiw2ICsxMDMyLDIwIEBAIHN0cnVjdCB6b25lIHtcXG4gXFx0ICogY21hIHBhZ2VzIGlzIHByZXNlbnQgcGFnZXMgdGhhdCBhcmUgYXNzaWduZWQgZm9yIENNQSB1c2VcXG4gXFx0ICogKE1JR1JBVEVfQ01BKS5cXG4gXFx0ICpcXG4rXFx0ICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwIHRyYWNrcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUgdGhhdCBoYXZlXFxuK1xcdCAqIGFuIG9ubGluZSBtZW1vcnkgbWFwIChwcmVzZW50IHBhZ2VzIGFuZCBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5XFxuK1xcdCAqIG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCkuIFdoZW4gc3Bhbm5lZF9wYWdlcyA9PVxcbitcXHQgKiBwYWdlc193aXRoX29ubGluZV9tZW1tYXAsIHBmbl90b19wYWdlKCkgY2FuIGJlIHBlcmZvcm1lZCB3aXRob3V0XFxuK1xcdCAqIGZ1cnRoZXIgY2hlY2tzIG9uIGFueSBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uXFxuK1xcdCAqXFxuK1xcdCAqIE5vdGU6IHRoaXMgY291bnRlciBtYXkgdGVtcG9yYXJpbHkgdW5kZXJjb3VudCB3aGVuIHBhZ2VzIHdpdGggYW5cXG4rXFx0ICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuXFxuK1xcdCAqIG9ubHkgaGFwcGVuIGR1cmluZyBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZlxcbitcXHQgKiBwYWdlcyB0aGF0IGRvIG5vdCBmYWxsIGludG8gYW55IHpvbmUgc3Bhbi4gR3Jvd2luZyB0aGUgem9uZSB0b1xcbitcXHQgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGFcXG4rXFx0ICogXFxcInRvbyBzbWFsbFxcXCIgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhXFxuK1xcdCAqIGNvbnRpZ3VvdXMgem9uZS5cXG4rXFx0ICpcXG4gXFx0ICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXJcXG4gXFx0ICogbWFuYWdlbWVudCBsb2dpYyB0byBmaWd1cmUgb3V0IHVubWFuYWdlZCBwYWdlcyBieSBjaGVja2luZ1xcbiBcXHQgKiAocHJlc2VudF9wYWdlcyAtIG1hbmFnZWRfcGFnZXMpLiBBbmQgbWFuYWdlZF9wYWdlcyBzaG91bGQgYmUgdXNlZFxcbkBAIC0xMDU2LDYgKzEwNzAsNyBAQCBzdHJ1Y3Qgem9uZSB7XFxuIFxcdGF0b21pY19sb25nX3RcXHRcXHRtYW5hZ2VkX3BhZ2VzO1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0c3Bhbm5lZF9wYWdlcztcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHByZXNlbnRfcGFnZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRwYWdlc193aXRoX29ubGluZV9tZW1tYXA7XFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHByZXNlbnRfZWFybHlfcGFnZXM7XFxuICNlbmRpZlxcbkBAIC0xNjgxLDYgKzE2OTYsMzggQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisvKipcXG4rICogem9uZV9pc19jb250aWd1b3VzIC0gdGVzdCB3aGV0aGVyIGEgem9uZSBpcyBjb250aWd1b3VzXFxuKyAqIEB6b25lOiB0aGUgem9uZSB0byB0ZXN0LlxcbisgKlxcbisgKiBJbiBhIGNvbnRpZ3VvdXMgem9uZSwgaXQgaXMgdmFsaWQgdG8gY2FsbCBwZm5fdG9fcGFnZSgpIG9uIGFueSBQRk4gaW4gdGhlXFxuKyAqIHNwYW5uZWQgem9uZSB3aXRob3V0IHJlcXVpcmluZyBwZm5fdmFsaWQoKSBvciBwZm5fdG9fb25saW5lX3BhZ2UoKSBjaGVja3MuXFxuKyAqXFxuKyAqIE5vdGUgdGhhdCBtaXNzaW5nIHN5bmNocm9uaXphdGlvbiB3aXRoIG1lbW9yeSBvZmZsaW5pbmcgbWFrZXMgYW55IFBGTlxcbisgKiB0cmF2ZXJzYWwgcHJvbmUgdG8gcmFjZXMuXFxuKyAqXFxuKyAqIFpPTkVfREVWSUNFIHpvbmVzIGFyZSBhbHdheXMgbWFya2VkIG5vbi1jb250aWd1b3VzLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgY29udGlndW91cywgb3RoZXJ3aXNlIGZhbHNlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfY29udGlndW91cyhjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4re1xcbitcXHRyZXR1cm4gem9uZS1cXHUwMDNlY29udGlndW91cztcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuK3tcXG4rXFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKHpvbmUtXFx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwKVxcbitcXHRcXHR6b25lLVxcdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4re1xcbitcXHR6b25lLVxcdTAwM2Vjb250aWd1b3VzID0gZmFsc2U7XFxuK31cXG4rXFxuIC8qXFxuICAqIFJldHVybnMgdHJ1ZSBpZiBhIHpvbmUgaGFzIHBhZ2VzIG1hbmFnZWQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvci5cXG4gICogQWxsIHRoZSByZWNsYWltIGRlY2lzaW9ucyBoYXZlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLmY5MzJiNzU3N2M5MmFjIDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTgwNSwyMSArODA1LDE1IEBAIGV4dGVybiBzdHJ1Y3QgcGFnZSAqX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4ge1xcbi1cXHRpZiAoem9uZS1cXHUwMDNlY29udGlndW91cylcXG4rXFx0aWYgKHpvbmVfaXNfY29udGlndW91cyh6b25lKSlcXG4gXFx0XFx0cmV0dXJuIHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7XFxuIFxcbiBcXHRyZXR1cm4gX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLCB6b25lKTtcXG4gfVxcbiBcXG4tdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKTtcXG4gYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxcbi17XFxuLVxcdHpvbmUtXFx1MDAzZWNvbnRpZ3VvdXMgPSBmYWxzZTtcXG4tfVxcbi1cXG4gZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbiBleHRlcm4gdm9pZCBfX3B1dGJhY2tfaXNvbGF0ZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHQgICAgaW50IG10KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5pbmRleCA3YWMxOWZhYjIyNjMyNC4uM2EyODFkNTk1MjA3MTAgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5AQCAtNDI3LDE3ICs0MjcsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXFxuIHtcXG4tXFx0Zm9yICg7IHN0YXJ0X3BmbiBcXHUwMDNjIGVuZF9wZm47IHN0YXJ0X3BmbiArPSBQQUdFU19QRVJfU1VCU0VDVElPTikge1xcbi1cXHRcXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV4dF9wZm47XFxuIFxcbi1cXHRcXHRpZiAodW5saWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pICE9IG5pZCkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRmb3IgKDsgc3RhcnRfcGZuIFxcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuID0gbmV4dF9wZm4pIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyB0YWlsX3BmbjtcXG4rXFxuK1xcdFxcdG5leHRfcGZuID0gc3RhcnRfcGZuICsgUEFHRVNfUEVSX1NVQlNFQ1RJT047XFxuK1xcdFxcdHRhaWxfcGZuID0gbmV4dF9wZm4gLSAxO1xcbiBcXG4tXFx0XFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpKVxcbitcXHRcXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRyZXR1cm4gc3RhcnRfcGZuO1xcbitcXHRcXHRpZiAobGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSA9PSBuaWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXJ0X3BmbjtcXG4rXFxuK1xcdFxcdGlmIChsaWtlbHkocGZuX3RvX25pZCh0YWlsX3BmbikgPT0gbmlkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UodGFpbF9wZm4pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXJ0X3BmbjtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ0OCwyMSArNDU1LDI2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbiwgcHJldl9wZm47XFxuIFxcbiBcXHQvKiBwZm4gaXMgdGhlIGVuZCBwZm4gb2YgYSBtZW1vcnkgc2VjdGlvbi4gKi9cXG4gXFx0cGZuID0gZW5kX3BmbiAtIDE7XFxuLVxcdGZvciAoOyBwZm4gXFx1MDAzZT0gc3RhcnRfcGZuOyBwZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRmb3IgKDsgcGZuIFxcdTAwM2U9IHN0YXJ0X3BmbjsgcGZuID0gcHJldl9wZm4pIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBoZWFkX3BmbjtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHByZXZfcGZuID0gcGZuIC0gUEFHRVNfUEVSX1NVQlNFQ1RJT047XFxuK1xcdFxcdGhlYWRfcGZuID0gcHJldl9wZm4gKyAxO1xcbiBcXG4tXFx0XFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpKVxcbitcXHRcXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRyZXR1cm4gcGZuO1xcbitcXHRcXHRpZiAobGlrZWx5KHBmbl90b19uaWQocGZuKSA9PSBuaWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHBmbjtcXG4rXFxuK1xcdFxcdGlmIChsaWtlbHkocGZuX3RvX25pZChoZWFkX3BmbikgPT0gbmlkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UoaGVhZF9wZm4pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHBmbjtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTU1NywxOCArNTY5LDEzIEBAIHZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBab25lIHNocmlua2luZyBjb2RlIGNhbm5vdCBwcm9wZXJseSBkZWFsIHdpdGggWk9ORV9ERVZJQ0UuIFNvXFxuLVxcdCAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgdGhlIHpvbmVzIC0gd2hpY2ggaXMgb2theSBhc1xcbi1cXHQgKiBzZXRfem9uZV9jb250aWd1b3VzKCkgY2Fubm90IGRlYWwgd2l0aCBaT05FX0RFVklDRSBlaXRoZXIgd2F5LlxcbitcXHQgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIGl0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcXG4tXFxuIFxcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gKyBucl9wYWdlcyk7XFxuIFxcdHVwZGF0ZV9wZ2RhdF9zcGFuKHBnZGF0KTtcXG4tXFxuLVxcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC03NDYsOCArNzUzLDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxuIFxcdGludCBuaWQgPSBwZ2RhdC1cXHUwMDNlbm9kZV9pZDtcXG4gXFxuLVxcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcXG4tXFxuIFxcdGlmICh6b25lX2lzX2VtcHR5KHpvbmUpKVxcbiBcXHRcXHRpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xcbiBcXHRyZXNpemVfem9uZV9yYW5nZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcXG5AQCAtNzc1LDggKzc4MCw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIFxcdG1lbW1hcF9pbml0X3JhbmdlKG5yX3BhZ2VzLCBuaWQsIHpvbmVfaWR4KHpvbmUpLCBzdGFydF9wZm4sIDAsXFxuIFxcdFxcdFxcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXFxuIFxcdFxcdFxcdCBpc29sYXRlX3BhZ2VibG9jayk7XFxuLVxcbi1cXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgYXV0b19tb3ZhYmxlX3N0YXRzIHtcXG5AQCAtMTA3Miw2ICsxMDc1LDcgQEAgdm9pZCBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcXG4gXFx0aWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKVxcbiBcXHRcXHR6b25lLVxcdTAwM2VwcmVzZW50X2Vhcmx5X3BhZ2VzICs9IG5yX3BhZ2VzO1xcbiBcXHR6b25lLVxcdTAwM2VwcmVzZW50X3BhZ2VzICs9IG5yX3BhZ2VzO1xcbitcXHR6b25lLVxcdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXAgKz0gbnJfcGFnZXM7XFxuIFxcdHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQtXFx1MDAzZW5vZGVfcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcXG4gXFxuIFxcdGlmIChncm91cCBcXHUwMDI2XFx1MDAyNiBtb3ZhYmxlKVxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCBmMWFmZTAyM2U0ZTcyMS4uNzNkMWZkZTE3MDQwNTAgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTkxNiw2ICs5MTYsNDAgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqaG9sZV9wZm4pXFxuK3tcXG4rI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUFxcbitcXHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuID0gem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm47XFxuK1xcdHVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuID0gem9uZV9zdGFydF9wZm4gKyB6b25lLVxcdTAwM2VzcGFubmVkX3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nIHN1Yl9zdGFydCwgc3ViX2VuZDtcXG4rXFxuK1xcdHN1Yl9zdGFydCA9IG1heChBTElHTl9ET1dOKHN0YXJ0X3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxcbitcXHRcXHRcXHR6b25lX3N0YXJ0X3Bmbik7XFxuK1xcdHN1Yl9lbmQgPSBtaW4oQUxJR04oZW5kX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLCB6b25lX2VuZF9wZm4pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yIGFuIGluLXpvbmUgaG9sZSBzbWFsbGVyIHRoYW4gYSBzdWJzZWN0aW9uLCB0aGUgYWRqYWNlbnRcXG4rXFx0ICogbWVtYmxvY2sgcmFuZ2VzIHNoYXJlIGEgc3Vic2VjdGlvbi4gQXZvaWQgY291bnRpbmcgdGhlIHNhbWVcXG4rXFx0ICogc3Vic2VjdGlvbidzIHBhZ2VzIHR3aWNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCpob2xlX3BmbiBcXHUwMDNlIHpvbmVfc3RhcnRfcGZuKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcHJldl9zdWJfZW5kO1xcbitcXG4rXFx0XFx0cHJldl9zdWJfZW5kID0gbWluKEFMSUdOKCpob2xlX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxcbitcXHRcXHRcXHRcXHQgICB6b25lX2VuZF9wZm4pO1xcbitcXHRcXHRzdWJfc3RhcnQgPSBtYXgoc3ViX3N0YXJ0LCBwcmV2X3N1Yl9lbmQpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3ViX3N0YXJ0IFxcdTAwM2Mgc3ViX2VuZClcXG4rXFx0XFx0em9uZS1cXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IHN1Yl9lbmQgLSBzdWJfc3RhcnQ7XFxuKyNlbHNlXFxuK1xcdHpvbmUtXFx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbkBAIC05MzIsNiArOTY2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdGlmIChzdGFydF9wZm4gXFx1MDAzZT0gZW5kX3BmbilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0dXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIGVuZF9wZm4sIGhvbGVfcGZuKTtcXG4rXFxuIFxcdG1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHQgIHpvbmVfZW5kX3BmbiwgTUVNSU5JVF9FQVJMWSwgTlVMTCwgbXQsIGZhbHNlKTtcXG4gXFxuQEAgLTIxOTUsMjggKzIyMzEsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBibG9ja19zdGFydF9wZm4gPSB6b25lLVxcdTAwM2V6b25lX3N0YXJ0X3BmbjtcXG4tXFx0dW5zaWduZWQgbG9uZyBibG9ja19lbmRfcGZuO1xcbi1cXG4tXFx0YmxvY2tfZW5kX3BmbiA9IHBhZ2VibG9ja19lbmRfcGZuKGJsb2NrX3N0YXJ0X3Bmbik7XFxuLVxcdGZvciAoOyBibG9ja19zdGFydF9wZm4gXFx1MDAzYyB6b25lX2VuZF9wZm4oem9uZSk7XFxuLVxcdFxcdFxcdGJsb2NrX3N0YXJ0X3BmbiA9IGJsb2NrX2VuZF9wZm4sXFxuLVxcdFxcdFxcdCBibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xcbi1cXG4tXFx0XFx0YmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCB6b25lX2VuZF9wZm4oem9uZSkpO1xcbi1cXG4tXFx0XFx0aWYgKCFfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShibG9ja19zdGFydF9wZm4sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgYmxvY2tfZW5kX3Bmbiwgem9uZSkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIFdlIGNvbmZpcm0gdGhhdCB0aGVyZSBpcyBubyBob2xlICovXFxuLVxcdHpvbmUtXFx1MDAzZWNvbnRpZ3VvdXMgPSB0cnVlO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlXFxuICAqIE5VTUEgbm9kZXMuIFNwZWNpZnkgdGhlIEBuaWQgYXJndW1lbnQgaWYgaXQgaXMga25vd24gdGhhdCB0aGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjA4LjMyOTc5MDg2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU5OTIzMzQxMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9ibG9ja19vbmxpbmVcIixcbiAgICBcIm1lbW9yeV9ibG9ja19vZmZsaW5lXCIsXG4gICAgXCJmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuXCIsXG4gICAgXCJmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5cIixcbiAgICBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gICAgXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gICAgXCJ1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzXCIsXG4gICAgXCJwYWdlX2FsbG9jX2luaXRfbGF0ZVwiLFxuICAgIFwiYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCBzcGVjaWZpY2FsbHkgem9uZSBjb250aWd1aXR5IHRyYWNraW5nIGFuZCBzZWN0aW9uIFBGTiBmaW5kaW5nLiBUaGVzZSBwYXRocyBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2EzNjNhMTJmNDM4YzY1NTIwMzhhNjUxN2E0ZWYyMjQ4YzY0YzQ0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDEzOjI2OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG5pbmRleCBiNzYxODM1NDVlNWJmNS4uMGFhNjVlNmI1NDk5NTcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxuQEAgLTQ4Myw2ICs0ODMsMTkgQEAgR2VuZXJhbFxuICAgYGBwcmVzZW50X3BhZ2VzYGAgc2hvdWxkIHVzZSBgYGdldF9vbmxpbmVfbWVtcygpYGAgdG8gZ2V0IGEgc3RhYmxlIHZhbHVlLiBJdFxuICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC5cbiBcbitgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgXG4rICBUcmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcCAocHJlc2VudCBwYWdlc1xuKyAgYW5kIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkKS4gV2hlblxuKyAgYGBzcGFubmVkX3BhZ2VzYGAgPT0gYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYCwgYGBwZm5fdG9fcGFnZSgpYGAgY2FuIGJlXG4rICBwZXJmb3JtZWQgd2l0aG91dCBmdXJ0aGVyIGNoZWNrcyBvbiBhbnkgUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLlxuK1xuKyAgTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhbiBvbmxpbmVcbisgIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGR1cmluZ1xuKyAgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2YgcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueVxuKyAgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvIGNvdmVyIHN1Y2ggcGFnZXMgYW5kIGxhdGVyIHNocmlua2luZyBpdCBiYWNrXG4rICBtYXkgcmVzdWx0IGluIGEgXCJ0b28gc21hbGxcIiB2YWx1ZS4gVGhpcyBpcyBzYWZlOiBpdCBtZXJlbHkgcHJldmVudHNcbisgIGRldGVjdGluZyBhIGNvbnRpZ3VvdXMgem9uZS5cbitcbiBgYHByZXNlbnRfZWFybHlfcGFnZXNgYFxuICAgVGhlIHByZXNlbnQgcGFnZXMgZXhpc3Rpbmcgd2l0aGluIHRoZSB6b25lIGxvY2F0ZWQgb24gbWVtb3J5IGF2YWlsYWJsZSBzaW5jZVxuICAgZWFybHkgYm9vdCwgZXhjbHVkaW5nIGhvdHBsdWdnZWQgbWVtb3J5LiBEZWZpbmVkIG9ubHkgd2hlblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuaW5kZXggYmNmZTJkOWY0YWRiZDkuLjIzN2FjZTQzNTM3MjRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbkBAIC0yNDYsNiArMjQ2LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcdFx0bnJfdm1lbW1hcF9wYWdlcyA9IG1lbS1cdTAwM2VhbHRtYXAtXHUwMDNlZnJlZTtcbiBcbiBcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XG4rXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcykge1xuIFx0XHRyZXQgPSBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcywgem9uZSk7XG4gXHRcdGlmIChyZXQpXG5AQCAtMjcwLDYgKzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXG4gXHRtZW0tXHUwMDNlem9uZSA9IHpvbmU7XG4gb3V0OlxuK1x0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdG1lbV9ob3RwbHVnX2RvbmUoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI4Miw2ICsyODQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc2VjdGlvbl9ucl90b19wZm4obWVtLVx1MDAzZXN0YXJ0X3NlY3Rpb25fbnIpO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrO1xuIFx0dW5zaWduZWQgbG9uZyBucl92bWVtbWFwX3BhZ2VzID0gMDtcbitcdHN0cnVjdCB6b25lICp6b25lO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghbWVtLVx1MDAzZXpvbmUpXG5AQCAtMjk0LDcgKzI5Nyw5IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0aWYgKG1lbS1cdTAwM2VhbHRtYXApXG4gXHRcdG5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tXHUwMDNlYWx0bWFwLVx1MDAzZWZyZWU7XG4gXG4rXHR6b25lID0gbWVtLVx1MDAzZXpvbmU7XG4gXHRtZW1faG90cGx1Z19iZWdpbigpO1xuK1x0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXG4gXHRcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgbWVtLVx1MDAzZWdyb3VwLFxuIFx0XHRcdFx0XHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcbkBAIC0zMTQsNiArMzE5LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXG4gXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuK1x0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdG1lbV9ob3RwbHVnX2RvbmUoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uYWMxNDY3YWMzMzM2NGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTAzMiw2ICsxMDMyLDIwIEBAIHN0cnVjdCB6b25lIHtcbiBcdCAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlXG4gXHQgKiAoTUlHUkFURV9DTUEpLlxuIFx0ICpcbitcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxuK1x0ICogYW4gb25saW5lIG1lbW9yeSBtYXAgKHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnlcbitcdCAqIG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCkuIFdoZW4gc3Bhbm5lZF9wYWdlcyA9PVxuK1x0ICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLCBwZm5fdG9fcGFnZSgpIGNhbiBiZSBwZXJmb3JtZWQgd2l0aG91dFxuK1x0ICogZnVydGhlciBjaGVja3Mgb24gYW55IFBGTiB3aXRoaW4gdGhlIHpvbmUgc3Bhbi5cbitcdCAqXG4rXHQgKiBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuXG4rXHQgKiBvbmxpbmUgbWVtb3J5IG1hcCBleGlzdCBvdXRzaWRlIHRoZSBjdXJyZW50IHpvbmUgc3Bhbi4gVGhpcyBjYW5cbitcdCAqIG9ubHkgaGFwcGVuIGR1cmluZyBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZlxuK1x0ICogcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueSB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG9cbitcdCAqIGNvdmVyIHN1Y2ggcGFnZXMgYW5kIGxhdGVyIHNocmlua2luZyBpdCBiYWNrIG1heSByZXN1bHQgaW4gYVxuK1x0ICogXCJ0b28gc21hbGxcIiB2YWx1ZS4gVGhpcyBpcyBzYWZlOiBpdCBtZXJlbHkgcHJldmVudHMgZGV0ZWN0aW5nIGFcbitcdCAqIGNvbnRpZ3VvdXMgem9uZS5cbitcdCAqXG4gXHQgKiBTbyBwcmVzZW50X3BhZ2VzIG1heSBiZSB1c2VkIGJ5IG1lbW9yeSBob3RwbHVnIG9yIG1lbW9yeSBwb3dlclxuIFx0ICogbWFuYWdlbWVudCBsb2dpYyB0byBmaWd1cmUgb3V0IHVubWFuYWdlZCBwYWdlcyBieSBjaGVja2luZ1xuIFx0ICogKHByZXNlbnRfcGFnZXMgLSBtYW5hZ2VkX3BhZ2VzKS4gQW5kIG1hbmFnZWRfcGFnZXMgc2hvdWxkIGJlIHVzZWRcbkBAIC0xMDU2LDYgKzEwNzAsNyBAQCBzdHJ1Y3Qgem9uZSB7XG4gXHRhdG9taWNfbG9uZ190XHRcdG1hbmFnZWRfcGFnZXM7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHNwYW5uZWRfcGFnZXM7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHByZXNlbnRfcGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nXHRcdHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcDtcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXG4gXHR1bnNpZ25lZCBsb25nXHRcdHByZXNlbnRfZWFybHlfcGFnZXM7XG4gI2VuZGlmXG5AQCAtMTY4MSw2ICsxNjk2LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuIH1cbiAjZW5kaWZcbiBcbisvKipcbisgKiB6b25lX2lzX2NvbnRpZ3VvdXMgLSB0ZXN0IHdoZXRoZXIgYSB6b25lIGlzIGNvbnRpZ3VvdXNcbisgKiBAem9uZTogdGhlIHpvbmUgdG8gdGVzdC5cbisgKlxuKyAqIEluIGEgY29udGlndW91cyB6b25lLCBpdCBpcyB2YWxpZCB0byBjYWxsIHBmbl90b19wYWdlKCkgb24gYW55IFBGTiBpbiB0aGVcbisgKiBzcGFubmVkIHpvbmUgd2l0aG91dCByZXF1aXJpbmcgcGZuX3ZhbGlkKCkgb3IgcGZuX3RvX29ubGluZV9wYWdlKCkgY2hlY2tzLlxuKyAqXG4rICogTm90ZSB0aGF0IG1pc3Npbmcgc3luY2hyb25pemF0aW9uIHdpdGggbWVtb3J5IG9mZmxpbmluZyBtYWtlcyBhbnkgUEZOXG4rICogdHJhdmVyc2FsIHByb25lIHRvIHJhY2VzLlxuKyAqXG4rICogWk9ORV9ERVZJQ0Ugem9uZXMgYXJlIGFsd2F5cyBtYXJrZWQgbm9uLWNvbnRpZ3VvdXMuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgY29udGlndW91cywgb3RoZXJ3aXNlIGZhbHNlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0cmV0dXJuIHpvbmUtXHUwMDNlY29udGlndW91cztcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4rXHRcdHJldHVybjtcbitcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4rXHRcdHpvbmUtXHUwMDNlY29udGlndW91cyA9IHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogUmV0dXJucyB0cnVlIGlmIGEgem9uZSBoYXMgcGFnZXMgbWFuYWdlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yLlxuICAqIEFsbCB0aGUgcmVjbGFpbSBkZWNpc2lvbnMgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uZjkzMmI3NTc3YzkyYWMgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtODA1LDIxICs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbi1cdGlmICh6b25lLVx1MDAzZWNvbnRpZ3VvdXMpXG4rXHRpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKVxuIFx0XHRyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTtcbiBcbiBcdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xuIH1cbiBcbi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuIGJvb2wgcGZuX3JhbmdlX2ludGVyc2VjdHNfem9uZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR6b25lLVx1MDAzZWNvbnRpZ3VvdXMgPSBmYWxzZTtcbi19XG4tXG4gZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0XHQgICAgaW50IG10KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjNhMjgxZDU5NTIwNzEwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTQyNywxNyArNDI3LDI0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4ge1xuLVx0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0dW5zaWduZWQgbG9uZyBuZXh0X3BmbjtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSAhPSBuaWQpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuID0gbmV4dF9wZm4pIHtcbitcdFx0dW5zaWduZWQgbG9uZyB0YWlsX3BmbjtcbitcbitcdFx0bmV4dF9wZm4gPSBzdGFydF9wZm4gKyBQQUdFU19QRVJfU1VCU0VDVElPTjtcbitcdFx0dGFpbF9wZm4gPSBuZXh0X3BmbiAtIDE7XG4gXG4tXHRcdGlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSlcbitcdFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHJldHVybiBzdGFydF9wZm47XG4rXHRcdGlmIChsaWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSlcbitcdFx0XHRyZXR1cm4gc3RhcnRfcGZuO1xuK1xuK1x0XHRpZiAobGlrZWx5KHBmbl90b19uaWQodGFpbF9wZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZSh0YWlsX3BmbikpKVxuK1x0XHRcdHJldHVybiBzdGFydF9wZm47XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC00NDgsMjEgKzQ1NSwyNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcGZuO1xuK1x0dW5zaWduZWQgbG9uZyBwZm4sIHByZXZfcGZuO1xuIFxuIFx0LyogcGZuIGlzIHRoZSBlbmQgcGZuIG9mIGEgbWVtb3J5IHNlY3Rpb24uICovXG4gXHRwZm4gPSBlbmRfcGZuIC0gMTtcbi1cdGZvciAoOyBwZm4gXHUwMDNlPSBzdGFydF9wZm47IHBmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikge1xuLVx0XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdGZvciAoOyBwZm4gXHUwMDNlPSBzdGFydF9wZm47IHBmbiA9IHByZXZfcGZuKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm47XG4gXG4tXHRcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0cHJldl9wZm4gPSBwZm4gLSBQQUdFU19QRVJfU1VCU0VDVElPTjtcbitcdFx0aGVhZF9wZm4gPSBwcmV2X3BmbiArIDE7XG4gXG4tXHRcdGlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSlcbitcdFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHJldHVybiBwZm47XG4rXHRcdGlmIChsaWtlbHkocGZuX3RvX25pZChwZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSlcbitcdFx0XHRyZXR1cm4gcGZuO1xuK1xuK1x0XHRpZiAobGlrZWx5KHBmbl90b19uaWQoaGVhZF9wZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShoZWFkX3BmbikpKVxuK1x0XHRcdHJldHVybiBwZm47XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTcsMTggKzU2OSwxMyBAQCB2b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxuIFxuIFx0LypcbiBcdCAqIFpvbmUgc2hyaW5raW5nIGNvZGUgY2Fubm90IHByb3Blcmx5IGRlYWwgd2l0aCBaT05FX0RFVklDRS4gU29cbi1cdCAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgdGhlIHpvbmVzIC0gd2hpY2ggaXMgb2theSBhc1xuLVx0ICogc2V0X3pvbmVfY29udGlndW91cygpIGNhbm5vdCBkZWFsIHdpdGggWk9ORV9ERVZJQ0UgZWl0aGVyIHdheS5cbitcdCAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgaXQuXG4gXHQgKi9cbiBcdGlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4tXG4gXHRzaHJpbmtfem9uZV9zcGFuKHpvbmUsIHN0YXJ0X3Bmbiwgc3RhcnRfcGZuICsgbnJfcGFnZXMpO1xuIFx0dXBkYXRlX3BnZGF0X3NwYW4ocGdkYXQpO1xuLVxuLVx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiB9XG4gXG4gLyoqXG5AQCAtNzQ2LDggKzc1Myw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuIFx0aW50IG5pZCA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4gXG4tXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4tXG4gXHRpZiAoem9uZV9pc19lbXB0eSh6b25lKSlcbiBcdFx0aW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcbiBcdHJlc2l6ZV96b25lX3JhbmdlKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xuQEAgLTc3NSw4ICs3ODAsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0bWVtbWFwX2luaXRfcmFuZ2UobnJfcGFnZXMsIG5pZCwgem9uZV9pZHgoem9uZSksIHN0YXJ0X3BmbiwgMCxcbiBcdFx0XHQgTUVNSU5JVF9IT1RQTFVHLCBhbHRtYXAsIG1pZ3JhdGV0eXBlLFxuIFx0XHRcdCBpc29sYXRlX3BhZ2VibG9jayk7XG4tXG4tXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIH1cbiBcbiBzdHJ1Y3QgYXV0b19tb3ZhYmxlX3N0YXRzIHtcbkBAIC0xMDcyLDYgKzEwNzUsNyBAQCB2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxuIFx0aWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKVxuIFx0XHR6b25lLVx1MDAzZXByZXNlbnRfZWFybHlfcGFnZXMgKz0gbnJfcGFnZXM7XG4gXHR6b25lLVx1MDAzZXByZXNlbnRfcGFnZXMgKz0gbnJfcGFnZXM7XG4rXHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBucl9wYWdlcztcbiBcdHpvbmUtXHUwMDNlem9uZV9wZ2RhdC1cdTAwM2Vub2RlX3ByZXNlbnRfcGFnZXMgKz0gbnJfcGFnZXM7XG4gXG4gXHRpZiAoZ3JvdXAgXHUwMDI2XHUwMDI2IG1vdmFibGUpXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCBmMWFmZTAyM2U0ZTcyMS4uNzNkMWZkZTE3MDQwNTAgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTkxNiw2ICs5MTYsNDAgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgX19pbml0IHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4rXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuK1x0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmhvbGVfcGZuKVxuK3tcbisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG4rXHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuID0gem9uZS1cdTAwM2V6b25lX3N0YXJ0X3BmbjtcbitcdHVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuID0gem9uZV9zdGFydF9wZm4gKyB6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIHN1Yl9zdGFydCwgc3ViX2VuZDtcbitcbitcdHN1Yl9zdGFydCA9IG1heChBTElHTl9ET1dOKHN0YXJ0X3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxuK1x0XHRcdHpvbmVfc3RhcnRfcGZuKTtcbitcdHN1Yl9lbmQgPSBtaW4oQUxJR04oZW5kX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLCB6b25lX2VuZF9wZm4pO1xuK1xuK1x0LypcbitcdCAqIEZvciBhbiBpbi16b25lIGhvbGUgc21hbGxlciB0aGFuIGEgc3Vic2VjdGlvbiwgdGhlIGFkamFjZW50XG4rXHQgKiBtZW1ibG9jayByYW5nZXMgc2hhcmUgYSBzdWJzZWN0aW9uLiBBdm9pZCBjb3VudGluZyB0aGUgc2FtZVxuK1x0ICogc3Vic2VjdGlvbidzIHBhZ2VzIHR3aWNlLlxuK1x0ICovXG4rXHRpZiAoKmhvbGVfcGZuIFx1MDAzZSB6b25lX3N0YXJ0X3Bmbikge1xuK1x0XHR1bnNpZ25lZCBsb25nIHByZXZfc3ViX2VuZDtcbitcbitcdFx0cHJldl9zdWJfZW5kID0gbWluKEFMSUdOKCpob2xlX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxuK1x0XHRcdFx0ICAgem9uZV9lbmRfcGZuKTtcbitcdFx0c3ViX3N0YXJ0ID0gbWF4KHN1Yl9zdGFydCwgcHJldl9zdWJfZW5kKTtcbitcdH1cbitcbitcdGlmIChzdWJfc3RhcnQgXHUwMDNjIHN1Yl9lbmQpXG4rXHRcdHpvbmUtXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IHN1Yl9lbmQgLSBzdWJfc3RhcnQ7XG4rI2Vsc2VcbitcdHpvbmUtXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcbkBAIC05MzIsNiArOTY2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRpZiAoc3RhcnRfcGZuIFx1MDAzZT0gZW5kX3BmbilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0dXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIGVuZF9wZm4sIGhvbGVfcGZuKTtcbitcbiBcdG1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLFxuIFx0XHRcdCAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpO1xuIFxuQEAgLTIxOTUsMjggKzIyMzEsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xuLVxuLVx0XHRibG9ja19lbmRfcGZuID0gbWluKGJsb2NrX2VuZF9wZm4sIHpvbmVfZW5kX3Bmbih6b25lKSk7XG4tXG4tXHRcdGlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLFxuLVx0XHRcdFx0XHQgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4tXG4tXHQvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqL1xuLVx0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlXG4gICogTlVNQSBub2Rlcy4gU3BlY2lmeSB0aGUgQG5pZCBhcmd1bWVudCBpZiBpdCBpcyBrbm93biB0aGF0IHRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjA4LjMyOTc5MzQxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjY2Njk2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBIb3RwbHVnIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBjcnVjaWFsIHN0dWZmIOKAkyBtZW1vcnkgaG90cGx1ZyBhbmQgaG93IHRoZSBrZXJuZWwgdHJhY2tzIHpvbmUgY29udGlndWl0eS4gSW50ZXJlc3RpbmcuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3VudGVyLCBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCwgd2l0aGluIHRoZSBgc3RydWN0IHpvbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBCYXNpY2FsbHkgaXQgaXMgZ29pbmcgdG8gcmVwbGFjZSB0aGUgY3VycmVudCB3YXkgb2YgdmVyaWZ5aW5nIGNvbnRpZ3VvdXMgbWVtb3J5IGJ5IGNvbXBhcmluZyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIHNwYW5uZWQgYnkgdGhlIHpvbmUgYWdhaW5zdCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdpdGggb25saW5lIG1lbW9yeSBtYXBzLlxuXG5SaWdodCwgc28gdGhleSd2ZSBjaGFuZ2VkIGhvdyBgc2V0X3pvbmVfY29udGlndW91c2Agb3BlcmF0ZXMuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0LCBhbmQgSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGZhc3Rlciwgc2xvd2VyLCBhbmQgdGhlIGltcGxpY2F0aW9ucy4gSW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlYmxvY2tzIHRvIGxvb2sgZm9yIGhvbGVzLCBpdCdzIGp1c3QgYSBzaW1wbGUgY29tcGFyaXNvbiBub3cuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guXG5cbk9rYXksIGFuZCBpdCBsb29rcyBsaWtlIHRoZXnigJl2ZSBvcHRpbWl6ZWQgYGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm5gIGFuZCBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYCBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgYXMgd2VsbC4gU2VlbXMgbGlrZSBpdCBoYXMgc29tZSBuaWNlIG9wdGltaXphdGlvbnMgaW4gdGhlcmUuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGU/IElzIGl0IGZ1bmN0aW9uYWw/IEkgbWVhbiwgaXQncyBwb2tpbmcgYXQgdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhvdHBsdWcsIHNvIEknZCBzYXkgeWVhaCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTWVtb3J5IGhvdHBsdWcgaXNuJ3Qgc29tZSBvYnNjdXJlIGZlYXR1cmU7IHlvdSBjYW4gdHJpZ2dlciBpdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHJpZ2h0PyBTeXNmcyBvciBBQ1BJLCB0aGF04oCZcyBnb2luZyB0byB0cmlwIGFsbCB0aGlzLiBBbmQgdGhlIGNoYW5nZXMgdG8gdGhvc2UgYGZpbmRfLi4uYCBmdW5jdGlvbnM/IFRvdGFsbHkgZnVuY3Rpb25hbCBkdXJpbmcgaG90cGx1Zy4gQW5kIGBzZXRfem9uZV9jb250aWd1b3VzYCB0b28uXG5cbk5vdywgd2hhdCBhYm91dCBmdXp6aW5nIHRoaXM/IFdvcnRoIHRoZSBlZmZvcnQ/IEFic29sdXRlbHkuIEFueSBjaGFuZ2UgaW4gdGhpcyBhcmVhIGNhbiBoYXZlIG5hc3R5IGNvbnNlcXVlbmNlcyBpZiB0aGVyZSBhcmUgaG9sZXMsIHNvIGxldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGRvIGluIHRoYXQgcmVnYXJkLlxuXG5MZXQncyBsb29rIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBPYnZpb3VzIGNhbmRpZGF0ZSBpcyBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgcmlnaHQ/IFRpbWUgdG8gY2hlY2sgYG1tL21lbW9yeV9ob3RwbHVnLmNgIGFuZCBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDMyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6MTYuMTk2NDY2NDQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODc2MTE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNT1JZX0hPVFBMVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTYyPXBhZ2UtYWxsb2MtJChDT05GSUdfU0hVRkZMRV9QQUdFX0FMTE9DQVRPUikgKz0gc2h1ZmZsZS5vXFxuLS1cXG5tbS9NYWtlZmlsZS02NC0jIEdpdmUgJ21lbW9yeV9ob3RwbHVnJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxubW0vTWFrZWZpbGU6NjU6bWVtb3J5LWhvdHBsdWctJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICs9IG1lbW9yeV9ob3RwbHVnLm9cXG5tbS9NYWtlZmlsZS02Ni1cXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTk5PXN0YXRpYyBpbnQgdm1lbW1hcF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMTI1LVxcdCAqL1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjEyNjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFBMVUcpIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCF2bWVtbWFwX3dhbGstXFx1MDAzZW5yX3dhbGtlZCkpIHtcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMjctXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBoZWFkID8gaGVhZCArIHB0ZV9pbmRleChhZGRyKSA6XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0xNjM9dm9pZCBrYXNhbl91bnBvaXNvbihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgYm9vbCBpbml0KVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMTg0LVxcbm1tL2thc2FuL3NoYWRvdy5jOjE4NTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXFxubW0va2FzYW4vc2hhZG93LmMtMTg2LXN0YXRpYyBib29sIHNoYWRvd19tYXBwZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz02NDk9RVhQT1JUX1NZTUJPTF9HUEwocmVzdG9yZV9vbmxpbmVfcGFnZV9jYWxsYmFjayk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy02NTAtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo2NTE6Lyogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjUyLXZvaWQgZ2VuZXJpY19vbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTQxPWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyNTUtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjU2Oi8qIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyNTctc3RhdGljIHBnX2RhdGFfdCAqaG90YWRkX2luaXRfcGdkYXQoaW50IG5pZClcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTQ0ND1zdGF0aWMgaW50IGNyZWF0ZV9hbHRtYXBzX2FuZF9tZW1vcnlfYmxvY2tzKGludCBuaWQsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDk1LSAqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDk2OiAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0OTctICovXFxuLS1cXG5tbS9tbV9pbml0LmM9MTI3Nz1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfbWVtb3J5bGVzc19ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL21tX2luaXQuYy0xMjg0LVxcdFxcdHotXFx1MDAzZXByZXNlbnRfcGFnZXMgPSAwO1xcbm1tL21tX2luaXQuYzoxMjg1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcXG5tbS9tbV9pbml0LmMtMTI4Ni1cXHRcXHR6LVxcdTAwM2VwcmVzZW50X2Vhcmx5X3BhZ2VzID0gMDtcXG4tLVxcbm1tL21tX2luaXQuYz0xMzE5PXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTM0OC1cXHRcXHR6b25lLVxcdTAwM2VwcmVzZW50X3BhZ2VzID0gcmVhbF9zaXplO1xcbm1tL21tX2luaXQuYzoxMzQ5OiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcXG5tbS9tbV9pbml0LmMtMTM1MC1cXHRcXHR6b25lLVxcdTAwM2VwcmVzZW50X2Vhcmx5X3BhZ2VzID0gcmVhbF9zaXplO1xcbi0tXFxubW0vbW1faW5pdC5jPTE1MDY9dm9pZCBfX2luaXQgc2V0X3BhZ2VibG9ja19vcmRlcih2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTE1MTgtICovXFxubW0vbW1faW5pdC5jOjE1MTk6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xcbm1tL21tX2luaXQuYy0xNTIwLXZvaWQgX19yZWYgZnJlZV9hcmVhX2luaXRfY29yZV9ob3RwbHVnKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTU4OD12b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE2MDItXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjE2MDM6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2VfYWxsb2MuYy0xNjA0LVxcdCAgICB1bmxpa2VseShjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykpIHtcXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmM9NjA0PXZvaWQgX19pbml0IHNwYXJzZV9pbml0X3N1YnNlY3Rpb25fbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy02MjYtXFxubW0vc3BhcnNlLXZtZW1tYXAuYzo2Mjc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xcbm1tL3NwYXJzZS12bWVtbWFwLmMtNjI4LVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYz05MTc9dm9pZCBzcGFyc2VfcmVtb3ZlX3NlY3Rpb24odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTkyNi19XFxubW0vc3BhcnNlLXZtZW1tYXAuYzo5Mjc6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjoxNi4zMDUyMzM5NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY4MTIwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEhvdHBsdWcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZ29vZCBudW1iZXIgb2YgZmlsZXMg4oCTIHNwZWNpZmljYWxseSwgYG1tL21lbW9yeV9ob3RwbHVnLmNgLCBgbW0vbW1faW5pdC5jYCwgYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYW5kIGBtbS9pbnRlcm5hbC5oYC4gQmFzZWQgb24gdGhlIGZpbGUgbGlzdCwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBtZW1vcnkgaG90cGx1ZyBhbmQgdGhlIHJlbGF0ZWQgem9uZSBjb250aWd1aXR5IHRyYWNraW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBrZWVwaW5nIHRyYWNrIG9mIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zIHdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyB0aGVtIG9uIHRoZSBmbHkgaXMgY3J1Y2lhbCBmb3IgZWZmaWNpZW50IHJlc291cmNlIG1hbmFnZW1lbnQuXG5cblRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHdhdGNoIG91dCBmb3Igd2lsbCBiZSBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgb2J2aW91c2x5LiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gaG93IGl0J3MgdXNlZCB0aHJvdWdob3V0IHRoZSBjaGFuZ2VzLlxuXG5JIHNlZSB0aGF0IGBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGFsc28gaW1wbGljYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS9tbV9pbml0LmNgLiBUaGF0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIGludGVyYWN0aW9uIGJldHdlZW4gdGhpcyBob3RwbHVnIHdvcmsgYW5kIHNwYXJzZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yLlxuXG5Ob3csIEknbGwgZm9jdXMgb24gYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2Agc3BlY2lmaWNhbGx5LCBiZWNhdXNlIEkgc3VzcGVjdCBpdCBtaWdodCBjb250YWluIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgb3IgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIGhhdmUgdG8gZGVsdmUgaW50byB0aGF0IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGNvbmRpdGlvbmFscyBJIG5lZWQgdG8gdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjoyMC44NzMzNTYxOTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODYzOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1PUllfSE9UUExVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfTlVNQSlcXHQrPSBub2RlLm9cXG5kcml2ZXJzL2Jhc2UvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSArPSBtZW1vcnkub1xcbmRyaXZlcnMvYmFzZS9NYWtlZmlsZS0xNy1pZmVxICgkKENPTkZJR19TWVNGUykseSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMDc9aW50IG1lbW9yeV9ub3RpZnkoZW51bSBtZW1vcnlfYmxvY2tfc3RhdGUgc3RhdGUsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjExLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyMTI6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjEzLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbWJsa19ucl9wb2lzb24oc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xMjAyPWludCB3YWxrX2R5bmFtaWNfbWVtb3J5X2dyb3VwcyhpbnQgbmlkLCB3YWxrX21lbW9yeV9ncm91cHNfZnVuY190IGZ1bmMsXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTIyMy1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MTIyNDojaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xMjI1LXZvaWQgbWVtYmxrX25yX3BvaXNvbl9pbmModW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTEwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbm9kZV9hY2Nlc3Nfbm9kZV9ncm91cHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMTE0LVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM6MTE1OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTExNi1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChub2RlX2NoYWluKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM9NzY0PWludCB1bnJlZ2lzdGVyX2NwdV91bmRlcl9ub2RlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBuaWQpXFxuLS1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTc4Mi1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjc4MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXFxuZHJpdmVycy9iYXNlL25vZGUuYy03ODQtc3RhdGljIHZvaWQgZG9fcmVnaXN0ZXJfbWVtb3J5X2Jsb2NrX3VuZGVyX25vZGUoaW50IG5pZCxcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM9ODY0PXZvaWQgcmVnaXN0ZXJfbWVtb3J5X2Jsb2Nrc191bmRlcl9ub2RlX2hvdHBsdWcoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTg3MC19XFxuZHJpdmVycy9iYXNlL25vZGUuYzo4NzE6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xcbmRyaXZlcnMvYmFzZS9ub2RlLmMtODcyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjoyMC45NzQyMjQ5NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODk4MDM2NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgSG90cGx1ZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBob3RwbHVnIHNpdHVhdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgb2J2aW91c2x5LiBCdXQgaG9sZCBvbiwgSSBzZWUgYENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUGAgbWVudGlvbmVkIHRvby4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCdzIGEgKmhhcmQqIHJlcXVpcmVtZW50IG9yIGlmIGl0IGp1c3QgY2hhbmdlcyB0aGUgaW1wbGVtZW50YXRpb24uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG1tL21tX2luaXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXNgIGZ1bmN0aW9uLCBpdCdzIGNsZWFyIHRoYXQgYENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUGAgZGVmaW5pdGVseSBhZmZlY3RzIHRoZSBjb2RlIHBhdGguIFdpdGhvdXQgaXQsIHdlJ3JlIGRvaW5nIGEgc2ltcGxlIGluY3JlbWVudC4gV2l0aCBpdC4uLiB3ZWxsLCBpdCdzIGRpZmZlcmVudC4gTm90IHN0cmljdGx5ICpyZXF1aXJlZCosIGl0IHNlZW1zLCBidXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBiZWhhdmlvciBzaWduaWZpY2FudGx5LiBJIHRoaW5rIHdlIGNhbiBpbmNsdWRlIHRoYXQgd2l0aG91dCBhIHByb2JsZW0uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgdGhlIGNvcmUgb2YgdGhpcy4gRnJvbSB3aGF0IEkgc2VlLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gYG1lbW9yeV9ibG9ja19vbmxpbmVgLCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLCBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAsIGBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5gLCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGZvciBtYW5hZ2luZyBtZW1vcnkgc2VjdGlvbnMuXG5cblRpbWUgdG8gc2VlIGhvdyB0aG9zZSBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLiBBcmUgdGhleSBleHBvcnRlZCwgb3IgYXJlIHRoZXkgc3RhdGljIHdpdGhpbiB0aGVpciBtb2R1bGU/IExldCdzIGNoZWNrIHRoZSBzb3VyY2UsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AuIFllcCwgc3RhdGljLiBPa2F5LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIG5vdy4gTGV0J3MgdHJhY2UgdGhlaXIgdXNhZ2UgYW5kIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6MjYuODcyMjYzMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUxNDI3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X2Jsb2NrX29ubGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jPTIxNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtYmxrX25yX3BvaXNvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjIzLSAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyMjQ6c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjI1LXtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0zMzI9bWVtb3J5X2Jsb2NrX2FjdGlvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHVuc2lnbmVkIGxvbmcgYWN0aW9uKVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMzNy1cXHRjYXNlIE1FTV9PTkxJTkU6XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMzODpcXHRcXHRyZXQgPSBtZW1vcnlfYmxvY2tfb25saW5lKG1lbSk7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMzOS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6MjYuOTY3NDEwNjI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzY3MTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRnV6emluZyB0aGUgTWVtb3J5IFN1YnN5c3RlbSoqXG5cbk9rYXksIHNvIGBtZW1vcnlfYmxvY2tfYWN0aW9uYCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgaW50ZXJlc3RlZCBpbi4gIEl0J3MgdHJpZ2dlcmVkIGJ5IGBtZW1vcnlfc3Vic3lzX29ubGluZWAgYW5kIGBtZW1vcnlfc3Vic3lzX29mZmxpbmVgLiAgQWhhISBBbmQgKnRob3NlKiBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aGVuIHN5c2ZzIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3N0YXRlYCBpcyB3cml0dGVuIHRvLiAgVGhhdCdzIG15IGF0dGFjayB2ZWN0b3IhICBJZiBJIHdhbnQgdG8gZnV6eiB0aGlzIHByb3Blcmx5LCBJIG5lZWQgdG8gZm9jdXMgb24gaGFtbWVyaW5nIGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYC4gIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbG9naWMgaXMuICBUaGlzIHNvdW5kcyBsaWtlIGEgZ29vZCBhcHByb2FjaC5cblxuTm93LCBsZXQncyBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAgYW5kIGBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5gIGZ1bmN0aW9ucy4gVGhlc2UgY291bGQgYmUgcG90ZW50aWFsIGFyZWFzIGZvciBpbnRlcmVzdGluZyBpc3N1ZXMgdG9vLCBhbmQgSSdkIGxpa2UgdG8gdW5kZXJzdGFuZCB3aGF0IHJvbGUgdGhleSBwbGF5IGluIHRoZSBvdmVyYWxsIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6MzAuNjExMDg0MzQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAyNTg2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmM9MzgxPWludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNDI1LS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjQyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNDI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTQ4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNDk1LVxcdFxcdCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6NDk2OlxcdFxcdHBmbiA9IGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4obmlkLCB6b25lLCBlbmRfcGZuLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNDk3LVxcdFxcdFxcdFxcdFxcdFxcdHpvbmVfZW5kX3Bmbih6b25lKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjMxLjA2MTM0ODEzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODczMzcxMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIE1lbW9yeSBIb3RwbHVnIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UncmUgcmVtb3ZpbmcgcGFnZSBmcmFtZSBudW1iZXJzIChQRk5zKSBmcm9tIGEgem9uZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgdGhhdCBnZXQgaW52b2tlZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBJJ3ZlIHRyYWNlZCB0aGUgY2FsbCBzdGFjaywgc28gSSBrbm93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHRyaWdnZXJlZCBieSBgc2hyaW5rX3pvbmVfc3BhbmAuIFRoYXQgaW4gdHVybiBpcyBjYWxsZWQgYnkgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYC4gRGl2aW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgIGlzIGEgZGlyZWN0IGNhbGxlciBvZiBgX19yZW1vdmVfcGFnZXNgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHByb2Nlc3MuIEFuZCBmaW5hbGx5LCBgX19yZW1vdmVfcGFnZXNgIGlzIHRoZSBkaXJlY3QgcGFyZW50IG9mIGBvZmZsaW5lX3BhZ2VzYCBhbmQgYGFyY2hfcmVtb3ZlX21lbW9yeWAsIHdoaWNoIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgZm9yIHJlbW92aW5nIG1lbW9yeS5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgcmVhbGxvY2F0aW5nIHRoZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiByZW1vdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA3MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjozNC45MzQ3MjMzNjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzgzNDA0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz03MzQ9c3RhdGljIGlubGluZSB2b2lkIHNlY3Rpb25fdGFpbnRfem9uZV9kZXZpY2UodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc0Ny0gKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjc0ODp2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzQ5LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA4Nz1pbnQgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA5Ni1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwOTc6XFx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzLCBOVUxMLCBNSUdSQVRFX1VOTU9WQUJMRSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwOTgtXFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MT1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTY4LVxcdC8qIGFzc29jaWF0ZSBwZm4gcmFuZ2Ugd2l0aCB0aGUgem9uZSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE2OTpcXHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExNzAtXFx0XFx0XFx0ICAgICAgIHRydWUpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMTg5PXZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTk0LVxcdCAqIElmIHRoZSBub2RlIHN0aWxsIHNwYW5zIHBhZ2VzIChlc3BlY2lhbGx5IFpPTkVfREVWSUNFKSwgZG9uJ3RcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIxOTU6XFx0ICogb2ZmbGluZSBpdC4gQSBub2RlIHNwYW5zIG1lbW9yeSBhZnRlciBtb3ZlX3Bmbl9yYW5nZV90b196b25lKCksXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTk2LVxcdCAqIGUuZy4sIGFmdGVyIHRoZSBtZW1vcnkgYmxvY2sgd2FzIG9ubGluZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjM1LjA2ODU2MjIwN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMwNzg3NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gaXMgd29ya2luZyBoZXJlLiBJdCBsb29rcyBsaWtlIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gdHdvIG1haW4gcGxhY2VzOiBgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeWAgYW5kIGBvbmxpbmVfcGFnZXNgLiBUaGF0IHRlbGxzIG1lIHRoZXNlIGFyZSB0aGUgcG9pbnRzIHdoZXJlIHdlJ3JlIHNoaWZ0aW5nIGFyb3VuZCBwaHlzaWNhbCBwYWdlIGZyYW1lcyAoUEZOcykgYmV0d2VlbiBtZW1vcnkgem9uZXMuXG5cblRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB0aGUgb25lcyBJIHNob3VsZCBjaGVjaywgZ2l2ZW4gdGhlIGNhbGwgaGllcmFyY2h5IG9mIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYC4gVGhlc2Ugd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBtZW1vcnkgYmxvY2tzIGFyZSBicm91Z2h0IG9ubGluZSBhbmQgb2ZmbGluZSwgYW5kIGhvdyBQRk4gcmFuZ2VzIGFyZSBpZGVudGlmaWVkIGFuZCBtYW5pcHVsYXRlZDpcblxuLSAgIGBtZW1vcnlfYmxvY2tfb25saW5lYFxuLSAgIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWBcbi0gICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmBcbi0gICBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYFxuLSAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWBcbi0gICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWBcbi0gICBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2BcblxuSSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBjb25maXJtIGlmIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyBpZiBpdCBpcyBzdGF0aWMgd2lsbCBoZWxwIHdpdGggdGhlIHNjb3BlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjozOS45OTkzNTMyMDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODg2Nzg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21tX2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9ODUyPXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxcbi0tXFxubW0vbW1faW5pdC5jLTkxOC1cXG5tbS9tbV9pbml0LmM6OTE5OnN0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxcbm1tL21tX2luaXQuYy05MjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tbV9pbml0LmM9OTUzPXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbW1faW5pdC5jLTk2OC1cXG5tbS9tbV9pbml0LmM6OTY5OlxcdHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCBob2xlX3Bmbik7XFxubW0vbW1faW5pdC5jLTk3MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6NDAuMTM4MjI3NjUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDA1MTc3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgeWVzLCB0aGlzIGRlZmluaXRlbHkgbG9va3MgbGlrZSBpdCBpbnZvbHZlcyBzdGF0aWMgY29uZmlndXJhdGlvbnMuIEhtbSwgbGV0IG1lIHNlZS4uLiBhcmUgdGhlcmUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheSBoZXJlPyBBaCwgSSBzZWUgYENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUGAgaXMgYmVpbmcgdXRpbGl6ZWQuIFJpZ2h0LCBJIHNob3VsZCBkZWZpbml0ZWx5IGluY29ycG9yYXRlIHRoYXQgaW50byBteSB1bmRlcnN0YW5kaW5nLiBQbHVzLCBvZiBjb3Vyc2UsIHRoZSBiaWcgb25lLCBgQ09ORklHX01FTU9SWV9IT1RQTFVHYC5cblxuU28sIGxldCdzIGJyZWFrIHRoaXMgZG93biBjbGVhcmx5LiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhlIGZvbGxvd2luZyBhcHBsaWVzOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZSwgYWJzb2x1dGVseS5cbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWZmZWN0aW5nIGhvdyB0aGUgc3lzdGVtIHRyYWNrcyB6b25lIGNvbnRpZ3VpdHkgYW5kIGhvdyBpdCBsb2NhdGVzIHNlY3Rpb24gUEZOcy4gVGhpcyBpcyB0aGUga2luZCBvZiBhcmVhIHdoZXJlIHN1YnRsZSBpc3N1ZXMgY2FuIGhhdmUgYSBtYXNzaXZlIGltcGFjdC4gRnVydGhlcm1vcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGxpa2VseSBpbnZvbHZlZCB3aXRoIGhvdHBsdWcgb3BlcmF0aW9ucywgYSBjb21tb24gZmVhdHVyZSBmb3VuZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4qICAgKipGb2N1c1N5bWJvbHMqKjogT2theSwgc28gdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgYXJlOlxuICAgICogICBgbWVtb3J5X2Jsb2NrX29ubGluZWBcbiAgICAqICAgYG1lbW9yeV9ibG9ja19vZmZsaW5lYFxuICAgICogICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmBcbiAgICAqICAgYGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbmBcbiAgICAqICAgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYFxuICAgICogICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWBcbiAgICAqICAgYHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXNgXG4qICAgKipFbmFibGVDb25maWdzKio6IFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gdHJpZ2dlciB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgYXJlOlxuICAgICogICBgTUVNT1JZX0hPVFBMVUdgXG4gICAgKiAgIGBTUEFSU0VNRU1fVk1FTU1BUGBcblxuSSdtIGp1c3QgZ29pbmcgdG8gZG91YmxlIGNoZWNrIHJlYWwgcXVpY2sgdG8gbWFrZSBzdXJlIGBTUEFSU0VNRU1fVk1FTU1BUGAgaXMgYWN0dWFsbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gQ2FuJ3QgYmUgdG9vIGNhcmVmdWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjQ1LjQ3ODc0ODIwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MDQ5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxuLS1cXG5tbS9LY29uZmlnLTQ1NC1cXG5tbS9LY29uZmlnOjQ1NTpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NTYtXFx0Ym9vbFxcbm1tL0tjb25maWctNDU3LVxcbm1tL0tjb25maWc6NDU4OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctNDY1LVxcbm1tL0tjb25maWc6NDY2OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXFxubW0vS2NvbmZpZy00NjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjo0NS41NzgxNjA4ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1OTY3OTA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEJsb2NrIE1hbmFnZW1lbnQgaW4gTGludXgqKlxuXG5Pa2F5LCBzbyBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGRlZmluaXRlbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uOyB0aGF0J3MgZ29vZCB0byBlc3RhYmxpc2ggcmlnaHQgYXdheS4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgY29ycmVjdCBmdW5jdGlvbiBuYW1lcyBmb3IgdGhlIG1lbW9yeSBibG9jayBvbmxpbmUvb2ZmbGluZSBvcGVyYXRpb25zLiBBIHF1aWNrIGNoZWNrIG9mIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIGNvbmZpcm1zIHRoYXQgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGFuZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgIGFyZSwgaW4gZmFjdCwgdGhlIGZ1bmN0aW9ucyBJJ20gbG9va2luZyBmb3IuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgc2V0X3pvbmVfY29udGlndW91c2AgYW5kIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGFyZSBiZWluZyB1c2VkLiBBaCwgcmlnaHQsIHRoZXkncmUgZGVmaW5lZCBhcyBpbmxpbmUgZnVuY3Rpb25zIGluIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYC4gVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZSBmb3IgZGlyZWN0IGZ1enppbmcsIGJ1dCBpdCdzIG5vdCBhIHNob3dzdG9wcGVyLiBCZWNhdXNlIHRoZXkgYXJlIGlubGluZWQsIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlaXIgY2FsbGluZyBmdW5jdGlvbnMuIFNpbmNlIGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCAqZG8qIGNhbGwgdGhlbSwgdGhvc2Ugd2lsbCBiZSBteSBwcmltYXJ5IHRhcmdldHMuXG5cblRvIGVuc3VyZSBJJ20gZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgc2hvdWxkIG5vdyBjaGVjayBmb3IgYW55IG90aGVyIGNhbGxlcnMgb2YgYHNldF96b25lX2NvbnRpZ3VvdXNgIGFuZCBgY2xlYXJfem9uZV9jb250aWd1b3VzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGludGVyYWN0aW9ucyBoZXJlIHRoYXQgYXJlIGVzY2FwaW5nIG15IG5vdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6NTAuMDM3ODQyNjUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQyMTEwMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF96b25lX2NvbnRpZ3VvdXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMjQ9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNzMtb3V0OlxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyNzQ6XFx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjc1LVxcdG1lbV9ob3RwbHVnX2RvbmUoKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzIxLW91dDpcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzIyOlxcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMyMy1cXHRtZW1faG90cGx1Z19kb25lKCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE3MTM9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfY29udGlndW91cyhjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTcxNy1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE3MTg6c3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNzE5LXtcXG4tLVxcbm1tL21tX2luaXQuYz0yMjYwPXZvaWQgX19pbml0IHBhZ2VfYWxsb2NfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjI5Ni1cXHRmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKVxcbm1tL21tX2luaXQuYzoyMjk3OlxcdFxcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxubW0vbW1faW5pdC5jLTIyOTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjUyLjY3OTk1Nzc4N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk1OTcyNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBZGRpbmcgYHNldF96b25lX2NvbnRpZ3VvdXNgIHRvIHRoZSBGb2N1cyBMaXN0KipcblxuQWxyaWdodCwgc28gYHBhZ2VfYWxsb2NfaW5pdF9sYXRlYCBpcyBjYWxsaW5nIGBzZXRfem9uZV9jb250aWd1b3VzYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBhbmQgdXNlZnVsLiBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aGF0IHRvIG15IG1lbnRhbCBGb2N1c1N5bWJvbHMgbGlzdC4gVGhhdOKAmXMgcHJvYmFibHkgaW1wb3J0YW50IGZvciBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgd2FudCB0byBrZWVwIHRob3NlIGtleSBmdW5jdGlvbnMgZWFzaWx5IGFjY2Vzc2libGUgaW4gbXkgbWluZCB3aGVuIEknbSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBhbmQgY29udGlndW91cyBtZW1vcnkuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBvbiBgY2xlYXJfem9uZV9jb250aWd1b3VzYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIHRoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBoYXZlIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGVhc2lseSBhY2Nlc3NpYmxlIGluIG15IG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzAyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6NTYuMDc1OTMyMzExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk5Nzk5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsZWFyX3pvbmVfY29udGlndW91c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jPTIyND1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI0OC1cXHRtZW1faG90cGx1Z19iZWdpbigpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyNDk6XFx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNTAtXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAxLVxcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwMjpcXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMy1cXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTcxOD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTcyNS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE3MjY6c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE3Mjcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjo1OC42NzU3MzYxNjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNjgyNTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQW5hbHl6aW5nIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIENhbGxlcnMgYW5kIGBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50YCoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIHRoZSBjb2RlIGlzIHRlbGxpbmcgbWUgdGhhdCBvbmx5IGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBhcmUgY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBJdCBtZWFucyBJIGNhbiBwcm9iYWJseSBrZWVwIG15IGFuYWx5c2lzIHByZXR0eSBmb2N1c2VkLCBhdCBsZWFzdCBpbml0aWFsbHkuIFRob3NlIHR3byBjYWxsZXJzIGFyZSB0aGUga2V5LlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhhdCBsZWFkIG1lPyBBaCwgeWVzLCBsZXQncyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyByZWxhdGVkIHRvIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGFuZCB0aGUgY29udGV4dCB0aG9zZSBjYWxscyBhcmUgYmVpbmcgbWFkZS4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJwbGF5IHRoZXJlLCBtYXliZSBldmVuIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIG9yIHNvbWUgc3VidGxldHkgaW4gaG93IHBhZ2UgY291bnRzIGFyZSBtYW5hZ2VkLCBnaXZlbiB0aGUgXCJvbmxpbmVcIiBhbmQgXCJvZmZsaW5lXCIgbmFtaW5nLiBDb3VsZCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZGlnIGludG8uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI3OjAyLjcwMjU2NjEyMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1NzgyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmM9MTA0NT1zdHJ1Y3Qgem9uZSAqem9uZV9mb3JfcGZuX3JhbmdlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSwgaW50IG5pZCxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA2NC0gKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNjU6dm9pZCBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNjYtXFx0XFx0XFx0ICAgICAgIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTExNDE9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIwNC1cXHRvbmxpbmVfcGFnZXNfcmFuZ2UocGZuLCBucl9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjA1OlxcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMDYtXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDY9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwNjYtXFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCAtbWFuYWdlZF9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMDY3OlxcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgZ3JvdXAsIC1ucl9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDY4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNzowMi43ODUxNTA1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMyNzA2ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYW5kIFNvbGlkaWZ5aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZvY3VzIFN5bWJvbHMqKlxuXG5SaWdodCwgc28gYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGdldHMgdXBkYXRlZCB0byBhbHNvIG1hbmFnZSBgem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXBgLiBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aGF0IHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0aGF0J3MgY3J1Y2lhbC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgb3ZlciB0aGUgZXhpc3RpbmcgbGlzdDpcblxuKiAgIGBtZW1vcnlfYmxvY2tfb25saW5lYFxuKiAgIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWBcbiogICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmBcbiogICBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYFxuKiAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWBcbiogICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWBcbiogICBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2BcbiogICBgcGFnZV9hbGxvY19pbml0X2xhdGVgXG4qICAgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgXG5cblllYWgsIHRoaXMgaXMgbG9va2luZyBwcmV0dHkgZ29vZC4gVGhpcyBjb3ZlcnMgYSBjb21wcmVoZW5zaXZlIHNldCBvZiBmdW5jdGlvbnMgcmVsYXRlZCB0byBvbmxpbmUgbWVtb3J5LCBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCwgUEZOIG1hbmlwdWxhdGlvbiwgYW5kIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIHJlY2VudCBpbmNsdXNpb24gb2YgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGxvb2tzIGNvcnJlY3QuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkLCB3ZWxsLXJvdW5kZWQgc2V0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLiBOb3cgSSBjYW4gbW92ZSBvbiB0byBhY3R1YWxseSBzZXR0aW5nIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxMCwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6Mjc6MDguMTE3ODYxMTg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjY2Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfYmxvY2tfb25saW5lXCIsXG4gICAgXCJtZW1vcnlfYmxvY2tfb2ZmbGluZVwiLFxuICAgIFwiZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmblwiLFxuICAgIFwiZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuXCIsXG4gICAgXCJyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZVwiLFxuICAgIFwibW92ZV9wZm5fcmFuZ2VfdG9fem9uZVwiLFxuICAgIFwidXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc1wiLFxuICAgIFwicGFnZV9hbGxvY19pbml0X2xhdGVcIixcbiAgICBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgc3BlY2lmaWNhbGx5IHpvbmUgY29udGlndWl0eSB0cmFja2luZyBhbmQgc2VjdGlvbiBQRk4gZmluZGluZy4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9ibG9ja19vbmxpbmVcIixcbiAgICBcIm1lbW9yeV9ibG9ja19vZmZsaW5lXCIsXG4gICAgXCJmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuXCIsXG4gICAgXCJmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5cIixcbiAgICBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gICAgXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gICAgXCJ1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzXCIsXG4gICAgXCJwYWdlX2FsbG9jX2luaXRfbGF0ZVwiLFxuICAgIFwiYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCBzcGVjaWZpY2FsbHkgem9uZSBjb250aWd1aXR5IHRyYWNraW5nIGFuZCBzZWN0aW9uIFBGTiBmaW5kaW5nLiBUaGVzZSBwYXRocyBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxbzh9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 12:54:34 +0000 UTC FinishedAt: 2026-07-24 13:27:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "SPARSEMEM_VMEMMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "SPARSEMEM_VMEMMAP" ], "series_id": "c0883d4b-8b87-4817-9e9f-ee8001046266" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_block_online", "memory_block_offline", "find_smallest_section_pfn", "find_biggest_section_pfn", "remove_pfn_range_from_zone", "move_pfn_range_to_zone", "update_zone_online_memmap_pages", "page_alloc_init_late", "adjust_present_page_count" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2Jsb2NrX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfYmxvY2tfb2ZmbGluZSYjMzQ7LAogICAgJiMzNDtmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuJiMzNDssCiAgICAmIzM0O2ZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbiYjMzQ7LAogICAgJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICAgJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgICAmIzM0O3VwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19pbml0X2xhdGUmIzM0OywKICAgICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgc3BlY2lmaWNhbGx5IHpvbmUgY29udGlndWl0eSB0cmFja2luZyBhbmQgc2VjdGlvbiBQRk4gZmluZGluZy4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2EzNjNhMTJmNDM4YzY1NTIwMzhhNjUxN2E0ZWYyMjQ4YzY0YzQ0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDEzOjI2OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxuaW5kZXggYjc2MTgzNTQ1ZTViZjUuLjBhYTY1ZTZiNTQ5OTU3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcbkBAIC00ODMsNiAmIzQzOzQ4MywxOSBAQCBHZW5lcmFsXG4gICBgYHByZXNlbnRfcGFnZXNgYCBzaG91bGQgdXNlIGBgZ2V0X29ubGluZV9tZW1zKClgYCB0byBnZXQgYSBzdGFibGUgdmFsdWUuIEl0XG4gICBpcyBpbml0aWFsaXplZCBieSBgYGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoKWBgLlxuIFxuJiM0MztgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgXG4mIzQzOyAgVHJhY2tzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSB0aGF0IGhhdmUgYW4gb25saW5lIG1lbW9yeSBtYXAgKHByZXNlbnQgcGFnZXNcbiYjNDM7ICBhbmQgbWVtb3J5IGhvbGVzIHdob3NlIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQpLiBXaGVuXG4mIzQzOyAgYGBzcGFubmVkX3BhZ2VzYGAgPT0gYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYCwgYGBwZm5fdG9fcGFnZSgpYGAgY2FuIGJlXG4mIzQzOyAgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55IFBGTiB3aXRoaW4gdGhlIHpvbmUgc3Bhbi5cbiYjNDM7XG4mIzQzOyAgTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhbiBvbmxpbmVcbiYjNDM7ICBtZW1vcnkgbWFwIGV4aXN0IG91dHNpZGUgdGhlIGN1cnJlbnQgem9uZSBzcGFuLiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBkdXJpbmdcbiYjNDM7ICBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZiBwYWdlcyB0aGF0IGRvIG5vdCBmYWxsIGludG8gYW55XG4mIzQzOyAgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvIGNvdmVyIHN1Y2ggcGFnZXMgYW5kIGxhdGVyIHNocmlua2luZyBpdCBiYWNrXG4mIzQzOyAgbWF5IHJlc3VsdCBpbiBhIFwmIzM0O3RvbyBzbWFsbFwmIzM0OyB2YWx1ZS4gVGhpcyBpcyBzYWZlOiBpdCBtZXJlbHkgcHJldmVudHNcbiYjNDM7ICBkZXRlY3RpbmcgYSBjb250aWd1b3VzIHpvbmUuXG4mIzQzO1xuIGBgcHJlc2VudF9lYXJseV9wYWdlc2BgXG4gICBUaGUgcHJlc2VudCBwYWdlcyBleGlzdGluZyB3aXRoaW4gdGhlIHpvbmUgbG9jYXRlZCBvbiBtZW1vcnkgYXZhaWxhYmxlIHNpbmNlXG4gICBlYXJseSBib290LCBleGNsdWRpbmcgaG90cGx1Z2dlZCBtZW1vcnkuIERlZmluZWQgb25seSB3aGVuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5pbmRleCBiY2ZlMmQ5ZjRhZGJkOS4uMjM3YWNlNDM1MzcyNGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTI0Niw2ICYjNDM7MjQ2LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcdFx0bnJfdm1lbW1hcF9wYWdlcyA9IG1lbS1cdTAwM2VhbHRtYXAtXHUwMDNlZnJlZTtcbiBcbiBcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XG4mIzQzO1x0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHtcbiBcdFx0cmV0ID0gbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeShzdGFydF9wZm4sIG5yX3ZtZW1tYXBfcGFnZXMsIHpvbmUpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTI3MCw2ICYjNDM7MjcxLDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcbiBcdG1lbS1cdTAwM2V6b25lID0gem9uZTtcbiBvdXQ6XG4mIzQzO1x0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdG1lbV9ob3RwbHVnX2RvbmUoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI4Miw2ICYjNDM7Mjg0LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IHNlY3Rpb25fbnJfdG9fcGZuKG1lbS1cdTAwM2VzdGFydF9zZWN0aW9uX25yKTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBQQUdFU19QRVJfU0VDVElPTiAqIHNlY3Rpb25zX3Blcl9ibG9jaztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdm1lbW1hcF9wYWdlcyA9IDA7XG4mIzQzO1x0c3RydWN0IHpvbmUgKnpvbmU7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFtZW0tXHUwMDNlem9uZSlcbkBAIC0yOTQsNyAmIzQzOzI5Nyw5IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0aWYgKG1lbS1cdTAwM2VhbHRtYXApXG4gXHRcdG5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tXHUwMDNlYWx0bWFwLVx1MDAzZWZyZWU7XG4gXG4mIzQzO1x0em9uZSA9IG1lbS1cdTAwM2V6b25lO1xuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbiYjNDM7XHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG4gXHRcdFx0XHRcdCAgLW5yX3ZtZW1tYXBfcGFnZXMpO1xuQEAgLTMxNCw2ICYjNDM7MzE5LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXG4gXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuJiM0MztcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gXHRtZW1faG90cGx1Z19kb25lKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLmFjMTQ2N2FjMzMzNjRhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTEwMzIsNiAmIzQzOzEwMzIsMjAgQEAgc3RydWN0IHpvbmUge1xuIFx0ICogY21hIHBhZ2VzIGlzIHByZXNlbnQgcGFnZXMgdGhhdCBhcmUgYXNzaWduZWQgZm9yIENNQSB1c2VcbiBcdCAqIChNSUdSQVRFX0NNQSkuXG4gXHQgKlxuJiM0MztcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxuJiM0MztcdCAqIGFuIG9ubGluZSBtZW1vcnkgbWFwIChwcmVzZW50IHBhZ2VzIGFuZCBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5XG4mIzQzO1x0ICogbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkKS4gV2hlbiBzcGFubmVkX3BhZ2VzID09XG4mIzQzO1x0ICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLCBwZm5fdG9fcGFnZSgpIGNhbiBiZSBwZXJmb3JtZWQgd2l0aG91dFxuJiM0MztcdCAqIGZ1cnRoZXIgY2hlY2tzIG9uIGFueSBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuXG4mIzQzO1x0ICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuXG4mIzQzO1x0ICogb25seSBoYXBwZW4gZHVyaW5nIGJvb3QsIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgbWFwIG9mXG4mIzQzO1x0ICogcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueSB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG9cbiYjNDM7XHQgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGFcbiYjNDM7XHQgKiBcJiMzNDt0b28gc21hbGxcJiMzNDsgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhXG4mIzQzO1x0ICogY29udGlndW91cyB6b25lLlxuJiM0MztcdCAqXG4gXHQgKiBTbyBwcmVzZW50X3BhZ2VzIG1heSBiZSB1c2VkIGJ5IG1lbW9yeSBob3RwbHVnIG9yIG1lbW9yeSBwb3dlclxuIFx0ICogbWFuYWdlbWVudCBsb2dpYyB0byBmaWd1cmUgb3V0IHVubWFuYWdlZCBwYWdlcyBieSBjaGVja2luZ1xuIFx0ICogKHByZXNlbnRfcGFnZXMgLSBtYW5hZ2VkX3BhZ2VzKS4gQW5kIG1hbmFnZWRfcGFnZXMgc2hvdWxkIGJlIHVzZWRcbkBAIC0xMDU2LDYgJiM0MzsxMDcwLDcgQEAgc3RydWN0IHpvbmUge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRtYW5hZ2VkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRzcGFubmVkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X3BhZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwO1xuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbiBcdHVuc2lnbmVkIGxvbmdcdFx0cHJlc2VudF9lYXJseV9wYWdlcztcbiAjZW5kaWZcbkBAIC0xNjgxLDYgJiM0MzsxNjk2LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpvbmVfaXNfY29udGlndW91cyAtIHRlc3Qgd2hldGhlciBhIHpvbmUgaXMgY29udGlndW91c1xuJiM0MzsgKiBAem9uZTogdGhlIHpvbmUgdG8gdGVzdC5cbiYjNDM7ICpcbiYjNDM7ICogSW4gYSBjb250aWd1b3VzIHpvbmUsIGl0IGlzIHZhbGlkIHRvIGNhbGwgcGZuX3RvX3BhZ2UoKSBvbiBhbnkgUEZOIGluIHRoZVxuJiM0MzsgKiBzcGFubmVkIHpvbmUgd2l0aG91dCByZXF1aXJpbmcgcGZuX3ZhbGlkKCkgb3IgcGZuX3RvX29ubGluZV9wYWdlKCkgY2hlY2tzLlxuJiM0MzsgKlxuJiM0MzsgKiBOb3RlIHRoYXQgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gd2l0aCBtZW1vcnkgb2ZmbGluaW5nIG1ha2VzIGFueSBQRk5cbiYjNDM7ICogdHJhdmVyc2FsIHByb25lIHRvIHJhY2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBaT05FX0RFVklDRSB6b25lcyBhcmUgYWx3YXlzIG1hcmtlZCBub24tY29udGlndW91cy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gem9uZS1cdTAwM2Vjb250aWd1b3VzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbiYjNDM7e1xuJiM0MztcdGlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4mIzQzO1x0XHR6b25lLVx1MDAzZWNvbnRpZ3VvdXMgPSB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxuJiM0Mzt7XG4mIzQzO1x0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBSZXR1cm5zIHRydWUgaWYgYSB6b25lIGhhcyBwYWdlcyBtYW5hZ2VkIGJ5IHRoZSBidWRkeSBhbGxvY2F0b3IuXG4gICogQWxsIHRoZSByZWNsYWltIGRlY2lzaW9ucyBoYXZlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li5mOTMyYjc1NzdjOTJhYyAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC04MDUsMjEgJiM0Mzs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbi1cdGlmICh6b25lLVx1MDAzZWNvbnRpZ3VvdXMpXG4mIzQzO1x0aWYgKHpvbmVfaXNfY29udGlndW91cyh6b25lKSlcbiBcdFx0cmV0dXJuIHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7XG4gXG4gXHRyZXR1cm4gX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLCB6b25lKTtcbiB9XG4gXG4tdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKTtcbiBib29sIHBmbl9yYW5nZV9pbnRlcnNlY3RzX3pvbmVzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4te1xuLVx0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gZmFsc2U7XG4tfVxuLVxuIGV4dGVybiBpbnQgX19pc29sYXRlX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBleHRlcm4gdm9pZCBfX3B1dGJhY2tfaXNvbGF0ZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRcdFx0ICAgIGludCBtdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li4zYTI4MWQ1OTUyMDcxMCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC00MjcsMTcgJiM0Mzs0MjcsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4tXHRmb3IgKDsgc3RhcnRfcGZuIFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gJiM0Mzs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV4dF9wZm47XG4gXG4tXHRcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHN0YXJ0X3BmbikgIT0gbmlkKSlcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRmb3IgKDsgc3RhcnRfcGZuIFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gPSBuZXh0X3Bmbikge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyB0YWlsX3BmbjtcbiYjNDM7XG4mIzQzO1x0XHRuZXh0X3BmbiA9IHN0YXJ0X3BmbiAmIzQzOyBQQUdFU19QRVJfU1VCU0VDVElPTjtcbiYjNDM7XHRcdHRhaWxfcGZuID0gbmV4dF9wZm4gLSAxO1xuIFxuLVx0XHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0cmV0dXJuIHN0YXJ0X3BmbjtcbiYjNDM7XHRcdGlmIChsaWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpXG4mIzQzO1x0XHRcdHJldHVybiBzdGFydF9wZm47XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxpa2VseShwZm5fdG9fbmlkKHRhaWxfcGZuKSA9PSBuaWQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKHRhaWxfcGZuKSkpXG4mIzQzO1x0XHRcdHJldHVybiBzdGFydF9wZm47XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC00NDgsMjEgJiM0Mzs0NTUsMjYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBmbjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbiwgcHJldl9wZm47XG4gXG4gXHQvKiBwZm4gaXMgdGhlIGVuZCBwZm4gb2YgYSBtZW1vcnkgc2VjdGlvbi4gKi9cbiBcdHBmbiA9IGVuZF9wZm4gLSAxO1xuLVx0Zm9yICg7IHBmbiBcdTAwM2U9IHN0YXJ0X3BmbjsgcGZuIC09IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHBmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdGZvciAoOyBwZm4gXHUwMDNlPSBzdGFydF9wZm47IHBmbiA9IHByZXZfcGZuKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGhlYWRfcGZuO1xuIFxuLVx0XHRpZiAodW5saWtlbHkocGZuX3RvX25pZChwZm4pICE9IG5pZCkpXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRwcmV2X3BmbiA9IHBmbiAtIFBBR0VTX1BFUl9TVUJTRUNUSU9OO1xuJiM0MztcdFx0aGVhZF9wZm4gPSBwcmV2X3BmbiAmIzQzOyAxO1xuIFxuLVx0XHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZuKSkpXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0cmV0dXJuIHBmbjtcbiYjNDM7XHRcdGlmIChsaWtlbHkocGZuX3RvX25pZChwZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZuKSkpXG4mIzQzO1x0XHRcdHJldHVybiBwZm47XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxpa2VseShwZm5fdG9fbmlkKGhlYWRfcGZuKSA9PSBuaWQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGhlYWRfcGZuKSkpXG4mIzQzO1x0XHRcdHJldHVybiBwZm47XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTcsMTggJiM0Mzs1NjksMTMgQEAgdm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdC8qXG4gXHQgKiBab25lIHNocmlua2luZyBjb2RlIGNhbm5vdCBwcm9wZXJseSBkZWFsIHdpdGggWk9ORV9ERVZJQ0UuIFNvXG4tXHQgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIHRoZSB6b25lcyAtIHdoaWNoIGlzIG9rYXkgYXNcbi1cdCAqIHNldF96b25lX2NvbnRpZ3VvdXMoKSBjYW5ub3QgZGVhbCB3aXRoIFpPTkVfREVWSUNFIGVpdGhlciB3YXkuXG4mIzQzO1x0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cbiBcdCAqL1xuIFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXMpO1xuIFx0dXBkYXRlX3BnZGF0X3NwYW4ocGdkYXQpO1xuLVxuLVx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiB9XG4gXG4gLyoqXG5AQCAtNzQ2LDggJiM0Mzs3NTMsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbiBcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuIFxuLVx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuLVxuIFx0aWYgKHpvbmVfaXNfZW1wdHkoem9uZSkpXG4gXHRcdGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XG4gXHRyZXNpemVfem9uZV9yYW5nZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcbkBAIC03NzUsOCAmIzQzOzc4MCw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxuIFx0XHRcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXG4gXHRcdFx0IGlzb2xhdGVfcGFnZWJsb2NrKTtcbi1cbi1cdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gfVxuIFxuIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMge1xuQEAgLTEwNzIsNiAmIzQzOzEwNzUsNyBAQCB2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxuIFx0aWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKVxuIFx0XHR6b25lLVx1MDAzZXByZXNlbnRfZWFybHlfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzO1xuIFx0em9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gbnJfcGFnZXM7XG4gXHR6b25lLVx1MDAzZXpvbmVfcGdkYXQtXHUwMDNlbm9kZV9wcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbiBcbiBcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgbW92YWJsZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGYxYWZlMDIzZTRlNzIxLi43M2QxZmRlMTcwNDA1MCAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jXG5AQCAtOTE2LDYgJiM0Mzs5MTYsNDAgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpob2xlX3BmbilcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG4mIzQzO1x0dW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB6b25lX2VuZF9wZm4gPSB6b25lX3N0YXJ0X3BmbiAmIzQzOyB6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdWJfc3RhcnQsIHN1Yl9lbmQ7XG4mIzQzO1xuJiM0MztcdHN1Yl9zdGFydCA9IG1heChBTElHTl9ET1dOKHN0YXJ0X3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxuJiM0MztcdFx0XHR6b25lX3N0YXJ0X3Bmbik7XG4mIzQzO1x0c3ViX2VuZCA9IG1pbihBTElHTihlbmRfcGZuLCBQQUdFU19QRVJfU1VCU0VDVElPTiksIHpvbmVfZW5kX3Bmbik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIGFuIGluLXpvbmUgaG9sZSBzbWFsbGVyIHRoYW4gYSBzdWJzZWN0aW9uLCB0aGUgYWRqYWNlbnRcbiYjNDM7XHQgKiBtZW1ibG9jayByYW5nZXMgc2hhcmUgYSBzdWJzZWN0aW9uLiBBdm9pZCBjb3VudGluZyB0aGUgc2FtZVxuJiM0MztcdCAqIHN1YnNlY3Rpb24mIzM5O3MgcGFnZXMgdHdpY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCpob2xlX3BmbiBcdTAwM2Ugem9uZV9zdGFydF9wZm4pIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcHJldl9zdWJfZW5kO1xuJiM0MztcbiYjNDM7XHRcdHByZXZfc3ViX2VuZCA9IG1pbihBTElHTigqaG9sZV9wZm4sIFBBR0VTX1BFUl9TVUJTRUNUSU9OKSxcbiYjNDM7XHRcdFx0XHQgICB6b25lX2VuZF9wZm4pO1xuJiM0MztcdFx0c3ViX3N0YXJ0ID0gbWF4KHN1Yl9zdGFydCwgcHJldl9zdWJfZW5kKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdWJfc3RhcnQgXHUwMDNjIHN1Yl9lbmQpXG4mIzQzO1x0XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gc3ViX2VuZCAtIHN1Yl9zdGFydDtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuQEAgLTkzMiw2ICYjNDM7OTY2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRpZiAoc3RhcnRfcGZuIFx1MDAzZT0gZW5kX3BmbilcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCBob2xlX3Bmbik7XG4mIzQzO1xuIFx0bWVtbWFwX2luaXRfcmFuZ2UoZW5kX3BmbiAtIHN0YXJ0X3BmbiwgbmlkLCB6b25lX2lkLCBzdGFydF9wZm4sXG4gXHRcdFx0ICB6b25lX2VuZF9wZm4sIE1FTUlOSVRfRUFSTFksIE5VTEwsIG10LCBmYWxzZSk7XG4gXG5AQCAtMjE5NSwyOCAmIzQzOzIyMzEsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcbi1cbi1cdFx0YmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCB6b25lX2VuZF9wZm4oem9uZSkpO1xuLVxuLVx0XHRpZiAoIV9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKGJsb2NrX3N0YXJ0X3Bmbixcbi1cdFx0XHRcdFx0ICAgICBibG9ja19lbmRfcGZuLCB6b25lKSlcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0fVxuLVxuLVx0LyogV2UgY29uZmlybSB0aGF0IHRoZXJlIGlzIG5vIGhvbGUgKi9cbi1cdHpvbmUtXHUwMDNlY29udGlndW91cyA9IHRydWU7XG4tfVxuLVxuIC8qXG4gICogQ2hlY2sgaWYgYSBQRk4gcmFuZ2UgaW50ZXJzZWN0cyBtdWx0aXBsZSB6b25lcyBvbiBvbmUgb3IgbW9yZVxuICAqIE5VTUEgbm9kZXMuIFNwZWNpZnkgdGhlIEBuaWQgYXJndW1lbnQgaWYgaXQgaXMga25vd24gdGhhdCB0aGlzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2Jsb2NrX29ubGluZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfYmxvY2tfb2ZmbGluZSYjMzQ7LAogICAgJiMzNDtmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuJiMzNDssCiAgICAmIzM0O2ZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbiYjMzQ7LAogICAgJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICAgJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgICAmIzM0O3VwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19pbml0X2xhdGUmIzM0OywKICAgICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgc3BlY2lmaWNhbGx5IHpvbmUgY29udGlndWl0eSB0cmFja2luZyBhbmQgc2VjdGlvbiBQRk4gZmluZGluZy4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTM2M2ExMmY0MzhjNjU1MjAzOGE2NTE3YTRlZjIyNDhjNjRjNDQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMTM6MjY6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QKaW5kZXggYjc2MTgzNTQ1ZTViZjUuLjBhYTY1ZTZiNTQ5OTU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0CkBAIC00ODMsNiAmIzQzOzQ4MywxOSBAQCBHZW5lcmFsCiAgIGBgcHJlc2VudF9wYWdlc2BgIHNob3VsZCB1c2UgYGBnZXRfb25saW5lX21lbXMoKWBgIHRvIGdldCBhIHN0YWJsZSB2YWx1ZS4gSXQKICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC4KIAomIzQzO2BgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYGAKJiM0MzsgIFRyYWNrcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUgdGhhdCBoYXZlIGFuIG9ubGluZSBtZW1vcnkgbWFwIChwcmVzZW50IHBhZ2VzCiYjNDM7ICBhbmQgbWVtb3J5IGhvbGVzIHdob3NlIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQpLiBXaGVuCiYjNDM7ICBgYHNwYW5uZWRfcGFnZXNgYCA9PSBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgLCBgYHBmbl90b19wYWdlKClgYCBjYW4gYmUKJiM0MzsgIHBlcmZvcm1lZCB3aXRob3V0IGZ1cnRoZXIgY2hlY2tzIG9uIGFueSBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uCiYjNDM7CiYjNDM7ICBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuIG9ubGluZQomIzQzOyAgbWVtb3J5IG1hcCBleGlzdCBvdXRzaWRlIHRoZSBjdXJyZW50IHpvbmUgc3Bhbi4gVGhpcyBjYW4gb25seSBoYXBwZW4gZHVyaW5nCiYjNDM7ICBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZiBwYWdlcyB0aGF0IGRvIG5vdCBmYWxsIGludG8gYW55CiYjNDM7ICB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG8gY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2sKJiM0MzsgIG1heSByZXN1bHQgaW4gYSAmIzM0O3RvbyBzbWFsbCYjMzQ7IHZhbHVlLiBUaGlzIGlzIHNhZmU6IGl0IG1lcmVseSBwcmV2ZW50cwomIzQzOyAgZGV0ZWN0aW5nIGEgY29udGlndW91cyB6b25lLgomIzQzOwogYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGAKICAgVGhlIHByZXNlbnQgcGFnZXMgZXhpc3Rpbmcgd2l0aGluIHRoZSB6b25lIGxvY2F0ZWQgb24gbWVtb3J5IGF2YWlsYWJsZSBzaW5jZQogICBlYXJseSBib290LCBleGNsdWRpbmcgaG90cGx1Z2dlZCBtZW1vcnkuIERlZmluZWQgb25seSB3aGVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKaW5kZXggYmNmZTJkOWY0YWRiZDkuLjIzN2FjZTQzNTM3MjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCkBAIC0yNDYsNiAmIzQzOzI0Niw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJCW5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tJmd0O2FsdG1hcC0mZ3Q7ZnJlZTsKIAogCW1lbV9ob3RwbHVnX2JlZ2luKCk7CiYjNDM7CWNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTsKIAlpZiAobnJfdm1lbW1hcF9wYWdlcykgewogCQlyZXQgPSBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcywgem9uZSk7CiAJCWlmIChyZXQpCkBAIC0yNzAsNiAmIzQzOzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAKIAltZW0tJmd0O3pvbmUgPSB6b25lOwogb3V0OgomIzQzOwlzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpOwogCW1lbV9ob3RwbHVnX2RvbmUoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjgyLDYgJiM0MzsyODQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSkKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IHNlY3Rpb25fbnJfdG9fcGZuKG1lbS0mZ3Q7c3RhcnRfc2VjdGlvbl9ucik7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrOwogCXVuc2lnbmVkIGxvbmcgbnJfdm1lbW1hcF9wYWdlcyA9IDA7CiYjNDM7CXN0cnVjdCB6b25lICp6b25lOwogCWludCByZXQ7CiAKIAlpZiAoIW1lbS0mZ3Q7em9uZSkKQEAgLTI5NCw3ICYjNDM7Mjk3LDkgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJaWYgKG1lbS0mZ3Q7YWx0bWFwKQogCQlucl92bWVtbWFwX3BhZ2VzID0gbWVtLSZndDthbHRtYXAtJmd0O2ZyZWU7CiAKJiM0MzsJem9uZSA9IG1lbS0mZ3Q7em9uZTsKIAltZW1faG90cGx1Z19iZWdpbigpOwomIzQzOwljbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7CiAJaWYgKG5yX3ZtZW1tYXBfcGFnZXMpCiAJCWFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgbWVtLSZndDtncm91cCwKIAkJCQkJICAtbnJfdm1lbW1hcF9wYWdlcyk7CkBAIC0zMTQsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKQogCiAJbWVtLSZndDt6b25lID0gTlVMTDsKIG91dDoKJiM0MzsJc2V0X3pvbmVfY29udGlndW91cyh6b25lKTsKIAltZW1faG90cGx1Z19kb25lKCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzVjLi5hYzE0NjdhYzMzMzY0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0xMDMyLDYgJiM0MzsxMDMyLDIwIEBAIHN0cnVjdCB6b25lIHsKIAkgKiBjbWEgcGFnZXMgaXMgcHJlc2VudCBwYWdlcyB0aGF0IGFyZSBhc3NpZ25lZCBmb3IgQ01BIHVzZQogCSAqIChNSUdSQVRFX0NNQSkuCiAJICoKJiM0MzsJICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwIHRyYWNrcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUgdGhhdCBoYXZlCiYjNDM7CSAqIGFuIG9ubGluZSBtZW1vcnkgbWFwIChwcmVzZW50IHBhZ2VzIGFuZCBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5CiYjNDM7CSAqIG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCkuIFdoZW4gc3Bhbm5lZF9wYWdlcyA9PQomIzQzOwkgKiBwYWdlc193aXRoX29ubGluZV9tZW1tYXAsIHBmbl90b19wYWdlKCkgY2FuIGJlIHBlcmZvcm1lZCB3aXRob3V0CiYjNDM7CSAqIGZ1cnRoZXIgY2hlY2tzIG9uIGFueSBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGU6IHRoaXMgY291bnRlciBtYXkgdGVtcG9yYXJpbHkgdW5kZXJjb3VudCB3aGVuIHBhZ2VzIHdpdGggYW4KJiM0MzsJICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuCiYjNDM7CSAqIG9ubHkgaGFwcGVuIGR1cmluZyBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZgomIzQzOwkgKiBwYWdlcyB0aGF0IGRvIG5vdCBmYWxsIGludG8gYW55IHpvbmUgc3Bhbi4gR3Jvd2luZyB0aGUgem9uZSB0bwomIzQzOwkgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGEKJiM0MzsJICogJiMzNDt0b28gc21hbGwmIzM0OyB2YWx1ZS4gVGhpcyBpcyBzYWZlOiBpdCBtZXJlbHkgcHJldmVudHMgZGV0ZWN0aW5nIGEKJiM0MzsJICogY29udGlndW91cyB6b25lLgomIzQzOwkgKgogCSAqIFNvIHByZXNlbnRfcGFnZXMgbWF5IGJlIHVzZWQgYnkgbWVtb3J5IGhvdHBsdWcgb3IgbWVtb3J5IHBvd2VyCiAJICogbWFuYWdlbWVudCBsb2dpYyB0byBmaWd1cmUgb3V0IHVubWFuYWdlZCBwYWdlcyBieSBjaGVja2luZwogCSAqIChwcmVzZW50X3BhZ2VzIC0gbWFuYWdlZF9wYWdlcykuIEFuZCBtYW5hZ2VkX3BhZ2VzIHNob3VsZCBiZSB1c2VkCkBAIC0xMDU2LDYgJiM0MzsxMDcwLDcgQEAgc3RydWN0IHpvbmUgewogCWF0b21pY19sb25nX3QJCW1hbmFnZWRfcGFnZXM7CiAJdW5zaWduZWQgbG9uZwkJc3Bhbm5lZF9wYWdlczsKIAl1bnNpZ25lZCBsb25nCQlwcmVzZW50X3BhZ2VzOwomIzQzOwl1bnNpZ25lZCBsb25nCQlwYWdlc193aXRoX29ubGluZV9tZW1tYXA7CiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpCiAJdW5zaWduZWQgbG9uZwkJcHJlc2VudF9lYXJseV9wYWdlczsKICNlbmRpZgpAQCAtMTY4MSw2ICYjNDM7MTY5NiwzOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKIH0KICNlbmRpZgogCiYjNDM7LyoqCiYjNDM7ICogem9uZV9pc19jb250aWd1b3VzIC0gdGVzdCB3aGV0aGVyIGEgem9uZSBpcyBjb250aWd1b3VzCiYjNDM7ICogQHpvbmU6IHRoZSB6b25lIHRvIHRlc3QuCiYjNDM7ICoKJiM0MzsgKiBJbiBhIGNvbnRpZ3VvdXMgem9uZSwgaXQgaXMgdmFsaWQgdG8gY2FsbCBwZm5fdG9fcGFnZSgpIG9uIGFueSBQRk4gaW4gdGhlCiYjNDM7ICogc3Bhbm5lZCB6b25lIHdpdGhvdXQgcmVxdWlyaW5nIHBmbl92YWxpZCgpIG9yIHBmbl90b19vbmxpbmVfcGFnZSgpIGNoZWNrcy4KJiM0MzsgKgomIzQzOyAqIE5vdGUgdGhhdCBtaXNzaW5nIHN5bmNocm9uaXphdGlvbiB3aXRoIG1lbW9yeSBvZmZsaW5pbmcgbWFrZXMgYW55IFBGTgomIzQzOyAqIHRyYXZlcnNhbCBwcm9uZSB0byByYWNlcy4KJiM0MzsgKgomIzQzOyAqIFpPTkVfREVWSUNFIHpvbmVzIGFyZSBhbHdheXMgbWFya2VkIG5vbi1jb250aWd1b3VzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19jb250aWd1b3VzKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpvbmUtJmd0O2NvbnRpZ3VvdXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJaWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICh6b25lLSZndDtzcGFubmVkX3BhZ2VzID09IHpvbmUtJmd0O3BhZ2VzX3dpdGhfb25saW5lX21lbW1hcCkKJiM0MzsJCXpvbmUtJmd0O2NvbnRpZ3VvdXMgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJem9uZS0mZ3Q7Y29udGlndW91cyA9IGZhbHNlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBSZXR1cm5zIHRydWUgaWYgYSB6b25lIGhhcyBwYWdlcyBtYW5hZ2VkIGJ5IHRoZSBidWRkeSBhbGxvY2F0b3IuCiAgKiBBbGwgdGhlIHJlY2xhaW0gZGVjaXNpb25zIGhhdmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDE4MWU3OWYxZDZhMjA3Li5mOTMyYjc1NzdjOTJhYyAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC04MDUsMjEgJiM0Mzs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKQogewotCWlmICh6b25lLSZndDtjb250aWd1b3VzKQomIzQzOwlpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKQogCQlyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTsKIAogCXJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpOwogfQogCi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpOwogYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQotewotCXpvbmUtJmd0O2NvbnRpZ3VvdXMgPSBmYWxzZTsKLX0KLQogZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHZvaWQgX19wdXRiYWNrX2lzb2xhdGVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkgICAgaW50IG10KTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDdhYzE5ZmFiMjI2MzI0Li4zYTI4MWQ1OTUyMDcxMCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC00MjcsMTcgJiM0Mzs0MjcsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCWZvciAoOyBzdGFydF9wZm4gJmx0OyBlbmRfcGZuOyBzdGFydF9wZm4gJiM0Mzs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7Ci0JCWlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKQotCQkJY29udGludWU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV4dF9wZm47CiAKLQkJaWYgKHVubGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSAhPSBuaWQpKQotCQkJY29udGludWU7CiYjNDM7CWZvciAoOyBzdGFydF9wZm4gJmx0OyBlbmRfcGZuOyBzdGFydF9wZm4gPSBuZXh0X3BmbikgewomIzQzOwkJdW5zaWduZWQgbG9uZyB0YWlsX3BmbjsKJiM0MzsKJiM0MzsJCW5leHRfcGZuID0gc3RhcnRfcGZuICYjNDM7IFBBR0VTX1BFUl9TVUJTRUNUSU9OOwomIzQzOwkJdGFpbF9wZm4gPSBuZXh0X3BmbiAtIDE7CiAKLQkJaWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpKQomIzQzOwkJaWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpCiAJCQljb250aW51ZTsKIAotCQlyZXR1cm4gc3RhcnRfcGZuOwomIzQzOwkJaWYgKGxpa2VseShwZm5fdG9fbmlkKHN0YXJ0X3BmbikgPT0gbmlkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpCiYjNDM7CQkJcmV0dXJuIHN0YXJ0X3BmbjsKJiM0MzsKJiM0MzsJCWlmIChsaWtlbHkocGZuX3RvX25pZCh0YWlsX3BmbikgPT0gbmlkKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UodGFpbF9wZm4pKSkKJiM0MzsJCQlyZXR1cm4gc3RhcnRfcGZuOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDQ4LDIxICYjNDM7NDU1LDI2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKLQl1bnNpZ25lZCBsb25nIHBmbjsKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm4sIHByZXZfcGZuOwogCiAJLyogcGZuIGlzIHRoZSBlbmQgcGZuIG9mIGEgbWVtb3J5IHNlY3Rpb24uICovCiAJcGZuID0gZW5kX3BmbiAtIDE7Ci0JZm9yICg7IHBmbiAmZ3Q7PSBzdGFydF9wZm47IHBmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikgewotCQlpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSkKLQkJCWNvbnRpbnVlOwomIzQzOwlmb3IgKDsgcGZuICZndDs9IHN0YXJ0X3BmbjsgcGZuID0gcHJldl9wZm4pIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaGVhZF9wZm47CiAKLQkJaWYgKHVubGlrZWx5KHBmbl90b19uaWQocGZuKSAhPSBuaWQpKQotCQkJY29udGludWU7CiYjNDM7CQlwcmV2X3BmbiA9IHBmbiAtIFBBR0VTX1BFUl9TVUJTRUNUSU9OOwomIzQzOwkJaGVhZF9wZm4gPSBwcmV2X3BmbiAmIzQzOyAxOwogCi0JCWlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSkKJiM0MzsJCWlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHBmbikpKQogCQkJY29udGludWU7CiAKLQkJcmV0dXJuIHBmbjsKJiM0MzsJCWlmIChsaWtlbHkocGZuX3RvX25pZChwZm4pID09IG5pZCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpKQomIzQzOwkJCXJldHVybiBwZm47CiYjNDM7CiYjNDM7CQlpZiAobGlrZWx5KHBmbl90b19uaWQoaGVhZF9wZm4pID09IG5pZCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGhlYWRfcGZuKSkpCiYjNDM7CQkJcmV0dXJuIHBmbjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTU1NywxOCAmIzQzOzU2OSwxMyBAQCB2b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLAogCiAJLyoKIAkgKiBab25lIHNocmlua2luZyBjb2RlIGNhbm5vdCBwcm9wZXJseSBkZWFsIHdpdGggWk9ORV9ERVZJQ0UuIFNvCi0JICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayB0aGUgem9uZXMgLSB3aGljaCBpcyBva2F5IGFzCi0JICogc2V0X3pvbmVfY29udGlndW91cygpIGNhbm5vdCBkZWFsIHdpdGggWk9ORV9ERVZJQ0UgZWl0aGVyIHdheS4KJiM0MzsJICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC4KIAkgKi8KIAlpZiAoem9uZV9pc196b25lX2RldmljZSh6b25lKSkKIAkJcmV0dXJuOwogCi0JY2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpOwotCiAJc2hyaW5rX3pvbmVfc3Bhbih6b25lLCBzdGFydF9wZm4sIHN0YXJ0X3BmbiAmIzQzOyBucl9wYWdlcyk7CiAJdXBkYXRlX3BnZGF0X3NwYW4ocGdkYXQpOwotCi0Jc2V0X3pvbmVfY29udGlndW91cyh6b25lKTsKIH0KIAogLyoqCkBAIC03NDYsOCAmIzQzOzc1Myw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtJmd0O3pvbmVfcGdkYXQ7CiAJaW50IG5pZCA9IHBnZGF0LSZndDtub2RlX2lkOwogCi0JY2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpOwotCiAJaWYgKHpvbmVfaXNfZW1wdHkoem9uZSkpCiAJCWluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CiAJcmVzaXplX3pvbmVfcmFuZ2Uoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CkBAIC03NzUsOCAmIzQzOzc4MCw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJbWVtbWFwX2luaXRfcmFuZ2UobnJfcGFnZXMsIG5pZCwgem9uZV9pZHgoem9uZSksIHN0YXJ0X3BmbiwgMCwKIAkJCSBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsCiAJCQkgaXNvbGF0ZV9wYWdlYmxvY2spOwotCi0Jc2V0X3pvbmVfY29udGlndW91cyh6b25lKTsKIH0KIAogc3RydWN0IGF1dG9fbW92YWJsZV9zdGF0cyB7CkBAIC0xMDcyLDYgJiM0MzsxMDc1LDcgQEAgdm9pZCBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCwKIAlpZiAoZWFybHlfc2VjdGlvbihfX3Bmbl90b19zZWN0aW9uKHBhZ2VfdG9fcGZuKHBhZ2UpKSkpCiAJCXpvbmUtJmd0O3ByZXNlbnRfZWFybHlfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzOwogCXpvbmUtJmd0O3ByZXNlbnRfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwl6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXAgJiM0Mzs9IG5yX3BhZ2VzOwogCXpvbmUtJmd0O3pvbmVfcGdkYXQtJmd0O25vZGVfcHJlc2VudF9wYWdlcyAmIzQzOz0gbnJfcGFnZXM7CiAKIAlpZiAoZ3JvdXAgJmFtcDsmYW1wOyBtb3ZhYmxlKQpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IGYxYWZlMDIzZTRlNzIxLi43M2QxZmRlMTcwNDA1MCAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtOTE2LDYgJiM0Mzs5MTYsNDAgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmUKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKJiM0MzsJCQkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKJiM0MzsJCQkJCQkgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyAqaG9sZV9wZm4pCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKJiM0MzsJdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BmbiA9IHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuOwomIzQzOwl1bnNpZ25lZCBsb25nIHpvbmVfZW5kX3BmbiA9IHpvbmVfc3RhcnRfcGZuICYjNDM7IHpvbmUtJmd0O3NwYW5uZWRfcGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3ViX3N0YXJ0LCBzdWJfZW5kOwomIzQzOwomIzQzOwlzdWJfc3RhcnQgPSBtYXgoQUxJR05fRE9XTihzdGFydF9wZm4sIFBBR0VTX1BFUl9TVUJTRUNUSU9OKSwKJiM0MzsJCQl6b25lX3N0YXJ0X3Bmbik7CiYjNDM7CXN1Yl9lbmQgPSBtaW4oQUxJR04oZW5kX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLCB6b25lX2VuZF9wZm4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3IgYW4gaW4tem9uZSBob2xlIHNtYWxsZXIgdGhhbiBhIHN1YnNlY3Rpb24sIHRoZSBhZGphY2VudAomIzQzOwkgKiBtZW1ibG9jayByYW5nZXMgc2hhcmUgYSBzdWJzZWN0aW9uLiBBdm9pZCBjb3VudGluZyB0aGUgc2FtZQomIzQzOwkgKiBzdWJzZWN0aW9uJiMzOTtzIHBhZ2VzIHR3aWNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCpob2xlX3BmbiAmZ3Q7IHpvbmVfc3RhcnRfcGZuKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHByZXZfc3ViX2VuZDsKJiM0MzsKJiM0MzsJCXByZXZfc3ViX2VuZCA9IG1pbihBTElHTigqaG9sZV9wZm4sIFBBR0VTX1BFUl9TVUJTRUNUSU9OKSwKJiM0MzsJCQkJICAgem9uZV9lbmRfcGZuKTsKJiM0MzsJCXN1Yl9zdGFydCA9IG1heChzdWJfc3RhcnQsIHByZXZfc3ViX2VuZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHN1Yl9zdGFydCAmbHQ7IHN1Yl9lbmQpCiYjNDM7CQl6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXAgJiM0Mzs9IHN1Yl9lbmQgLSBzdWJfc3RhcnQ7CiYjNDM7I2Vsc2UKJiM0MzsJem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbiwKQEAgLTkzMiw2ICYjNDM7OTY2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsCiAJaWYgKHN0YXJ0X3BmbiAmZ3Q7PSBlbmRfcGZuKQogCQlyZXR1cm47CiAKJiM0MzsJdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIGVuZF9wZm4sIGhvbGVfcGZuKTsKJiM0MzsKIAltZW1tYXBfaW5pdF9yYW5nZShlbmRfcGZuIC0gc3RhcnRfcGZuLCBuaWQsIHpvbmVfaWQsIHN0YXJ0X3BmbiwKIAkJCSAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpOwogCkBAIC0yMTk1LDI4ICYjNDM7MjIzMSw2IEBAIHZvaWQgX19pbml0IGluaXRfY21hX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKIH0KICNlbmRpZgogCi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpCi17Ci0JdW5zaWduZWQgbG9uZyBibG9ja19zdGFydF9wZm4gPSB6b25lLSZndDt6b25lX3N0YXJ0X3BmbjsKLQl1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47Ci0KLQlibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTsKLQlmb3IgKDsgYmxvY2tfc3RhcnRfcGZuICZsdDsgem9uZV9lbmRfcGZuKHpvbmUpOwotCQkJYmxvY2tfc3RhcnRfcGZuID0gYmxvY2tfZW5kX3BmbiwKLQkJCSBibG9ja19lbmRfcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHsKLQotCQlibG9ja19lbmRfcGZuID0gbWluKGJsb2NrX2VuZF9wZm4sIHpvbmVfZW5kX3Bmbih6b25lKSk7Ci0KLQkJaWYgKCFfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShibG9ja19zdGFydF9wZm4sCi0JCQkJCSAgICAgYmxvY2tfZW5kX3Bmbiwgem9uZSkpCi0JCQlyZXR1cm47Ci0JCWNvbmRfcmVzY2hlZCgpOwotCX0KLQotCS8qIFdlIGNvbmZpcm0gdGhhdCB0aGVyZSBpcyBubyBob2xlICovCi0Jem9uZS0mZ3Q7Y29udGlndW91cyA9IHRydWU7Ci19Ci0KIC8qCiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlCiAgKiBOVU1BIG5vZGVzLiBTcGVjaWZ5IHRoZSBAbmlkIGFyZ3VtZW50IGlmIGl0IGlzIGtub3duIHRoYXQgdGhpcwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDMyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgY3J1Y2lhbCBzdHVmZiDigJMgbWVtb3J5IGhvdHBsdWcgYW5kIGhvdyB0aGUga2VybmVsIHRyYWNrcyB6b25lIGNvbnRpZ3VpdHkuIEludGVyZXN0aW5nLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY291bnRlciwgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIHdpdGhpbiB0aGUgYHN0cnVjdCB6b25lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gQmFzaWNhbGx5IGl0IGlzIGdvaW5nIHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgd2F5IG9mIHZlcmlmeWluZyBjb250aWd1b3VzIG1lbW9yeSBieSBjb21wYXJpbmcgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSB6b25lIGFnYWluc3QgdGhlIG51bWJlciBvZiBwYWdlcyB3aXRoIG9ubGluZSBtZW1vcnkgbWFwcy4KClJpZ2h0LCBzbyB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGhvdyBgc2V0X3pvbmVfY29udGlndW91c2Agb3BlcmF0ZXMuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzaGlmdCwgYW5kIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyBnb2luZyB0byBiZSBmYXN0ZXIsIHNsb3dlciwgYW5kIHRoZSBpbXBsaWNhdGlvbnMuIEluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggcGFnZWJsb2NrcyB0byBsb29rIGZvciBob2xlcywgaXQmIzM5O3MganVzdCBhIHNpbXBsZSBjb21wYXJpc29uIG5vdy4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4KCk9rYXksIGFuZCBpdCBsb29rcyBsaWtlIHRoZXnigJl2ZSBvcHRpbWl6ZWQgYGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm5gIGFuZCBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYCBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgYXMgd2VsbC4gU2VlbXMgbGlrZSBpdCBoYXMgc29tZSBuaWNlIG9wdGltaXphdGlvbnMgaW4gdGhlcmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBjb2RlPyBJcyBpdCBmdW5jdGlvbmFsPyBJIG1lYW4sIGl0JiMzOTtzIHBva2luZyBhdCB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG90cGx1Zywgc28gSSYjMzk7ZCBzYXkgeWVhaCwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuIE1lbW9yeSBob3RwbHVnIGlzbiYjMzk7dCBzb21lIG9ic2N1cmUgZmVhdHVyZTsgeW91IGNhbiB0cmlnZ2VyIGl0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgcmlnaHQ/IFN5c2ZzIG9yIEFDUEksIHRoYXTigJlzIGdvaW5nIHRvIHRyaXAgYWxsIHRoaXMuIEFuZCB0aGUgY2hhbmdlcyB0byB0aG9zZSBgZmluZF8uLi5gIGZ1bmN0aW9ucz8gVG90YWxseSBmdW5jdGlvbmFsIGR1cmluZyBob3RwbHVnLiBBbmQgYHNldF96b25lX2NvbnRpZ3VvdXNgIHRvby4KCk5vdywgd2hhdCBhYm91dCBmdXp6aW5nIHRoaXM/IFdvcnRoIHRoZSBlZmZvcnQ/IEFic29sdXRlbHkuIEFueSBjaGFuZ2UgaW4gdGhpcyBhcmVhIGNhbiBoYXZlIG5hc3R5IGNvbnNlcXVlbmNlcyBpZiB0aGVyZSBhcmUgaG9sZXMsIHNvIGxldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGRvIGluIHRoYXQgcmVnYXJkLgoKTGV0JiMzOTtzIGxvb2sgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE9idmlvdXMgY2FuZGlkYXRlIGlzIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCByaWdodD8gVGltZSB0byBjaGVjayBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgYW5kIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTU9SWV9IT1RQTFVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTYyPXBhZ2UtYWxsb2MtJChDT05GSUdfU0hVRkZMRV9QQUdFX0FMTE9DQVRPUikgJiM0Mzs9IHNodWZmbGUub1xuLS1cbm1tL01ha2VmaWxlLTY0LSMgR2l2ZSAmIzM5O21lbW9yeV9ob3RwbHVnJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxubW0vTWFrZWZpbGU6NjU6bWVtb3J5LWhvdHBsdWctJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICYjNDM7PSBtZW1vcnlfaG90cGx1Zy5vXG5tbS9NYWtlZmlsZS02Ni1cbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYz05OT1zdGF0aWMgaW50IHZtZW1tYXBfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMjUtXHQgKi9cbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjEyNjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1PUllfSE9UUExVRykgXHUwMDI2XHUwMDI2IHVubGlrZWx5KCF2bWVtbWFwX3dhbGstXHUwMDNlbnJfd2Fsa2VkKSkge1xubW0vaHVnZXRsYl92bWVtbWFwLmMtMTI3LVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGhlYWQgPyBoZWFkICYjNDM7IHB0ZV9pbmRleChhZGRyKSA6XG4tLVxubW0va2FzYW4vc2hhZG93LmM9MTYzPXZvaWQga2FzYW5fdW5wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgaW5pdClcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYy0xODQtXG5tbS9rYXNhbi9zaGFkb3cuYzoxODU6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xubW0va2FzYW4vc2hhZG93LmMtMTg2LXN0YXRpYyBib29sIHNoYWRvd19tYXBwZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9NjQ5PUVYUE9SVF9TWU1CT0xfR1BMKHJlc3RvcmVfb25saW5lX3BhZ2VfY2FsbGJhY2spO1xubW0vbWVtb3J5X2hvdHBsdWcuYy02NTAtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjY1MTovKiB3ZSBhcmUgT0sgY2FsbGluZyBfX21lbWluaXQgc3R1ZmYgaGVyZSAtIHdlIGhhdmUgQ09ORklHX01FTU9SWV9IT1RQTFVHICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTY1Mi12b2lkIGdlbmVyaWNfb25saW5lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTExNDE9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyNTUtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEyNTY6Lyogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjU3LXN0YXRpYyBwZ19kYXRhX3QgKmhvdGFkZF9pbml0X3BnZGF0KGludCBuaWQpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNDQ0PXN0YXRpYyBpbnQgY3JlYXRlX2FsdG1hcHNfYW5kX21lbW9yeV9ibG9ja3MoaW50IG5pZCwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDk1LSAqXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE0OTY6ICogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVR1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDk3LSAqL1xuLS1cbm1tL21tX2luaXQuYz0xMjc3PXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9tZW1vcnlsZXNzX25vZGVfdG90YWxwYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL21tX2luaXQuYy0xMjg0LVx0XHR6LVx1MDAzZXByZXNlbnRfcGFnZXMgPSAwO1xubW0vbW1faW5pdC5jOjEyODU6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxubW0vbW1faW5pdC5jLTEyODYtXHRcdHotXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyA9IDA7XG4tLVxubW0vbW1faW5pdC5jPTEzMTk9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS9tbV9pbml0LmMtMTM0OC1cdFx0em9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzID0gcmVhbF9zaXplO1xubW0vbW1faW5pdC5jOjEzNDk6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxubW0vbW1faW5pdC5jLTEzNTAtXHRcdHpvbmUtXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyA9IHJlYWxfc2l6ZTtcbi0tXG5tbS9tbV9pbml0LmM9MTUwNj12b2lkIF9faW5pdCBzZXRfcGFnZWJsb2NrX29yZGVyKHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTE1MTgtICovXG5tbS9tbV9pbml0LmM6MTUxOTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXG5tbS9tbV9pbml0LmMtMTUyMC12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xNTg4PXZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTE2MDItXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzoxNjAzOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2VfYWxsb2MuYy0xNjA0LVx0ICAgIHVubGlrZWx5KGNvbnRleHQgPT0gTUVNSU5JVF9IT1RQTFVHKSkge1xuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmM9NjA0PXZvaWQgX19pbml0IHNwYXJzZV9pbml0X3N1YnNlY3Rpb25fbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmMtNjI2LVxubW0vc3BhcnNlLXZtZW1tYXAuYzo2Mjc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xubW0vc3BhcnNlLXZtZW1tYXAuYy02MjgtXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYz05MTc9dm9pZCBzcGFyc2VfcmVtb3ZlX3NlY3Rpb24odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vc3BhcnNlLXZtZW1tYXAuYy05MjYtfVxubW0vc3BhcnNlLXZtZW1tYXAuYzo5Mjc6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZ29vZCBudW1iZXIgb2YgZmlsZXMg4oCTIHNwZWNpZmljYWxseSwgYG1tL21lbW9yeV9ob3RwbHVnLmNgLCBgbW0vbW1faW5pdC5jYCwgYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYW5kIGBtbS9pbnRlcm5hbC5oYC4gQmFzZWQgb24gdGhlIGZpbGUgbGlzdCwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBtZW1vcnkgaG90cGx1ZyBhbmQgdGhlIHJlbGF0ZWQgem9uZSBjb250aWd1aXR5IHRyYWNraW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBrZWVwaW5nIHRyYWNrIG9mIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zIHdoZW4geW91JiMzOTtyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgdGhlbSBvbiB0aGUgZmx5IGlzIGNydWNpYWwgZm9yIGVmZmljaWVudCByZXNvdXJjZSBtYW5hZ2VtZW50LgoKVGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gd2F0Y2ggb3V0IGZvciB3aWxsIGJlIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLCBvYnZpb3VzbHkuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gaG93IGl0JiMzOTtzIHVzZWQgdGhyb3VnaG91dCB0aGUgY2hhbmdlcy4KCkkgc2VlIHRoYXQgYENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUGAgaXMgYWxzbyBpbXBsaWNhdGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2AgZnVuY3Rpb24gaW4gYG1tL21tX2luaXQuY2AuIFRoYXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGlzIGhvdHBsdWcgd29yayBhbmQgc3BhcnNlIG1lbW9yeSBjb25maWd1cmF0aW9ucyB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IuCgpOb3csIEkmIzM5O2xsIGZvY3VzIG9uIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIHNwZWNpZmljYWxseSwgYmVjYXVzZSBJIHN1c3BlY3QgaXQgbWlnaHQgY29udGFpbiBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgaGF2ZSB0byBkZWx2ZSBpbnRvIHRoYXQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgY29uZGl0aW9uYWxzIEkgbmVlZCB0byB1bmRlcnN0YW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1PUllfSE9UUExVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19OVU1BKVx0JiM0Mzs9IG5vZGUub1xuZHJpdmVycy9iYXNlL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19NRU1PUllfSE9UUExVRykgJiM0Mzs9IG1lbW9yeS5vXG5kcml2ZXJzL2Jhc2UvTWFrZWZpbGUtMTctaWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTIwNz1pbnQgbWVtb3J5X25vdGlmeShlbnVtIG1lbW9yeV9ibG9ja19zdGF0ZSBzdGF0ZSwgdm9pZCAqdilcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjExLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjIxMjojaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yMTMtc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtYmxrX25yX3BvaXNvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xMjAyPWludCB3YWxrX2R5bmFtaWNfbWVtb3J5X2dyb3VwcyhpbnQgbmlkLCB3YWxrX21lbW9yeV9ncm91cHNfZnVuY190IGZ1bmMsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTEyMjMtXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MTIyNDojaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xMjI1LXZvaWQgbWVtYmxrX25yX3BvaXNvbl9pbmModW5zaWduZWQgbG9uZyBwZm4pXG4tLVxuZHJpdmVycy9iYXNlL25vZGUuYz0xMDk9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm5vZGVfYWNjZXNzX25vZGVfZ3JvdXBzW10gPSB7XG4tLVxuZHJpdmVycy9iYXNlL25vZGUuYy0xMTQtXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjExNTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTExNi1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChub2RlX2NoYWluKTtcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTc2ND1pbnQgdW5yZWdpc3Rlcl9jcHVfdW5kZXJfbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbmlkKVxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmMtNzgyLVxuZHJpdmVycy9iYXNlL25vZGUuYzo3ODM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xuZHJpdmVycy9iYXNlL25vZGUuYy03ODQtc3RhdGljIHZvaWQgZG9fcmVnaXN0ZXJfbWVtb3J5X2Jsb2NrX3VuZGVyX25vZGUoaW50IG5pZCxcbi0tXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTg2ND12b2lkIHJlZ2lzdGVyX21lbW9yeV9ibG9ja3NfdW5kZXJfbm9kZV9ob3RwbHVnKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbmRyaXZlcnMvYmFzZS9ub2RlLmMtODcwLX1cbmRyaXZlcnMvYmFzZS9ub2RlLmM6ODcxOiNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi9cbmRyaXZlcnMvYmFzZS9ub2RlLmMtODcyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgaG90cGx1ZyBzaXR1YXRpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgYENPTkZJR19NRU1PUllfSE9UUExVR2AsIG9idmlvdXNseS4gQnV0IGhvbGQgb24sIEkgc2VlIGBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBgIG1lbnRpb25lZCB0b28uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQmIzM5O3MgYSAqaGFyZCogcmVxdWlyZW1lbnQgb3IgaWYgaXQganVzdCBjaGFuZ2VzIHRoZSBpbXBsZW1lbnRhdGlvbi4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG1tL21tX2luaXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXNgIGZ1bmN0aW9uLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBgIGRlZmluaXRlbHkgYWZmZWN0cyB0aGUgY29kZSBwYXRoLiBXaXRob3V0IGl0LCB3ZSYjMzk7cmUgZG9pbmcgYSBzaW1wbGUgaW5jcmVtZW50LiBXaXRoIGl0Li4uIHdlbGwsIGl0JiMzOTtzIGRpZmZlcmVudC4gTm90IHN0cmljdGx5ICpyZXF1aXJlZCosIGl0IHNlZW1zLCBidXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBiZWhhdmlvciBzaWduaWZpY2FudGx5LiBJIHRoaW5rIHdlIGNhbiBpbmNsdWRlIHRoYXQgd2l0aG91dCBhIHByb2JsZW0uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB0aGUgY29yZSBvZiB0aGlzLiBGcm9tIHdoYXQgSSBzZWUsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gYG1lbW9yeV9ibG9ja19vbmxpbmVgLCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLCBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAsIGBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5gLCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGZvciBtYW5hZ2luZyBtZW1vcnkgc2VjdGlvbnMuCgpUaW1lIHRvIHNlZSBob3cgdGhvc2UgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGFuZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gQXJlIHRoZXkgZXhwb3J0ZWQsIG9yIGFyZSB0aGV5IHN0YXRpYyB3aXRoaW4gdGhlaXIgbW9kdWxlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIHNvdXJjZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiBgZHJpdmVycy9iYXNlL21lbW9yeS5jYC4gWWVwLCBzdGF0aWMuIE9rYXksIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgbm93LiBMZXQmIzM5O3MgdHJhY2UgdGhlaXIgdXNhZ2UgYW5kIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5X2Jsb2NrX29ubGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9MjE1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1ibGtfbnJfcG9pc29uKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjIzLSAqL1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjIyNDpzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTIyNS17XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTMzMj1tZW1vcnlfYmxvY2tfYWN0aW9uKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwgdW5zaWduZWQgbG9uZyBhY3Rpb24pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMzNy1cdGNhc2UgTUVNX09OTElORTpcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMzg6XHRcdHJldCA9IG1lbW9yeV9ibG9ja19vbmxpbmUobWVtKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMzktXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDcyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRnV6emluZyB0aGUgTWVtb3J5IFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBgbWVtb3J5X2Jsb2NrX2FjdGlvbmAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLiAgSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGBtZW1vcnlfc3Vic3lzX29ubGluZWAgYW5kIGBtZW1vcnlfc3Vic3lzX29mZmxpbmVgLiAgQWhhISBBbmQgKnRob3NlKiBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aGVuIHN5c2ZzIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3N0YXRlYCBpcyB3cml0dGVuIHRvLiAgVGhhdCYjMzk7cyBteSBhdHRhY2sgdmVjdG9yISAgSWYgSSB3YW50IHRvIGZ1enogdGhpcyBwcm9wZXJseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGhhbW1lcmluZyBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBsb2dpYyBpcy4gIFRoaXMgc291bmRzIGxpa2UgYSBnb29kIGFwcHJvYWNoLgoKTm93LCBsZXQmIzM5O3MgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgYGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm5gIGFuZCBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYCBmdW5jdGlvbnMuIFRoZXNlIGNvdWxkIGJlIHBvdGVudGlhbCBhcmVhcyBmb3IgaW50ZXJlc3RpbmcgaXNzdWVzIHRvbywgYW5kIEkmIzM5O2QgbGlrZSB0byB1bmRlcnN0YW5kIHdoYXQgcm9sZSB0aGV5IHBsYXkgaW4gdGhlIG92ZXJhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0zODE9aW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNDI1LS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6NDI2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTQyNy1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz00ODM9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy00OTUtXHRcdCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzo0OTY6XHRcdHBmbiA9IGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4obmlkLCB6b25lLCBlbmRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy00OTctXHRcdFx0XHRcdFx0em9uZV9lbmRfcGZuKHpvbmUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNzMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgTWVtb3J5IEhvdHBsdWcgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IGhvdHBsdWcgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSByZW1vdmluZyBwYWdlIGZyYW1lIG51bWJlcnMgKFBGTnMpIGZyb20gYSB6b25lLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYCB0aGF0IGdldCBpbnZva2VkIGR1cmluZyB0aGlzIHByb2Nlc3MuIEkmIzM5O3ZlIHRyYWNlZCB0aGUgY2FsbCBzdGFjaywgc28gSSBrbm93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHRyaWdnZXJlZCBieSBgc2hyaW5rX3pvbmVfc3BhbmAuIFRoYXQgaW4gdHVybiBpcyBjYWxsZWQgYnkgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYC4gRGl2aW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgIGlzIGEgZGlyZWN0IGNhbGxlciBvZiBgX19yZW1vdmVfcGFnZXNgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHByb2Nlc3MuIEFuZCBmaW5hbGx5LCBgX19yZW1vdmVfcGFnZXNgIGlzIHRoZSBkaXJlY3QgcGFyZW50IG9mIGBvZmZsaW5lX3BhZ2VzYCBhbmQgYGFyY2hfcmVtb3ZlX21lbW9yeWAsIHdoaWNoIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgZm9yIHJlbW92aW5nIG1lbW9yeS4KCk5vdywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgcmVhbGxvY2F0aW5nIHRoZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiByZW1vdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTczND1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdGlvbl90YWludF96b25lX2RldmljZSh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc0Ny0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6NzQ4OnZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc0OS1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTEwODc9aW50IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDk2LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMDk3Olx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzLCBOVUxMLCBNSUdSQVRFX1VOTU9WQUJMRSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA5OC1cdFx0XHQgICAgICAgZmFsc2UpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MT1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE2OC1cdC8qIGFzc29jaWF0ZSBwZm4gcmFuZ2Ugd2l0aCB0aGUgem9uZSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxMTY5Olx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzLCBOVUxMLCBNSUdSQVRFX01PVkFCTEUsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExNzAtXHRcdFx0ICAgICAgIHRydWUpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MjE4OT12b2lkIHRyeV9vZmZsaW5lX25vZGUoaW50IG5pZClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxOTQtXHQgKiBJZiB0aGUgbm9kZSBzdGlsbCBzcGFucyBwYWdlcyAoZXNwZWNpYWxseSBaT05FX0RFVklDRSksIGRvbiYjMzk7dFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMTk1Olx0ICogb2ZmbGluZSBpdC4gQSBub2RlIHNwYW5zIG1lbW9yeSBhZnRlciBtb3ZlX3Bmbl9yYW5nZV90b196b25lKCksXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxOTYtXHQgKiBlLmcuLCBhZnRlciB0aGUgbWVtb3J5IGJsb2NrIHdhcyBvbmxpbmVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gaXMgd29ya2luZyBoZXJlLiBJdCBsb29rcyBsaWtlIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBtYWluIHBsYWNlczogYG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlgIGFuZCBgb25saW5lX3BhZ2VzYC4gVGhhdCB0ZWxscyBtZSB0aGVzZSBhcmUgdGhlIHBvaW50cyB3aGVyZSB3ZSYjMzk7cmUgc2hpZnRpbmcgYXJvdW5kIHBoeXNpY2FsIHBhZ2UgZnJhbWVzIChQRk5zKSBiZXR3ZWVuIG1lbW9yeSB6b25lcy4KClRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24sIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgSSBzaG91bGQgY2hlY2ssIGdpdmVuIHRoZSBjYWxsIGhpZXJhcmNoeSBvZiBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAuIFRoZXNlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGJsb2NrcyBhcmUgYnJvdWdodCBvbmxpbmUgYW5kIG9mZmxpbmUsIGFuZCBob3cgUEZOIHJhbmdlcyBhcmUgaWRlbnRpZmllZCBhbmQgbWFuaXB1bGF0ZWQ6CgotICAgYG1lbW9yeV9ibG9ja19vbmxpbmVgCi0gICBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgCi0gICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAKLSAgIGBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5gCi0gICBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgCi0gICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAKLSAgIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYAoKSSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBjb25maXJtIGlmIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyBpZiBpdCBpcyBzdGF0aWMgd2lsbCBoZWxwIHdpdGggdGhlIHNjb3BlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz04NTI9dm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTkxOC1cbm1tL21tX2luaXQuYzo5MTk6c3RhdGljIHZvaWQgX19pbml0IHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtOTIwLVx0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL21tX2luaXQuYz05NTM9c3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTk2OC1cbm1tL21tX2luaXQuYzo5Njk6XHR1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzKHpvbmUsIHN0YXJ0X3BmbiwgZW5kX3BmbiwgaG9sZV9wZm4pO1xubW0vbW1faW5pdC5jLTk3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCB5ZXMsIHRoaXMgZGVmaW5pdGVseSBsb29rcyBsaWtlIGl0IGludm9sdmVzIHN0YXRpYyBjb25maWd1cmF0aW9ucy4gSG1tLCBsZXQgbWUgc2VlLi4uIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBwbGF5IGhlcmU/IEFoLCBJIHNlZSBgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQYCBpcyBiZWluZyB1dGlsaXplZC4gUmlnaHQsIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jb3Jwb3JhdGUgdGhhdCBpbnRvIG15IHVuZGVyc3RhbmRpbmcuIFBsdXMsIG9mIGNvdXJzZSwgdGhlIGJpZyBvbmUsIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLgoKU28sIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gY2xlYXJseS4gQmFzZWQgb24gbXkgYW5hbHlzaXMsIHRoZSBmb2xsb3dpbmcgYXBwbGllczoKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLCBhYnNvbHV0ZWx5LgoqICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGFmZmVjdGluZyBob3cgdGhlIHN5c3RlbSB0cmFja3Mgem9uZSBjb250aWd1aXR5IGFuZCBob3cgaXQgbG9jYXRlcyBzZWN0aW9uIFBGTnMuIFRoaXMgaXMgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBzdWJ0bGUgaXNzdWVzIGNhbiBoYXZlIGEgbWFzc2l2ZSBpbXBhY3QuIEZ1cnRoZXJtb3JlLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBsaWtlbHkgaW52b2x2ZWQgd2l0aCBob3RwbHVnIG9wZXJhdGlvbnMsIGEgY29tbW9uIGZlYXR1cmUgZm91bmQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoqICAgKipGb2N1c1N5bWJvbHMqKjogT2theSwgc28gdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgYXJlOgogICAgKiAgIGBtZW1vcnlfYmxvY2tfb25saW5lYAogICAgKiAgIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAKICAgICogICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAKICAgICogICBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYAogICAgKiAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAKICAgICogICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAKICAgICogICBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2AKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIHRyaWdnZXIgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGFyZToKICAgICogICBgTUVNT1JZX0hPVFBMVUdgCiAgICAqICAgYFNQQVJTRU1FTV9WTUVNTUFQYAoKSSYjMzk7bSBqdXN0IGdvaW5nIHRvIGRvdWJsZSBjaGVjayByZWFsIHF1aWNrIHRvIG1ha2Ugc3VyZSBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGFjdHVhbGx5IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24gd2l0aGluIHRoZSBrZXJuZWwuIENhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbi0tXG5tbS9LY29uZmlnLTQ1NC1cbm1tL0tjb25maWc6NDU1OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDU2LVx0Ym9vbFxubW0vS2NvbmZpZy00NTctXG5tbS9LY29uZmlnOjQ1ODpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNDY1LVxubW0vS2NvbmZpZzo0NjY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVRcbm1tL0tjb25maWctNDY3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEJsb2NrIE1hbmFnZW1lbnQgaW4gTGludXgqKgoKT2theSwgc28gYFNQQVJTRU1FTV9WTUVNTUFQYCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbjsgdGhhdCYjMzk7cyBnb29kIHRvIGVzdGFibGlzaCByaWdodCBhd2F5LiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWVzIGZvciB0aGUgbWVtb3J5IGJsb2NrIG9ubGluZS9vZmZsaW5lIG9wZXJhdGlvbnMuIEEgcXVpY2sgY2hlY2sgb2YgYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AgY29uZmlybXMgdGhhdCBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAgYXJlLCBpbiBmYWN0LCB0aGUgZnVuY3Rpb25zIEkmIzM5O20gbG9va2luZyBmb3IuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHNldF96b25lX2NvbnRpZ3VvdXNgIGFuZCBgY2xlYXJfem9uZV9jb250aWd1b3VzYCBhcmUgYmVpbmcgdXNlZC4gQWgsIHJpZ2h0LCB0aGV5JiMzOTtyZSBkZWZpbmVkIGFzIGlubGluZSBmdW5jdGlvbnMgaW4gYGluY2x1ZGUvbGludXgvbW16b25lLmhgLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZSBmb3IgZGlyZWN0IGZ1enppbmcsIGJ1dCBpdCYjMzk7cyBub3QgYSBzaG93c3RvcHBlci4gQmVjYXVzZSB0aGV5IGFyZSBpbmxpbmVkLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVpciBjYWxsaW5nIGZ1bmN0aW9ucy4gU2luY2UgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGFuZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgICpkbyogY2FsbCB0aGVtLCB0aG9zZSB3aWxsIGJlIG15IHByaW1hcnkgdGFyZ2V0cy4KClRvIGVuc3VyZSBJJiMzOTttIGdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIHNob3VsZCBub3cgY2hlY2sgZm9yIGFueSBvdGhlciBjYWxsZXJzIG9mIGBzZXRfem9uZV9jb250aWd1b3VzYCBhbmQgYGNsZWFyX3pvbmVfY29udGlndW91c2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgaGVyZSB0aGF0IGFyZSBlc2NhcGluZyBteSBub3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF96b25lX2NvbnRpZ3VvdXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTIyND1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNzMtb3V0OlxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI3NDpcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjc1LVx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMyMS1vdXQ6XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzIyOlx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMjMtXHRtZW1faG90cGx1Z19kb25lKCk7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNzEzPXN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNzE3LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNzE4OnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNzE5LXtcbi0tXG5tbS9tbV9pbml0LmM9MjI2MD12b2lkIF9faW5pdCBwYWdlX2FsbG9jX2luaXRfbGF0ZSh2b2lkKVxuLS1cbm1tL21tX2luaXQuYy0yMjk2LVx0Zm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSlcbm1tL21tX2luaXQuYzoyMjk3Olx0XHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xubW0vbW1faW5pdC5jLTIyOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzAyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQWRkaW5nIGBzZXRfem9uZV9jb250aWd1b3VzYCB0byB0aGUgRm9jdXMgTGlzdCoqCgpBbHJpZ2h0LCBzbyBgcGFnZV9hbGxvY19pbml0X2xhdGVgIGlzIGNhbGxpbmcgYHNldF96b25lX2NvbnRpZ3VvdXNgLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCB1c2VmdWwuIEkgc2hvdWxkIGRlZmluaXRlbHkgYWRkIHRoYXQgdG8gbXkgbWVudGFsIEZvY3VzU3ltYm9scyBsaXN0LiBUaGF04oCZcyBwcm9iYWJseSBpbXBvcnRhbnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSB3YW50IHRvIGtlZXAgdGhvc2Uga2V5IGZ1bmN0aW9ucyBlYXNpbHkgYWNjZXNzaWJsZSBpbiBteSBtaW5kIHdoZW4gSSYjMzk7bSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBhbmQgY29udGlndW91cyBtZW1vcnkuCgpOb3csIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgb24gYGNsZWFyX3pvbmVfY29udGlndW91c2AganVzdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB0aGVyZS4gSSBzaG91bGQgcHJvYmFibHkgaGF2ZSBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBlYXNpbHkgYWNjZXNzaWJsZSBpbiBteSBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbGVhcl96b25lX2NvbnRpZ3VvdXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTIyND1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNDgtXHRtZW1faG90cGx1Z19iZWdpbigpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI0OTpcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNTAtXHRpZiAobnJfdm1lbW1hcF9wYWdlcykge1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMS1cdG1lbV9ob3RwbHVnX2JlZ2luKCk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzAyOlx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMy1cdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTcxOD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE3MjUtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE3MjY6c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTcyNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFuYWx5emluZyBgY2xlYXJfem9uZV9jb250aWd1b3VzYCBDYWxsZXJzIGFuZCBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIHRoZSBjb2RlIGlzIHRlbGxpbmcgbWUgdGhhdCBvbmx5IGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBhcmUgY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgYW5kIGltcGFjdC4gSXQgbWVhbnMgSSBjYW4gcHJvYmFibHkga2VlcCBteSBhbmFseXNpcyBwcmV0dHkgZm9jdXNlZCwgYXQgbGVhc3QgaW5pdGlhbGx5LiBUaG9zZSB0d28gY2FsbGVycyBhcmUgdGhlIGtleS4KCk5vdywgd2hlcmUgZG9lcyB0aGF0IGxlYWQgbWU/IEFoLCB5ZXMsIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyByZWxhdGVkIHRvIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGFuZCB0aGUgY29udGV4dCB0aG9zZSBjYWxscyBhcmUgYmVpbmcgbWFkZS4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJwbGF5IHRoZXJlLCBtYXliZSBldmVuIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIG9yIHNvbWUgc3VidGxldHkgaW4gaG93IHBhZ2UgY291bnRzIGFyZSBtYW5hZ2VkLCBnaXZlbiB0aGUgJiMzNDtvbmxpbmUmIzM0OyBhbmQgJiMzNDtvZmZsaW5lJiMzNDsgbmFtaW5nLiBDb3VsZCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZGlnIGludG8uIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xMDQ1PXN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLCBpbnQgbmlkLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA2NC0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTA2NTp2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDY2LVx0XHRcdCAgICAgICBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MT1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIwNC1cdG9ubGluZV9wYWdlc19yYW5nZShwZm4sIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIwNTpcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIwNi1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDY9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDY2LVx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCAtbWFuYWdlZF9wYWdlcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIwNjc6XHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIGdyb3VwLCAtbnJfcGFnZXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxMAoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIGFuZCBTb2xpZGlmeWluZyBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBTeW1ib2xzKioKClJpZ2h0LCBzbyBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAgZ2V0cyB1cGRhdGVkIHRvIGFsc28gbWFuYWdlIGB6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXBgLiBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aGF0IHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0aGF0JiMzOTtzIGNydWNpYWwuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBvdmVyIHRoZSBleGlzdGluZyBsaXN0OgoKKiAgIGBtZW1vcnlfYmxvY2tfb25saW5lYAoqICAgYG1lbW9yeV9ibG9ja19vZmZsaW5lYAoqICAgYGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm5gCiogICBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYAoqICAgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYAoqICAgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgCiogICBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2AKKiAgIGBwYWdlX2FsbG9jX2luaXRfbGF0ZWAKKiAgIGBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50YAoKWWVhaCwgdGhpcyBpcyBsb29raW5nIHByZXR0eSBnb29kLiBUaGlzIGNvdmVycyBhIGNvbXByZWhlbnNpdmUgc2V0IG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG9ubGluZSBtZW1vcnksIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50LCBQRk4gbWFuaXB1bGF0aW9uLCBhbmQgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgcmVjZW50IGluY2x1c2lvbiBvZiBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAgbG9va3MgY29ycmVjdC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQsIHdlbGwtcm91bmRlZCBzZXQgb2Ygc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmsuIE5vdyBJIGNhbiBtb3ZlIG9uIHRvIGFjdHVhbGx5IHNldHRpbmcgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtTUEFSU0VNRU1fVk1FTU1BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9ibG9ja19vbmxpbmUmIzM0OywKICAgICYjMzQ7bWVtb3J5X2Jsb2NrX29mZmxpbmUmIzM0OywKICAgICYjMzQ7ZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbiYjMzQ7LAogICAgJiMzNDtmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4mIzM0OywKICAgICYjMzQ7cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUmIzM0OywKICAgICYjMzQ7bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSYjMzQ7LAogICAgJiMzNDt1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzJiMzNDssCiAgICAmIzM0O3BhZ2VfYWxsb2NfaW5pdF9sYXRlJiMzNDssCiAgICAmIzM0O2FkanVzdF9wcmVzZW50X3BhZ2VfY291bnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGhvdHBsdWcgbG9naWMsIHNwZWNpZmljYWxseSB6b25lIGNvbnRpZ3VpdHkgdHJhY2tpbmcgYW5kIHNlY3Rpb24gUEZOIGZpbmRpbmcuIFRoZXNlIHBhdGhzIGNhbiBiZSByZWFjaGVkIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBvcGVyYXRpb25zLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7U1BBUlNFTUVNX1ZNRU1NQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfYmxvY2tfb25saW5lJiMzNDssCiAgICAmIzM0O21lbW9yeV9ibG9ja19vZmZsaW5lJiMzNDssCiAgICAmIzM0O2ZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4mIzM0OywKICAgICYjMzQ7ZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuJiMzNDssCiAgICAmIzM0O3JlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lJiMzNDssCiAgICAmIzM0O21vdmVfcGZuX3JhbmdlX3RvX3pvbmUmIzM0OywKICAgICYjMzQ7dXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDtwYWdlX2FsbG9jX2luaXRfbGF0ZSYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCBzcGVjaWZpY2FsbHkgem9uZSBjb250aWd1aXR5IHRyYWNraW5nIGFuZCBzZWN0aW9uIFBGTiBmaW5kaW5nLiBUaGVzZSBwYXRocyBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjowNy42ODM4MjEzMjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU2OTMyNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfYmxvY2tfb25saW5lXCIsXG4gICAgXCJtZW1vcnlfYmxvY2tfb2ZmbGluZVwiLFxuICAgIFwiZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmblwiLFxuICAgIFwiZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuXCIsXG4gICAgXCJyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZVwiLFxuICAgIFwibW92ZV9wZm5fcmFuZ2VfdG9fem9uZVwiLFxuICAgIFwidXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc1wiLFxuICAgIFwicGFnZV9hbGxvY19pbml0X2xhdGVcIixcbiAgICBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgc3BlY2lmaWNhbGx5IHpvbmUgY29udGlndWl0eSB0cmFja2luZyBhbmQgc2VjdGlvbiBQRk4gZmluZGluZy4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjowNy42ODM4MzExODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzY4MTA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhMzYzYTEyZjQzOGM2NTUyMDM4YTY1MTdhNGVmMjI0OGM2NGM0NDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTM6MjY6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XFxuaW5kZXggYjc2MTgzNTQ1ZTViZjUuLjBhYTY1ZTZiNTQ5OTU3IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxcbkBAIC00ODMsNiArNDgzLDE5IEBAIEdlbmVyYWxcXG4gICBgYHByZXNlbnRfcGFnZXNgYCBzaG91bGQgdXNlIGBgZ2V0X29ubGluZV9tZW1zKClgYCB0byBnZXQgYSBzdGFibGUgdmFsdWUuIEl0XFxuICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC5cXG4gXFxuK2BgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYGBcXG4rICBUcmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcCAocHJlc2VudCBwYWdlc1xcbisgIGFuZCBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCkuIFdoZW5cXG4rICBgYHNwYW5uZWRfcGFnZXNgYCA9PSBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgLCBgYHBmbl90b19wYWdlKClgYCBjYW4gYmVcXG4rICBwZXJmb3JtZWQgd2l0aG91dCBmdXJ0aGVyIGNoZWNrcyBvbiBhbnkgUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLlxcbitcXG4rICBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuIG9ubGluZVxcbisgIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGR1cmluZ1xcbisgIGJvb3QsIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgbWFwIG9mIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnlcXG4rICB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG8gY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2tcXG4rICBtYXkgcmVzdWx0IGluIGEgXFxcInRvbyBzbWFsbFxcXCIgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzXFxuKyAgZGV0ZWN0aW5nIGEgY29udGlndW91cyB6b25lLlxcbitcXG4gYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGBcXG4gICBUaGUgcHJlc2VudCBwYWdlcyBleGlzdGluZyB3aXRoaW4gdGhlIHpvbmUgbG9jYXRlZCBvbiBtZW1vcnkgYXZhaWxhYmxlIHNpbmNlXFxuICAgZWFybHkgYm9vdCwgZXhjbHVkaW5nIGhvdHBsdWdnZWQgbWVtb3J5LiBEZWZpbmVkIG9ubHkgd2hlblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcXG5pbmRleCBiY2ZlMmQ5ZjRhZGJkOS4uMjM3YWNlNDM1MzcyNGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuKysrIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuQEAgLTI0Niw2ICsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbiBcXHRcXHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVxcdTAwM2VhbHRtYXAtXFx1MDAzZWZyZWU7XFxuIFxcbiBcXHRtZW1faG90cGx1Z19iZWdpbigpO1xcbitcXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIFxcdGlmIChucl92bWVtbWFwX3BhZ2VzKSB7XFxuIFxcdFxcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcXG4gXFx0XFx0aWYgKHJldClcXG5AQCAtMjcwLDYgKzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcbiBcXHRtZW0tXFx1MDAzZXpvbmUgPSB6b25lO1xcbiBvdXQ6XFxuK1xcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIFxcdG1lbV9ob3RwbHVnX2RvbmUoKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yODIsNiArMjg0LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc2VjdGlvbl9ucl90b19wZm4obWVtLVxcdTAwM2VzdGFydF9zZWN0aW9uX25yKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3ZtZW1tYXBfcGFnZXMgPSAwO1xcbitcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghbWVtLVxcdTAwM2V6b25lKVxcbkBAIC0yOTQsNyArMjk3LDkgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcdGlmIChtZW0tXFx1MDAzZWFsdG1hcClcXG4gXFx0XFx0bnJfdm1lbW1hcF9wYWdlcyA9IG1lbS1cXHUwMDNlYWx0bWFwLVxcdTAwM2VmcmVlO1xcbiBcXG4rXFx0em9uZSA9IG1lbS1cXHUwMDNlem9uZTtcXG4gXFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcXG4rXFx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbiBcXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcXG4gXFx0XFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXFx1MDAzZWdyb3VwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcXG5AQCAtMzE0LDYgKzMxOSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbiBcXG4gXFx0bWVtLVxcdTAwM2V6b25lID0gTlVMTDtcXG4gb3V0OlxcbitcXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbiBcXHRtZW1faG90cGx1Z19kb25lKCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uYWMxNDY3YWMzMzM2NGEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtMTAzMiw2ICsxMDMyLDIwIEBAIHN0cnVjdCB6b25lIHtcXG4gXFx0ICogY21hIHBhZ2VzIGlzIHByZXNlbnQgcGFnZXMgdGhhdCBhcmUgYXNzaWduZWQgZm9yIENNQSB1c2VcXG4gXFx0ICogKE1JR1JBVEVfQ01BKS5cXG4gXFx0ICpcXG4rXFx0ICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwIHRyYWNrcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUgdGhhdCBoYXZlXFxuK1xcdCAqIGFuIG9ubGluZSBtZW1vcnkgbWFwIChwcmVzZW50IHBhZ2VzIGFuZCBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5XFxuK1xcdCAqIG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCkuIFdoZW4gc3Bhbm5lZF9wYWdlcyA9PVxcbitcXHQgKiBwYWdlc193aXRoX29ubGluZV9tZW1tYXAsIHBmbl90b19wYWdlKCkgY2FuIGJlIHBlcmZvcm1lZCB3aXRob3V0XFxuK1xcdCAqIGZ1cnRoZXIgY2hlY2tzIG9uIGFueSBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uXFxuK1xcdCAqXFxuK1xcdCAqIE5vdGU6IHRoaXMgY291bnRlciBtYXkgdGVtcG9yYXJpbHkgdW5kZXJjb3VudCB3aGVuIHBhZ2VzIHdpdGggYW5cXG4rXFx0ICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuXFxuK1xcdCAqIG9ubHkgaGFwcGVuIGR1cmluZyBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZlxcbitcXHQgKiBwYWdlcyB0aGF0IGRvIG5vdCBmYWxsIGludG8gYW55IHpvbmUgc3Bhbi4gR3Jvd2luZyB0aGUgem9uZSB0b1xcbitcXHQgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGFcXG4rXFx0ICogXFxcInRvbyBzbWFsbFxcXCIgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhXFxuK1xcdCAqIGNvbnRpZ3VvdXMgem9uZS5cXG4rXFx0ICpcXG4gXFx0ICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXJcXG4gXFx0ICogbWFuYWdlbWVudCBsb2dpYyB0byBmaWd1cmUgb3V0IHVubWFuYWdlZCBwYWdlcyBieSBjaGVja2luZ1xcbiBcXHQgKiAocHJlc2VudF9wYWdlcyAtIG1hbmFnZWRfcGFnZXMpLiBBbmQgbWFuYWdlZF9wYWdlcyBzaG91bGQgYmUgdXNlZFxcbkBAIC0xMDU2LDYgKzEwNzAsNyBAQCBzdHJ1Y3Qgem9uZSB7XFxuIFxcdGF0b21pY19sb25nX3RcXHRcXHRtYW5hZ2VkX3BhZ2VzO1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0c3Bhbm5lZF9wYWdlcztcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHByZXNlbnRfcGFnZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRwYWdlc193aXRoX29ubGluZV9tZW1tYXA7XFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHByZXNlbnRfZWFybHlfcGFnZXM7XFxuICNlbmRpZlxcbkBAIC0xNjgxLDYgKzE2OTYsMzggQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisvKipcXG4rICogem9uZV9pc19jb250aWd1b3VzIC0gdGVzdCB3aGV0aGVyIGEgem9uZSBpcyBjb250aWd1b3VzXFxuKyAqIEB6b25lOiB0aGUgem9uZSB0byB0ZXN0LlxcbisgKlxcbisgKiBJbiBhIGNvbnRpZ3VvdXMgem9uZSwgaXQgaXMgdmFsaWQgdG8gY2FsbCBwZm5fdG9fcGFnZSgpIG9uIGFueSBQRk4gaW4gdGhlXFxuKyAqIHNwYW5uZWQgem9uZSB3aXRob3V0IHJlcXVpcmluZyBwZm5fdmFsaWQoKSBvciBwZm5fdG9fb25saW5lX3BhZ2UoKSBjaGVja3MuXFxuKyAqXFxuKyAqIE5vdGUgdGhhdCBtaXNzaW5nIHN5bmNocm9uaXphdGlvbiB3aXRoIG1lbW9yeSBvZmZsaW5pbmcgbWFrZXMgYW55IFBGTlxcbisgKiB0cmF2ZXJzYWwgcHJvbmUgdG8gcmFjZXMuXFxuKyAqXFxuKyAqIFpPTkVfREVWSUNFIHpvbmVzIGFyZSBhbHdheXMgbWFya2VkIG5vbi1jb250aWd1b3VzLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgY29udGlndW91cywgb3RoZXJ3aXNlIGZhbHNlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfY29udGlndW91cyhjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4re1xcbitcXHRyZXR1cm4gem9uZS1cXHUwMDNlY29udGlndW91cztcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuK3tcXG4rXFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKHpvbmUtXFx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwKVxcbitcXHRcXHR6b25lLVxcdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4re1xcbitcXHR6b25lLVxcdTAwM2Vjb250aWd1b3VzID0gZmFsc2U7XFxuK31cXG4rXFxuIC8qXFxuICAqIFJldHVybnMgdHJ1ZSBpZiBhIHpvbmUgaGFzIHBhZ2VzIG1hbmFnZWQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvci5cXG4gICogQWxsIHRoZSByZWNsYWltIGRlY2lzaW9ucyBoYXZlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggMTgxZTc5ZjFkNmEyMDcuLmY5MzJiNzU3N2M5MmFjIDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTgwNSwyMSArODA1LDE1IEBAIGV4dGVybiBzdHJ1Y3QgcGFnZSAqX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4ge1xcbi1cXHRpZiAoem9uZS1cXHUwMDNlY29udGlndW91cylcXG4rXFx0aWYgKHpvbmVfaXNfY29udGlndW91cyh6b25lKSlcXG4gXFx0XFx0cmV0dXJuIHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7XFxuIFxcbiBcXHRyZXR1cm4gX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLCB6b25lKTtcXG4gfVxcbiBcXG4tdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKTtcXG4gYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxcbi17XFxuLVxcdHpvbmUtXFx1MDAzZWNvbnRpZ3VvdXMgPSBmYWxzZTtcXG4tfVxcbi1cXG4gZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbiBleHRlcm4gdm9pZCBfX3B1dGJhY2tfaXNvbGF0ZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHQgICAgaW50IG10KTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5pbmRleCA3YWMxOWZhYjIyNjMyNC4uM2EyODFkNTk1MjA3MTAgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5AQCAtNDI3LDE3ICs0MjcsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXFxuIHtcXG4tXFx0Zm9yICg7IHN0YXJ0X3BmbiBcXHUwMDNjIGVuZF9wZm47IHN0YXJ0X3BmbiArPSBQQUdFU19QRVJfU1VCU0VDVElPTikge1xcbi1cXHRcXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV4dF9wZm47XFxuIFxcbi1cXHRcXHRpZiAodW5saWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pICE9IG5pZCkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRmb3IgKDsgc3RhcnRfcGZuIFxcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuID0gbmV4dF9wZm4pIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyB0YWlsX3BmbjtcXG4rXFxuK1xcdFxcdG5leHRfcGZuID0gc3RhcnRfcGZuICsgUEFHRVNfUEVSX1NVQlNFQ1RJT047XFxuK1xcdFxcdHRhaWxfcGZuID0gbmV4dF9wZm4gLSAxO1xcbiBcXG4tXFx0XFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpKVxcbitcXHRcXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRyZXR1cm4gc3RhcnRfcGZuO1xcbitcXHRcXHRpZiAobGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSA9PSBuaWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXJ0X3BmbjtcXG4rXFxuK1xcdFxcdGlmIChsaWtlbHkocGZuX3RvX25pZCh0YWlsX3BmbikgPT0gbmlkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UodGFpbF9wZm4pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXJ0X3BmbjtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ0OCwyMSArNDU1LDI2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbiwgcHJldl9wZm47XFxuIFxcbiBcXHQvKiBwZm4gaXMgdGhlIGVuZCBwZm4gb2YgYSBtZW1vcnkgc2VjdGlvbi4gKi9cXG4gXFx0cGZuID0gZW5kX3BmbiAtIDE7XFxuLVxcdGZvciAoOyBwZm4gXFx1MDAzZT0gc3RhcnRfcGZuOyBwZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRmb3IgKDsgcGZuIFxcdTAwM2U9IHN0YXJ0X3BmbjsgcGZuID0gcHJldl9wZm4pIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBoZWFkX3BmbjtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHByZXZfcGZuID0gcGZuIC0gUEFHRVNfUEVSX1NVQlNFQ1RJT047XFxuK1xcdFxcdGhlYWRfcGZuID0gcHJldl9wZm4gKyAxO1xcbiBcXG4tXFx0XFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpKVxcbitcXHRcXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRyZXR1cm4gcGZuO1xcbitcXHRcXHRpZiAobGlrZWx5KHBmbl90b19uaWQocGZuKSA9PSBuaWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHBmbjtcXG4rXFxuK1xcdFxcdGlmIChsaWtlbHkocGZuX3RvX25pZChoZWFkX3BmbikgPT0gbmlkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UoaGVhZF9wZm4pKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHBmbjtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTU1NywxOCArNTY5LDEzIEBAIHZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBab25lIHNocmlua2luZyBjb2RlIGNhbm5vdCBwcm9wZXJseSBkZWFsIHdpdGggWk9ORV9ERVZJQ0UuIFNvXFxuLVxcdCAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgdGhlIHpvbmVzIC0gd2hpY2ggaXMgb2theSBhc1xcbi1cXHQgKiBzZXRfem9uZV9jb250aWd1b3VzKCkgY2Fubm90IGRlYWwgd2l0aCBaT05FX0RFVklDRSBlaXRoZXIgd2F5LlxcbitcXHQgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIGl0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcXG4tXFxuIFxcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gKyBucl9wYWdlcyk7XFxuIFxcdHVwZGF0ZV9wZ2RhdF9zcGFuKHBnZGF0KTtcXG4tXFxuLVxcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC03NDYsOCArNzUzLDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxuIFxcdGludCBuaWQgPSBwZ2RhdC1cXHUwMDNlbm9kZV9pZDtcXG4gXFxuLVxcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcXG4tXFxuIFxcdGlmICh6b25lX2lzX2VtcHR5KHpvbmUpKVxcbiBcXHRcXHRpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xcbiBcXHRyZXNpemVfem9uZV9yYW5nZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcXG5AQCAtNzc1LDggKzc4MCw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIFxcdG1lbW1hcF9pbml0X3JhbmdlKG5yX3BhZ2VzLCBuaWQsIHpvbmVfaWR4KHpvbmUpLCBzdGFydF9wZm4sIDAsXFxuIFxcdFxcdFxcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXFxuIFxcdFxcdFxcdCBpc29sYXRlX3BhZ2VibG9jayk7XFxuLVxcbi1cXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgYXV0b19tb3ZhYmxlX3N0YXRzIHtcXG5AQCAtMTA3Miw2ICsxMDc1LDcgQEAgdm9pZCBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcXG4gXFx0aWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKVxcbiBcXHRcXHR6b25lLVxcdTAwM2VwcmVzZW50X2Vhcmx5X3BhZ2VzICs9IG5yX3BhZ2VzO1xcbiBcXHR6b25lLVxcdTAwM2VwcmVzZW50X3BhZ2VzICs9IG5yX3BhZ2VzO1xcbitcXHR6b25lLVxcdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXAgKz0gbnJfcGFnZXM7XFxuIFxcdHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQtXFx1MDAzZW5vZGVfcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcXG4gXFxuIFxcdGlmIChncm91cCBcXHUwMDI2XFx1MDAyNiBtb3ZhYmxlKVxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCBmMWFmZTAyM2U0ZTcyMS4uNzNkMWZkZTE3MDQwNTAgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTkxNiw2ICs5MTYsNDAgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqaG9sZV9wZm4pXFxuK3tcXG4rI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUFxcbitcXHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuID0gem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm47XFxuK1xcdHVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuID0gem9uZV9zdGFydF9wZm4gKyB6b25lLVxcdTAwM2VzcGFubmVkX3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nIHN1Yl9zdGFydCwgc3ViX2VuZDtcXG4rXFxuK1xcdHN1Yl9zdGFydCA9IG1heChBTElHTl9ET1dOKHN0YXJ0X3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxcbitcXHRcXHRcXHR6b25lX3N0YXJ0X3Bmbik7XFxuK1xcdHN1Yl9lbmQgPSBtaW4oQUxJR04oZW5kX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLCB6b25lX2VuZF9wZm4pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yIGFuIGluLXpvbmUgaG9sZSBzbWFsbGVyIHRoYW4gYSBzdWJzZWN0aW9uLCB0aGUgYWRqYWNlbnRcXG4rXFx0ICogbWVtYmxvY2sgcmFuZ2VzIHNoYXJlIGEgc3Vic2VjdGlvbi4gQXZvaWQgY291bnRpbmcgdGhlIHNhbWVcXG4rXFx0ICogc3Vic2VjdGlvbidzIHBhZ2VzIHR3aWNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCpob2xlX3BmbiBcXHUwMDNlIHpvbmVfc3RhcnRfcGZuKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcHJldl9zdWJfZW5kO1xcbitcXG4rXFx0XFx0cHJldl9zdWJfZW5kID0gbWluKEFMSUdOKCpob2xlX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxcbitcXHRcXHRcXHRcXHQgICB6b25lX2VuZF9wZm4pO1xcbitcXHRcXHRzdWJfc3RhcnQgPSBtYXgoc3ViX3N0YXJ0LCBwcmV2X3N1Yl9lbmQpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3ViX3N0YXJ0IFxcdTAwM2Mgc3ViX2VuZClcXG4rXFx0XFx0em9uZS1cXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IHN1Yl9lbmQgLSBzdWJfc3RhcnQ7XFxuKyNlbHNlXFxuK1xcdHpvbmUtXFx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBlbmRfcGZuIC0gc3RhcnRfcGZuO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbkBAIC05MzIsNiArOTY2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdGlmIChzdGFydF9wZm4gXFx1MDAzZT0gZW5kX3BmbilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0dXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIGVuZF9wZm4sIGhvbGVfcGZuKTtcXG4rXFxuIFxcdG1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHQgIHpvbmVfZW5kX3BmbiwgTUVNSU5JVF9FQVJMWSwgTlVMTCwgbXQsIGZhbHNlKTtcXG4gXFxuQEAgLTIxOTUsMjggKzIyMzEsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBibG9ja19zdGFydF9wZm4gPSB6b25lLVxcdTAwM2V6b25lX3N0YXJ0X3BmbjtcXG4tXFx0dW5zaWduZWQgbG9uZyBibG9ja19lbmRfcGZuO1xcbi1cXG4tXFx0YmxvY2tfZW5kX3BmbiA9IHBhZ2VibG9ja19lbmRfcGZuKGJsb2NrX3N0YXJ0X3Bmbik7XFxuLVxcdGZvciAoOyBibG9ja19zdGFydF9wZm4gXFx1MDAzYyB6b25lX2VuZF9wZm4oem9uZSk7XFxuLVxcdFxcdFxcdGJsb2NrX3N0YXJ0X3BmbiA9IGJsb2NrX2VuZF9wZm4sXFxuLVxcdFxcdFxcdCBibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xcbi1cXG4tXFx0XFx0YmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCB6b25lX2VuZF9wZm4oem9uZSkpO1xcbi1cXG4tXFx0XFx0aWYgKCFfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShibG9ja19zdGFydF9wZm4sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgYmxvY2tfZW5kX3Bmbiwgem9uZSkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIFdlIGNvbmZpcm0gdGhhdCB0aGVyZSBpcyBubyBob2xlICovXFxuLVxcdHpvbmUtXFx1MDAzZWNvbnRpZ3VvdXMgPSB0cnVlO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlXFxuICAqIE5VTUEgbm9kZXMuIFNwZWNpZnkgdGhlIEBuaWQgYXJndW1lbnQgaWYgaXQgaXMga25vd24gdGhhdCB0aGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjA4LjMyOTc5MDg2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU5OTIzMzQxMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9ibG9ja19vbmxpbmVcIixcbiAgICBcIm1lbW9yeV9ibG9ja19vZmZsaW5lXCIsXG4gICAgXCJmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuXCIsXG4gICAgXCJmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5cIixcbiAgICBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gICAgXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gICAgXCJ1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzXCIsXG4gICAgXCJwYWdlX2FsbG9jX2luaXRfbGF0ZVwiLFxuICAgIFwiYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCBzcGVjaWZpY2FsbHkgem9uZSBjb250aWd1aXR5IHRyYWNraW5nIGFuZCBzZWN0aW9uIFBGTiBmaW5kaW5nLiBUaGVzZSBwYXRocyBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2EzNjNhMTJmNDM4YzY1NTIwMzhhNjUxN2E0ZWYyMjQ4YzY0YzQ0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDEzOjI2OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG5pbmRleCBiNzYxODM1NDVlNWJmNS4uMGFhNjVlNmI1NDk5NTcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxuQEAgLTQ4Myw2ICs0ODMsMTkgQEAgR2VuZXJhbFxuICAgYGBwcmVzZW50X3BhZ2VzYGAgc2hvdWxkIHVzZSBgYGdldF9vbmxpbmVfbWVtcygpYGAgdG8gZ2V0IGEgc3RhYmxlIHZhbHVlLiBJdFxuICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC5cbiBcbitgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgXG4rICBUcmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcCAocHJlc2VudCBwYWdlc1xuKyAgYW5kIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkKS4gV2hlblxuKyAgYGBzcGFubmVkX3BhZ2VzYGAgPT0gYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYCwgYGBwZm5fdG9fcGFnZSgpYGAgY2FuIGJlXG4rICBwZXJmb3JtZWQgd2l0aG91dCBmdXJ0aGVyIGNoZWNrcyBvbiBhbnkgUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLlxuK1xuKyAgTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhbiBvbmxpbmVcbisgIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGR1cmluZ1xuKyAgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2YgcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueVxuKyAgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvIGNvdmVyIHN1Y2ggcGFnZXMgYW5kIGxhdGVyIHNocmlua2luZyBpdCBiYWNrXG4rICBtYXkgcmVzdWx0IGluIGEgXCJ0b28gc21hbGxcIiB2YWx1ZS4gVGhpcyBpcyBzYWZlOiBpdCBtZXJlbHkgcHJldmVudHNcbisgIGRldGVjdGluZyBhIGNvbnRpZ3VvdXMgem9uZS5cbitcbiBgYHByZXNlbnRfZWFybHlfcGFnZXNgYFxuICAgVGhlIHByZXNlbnQgcGFnZXMgZXhpc3Rpbmcgd2l0aGluIHRoZSB6b25lIGxvY2F0ZWQgb24gbWVtb3J5IGF2YWlsYWJsZSBzaW5jZVxuICAgZWFybHkgYm9vdCwgZXhjbHVkaW5nIGhvdHBsdWdnZWQgbWVtb3J5LiBEZWZpbmVkIG9ubHkgd2hlblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuaW5kZXggYmNmZTJkOWY0YWRiZDkuLjIzN2FjZTQzNTM3MjRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbkBAIC0yNDYsNiArMjQ2LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcdFx0bnJfdm1lbW1hcF9wYWdlcyA9IG1lbS1cdTAwM2VhbHRtYXAtXHUwMDNlZnJlZTtcbiBcbiBcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XG4rXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcykge1xuIFx0XHRyZXQgPSBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcywgem9uZSk7XG4gXHRcdGlmIChyZXQpXG5AQCAtMjcwLDYgKzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXG4gXHRtZW0tXHUwMDNlem9uZSA9IHpvbmU7XG4gb3V0OlxuK1x0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdG1lbV9ob3RwbHVnX2RvbmUoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI4Miw2ICsyODQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc2VjdGlvbl9ucl90b19wZm4obWVtLVx1MDAzZXN0YXJ0X3NlY3Rpb25fbnIpO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IFBBR0VTX1BFUl9TRUNUSU9OICogc2VjdGlvbnNfcGVyX2Jsb2NrO1xuIFx0dW5zaWduZWQgbG9uZyBucl92bWVtbWFwX3BhZ2VzID0gMDtcbitcdHN0cnVjdCB6b25lICp6b25lO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghbWVtLVx1MDAzZXpvbmUpXG5AQCAtMjk0LDcgKzI5Nyw5IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0aWYgKG1lbS1cdTAwM2VhbHRtYXApXG4gXHRcdG5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tXHUwMDNlYWx0bWFwLVx1MDAzZWZyZWU7XG4gXG4rXHR6b25lID0gbWVtLVx1MDAzZXpvbmU7XG4gXHRtZW1faG90cGx1Z19iZWdpbigpO1xuK1x0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXG4gXHRcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgbWVtLVx1MDAzZWdyb3VwLFxuIFx0XHRcdFx0XHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcbkBAIC0zMTQsNiArMzE5LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXG4gXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuK1x0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdG1lbV9ob3RwbHVnX2RvbmUoKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCBjYTI3MTIxODcxNDc1Yy4uYWMxNDY3YWMzMzM2NGEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTAzMiw2ICsxMDMyLDIwIEBAIHN0cnVjdCB6b25lIHtcbiBcdCAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlXG4gXHQgKiAoTUlHUkFURV9DTUEpLlxuIFx0ICpcbitcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxuK1x0ICogYW4gb25saW5lIG1lbW9yeSBtYXAgKHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnlcbitcdCAqIG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCkuIFdoZW4gc3Bhbm5lZF9wYWdlcyA9PVxuK1x0ICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLCBwZm5fdG9fcGFnZSgpIGNhbiBiZSBwZXJmb3JtZWQgd2l0aG91dFxuK1x0ICogZnVydGhlciBjaGVja3Mgb24gYW55IFBGTiB3aXRoaW4gdGhlIHpvbmUgc3Bhbi5cbitcdCAqXG4rXHQgKiBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuXG4rXHQgKiBvbmxpbmUgbWVtb3J5IG1hcCBleGlzdCBvdXRzaWRlIHRoZSBjdXJyZW50IHpvbmUgc3Bhbi4gVGhpcyBjYW5cbitcdCAqIG9ubHkgaGFwcGVuIGR1cmluZyBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZlxuK1x0ICogcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueSB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG9cbitcdCAqIGNvdmVyIHN1Y2ggcGFnZXMgYW5kIGxhdGVyIHNocmlua2luZyBpdCBiYWNrIG1heSByZXN1bHQgaW4gYVxuK1x0ICogXCJ0b28gc21hbGxcIiB2YWx1ZS4gVGhpcyBpcyBzYWZlOiBpdCBtZXJlbHkgcHJldmVudHMgZGV0ZWN0aW5nIGFcbitcdCAqIGNvbnRpZ3VvdXMgem9uZS5cbitcdCAqXG4gXHQgKiBTbyBwcmVzZW50X3BhZ2VzIG1heSBiZSB1c2VkIGJ5IG1lbW9yeSBob3RwbHVnIG9yIG1lbW9yeSBwb3dlclxuIFx0ICogbWFuYWdlbWVudCBsb2dpYyB0byBmaWd1cmUgb3V0IHVubWFuYWdlZCBwYWdlcyBieSBjaGVja2luZ1xuIFx0ICogKHByZXNlbnRfcGFnZXMgLSBtYW5hZ2VkX3BhZ2VzKS4gQW5kIG1hbmFnZWRfcGFnZXMgc2hvdWxkIGJlIHVzZWRcbkBAIC0xMDU2LDYgKzEwNzAsNyBAQCBzdHJ1Y3Qgem9uZSB7XG4gXHRhdG9taWNfbG9uZ190XHRcdG1hbmFnZWRfcGFnZXM7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHNwYW5uZWRfcGFnZXM7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHByZXNlbnRfcGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nXHRcdHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcDtcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXG4gXHR1bnNpZ25lZCBsb25nXHRcdHByZXNlbnRfZWFybHlfcGFnZXM7XG4gI2VuZGlmXG5AQCAtMTY4MSw2ICsxNjk2LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuIH1cbiAjZW5kaWZcbiBcbisvKipcbisgKiB6b25lX2lzX2NvbnRpZ3VvdXMgLSB0ZXN0IHdoZXRoZXIgYSB6b25lIGlzIGNvbnRpZ3VvdXNcbisgKiBAem9uZTogdGhlIHpvbmUgdG8gdGVzdC5cbisgKlxuKyAqIEluIGEgY29udGlndW91cyB6b25lLCBpdCBpcyB2YWxpZCB0byBjYWxsIHBmbl90b19wYWdlKCkgb24gYW55IFBGTiBpbiB0aGVcbisgKiBzcGFubmVkIHpvbmUgd2l0aG91dCByZXF1aXJpbmcgcGZuX3ZhbGlkKCkgb3IgcGZuX3RvX29ubGluZV9wYWdlKCkgY2hlY2tzLlxuKyAqXG4rICogTm90ZSB0aGF0IG1pc3Npbmcgc3luY2hyb25pemF0aW9uIHdpdGggbWVtb3J5IG9mZmxpbmluZyBtYWtlcyBhbnkgUEZOXG4rICogdHJhdmVyc2FsIHByb25lIHRvIHJhY2VzLlxuKyAqXG4rICogWk9ORV9ERVZJQ0Ugem9uZXMgYXJlIGFsd2F5cyBtYXJrZWQgbm9uLWNvbnRpZ3VvdXMuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgY29udGlndW91cywgb3RoZXJ3aXNlIGZhbHNlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0cmV0dXJuIHpvbmUtXHUwMDNlY29udGlndW91cztcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4rXHRcdHJldHVybjtcbitcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4rXHRcdHpvbmUtXHUwMDNlY29udGlndW91cyA9IHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogUmV0dXJucyB0cnVlIGlmIGEgem9uZSBoYXMgcGFnZXMgbWFuYWdlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yLlxuICAqIEFsbCB0aGUgcmVjbGFpbSBkZWNpc2lvbnMgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uZjkzMmI3NTc3YzkyYWMgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtODA1LDIxICs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbi1cdGlmICh6b25lLVx1MDAzZWNvbnRpZ3VvdXMpXG4rXHRpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKVxuIFx0XHRyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTtcbiBcbiBcdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xuIH1cbiBcbi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuIGJvb2wgcGZuX3JhbmdlX2ludGVyc2VjdHNfem9uZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR6b25lLVx1MDAzZWNvbnRpZ3VvdXMgPSBmYWxzZTtcbi19XG4tXG4gZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0XHQgICAgaW50IG10KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjNhMjgxZDU5NTIwNzEwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTQyNywxNyArNDI3LDI0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4ge1xuLVx0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0dW5zaWduZWQgbG9uZyBuZXh0X3BmbjtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSAhPSBuaWQpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuID0gbmV4dF9wZm4pIHtcbitcdFx0dW5zaWduZWQgbG9uZyB0YWlsX3BmbjtcbitcbitcdFx0bmV4dF9wZm4gPSBzdGFydF9wZm4gKyBQQUdFU19QRVJfU1VCU0VDVElPTjtcbitcdFx0dGFpbF9wZm4gPSBuZXh0X3BmbiAtIDE7XG4gXG4tXHRcdGlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSlcbitcdFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHJldHVybiBzdGFydF9wZm47XG4rXHRcdGlmIChsaWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSlcbitcdFx0XHRyZXR1cm4gc3RhcnRfcGZuO1xuK1xuK1x0XHRpZiAobGlrZWx5KHBmbl90b19uaWQodGFpbF9wZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZSh0YWlsX3BmbikpKVxuK1x0XHRcdHJldHVybiBzdGFydF9wZm47XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC00NDgsMjEgKzQ1NSwyNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcGZuO1xuK1x0dW5zaWduZWQgbG9uZyBwZm4sIHByZXZfcGZuO1xuIFxuIFx0LyogcGZuIGlzIHRoZSBlbmQgcGZuIG9mIGEgbWVtb3J5IHNlY3Rpb24uICovXG4gXHRwZm4gPSBlbmRfcGZuIC0gMTtcbi1cdGZvciAoOyBwZm4gXHUwMDNlPSBzdGFydF9wZm47IHBmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikge1xuLVx0XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdGZvciAoOyBwZm4gXHUwMDNlPSBzdGFydF9wZm47IHBmbiA9IHByZXZfcGZuKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaGVhZF9wZm47XG4gXG4tXHRcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0cHJldl9wZm4gPSBwZm4gLSBQQUdFU19QRVJfU1VCU0VDVElPTjtcbitcdFx0aGVhZF9wZm4gPSBwcmV2X3BmbiArIDE7XG4gXG4tXHRcdGlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSlcbitcdFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHJldHVybiBwZm47XG4rXHRcdGlmIChsaWtlbHkocGZuX3RvX25pZChwZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSlcbitcdFx0XHRyZXR1cm4gcGZuO1xuK1xuK1x0XHRpZiAobGlrZWx5KHBmbl90b19uaWQoaGVhZF9wZm4pID09IG5pZCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShoZWFkX3BmbikpKVxuK1x0XHRcdHJldHVybiBwZm47XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTcsMTggKzU2OSwxMyBAQCB2b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxuIFxuIFx0LypcbiBcdCAqIFpvbmUgc2hyaW5raW5nIGNvZGUgY2Fubm90IHByb3Blcmx5IGRlYWwgd2l0aCBaT05FX0RFVklDRS4gU29cbi1cdCAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgdGhlIHpvbmVzIC0gd2hpY2ggaXMgb2theSBhc1xuLVx0ICogc2V0X3pvbmVfY29udGlndW91cygpIGNhbm5vdCBkZWFsIHdpdGggWk9ORV9ERVZJQ0UgZWl0aGVyIHdheS5cbitcdCAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgaXQuXG4gXHQgKi9cbiBcdGlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4tXG4gXHRzaHJpbmtfem9uZV9zcGFuKHpvbmUsIHN0YXJ0X3Bmbiwgc3RhcnRfcGZuICsgbnJfcGFnZXMpO1xuIFx0dXBkYXRlX3BnZGF0X3NwYW4ocGdkYXQpO1xuLVxuLVx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiB9XG4gXG4gLyoqXG5AQCAtNzQ2LDggKzc1Myw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuIFx0aW50IG5pZCA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4gXG4tXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4tXG4gXHRpZiAoem9uZV9pc19lbXB0eSh6b25lKSlcbiBcdFx0aW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcbiBcdHJlc2l6ZV96b25lX3JhbmdlKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xuQEAgLTc3NSw4ICs3ODAsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0bWVtbWFwX2luaXRfcmFuZ2UobnJfcGFnZXMsIG5pZCwgem9uZV9pZHgoem9uZSksIHN0YXJ0X3BmbiwgMCxcbiBcdFx0XHQgTUVNSU5JVF9IT1RQTFVHLCBhbHRtYXAsIG1pZ3JhdGV0eXBlLFxuIFx0XHRcdCBpc29sYXRlX3BhZ2VibG9jayk7XG4tXG4tXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIH1cbiBcbiBzdHJ1Y3QgYXV0b19tb3ZhYmxlX3N0YXRzIHtcbkBAIC0xMDcyLDYgKzEwNzUsNyBAQCB2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxuIFx0aWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKVxuIFx0XHR6b25lLVx1MDAzZXByZXNlbnRfZWFybHlfcGFnZXMgKz0gbnJfcGFnZXM7XG4gXHR6b25lLVx1MDAzZXByZXNlbnRfcGFnZXMgKz0gbnJfcGFnZXM7XG4rXHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBucl9wYWdlcztcbiBcdHpvbmUtXHUwMDNlem9uZV9wZ2RhdC1cdTAwM2Vub2RlX3ByZXNlbnRfcGFnZXMgKz0gbnJfcGFnZXM7XG4gXG4gXHRpZiAoZ3JvdXAgXHUwMDI2XHUwMDI2IG1vdmFibGUpXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCBmMWFmZTAyM2U0ZTcyMS4uNzNkMWZkZTE3MDQwNTAgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTkxNiw2ICs5MTYsNDAgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgX19pbml0IHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4rXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuK1x0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmhvbGVfcGZuKVxuK3tcbisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG4rXHR1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuID0gem9uZS1cdTAwM2V6b25lX3N0YXJ0X3BmbjtcbitcdHVuc2lnbmVkIGxvbmcgem9uZV9lbmRfcGZuID0gem9uZV9zdGFydF9wZm4gKyB6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIHN1Yl9zdGFydCwgc3ViX2VuZDtcbitcbitcdHN1Yl9zdGFydCA9IG1heChBTElHTl9ET1dOKHN0YXJ0X3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxuK1x0XHRcdHpvbmVfc3RhcnRfcGZuKTtcbitcdHN1Yl9lbmQgPSBtaW4oQUxJR04oZW5kX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLCB6b25lX2VuZF9wZm4pO1xuK1xuK1x0LypcbitcdCAqIEZvciBhbiBpbi16b25lIGhvbGUgc21hbGxlciB0aGFuIGEgc3Vic2VjdGlvbiwgdGhlIGFkamFjZW50XG4rXHQgKiBtZW1ibG9jayByYW5nZXMgc2hhcmUgYSBzdWJzZWN0aW9uLiBBdm9pZCBjb3VudGluZyB0aGUgc2FtZVxuK1x0ICogc3Vic2VjdGlvbidzIHBhZ2VzIHR3aWNlLlxuK1x0ICovXG4rXHRpZiAoKmhvbGVfcGZuIFx1MDAzZSB6b25lX3N0YXJ0X3Bmbikge1xuK1x0XHR1bnNpZ25lZCBsb25nIHByZXZfc3ViX2VuZDtcbitcbitcdFx0cHJldl9zdWJfZW5kID0gbWluKEFMSUdOKCpob2xlX3BmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pLFxuK1x0XHRcdFx0ICAgem9uZV9lbmRfcGZuKTtcbitcdFx0c3ViX3N0YXJ0ID0gbWF4KHN1Yl9zdGFydCwgcHJldl9zdWJfZW5kKTtcbitcdH1cbitcbitcdGlmIChzdWJfc3RhcnQgXHUwMDNjIHN1Yl9lbmQpXG4rXHRcdHpvbmUtXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IHN1Yl9lbmQgLSBzdWJfc3RhcnQ7XG4rI2Vsc2VcbitcdHpvbmUtXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IGVuZF9wZm4gLSBzdGFydF9wZm47XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcbkBAIC05MzIsNiArOTY2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRpZiAoc3RhcnRfcGZuIFx1MDAzZT0gZW5kX3BmbilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0dXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlcyh6b25lLCBzdGFydF9wZm4sIGVuZF9wZm4sIGhvbGVfcGZuKTtcbitcbiBcdG1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLFxuIFx0XHRcdCAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpO1xuIFxuQEAgLTIxOTUsMjggKzIyMzEsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xuLVxuLVx0XHRibG9ja19lbmRfcGZuID0gbWluKGJsb2NrX2VuZF9wZm4sIHpvbmVfZW5kX3Bmbih6b25lKSk7XG4tXG4tXHRcdGlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLFxuLVx0XHRcdFx0XHQgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4tXG4tXHQvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqL1xuLVx0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlXG4gICogTlVNQSBub2Rlcy4gU3BlY2lmeSB0aGUgQG5pZCBhcmd1bWVudCBpZiBpdCBpcyBrbm93biB0aGF0IHRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjA4LjMyOTc5MzQxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjY2Njk2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBIb3RwbHVnIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBjcnVjaWFsIHN0dWZmIOKAkyBtZW1vcnkgaG90cGx1ZyBhbmQgaG93IHRoZSBrZXJuZWwgdHJhY2tzIHpvbmUgY29udGlndWl0eS4gSW50ZXJlc3RpbmcuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb3VudGVyLCBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCwgd2l0aGluIHRoZSBgc3RydWN0IHpvbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBCYXNpY2FsbHkgaXQgaXMgZ29pbmcgdG8gcmVwbGFjZSB0aGUgY3VycmVudCB3YXkgb2YgdmVyaWZ5aW5nIGNvbnRpZ3VvdXMgbWVtb3J5IGJ5IGNvbXBhcmluZyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIHNwYW5uZWQgYnkgdGhlIHpvbmUgYWdhaW5zdCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdpdGggb25saW5lIG1lbW9yeSBtYXBzLlxuXG5SaWdodCwgc28gdGhleSd2ZSBjaGFuZ2VkIGhvdyBgc2V0X3pvbmVfY29udGlndW91c2Agb3BlcmF0ZXMuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0LCBhbmQgSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGZhc3Rlciwgc2xvd2VyLCBhbmQgdGhlIGltcGxpY2F0aW9ucy4gSW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlYmxvY2tzIHRvIGxvb2sgZm9yIGhvbGVzLCBpdCdzIGp1c3QgYSBzaW1wbGUgY29tcGFyaXNvbiBub3cuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guXG5cbk9rYXksIGFuZCBpdCBsb29rcyBsaWtlIHRoZXnigJl2ZSBvcHRpbWl6ZWQgYGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm5gIGFuZCBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYCBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgYXMgd2VsbC4gU2VlbXMgbGlrZSBpdCBoYXMgc29tZSBuaWNlIG9wdGltaXphdGlvbnMgaW4gdGhlcmUuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGU/IElzIGl0IGZ1bmN0aW9uYWw/IEkgbWVhbiwgaXQncyBwb2tpbmcgYXQgdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhvdHBsdWcsIHNvIEknZCBzYXkgeWVhaCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTWVtb3J5IGhvdHBsdWcgaXNuJ3Qgc29tZSBvYnNjdXJlIGZlYXR1cmU7IHlvdSBjYW4gdHJpZ2dlciBpdCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHJpZ2h0PyBTeXNmcyBvciBBQ1BJLCB0aGF04oCZcyBnb2luZyB0byB0cmlwIGFsbCB0aGlzLiBBbmQgdGhlIGNoYW5nZXMgdG8gdGhvc2UgYGZpbmRfLi4uYCBmdW5jdGlvbnM/IFRvdGFsbHkgZnVuY3Rpb25hbCBkdXJpbmcgaG90cGx1Zy4gQW5kIGBzZXRfem9uZV9jb250aWd1b3VzYCB0b28uXG5cbk5vdywgd2hhdCBhYm91dCBmdXp6aW5nIHRoaXM/IFdvcnRoIHRoZSBlZmZvcnQ/IEFic29sdXRlbHkuIEFueSBjaGFuZ2UgaW4gdGhpcyBhcmVhIGNhbiBoYXZlIG5hc3R5IGNvbnNlcXVlbmNlcyBpZiB0aGVyZSBhcmUgaG9sZXMsIHNvIGxldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGRvIGluIHRoYXQgcmVnYXJkLlxuXG5MZXQncyBsb29rIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBPYnZpb3VzIGNhbmRpZGF0ZSBpcyBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgcmlnaHQ/IFRpbWUgdG8gY2hlY2sgYG1tL21lbW9yeV9ob3RwbHVnLmNgIGFuZCBkaWcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDMyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6MTYuMTk2NDY2NDQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODc2MTE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNT1JZX0hPVFBMVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTYyPXBhZ2UtYWxsb2MtJChDT05GSUdfU0hVRkZMRV9QQUdFX0FMTE9DQVRPUikgKz0gc2h1ZmZsZS5vXFxuLS1cXG5tbS9NYWtlZmlsZS02NC0jIEdpdmUgJ21lbW9yeV9ob3RwbHVnJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxubW0vTWFrZWZpbGU6NjU6bWVtb3J5LWhvdHBsdWctJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICs9IG1lbW9yeV9ob3RwbHVnLm9cXG5tbS9NYWtlZmlsZS02Ni1cXG4tLVxcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jPTk5PXN0YXRpYyBpbnQgdm1lbW1hcF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaHVnZXRsYl92bWVtbWFwLmMtMTI1LVxcdCAqL1xcbm1tL2h1Z2V0bGJfdm1lbW1hcC5jOjEyNjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFBMVUcpIFxcdTAwMjZcXHUwMDI2IHVubGlrZWx5KCF2bWVtbWFwX3dhbGstXFx1MDAzZW5yX3dhbGtlZCkpIHtcXG5tbS9odWdldGxiX3ZtZW1tYXAuYy0xMjctXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBoZWFkID8gaGVhZCArIHB0ZV9pbmRleChhZGRyKSA6XFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYz0xNjM9dm9pZCBrYXNhbl91bnBvaXNvbihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgYm9vbCBpbml0KVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMTg0LVxcbm1tL2thc2FuL3NoYWRvdy5jOjE4NTojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXFxubW0va2FzYW4vc2hhZG93LmMtMTg2LXN0YXRpYyBib29sIHNoYWRvd19tYXBwZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz02NDk9RVhQT1JUX1NZTUJPTF9HUEwocmVzdG9yZV9vbmxpbmVfcGFnZV9jYWxsYmFjayk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy02NTAtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo2NTE6Lyogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjUyLXZvaWQgZ2VuZXJpY19vbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTQxPWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyNTUtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjU2Oi8qIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyNTctc3RhdGljIHBnX2RhdGFfdCAqaG90YWRkX2luaXRfcGdkYXQoaW50IG5pZClcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTQ0ND1zdGF0aWMgaW50IGNyZWF0ZV9hbHRtYXBzX2FuZF9tZW1vcnlfYmxvY2tzKGludCBuaWQsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNDk1LSAqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNDk2OiAqIHdlIGFyZSBPSyBjYWxsaW5nIF9fbWVtaW5pdCBzdHVmZiBoZXJlIC0gd2UgaGF2ZSBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE0OTctICovXFxuLS1cXG5tbS9tbV9pbml0LmM9MTI3Nz1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfbWVtb3J5bGVzc19ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL21tX2luaXQuYy0xMjg0LVxcdFxcdHotXFx1MDAzZXByZXNlbnRfcGFnZXMgPSAwO1xcbm1tL21tX2luaXQuYzoxMjg1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcXG5tbS9tbV9pbml0LmMtMTI4Ni1cXHRcXHR6LVxcdTAwM2VwcmVzZW50X2Vhcmx5X3BhZ2VzID0gMDtcXG4tLVxcbm1tL21tX2luaXQuYz0xMzE5PXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTM0OC1cXHRcXHR6b25lLVxcdTAwM2VwcmVzZW50X3BhZ2VzID0gcmVhbF9zaXplO1xcbm1tL21tX2luaXQuYzoxMzQ5OiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcXG5tbS9tbV9pbml0LmMtMTM1MC1cXHRcXHR6b25lLVxcdTAwM2VwcmVzZW50X2Vhcmx5X3BhZ2VzID0gcmVhbF9zaXplO1xcbi0tXFxubW0vbW1faW5pdC5jPTE1MDY9dm9pZCBfX2luaXQgc2V0X3BhZ2VibG9ja19vcmRlcih2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTE1MTgtICovXFxubW0vbW1faW5pdC5jOjE1MTk6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xcbm1tL21tX2luaXQuYy0xNTIwLXZvaWQgX19yZWYgZnJlZV9hcmVhX2luaXRfY29yZV9ob3RwbHVnKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTU4OD12b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE2MDItXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjE2MDM6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2VfYWxsb2MuYy0xNjA0LVxcdCAgICB1bmxpa2VseShjb250ZXh0ID09IE1FTUlOSVRfSE9UUExVRykpIHtcXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmM9NjA0PXZvaWQgX19pbml0IHNwYXJzZV9pbml0X3N1YnNlY3Rpb25fbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYy02MjYtXFxubW0vc3BhcnNlLXZtZW1tYXAuYzo2Mjc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR1xcbm1tL3NwYXJzZS12bWVtbWFwLmMtNjI4LVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYz05MTc9dm9pZCBzcGFyc2VfcmVtb3ZlX3NlY3Rpb24odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTkyNi19XFxubW0vc3BhcnNlLXZtZW1tYXAuYzo5Mjc6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjoxNi4zMDUyMzM5NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY4MTIwODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEhvdHBsdWcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgZ29vZCBudW1iZXIgb2YgZmlsZXMg4oCTIHNwZWNpZmljYWxseSwgYG1tL21lbW9yeV9ob3RwbHVnLmNgLCBgbW0vbW1faW5pdC5jYCwgYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYW5kIGBtbS9pbnRlcm5hbC5oYC4gQmFzZWQgb24gdGhlIGZpbGUgbGlzdCwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBtZW1vcnkgaG90cGx1ZyBhbmQgdGhlIHJlbGF0ZWQgem9uZSBjb250aWd1aXR5IHRyYWNraW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBrZWVwaW5nIHRyYWNrIG9mIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zIHdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyB0aGVtIG9uIHRoZSBmbHkgaXMgY3J1Y2lhbCBmb3IgZWZmaWNpZW50IHJlc291cmNlIG1hbmFnZW1lbnQuXG5cblRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHdhdGNoIG91dCBmb3Igd2lsbCBiZSBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgb2J2aW91c2x5LiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gaG93IGl0J3MgdXNlZCB0aHJvdWdob3V0IHRoZSBjaGFuZ2VzLlxuXG5JIHNlZSB0aGF0IGBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGFsc28gaW1wbGljYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXNgIGZ1bmN0aW9uIGluIGBtbS9tbV9pbml0LmNgLiBUaGF0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIGludGVyYWN0aW9uIGJldHdlZW4gdGhpcyBob3RwbHVnIHdvcmsgYW5kIHNwYXJzZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yLlxuXG5Ob3csIEknbGwgZm9jdXMgb24gYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2Agc3BlY2lmaWNhbGx5LCBiZWNhdXNlIEkgc3VzcGVjdCBpdCBtaWdodCBjb250YWluIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgb3IgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIGhhdmUgdG8gZGVsdmUgaW50byB0aGF0IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIGNvbmRpdGlvbmFscyBJIG5lZWQgdG8gdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjoyMC44NzMzNTYxOTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODYzOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1PUllfSE9UUExVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfTlVNQSlcXHQrPSBub2RlLm9cXG5kcml2ZXJzL2Jhc2UvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSArPSBtZW1vcnkub1xcbmRyaXZlcnMvYmFzZS9NYWtlZmlsZS0xNy1pZmVxICgkKENPTkZJR19TWVNGUykseSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMDc9aW50IG1lbW9yeV9ub3RpZnkoZW51bSBtZW1vcnlfYmxvY2tfc3RhdGUgc3RhdGUsIHZvaWQgKnYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjExLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyMTI6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRylcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjEzLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbWJsa19ucl9wb2lzb24oc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xMjAyPWludCB3YWxrX2R5bmFtaWNfbWVtb3J5X2dyb3VwcyhpbnQgbmlkLCB3YWxrX21lbW9yeV9ncm91cHNfZnVuY190IGZ1bmMsXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTIyMy1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MTIyNDojaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xMjI1LXZvaWQgbWVtYmxrX25yX3BvaXNvbl9pbmModW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jPTEwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbm9kZV9hY2Nlc3Nfbm9kZV9ncm91cHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmMtMTE0LVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM6MTE1OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUdcXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTExNi1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChub2RlX2NoYWluKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM9NzY0PWludCB1bnJlZ2lzdGVyX2NwdV91bmRlcl9ub2RlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBuaWQpXFxuLS1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTc4Mi1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jOjc4MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHXFxuZHJpdmVycy9iYXNlL25vZGUuYy03ODQtc3RhdGljIHZvaWQgZG9fcmVnaXN0ZXJfbWVtb3J5X2Jsb2NrX3VuZGVyX25vZGUoaW50IG5pZCxcXG4tLVxcbmRyaXZlcnMvYmFzZS9ub2RlLmM9ODY0PXZvaWQgcmVnaXN0ZXJfbWVtb3J5X2Jsb2Nrc191bmRlcl9ub2RlX2hvdHBsdWcoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5kcml2ZXJzL2Jhc2Uvbm9kZS5jLTg3MC19XFxuZHJpdmVycy9iYXNlL25vZGUuYzo4NzE6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqL1xcbmRyaXZlcnMvYmFzZS9ub2RlLmMtODcyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjoyMC45NzQyMjQ5NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODk4MDM2NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgSG90cGx1ZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBob3RwbHVnIHNpdHVhdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgb2J2aW91c2x5LiBCdXQgaG9sZCBvbiwgSSBzZWUgYENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUGAgbWVudGlvbmVkIHRvby4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCdzIGEgKmhhcmQqIHJlcXVpcmVtZW50IG9yIGlmIGl0IGp1c3QgY2hhbmdlcyB0aGUgaW1wbGVtZW50YXRpb24uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgaW4gYG1tL21tX2luaXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXNgIGZ1bmN0aW9uLCBpdCdzIGNsZWFyIHRoYXQgYENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUGAgZGVmaW5pdGVseSBhZmZlY3RzIHRoZSBjb2RlIHBhdGguIFdpdGhvdXQgaXQsIHdlJ3JlIGRvaW5nIGEgc2ltcGxlIGluY3JlbWVudC4gV2l0aCBpdC4uLiB3ZWxsLCBpdCdzIGRpZmZlcmVudC4gTm90IHN0cmljdGx5ICpyZXF1aXJlZCosIGl0IHNlZW1zLCBidXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoZSBiZWhhdmlvciBzaWduaWZpY2FudGx5LiBJIHRoaW5rIHdlIGNhbiBpbmNsdWRlIHRoYXQgd2l0aG91dCBhIHByb2JsZW0uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgdGhlIGNvcmUgb2YgdGhpcy4gRnJvbSB3aGF0IEkgc2VlLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gYG1lbW9yeV9ibG9ja19vbmxpbmVgLCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLCBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAsIGBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5gLCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGZvciBtYW5hZ2luZyBtZW1vcnkgc2VjdGlvbnMuXG5cblRpbWUgdG8gc2VlIGhvdyB0aG9zZSBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLiBBcmUgdGhleSBleHBvcnRlZCwgb3IgYXJlIHRoZXkgc3RhdGljIHdpdGhpbiB0aGVpciBtb2R1bGU/IExldCdzIGNoZWNrIHRoZSBzb3VyY2UsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvYmFzZS9tZW1vcnkuY2AuIFllcCwgc3RhdGljLiBPa2F5LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsZXJzIG5vdy4gTGV0J3MgdHJhY2UgdGhlaXIgdXNhZ2UgYW5kIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6MjYuODcyMjYzMzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUxNDI3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X2Jsb2NrX29ubGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jPTIxNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtYmxrX25yX3BvaXNvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjIzLSAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyMjQ6c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjI1LXtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0zMzI9bWVtb3J5X2Jsb2NrX2FjdGlvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHVuc2lnbmVkIGxvbmcgYWN0aW9uKVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMzNy1cXHRjYXNlIE1FTV9PTkxJTkU6XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMzODpcXHRcXHRyZXQgPSBtZW1vcnlfYmxvY2tfb25saW5lKG1lbSk7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMzOS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6MjYuOTY3NDEwNjI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzY3MTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRnV6emluZyB0aGUgTWVtb3J5IFN1YnN5c3RlbSoqXG5cbk9rYXksIHNvIGBtZW1vcnlfYmxvY2tfYWN0aW9uYCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgaW50ZXJlc3RlZCBpbi4gIEl0J3MgdHJpZ2dlcmVkIGJ5IGBtZW1vcnlfc3Vic3lzX29ubGluZWAgYW5kIGBtZW1vcnlfc3Vic3lzX29mZmxpbmVgLiAgQWhhISBBbmQgKnRob3NlKiBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aGVuIHN5c2ZzIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9tZW1vcnlYL3N0YXRlYCBpcyB3cml0dGVuIHRvLiAgVGhhdCdzIG15IGF0dGFjayB2ZWN0b3IhICBJZiBJIHdhbnQgdG8gZnV6eiB0aGlzIHByb3Blcmx5LCBJIG5lZWQgdG8gZm9jdXMgb24gaGFtbWVyaW5nIGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYC4gIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbG9naWMgaXMuICBUaGlzIHNvdW5kcyBsaWtlIGEgZ29vZCBhcHByb2FjaC5cblxuTm93LCBsZXQncyBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmAgYW5kIGBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5gIGZ1bmN0aW9ucy4gVGhlc2UgY291bGQgYmUgcG90ZW50aWFsIGFyZWFzIGZvciBpbnRlcmVzdGluZyBpc3N1ZXMgdG9vLCBhbmQgSSdkIGxpa2UgdG8gdW5kZXJzdGFuZCB3aGF0IHJvbGUgdGhleSBwbGF5IGluIHRoZSBvdmVyYWxsIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6MzAuNjExMDg0MzQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAyNTg2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmM9MzgxPWludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNDI1LS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjQyNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNDI3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTQ4Mz1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNDk1LVxcdFxcdCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6NDk2OlxcdFxcdHBmbiA9IGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4obmlkLCB6b25lLCBlbmRfcGZuLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNDk3LVxcdFxcdFxcdFxcdFxcdFxcdHpvbmVfZW5kX3Bmbih6b25lKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjMxLjA2MTM0ODEzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODczMzcxMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIE1lbW9yeSBIb3RwbHVnIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgaG90cGx1ZyBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UncmUgcmVtb3ZpbmcgcGFnZSBmcmFtZSBudW1iZXJzIChQRk5zKSBmcm9tIGEgem9uZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgdGhhdCBnZXQgaW52b2tlZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBJJ3ZlIHRyYWNlZCB0aGUgY2FsbCBzdGFjaywgc28gSSBrbm93IHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHRyaWdnZXJlZCBieSBgc2hyaW5rX3pvbmVfc3BhbmAuIFRoYXQgaW4gdHVybiBpcyBjYWxsZWQgYnkgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYC4gRGl2aW5nIGRlZXBlciwgSSBzZWUgdGhhdCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgIGlzIGEgZGlyZWN0IGNhbGxlciBvZiBgX19yZW1vdmVfcGFnZXNgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBpbiB0aGlzIHByb2Nlc3MuIEFuZCBmaW5hbGx5LCBgX19yZW1vdmVfcGFnZXNgIGlzIHRoZSBkaXJlY3QgcGFyZW50IG9mIGBvZmZsaW5lX3BhZ2VzYCBhbmQgYGFyY2hfcmVtb3ZlX21lbW9yeWAsIHdoaWNoIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgZm9yIHJlbW92aW5nIG1lbW9yeS5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgcmVhbGxvY2F0aW5nIHRoZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiByZW1vdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA3MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjozNC45MzQ3MjMzNjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzgzNDA0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz03MzQ9c3RhdGljIGlubGluZSB2b2lkIHNlY3Rpb25fdGFpbnRfem9uZV9kZXZpY2UodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTc0Ny0gKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjc0ODp2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzQ5LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA4Nz1pbnQgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA5Ni1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwOTc6XFx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzLCBOVUxMLCBNSUdSQVRFX1VOTU9WQUJMRSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwOTgtXFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MT1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTY4LVxcdC8qIGFzc29jaWF0ZSBwZm4gcmFuZ2Ugd2l0aCB0aGUgem9uZSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE2OTpcXHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExNzAtXFx0XFx0XFx0ICAgICAgIHRydWUpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMTg5PXZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTk0LVxcdCAqIElmIHRoZSBub2RlIHN0aWxsIHNwYW5zIHBhZ2VzIChlc3BlY2lhbGx5IFpPTkVfREVWSUNFKSwgZG9uJ3RcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIxOTU6XFx0ICogb2ZmbGluZSBpdC4gQSBub2RlIHNwYW5zIG1lbW9yeSBhZnRlciBtb3ZlX3Bmbl9yYW5nZV90b196b25lKCksXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTk2LVxcdCAqIGUuZy4sIGFmdGVyIHRoZSBtZW1vcnkgYmxvY2sgd2FzIG9ubGluZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjM1LjA2ODU2MjIwN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTMwNzg3NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gaXMgd29ya2luZyBoZXJlLiBJdCBsb29rcyBsaWtlIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gdHdvIG1haW4gcGxhY2VzOiBgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeWAgYW5kIGBvbmxpbmVfcGFnZXNgLiBUaGF0IHRlbGxzIG1lIHRoZXNlIGFyZSB0aGUgcG9pbnRzIHdoZXJlIHdlJ3JlIHNoaWZ0aW5nIGFyb3VuZCBwaHlzaWNhbCBwYWdlIGZyYW1lcyAoUEZOcykgYmV0d2VlbiBtZW1vcnkgem9uZXMuXG5cblRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIHpvb20gaW4gb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSB0aGUgb25lcyBJIHNob3VsZCBjaGVjaywgZ2l2ZW4gdGhlIGNhbGwgaGllcmFyY2h5IG9mIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYC4gVGhlc2Ugd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBtZW1vcnkgYmxvY2tzIGFyZSBicm91Z2h0IG9ubGluZSBhbmQgb2ZmbGluZSwgYW5kIGhvdyBQRk4gcmFuZ2VzIGFyZSBpZGVudGlmaWVkIGFuZCBtYW5pcHVsYXRlZDpcblxuLSAgIGBtZW1vcnlfYmxvY2tfb25saW5lYFxuLSAgIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWBcbi0gICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmBcbi0gICBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYFxuLSAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWBcbi0gICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWBcbi0gICBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2BcblxuSSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBjb25maXJtIGlmIGB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyBpZiBpdCBpcyBzdGF0aWMgd2lsbCBoZWxwIHdpdGggdGhlIHNjb3BlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjozOS45OTkzNTMyMDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODg2Nzg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21tX2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9ODUyPXZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxcbi0tXFxubW0vbW1faW5pdC5jLTkxOC1cXG5tbS9tbV9pbml0LmM6OTE5OnN0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxcbm1tL21tX2luaXQuYy05MjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tbV9pbml0LmM9OTUzPXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbW1faW5pdC5jLTk2OC1cXG5tbS9tbV9pbml0LmM6OTY5OlxcdHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCBob2xlX3Bmbik7XFxubW0vbW1faW5pdC5jLTk3MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6NDAuMTM4MjI3NjUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDA1MTc3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgeWVzLCB0aGlzIGRlZmluaXRlbHkgbG9va3MgbGlrZSBpdCBpbnZvbHZlcyBzdGF0aWMgY29uZmlndXJhdGlvbnMuIEhtbSwgbGV0IG1lIHNlZS4uLiBhcmUgdGhlcmUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheSBoZXJlPyBBaCwgSSBzZWUgYENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUGAgaXMgYmVpbmcgdXRpbGl6ZWQuIFJpZ2h0LCBJIHNob3VsZCBkZWZpbml0ZWx5IGluY29ycG9yYXRlIHRoYXQgaW50byBteSB1bmRlcnN0YW5kaW5nLiBQbHVzLCBvZiBjb3Vyc2UsIHRoZSBiaWcgb25lLCBgQ09ORklHX01FTU9SWV9IT1RQTFVHYC5cblxuU28sIGxldCdzIGJyZWFrIHRoaXMgZG93biBjbGVhcmx5LiBCYXNlZCBvbiBteSBhbmFseXNpcywgdGhlIGZvbGxvd2luZyBhcHBsaWVzOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZSwgYWJzb2x1dGVseS5cbiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWZmZWN0aW5nIGhvdyB0aGUgc3lzdGVtIHRyYWNrcyB6b25lIGNvbnRpZ3VpdHkgYW5kIGhvdyBpdCBsb2NhdGVzIHNlY3Rpb24gUEZOcy4gVGhpcyBpcyB0aGUga2luZCBvZiBhcmVhIHdoZXJlIHN1YnRsZSBpc3N1ZXMgY2FuIGhhdmUgYSBtYXNzaXZlIGltcGFjdC4gRnVydGhlcm1vcmUsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGxpa2VseSBpbnZvbHZlZCB3aXRoIGhvdHBsdWcgb3BlcmF0aW9ucywgYSBjb21tb24gZmVhdHVyZSBmb3VuZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4qICAgKipGb2N1c1N5bWJvbHMqKjogT2theSwgc28gdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgYXJlOlxuICAgICogICBgbWVtb3J5X2Jsb2NrX29ubGluZWBcbiAgICAqICAgYG1lbW9yeV9ibG9ja19vZmZsaW5lYFxuICAgICogICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmBcbiAgICAqICAgYGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbmBcbiAgICAqICAgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYFxuICAgICogICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWBcbiAgICAqICAgYHVwZGF0ZV96b25lX29ubGluZV9tZW1tYXBfcGFnZXNgXG4qICAgKipFbmFibGVDb25maWdzKio6IFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gdHJpZ2dlciB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgYXJlOlxuICAgICogICBgTUVNT1JZX0hPVFBMVUdgXG4gICAgKiAgIGBTUEFSU0VNRU1fVk1FTU1BUGBcblxuSSdtIGp1c3QgZ29pbmcgdG8gZG91YmxlIGNoZWNrIHJlYWwgcXVpY2sgdG8gbWFrZSBzdXJlIGBTUEFSU0VNRU1fVk1FTU1BUGAgaXMgYWN0dWFsbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gQ2FuJ3QgYmUgdG9vIGNhcmVmdWwhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjQ1LjQ3ODc0ODIwMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MDQ5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxuLS1cXG5tbS9LY29uZmlnLTQ1NC1cXG5tbS9LY29uZmlnOjQ1NTpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NTYtXFx0Ym9vbFxcbm1tL0tjb25maWctNDU3LVxcbm1tL0tjb25maWc6NDU4OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctNDY1LVxcbm1tL0tjb25maWc6NDY2OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXFxubW0vS2NvbmZpZy00NjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjo0NS41NzgxNjA4ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1OTY3OTA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEJsb2NrIE1hbmFnZW1lbnQgaW4gTGludXgqKlxuXG5Pa2F5LCBzbyBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGRlZmluaXRlbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uOyB0aGF0J3MgZ29vZCB0byBlc3RhYmxpc2ggcmlnaHQgYXdheS4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgY29ycmVjdCBmdW5jdGlvbiBuYW1lcyBmb3IgdGhlIG1lbW9yeSBibG9jayBvbmxpbmUvb2ZmbGluZSBvcGVyYXRpb25zLiBBIHF1aWNrIGNoZWNrIG9mIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgIGNvbmZpcm1zIHRoYXQgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGFuZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgIGFyZSwgaW4gZmFjdCwgdGhlIGZ1bmN0aW9ucyBJJ20gbG9va2luZyBmb3IuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgc2V0X3pvbmVfY29udGlndW91c2AgYW5kIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGFyZSBiZWluZyB1c2VkLiBBaCwgcmlnaHQsIHRoZXkncmUgZGVmaW5lZCBhcyBpbmxpbmUgZnVuY3Rpb25zIGluIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYC4gVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZSBmb3IgZGlyZWN0IGZ1enppbmcsIGJ1dCBpdCdzIG5vdCBhIHNob3dzdG9wcGVyLiBCZWNhdXNlIHRoZXkgYXJlIGlubGluZWQsIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlaXIgY2FsbGluZyBmdW5jdGlvbnMuIFNpbmNlIGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCAqZG8qIGNhbGwgdGhlbSwgdGhvc2Ugd2lsbCBiZSBteSBwcmltYXJ5IHRhcmdldHMuXG5cblRvIGVuc3VyZSBJJ20gZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgc2hvdWxkIG5vdyBjaGVjayBmb3IgYW55IG90aGVyIGNhbGxlcnMgb2YgYHNldF96b25lX2NvbnRpZ3VvdXNgIGFuZCBgY2xlYXJfem9uZV9jb250aWd1b3VzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGludGVyYWN0aW9ucyBoZXJlIHRoYXQgYXJlIGVzY2FwaW5nIG15IG5vdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6NTAuMDM3ODQyNjUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQyMTEwMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF96b25lX2NvbnRpZ3VvdXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMjQ9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNzMtb3V0OlxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyNzQ6XFx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjc1LVxcdG1lbV9ob3RwbHVnX2RvbmUoKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzIxLW91dDpcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzIyOlxcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMyMy1cXHRtZW1faG90cGx1Z19kb25lKCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE3MTM9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfY29udGlndW91cyhjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTcxNy1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE3MTg6c3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNzE5LXtcXG4tLVxcbm1tL21tX2luaXQuYz0yMjYwPXZvaWQgX19pbml0IHBhZ2VfYWxsb2NfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjI5Ni1cXHRmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKVxcbm1tL21tX2luaXQuYzoyMjk3OlxcdFxcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxubW0vbW1faW5pdC5jLTIyOTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI2OjUyLjY3OTk1Nzc4N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk1OTcyNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBZGRpbmcgYHNldF96b25lX2NvbnRpZ3VvdXNgIHRvIHRoZSBGb2N1cyBMaXN0KipcblxuQWxyaWdodCwgc28gYHBhZ2VfYWxsb2NfaW5pdF9sYXRlYCBpcyBjYWxsaW5nIGBzZXRfem9uZV9jb250aWd1b3VzYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBhbmQgdXNlZnVsLiBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aGF0IHRvIG15IG1lbnRhbCBGb2N1c1N5bWJvbHMgbGlzdC4gVGhhdOKAmXMgcHJvYmFibHkgaW1wb3J0YW50IGZvciBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgd2FudCB0byBrZWVwIHRob3NlIGtleSBmdW5jdGlvbnMgZWFzaWx5IGFjY2Vzc2libGUgaW4gbXkgbWluZCB3aGVuIEknbSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBhbmQgY29udGlndW91cyBtZW1vcnkuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBvbiBgY2xlYXJfem9uZV9jb250aWd1b3VzYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIHRoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBoYXZlIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGVhc2lseSBhY2Nlc3NpYmxlIGluIG15IG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzAyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6MjY6NTYuMDc1OTMyMzExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk5Nzk5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsZWFyX3pvbmVfY29udGlndW91c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jPTIyND1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI0OC1cXHRtZW1faG90cGx1Z19iZWdpbigpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyNDk6XFx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNTAtXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAxLVxcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwMjpcXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMy1cXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTcxOD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTcyNS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE3MjY6c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE3Mjcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNjo1OC42NzU3MzYxNjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNjgyNTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQW5hbHl6aW5nIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIENhbGxlcnMgYW5kIGBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50YCoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIHRoZSBjb2RlIGlzIHRlbGxpbmcgbWUgdGhhdCBvbmx5IGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBhcmUgY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBJdCBtZWFucyBJIGNhbiBwcm9iYWJseSBrZWVwIG15IGFuYWx5c2lzIHByZXR0eSBmb2N1c2VkLCBhdCBsZWFzdCBpbml0aWFsbHkuIFRob3NlIHR3byBjYWxsZXJzIGFyZSB0aGUga2V5LlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhhdCBsZWFkIG1lPyBBaCwgeWVzLCBsZXQncyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyByZWxhdGVkIHRvIGBjbGVhcl96b25lX2NvbnRpZ3VvdXNgIGFuZCB0aGUgY29udGV4dCB0aG9zZSBjYWxscyBhcmUgYmVpbmcgbWFkZS4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJwbGF5IHRoZXJlLCBtYXliZSBldmVuIGEgc3luY2hyb25pemF0aW9uIGlzc3VlIG9yIHNvbWUgc3VidGxldHkgaW4gaG93IHBhZ2UgY291bnRzIGFyZSBtYW5hZ2VkLCBnaXZlbiB0aGUgXCJvbmxpbmVcIiBhbmQgXCJvZmZsaW5lXCIgbmFtaW5nLiBDb3VsZCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZGlnIGludG8uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDEzOjI3OjAyLjcwMjU2NjEyMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1NzgyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmM9MTA0NT1zdHJ1Y3Qgem9uZSAqem9uZV9mb3JfcGZuX3JhbmdlKGVudW0gbW1vcCBvbmxpbmVfdHlwZSwgaW50IG5pZCxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA2NC0gKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNjU6dm9pZCBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNjYtXFx0XFx0XFx0ICAgICAgIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTExNDE9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIwNC1cXHRvbmxpbmVfcGFnZXNfcmFuZ2UocGZuLCBucl9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjA1OlxcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMDYtXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDY9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwNjYtXFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCAtbWFuYWdlZF9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMDY3OlxcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgZ3JvdXAsIC1ucl9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDY4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxMzoyNzowMi43ODUxNTA1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMyNzA2ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYW5kIFNvbGlkaWZ5aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZvY3VzIFN5bWJvbHMqKlxuXG5SaWdodCwgc28gYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGdldHMgdXBkYXRlZCB0byBhbHNvIG1hbmFnZSBgem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXBgLiBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aGF0IHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0aGF0J3MgY3J1Y2lhbC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgb3ZlciB0aGUgZXhpc3RpbmcgbGlzdDpcblxuKiAgIGBtZW1vcnlfYmxvY2tfb25saW5lYFxuKiAgIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWBcbiogICBgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbmBcbiogICBgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuYFxuKiAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWBcbiogICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWBcbiogICBgdXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc2BcbiogICBgcGFnZV9hbGxvY19pbml0X2xhdGVgXG4qICAgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgXG5cblllYWgsIHRoaXMgaXMgbG9va2luZyBwcmV0dHkgZ29vZC4gVGhpcyBjb3ZlcnMgYSBjb21wcmVoZW5zaXZlIHNldCBvZiBmdW5jdGlvbnMgcmVsYXRlZCB0byBvbmxpbmUgbWVtb3J5LCBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCwgUEZOIG1hbmlwdWxhdGlvbiwgYW5kIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlIHJlY2VudCBpbmNsdXNpb24gb2YgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGxvb2tzIGNvcnJlY3QuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkLCB3ZWxsLXJvdW5kZWQgc2V0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLiBOb3cgSSBjYW4gbW92ZSBvbiB0byBhY3R1YWxseSBzZXR0aW5nIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxMCwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTM6Mjc6MDguMTE3ODYxMTg4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjY2Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfYmxvY2tfb25saW5lXCIsXG4gICAgXCJtZW1vcnlfYmxvY2tfb2ZmbGluZVwiLFxuICAgIFwiZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmblwiLFxuICAgIFwiZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuXCIsXG4gICAgXCJyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZVwiLFxuICAgIFwibW92ZV9wZm5fcmFuZ2VfdG9fem9uZVwiLFxuICAgIFwidXBkYXRlX3pvbmVfb25saW5lX21lbW1hcF9wYWdlc1wiLFxuICAgIFwicGFnZV9hbGxvY19pbml0X2xhdGVcIixcbiAgICBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgc3BlY2lmaWNhbGx5IHpvbmUgY29udGlndWl0eSB0cmFja2luZyBhbmQgc2VjdGlvbiBQRk4gZmluZGluZy4gVGhlc2UgcGF0aHMgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIG9wZXJhdGlvbnMsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9ibG9ja19vbmxpbmVcIixcbiAgICBcIm1lbW9yeV9ibG9ja19vZmZsaW5lXCIsXG4gICAgXCJmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuXCIsXG4gICAgXCJmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm5cIixcbiAgICBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gICAgXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gICAgXCJ1cGRhdGVfem9uZV9vbmxpbmVfbWVtbWFwX3BhZ2VzXCIsXG4gICAgXCJwYWdlX2FsbG9jX2luaXRfbGF0ZVwiLFxuICAgIFwiYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCBzcGVjaWZpY2FsbHkgem9uZSBjb250aWd1aXR5IHRyYWNraW5nIGFuZCBzZWN0aW9uIFBGTiBmaW5kaW5nLiBUaGVzZSBwYXRocyBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgb3BlcmF0aW9ucywgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxbzh9[1] Phase: Succeeded StartedAt: 2026-07-24 13:27:20 +0000 UTC FinishedAt: 2026-07-24 13:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 13:27:20 +0000 UTC FinishedAt: 2026-07-24 13:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2] Phase: Succeeded StartedAt: 2026-07-24 13:27:20 +0000 UTC FinishedAt: 2026-07-24 18:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 13:27:20 +0000 UTC FinishedAt: 2026-07-24 18:20:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 13:27:20 +0000 UTC FinishedAt: 2026-07-24 13:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 13:27:20 +0000 UTC FinishedAt: 2026-07-24 13:27:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowxbzh9/series-workflowxbzh9-convert-artifact-498080214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 13:27:30 +0000 UTC FinishedAt: 2026-07-24 14:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 13:27:30 +0000 UTC FinishedAt: 2026-07-24 14:13:30 +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:*56573e1e-8aac-4cd5-bd17-adbf04d69c0a,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-workflowxbzh9/series-workflowxbzh9-convert-artifact-498080214/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": "f852765d-4c1a-4536-9a8d-ae2b0ba47a1c", "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-workflowxbzh9/series-workflowxbzh9-build-action-1456797292/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 13:27:30 +0000 UTC FinishedAt: 2026-07-24 14:13:20 +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:*56573e1e-8aac-4cd5-bd17-adbf04d69c0a,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-workflowxbzh9/series-workflowxbzh9-convert-artifact-498080214/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": "f852765d-4c1a-4536-9a8d-ae2b0ba47a1c", "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-workflowxbzh9/series-workflowxbzh9-build-action-1456797292/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 14:13:30 +0000 UTC FinishedAt: 2026-07-24 14:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 14:13:30 +0000 UTC FinishedAt: 2026-07-24 14:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 14:13:30 +0000 UTC FinishedAt: 2026-07-24 14:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 14:13:30 +0000 UTC FinishedAt: 2026-07-24 14:13:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowxbzh9/series-workflowxbzh9-convert-artifact-3400082793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 14:13:41 +0000 UTC FinishedAt: 2026-07-24 14:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 14:13:41 +0000 UTC FinishedAt: 2026-07-24 14:15:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f852765d-4c1a-4536-9a8d-ae2b0ba47a1c,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-workflowxbzh9/series-workflowxbzh9-build-action-1456797292/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-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 14:15:37 +0000 UTC FinishedAt: 2026-07-24 14:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 14:15:37 +0000 UTC FinishedAt: 2026-07-24 14:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 14:15:37 +0000 UTC FinishedAt: 2026-07-24 15:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 14:15:37 +0000 UTC FinishedAt: 2026-07-24 15:12:30 +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:*56573e1e-8aac-4cd5-bd17-adbf04d69c0a,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-workflowxbzh9/series-workflowxbzh9-convert-artifact-3400082793/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": "e60a05ed-8e7d-40a6-9116-121a01fba819", "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-workflowxbzh9/series-workflowxbzh9-build-action-3596444997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 14:15:37 +0000 UTC FinishedAt: 2026-07-24 15:12:01 +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:*56573e1e-8aac-4cd5-bd17-adbf04d69c0a,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-workflowxbzh9/series-workflowxbzh9-convert-artifact-3400082793/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": "e60a05ed-8e7d-40a6-9116-121a01fba819", "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-workflowxbzh9/series-workflowxbzh9-build-action-3596444997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 15:12:30 +0000 UTC FinishedAt: 2026-07-24 15:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 15:12:30 +0000 UTC FinishedAt: 2026-07-24 15:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 15:12:30 +0000 UTC FinishedAt: 2026-07-24 15:14:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 15:12:30 +0000 UTC FinishedAt: 2026-07-24 15:14:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e60a05ed-8e7d-40a6-9116-121a01fba819,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-workflowxbzh9/series-workflowxbzh9-build-action-3596444997/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-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 15:14:45 +0000 UTC FinishedAt: 2026-07-24 18:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 15:14:45 +0000 UTC FinishedAt: 2026-07-24 18:20:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f852765d-4c1a-4536-9a8d-ae2b0ba47a1c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e60a05ed-8e7d-40a6-9116-121a01fba819,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-workflowxbzh9/series-workflowxbzh9-build-action-1456797292/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-workflowxbzh9/series-workflowxbzh9-build-action-3596444997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 15:14:45 +0000 UTC FinishedAt: 2026-07-24 15:14:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 15:14:45 +0000 UTC FinishedAt: 2026-07-24 15:14:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxbzh9/series-workflowxbzh9-convert-artifact-1624213950/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 15:14:45 +0000 UTC FinishedAt: 2026-07-24 15:14:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 15:14:45 +0000 UTC FinishedAt: 2026-07-24 15:14:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 15:14:45 +0000 UTC FinishedAt: 2026-07-24 15:14:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 15:14:55 +0000 UTC FinishedAt: 2026-07-24 18:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxbzh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_block_online","memory_block_offline","find_smallest_section_pfn","find_biggest_section_pfn","remove_pfn_range_from_zone","move_pfn_range_to_zone","update_zone_online_memmap_pages","page_alloc_init_late","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"c0883d4b-8b87-4817-9e9f-ee8001046266","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 15:14:55 +0000 UTC FinishedAt: 2026-07-24 18:20:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f852765d-4c1a-4536-9a8d-ae2b0ba47a1c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e60a05ed-8e7d-40a6-9116-121a01fba819,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-workflowxbzh9/series-workflowxbzh9-build-action-1456797292/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-workflowxbzh9/series-workflowxbzh9-build-action-3596444997/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-workflowxbzh9/series-workflowxbzh9-convert-artifact-1624213950/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,}