Name: series-workflowj72ht Phase: Succeeded StartedAt: 2026-08-03 01:16:17 +0000 UTC FinishedAt: 2026-08-03 04:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[0] Phase: Succeeded StartedAt: 2026-08-03 01:16:17 +0000 UTC FinishedAt: 2026-08-03 01:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 01:16:17 +0000 UTC FinishedAt: 2026-08-03 01:17:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "94f9b3980dd446b56acf1dfed649e9b32a9f3813", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "BPF_SYSCALL", "ANDROID_BINDER_IPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "94f9b3980dd446b56acf1dfed649e9b32a9f3813", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "BPF_SYSCALL", "ANDROID_BINDER_IPC" ], "series_id": "6dbf5a04-692d-4119-a85f-65d0e30124fc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vma_start_read_unlocked", "binder_page_insert", "binder_alloc_free_page", "tcp_zerocopy_receive", "uffd_lock_vma", "uffd_move_lock", "stack_map_lock_vma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "59d09544-f280-48fe-8ca9-a2fd8225e9df" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAxOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0FORFJPSURfQklOREVSX0lQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYV9zdGFydF9yZWFkX3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2JpbmRlcl9wYWdlX2luc2VydCYjMzQ7LAogICAgJiMzNDtiaW5kZXJfYWxsb2NfZnJlZV9wYWdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VmZmRfbG9ja192bWEmIzM0OywKICAgICYjMzQ7dWZmZF9tb3ZlX2xvY2smIzM0OywKICAgICYjMzQ7c3RhY2tfbWFwX2xvY2tfdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAxOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWNjOTk4NDg1ODcwMTE2MDQ1ZjdlMjNjOWNlMzg3Zjg4ZDkzY2UzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDE6MTc6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWdcbmluZGV4IDkxODcyNDBhMDJkYjUuLmY4MTUyMDkxNjdjZDggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9LY29uZmlnXG5AQCAtNDEsNyAmIzQzOzQxLDYgQEAgY29uZmlnIEFSTVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNV1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFVExCRlMgaWYgQVJNX0xQQUVcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcbiBcdHNlbGVjdCBBUkNIX1VTRV9CVUlMVElOX0JTV0FQXG4gXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCAxMWE5YzUzNGI3YjQ4Li4yMWViNjRiMjRhMmM3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC04MSw3ICYjNDM7ODEsNiBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBBUkNIX0hBU19QVEVfUFJPVE5PTkVcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfU01UXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbmluZGV4IGUyMGFjYmU1ZmU3YjUuLjc3NDFlMzllY2EyYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5AQCAtNjksNyAmIzQzOzY5LDYgQEAgY29uZmlnIExPT05HQVJDSFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1BST1ROT05FIGlmIDY0QklUXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lORyBpZiBOVU1BXG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1JUXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9TTVQgaWYgU01QXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQyAgaWYgU01QXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZ1xuaW5kZXggYjVhZDdjMTczZWYwYy4uZGQ4ZjYwNjBmYjdhMiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZ1xuQEAgLTE3LDcgJiM0MzsxNyw2IEBAIGNvbmZpZyBQUENfUE9XRVJOVlxuIFx0c2VsZWN0IFBQQ19ET09SQkVMTFxuIFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuIFx0c2VsZWN0IEZPUkNFX1NNUFxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgUFBDX1JBRElYX0JST0FEQ0FTVF9UTEJJRSBpZiBQUENfUkFESVhfTU1VXG4gXHRkZWZhdWx0IHlcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXG5pbmRleCA3NDkxMGNlM2E1NDFjLi43ZDEyNWUyODhmNmVmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXG5AQCAtMjMsNyAmIzQzOzIzLDYgQEAgY29uZmlnIFBQQ19QU0VSSUVTXG4gXHRzZWxlY3QgSE9UUExVR19DUFVcbiBcdHNlbGVjdCBGT1JDRV9TTVBcbiBcdHNlbGVjdCBTV0lPVExCXG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBQUENfUkFESVhfQlJPQURDQVNUX1RMQklFIGlmIFBQQ19SQURJWF9NTVVcbiBcdGRlZmF1bHQgeVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuaW5kZXggN2I5YzM3M2Q4MmZhYy4uZmFhODVhMDMxZmU1NyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9LY29uZmlnXG5AQCAtNzAsNyAmIzQzOzcwLDYgQEAgY29uZmlnIFJJU0NWXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTIGlmIDY0QklUIFx1MDAyNlx1MDAyNiBNTVVcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0sgaWYgTU1VXG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgaWYgTU1VXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1BST1ROT05FIGlmIE1NVVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1NIQURPV19DQUxMX1NUQUNLIGlmIEhBVkVfU0hBRE9XX0NBTExfU1RBQ0tcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCBhYjhmY2NjMmNjNGUyLi5kMTI3NGJjYThjMzljIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnXG5AQCAtMTUxLDcgJiM0MzsxNTEsNiBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcbiBcdHNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUZcbiBcdHNlbGVjdCBBUkNIX1VTRV9TWU1fQU5OT1RBVElPTlNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggZmIyOThlMjE5MTc5Mi4uNzk0NzlkMjk1NzZmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yNyw3ICYjNDM7MjcsNiBAQCBjb25maWcgWDg2XzY0XG4gXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19JTlQxMjggaWYgQ0NfSEFTX0lOVDEyOFxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0c2VsZWN0IEhBVkVfQVJDSF9TT0ZUX0RJUlRZXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcbkBAIC0xODQ2LDcgJiM0MzsxODQ1LDYgQEAgY29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xuIFx0Ym9vbCBcJiMzNDtYODYgdXNlcnNwYWNlIHNoYWRvdyBzdGFja1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBBU19XUlVTU1xuIFx0ZGVwZW5kcyBvbiBYODZfNjRcbi1cdGRlcGVuZHMgb24gUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXG4gXHRzZWxlY3QgQVJDSF9IQVNfVVNFUl9TSEFET1dfU1RBQ0tcbiBcdHNlbGVjdCBYODZfQ0VUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzXG5pbmRleCBlODJhNTUyMzgwNGY0Li5mN2FkODhhMGQ4MDY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNcbkBAIC00MzksMjIgJiM0Mzs0MzksOSBAQCB1bnNhZmUgZm4gdXNlX3BhZ2Vfc2xvdyhcdTAwMjZzZWxmLCBpOiB1c2l6ZSkgLVx1MDAzZSBSZXN1bHRcdTAwM2MoKVx1MDAzZSB7XG4gICAgICAgICAvLyB3b3JrcXVldWUuXG4gICAgICAgICBsZXQgbW0gPSBNbVdpdGhVc2VyOjppbnRvX21tcHV0X2FzeW5jKHNlbGYubW0ubW1nZXRfbm90X3plcm8oKS5va19vcihFU1JDSCk/KTtcbiAgICAgICAgIHtcbi0gICAgICAgICAgICBsZXQgdm1hX3JlYWQ7XG4tICAgICAgICAgICAgbGV0IG1tYXBfcmVhZDtcbi0gICAgICAgICAgICBsZXQgdm1hID0gaWYgbGV0IFNvbWUocmV0KSA9IG1tLmxvY2tfdm1hX3VuZGVyX3JjdSh2bWFfYWRkcikge1xuLSAgICAgICAgICAgICAgICB2bWFfcmVhZCA9IHJldDtcbi0gICAgICAgICAgICAgICAgY2hlY2tfdm1hKFx1MDAyNnZtYV9yZWFkLCBzZWxmKVxuLSAgICAgICAgICAgIH0gZWxzZSB7XG4tICAgICAgICAgICAgICAgIG1tYXBfcmVhZCA9IG1tLm1tYXBfcmVhZF9sb2NrKCk7XG4tICAgICAgICAgICAgICAgIG1tYXBfcmVhZFxuLSAgICAgICAgICAgICAgICAgICAgLnZtYV9sb29rdXAodm1hX2FkZHIpXG4tICAgICAgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHZtYXwgY2hlY2tfdm1hKHZtYSwgc2VsZikpXG4tICAgICAgICAgICAgfTtcbi1cbi0gICAgICAgICAgICBtYXRjaCB2bWEge1xuLSAgICAgICAgICAgICAgICBTb21lKHZtYSkgPVx1MDAzZSB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsIFx1MDAyNm5ld19wYWdlKT8sXG4tICAgICAgICAgICAgICAgIE5vbmUgPVx1MDAzZSByZXR1cm4gRXJyKEVTUkNIKSxcbi0gICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgIGxldCB2bWFfcmVhZF9ndWFyZCA9IG1tLnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHZtYV9hZGRyKS5va19vcihFU1JDSCk/O1xuJiM0MzsgICAgICAgICAgICBsZXQgdm1hID0gY2hlY2tfdm1hKFx1MDAyNnZtYV9yZWFkX2d1YXJkLCBzZWxmKS5va19vcihFU1JDSCk/O1xuJiM0MzsgICAgICAgICAgICB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsIFx1MDAyNm5ld19wYWdlKT87XG4gICAgICAgICB9XG4gXG4gICAgICAgICBsZXQgaW5uZXIgPSBzZWxmLmxvY2subG9jaygpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuY1xuaW5kZXggZTQ0ODhhZDg2YTY1NS4uNTE5ZGNkZWQxOWIyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jXG5AQCAtMjU5LDIxICYjNDM7MjU5LDE0IEBAIHN0YXRpYyBpbnQgYmluZGVyX3BhZ2VfaW5zZXJ0KHN0cnVjdCBiaW5kZXJfYWxsb2MgKmFsbG9jLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgcmV0ID0gLUVTUkNIO1xuIFxuLVx0LyogYXR0ZW1wdCBwZXItdm1hIGxvY2sgZmlyc3QgKi9cbi1cdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4tXHRpZiAodm1hKSB7XG4tXHRcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbi1cdFx0XHRyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpO1xuLVx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiYjNDM7XHR2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcik7XG4mIzQzO1x0aWYgKCF2bWEpXG4gXHRcdHJldHVybiByZXQ7XG4tXHR9XG4gXG4tXHQvKiBmYWxsIGJhY2sgdG8gbW1hcF9sb2NrICovXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbi1cdGlmICh2bWEgXHUwMDI2XHUwMDI2IGJpbmRlcl9hbGxvY19pc19tYXBwZWQoYWxsb2MpKVxuJiM0MztcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbiBcdFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiM0MztcbiYjNDM7XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTExNDIsNyAmIzQzOzExMzUsNiBAQCBlbnVtIGxydV9zdGF0dXMgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZV90b19mcmVlO1xuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2FkZHI7XG4tXHRpbnQgbW1fbG9ja2VkID0gMDtcbiBcdHNpemVfdCBpbmRleDtcbiBcbiBcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxuQEAgLTExNTEsMTQgJiM0MzsxMTQzLDIwIEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gXHRpbmRleCA9IG1kYXRhLVx1MDAzZXBhZ2VfaW5kZXg7XG4gXHRwYWdlX2FkZHIgPSBhbGxvYy1cdTAwM2V2bV9zdGFydCAmIzQzOyBpbmRleCAqIFBBR0VfU0laRTtcbiBcbi1cdC8qIGF0dGVtcHQgcGVyLXZtYSBsb2NrIGZpcnN0ICovXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBdHRlbXB0IHBlci12bWEgbG9jay4gVGhpcyBpcyBlc3NlbnRpYWxseSBhXG4mIzQzO1x0ICogXCYjMzQ7dHJ5bG9ja1wmIzM0Oy4gSXQgY2FuIGZhaWwgZXZlbiBpZiB0aGUgVk1BIGV4aXN0c1xuJiM0MztcdCAqIGZvciAmIzM5O3BhZ2VfYWRkciYjMzk7LlxuJiM0MztcdCAqL1xuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBwYWdlX2FkZHIpO1xuIFx0aWYgKCF2bWEpIHtcbi1cdFx0LyogZmFsbCBiYWNrIHRvIG1tYXBfbG9jayAqL1xuLVx0XHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSlcbi1cdFx0XHRnb3RvIGVycl9tbWFwX3JlYWRfbG9ja19mYWlsZWQ7XG4tXHRcdG1tX2xvY2tlZCA9IDE7XG4tXHRcdHZtYSA9IHZtYV9sb29rdXAobW0sIHBhZ2VfYWRkcik7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIHZtYSBleGlzdHMsIHdlIGNhbiYjMzk7dCBjb250aW51ZSBiZWNhdXNlIHdlIGNhbm5vdFxuJiM0MztcdFx0ICogcmVtb3ZlIHRoZSBwYWdlIGZyb20gdGhlIHZtYS4gSG93ZXZlciwgaWYgdGhlIHZtYSB3YXNcbiYjNDM7XHRcdCAqIHVubWFwcGVkLCBpdCYjMzk7cyBva2F5IHRvIGNvbnRpbnVlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3ZtYV9sb2NrX2ZhaWxlZDtcbiBcdH1cbiBcbiBcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZhbGxvYy1cdTAwM2VtdXRleCkpXG5AQCAtMTE5MSw5ICYjNDM7MTE4OSw3IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWxsb2MtXHUwMDNlbXV0ZXgpO1xuLVx0aWYgKG1tX2xvY2tlZClcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRlbHNlXG4mIzQzO1x0aWYgKHZtYSlcbiBcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRtbXB1dF9hc3luYyhtbSk7XG4gXHRiaW5kZXJfZnJlZV9wYWdlKHBhZ2VfdG9fZnJlZSk7XG5AQCAtMTIwMywxMSAmIzQzOzExOTksOSBAQCBlbnVtIGxydV9zdGF0dXMgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIGVycl9pbnZhbGlkX3ZtYTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZhbGxvYy1cdTAwM2VtdXRleCk7XG4gZXJyX2dldF9hbGxvY19tdXRleF9mYWlsZWQ6XG4tXHRpZiAobW1fbG9ja2VkKVxuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAodm1hKVxuIFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbi1lcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkOlxuJiM0MztlcnJfdm1hX2xvY2tfZmFpbGVkOlxuIFx0bW1wdXRfYXN5bmMobW0pO1xuIGVycl9tbWdldDpcbiBcdHJldHVybiBMUlVfU0tJUDtcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2ludGVybmFsLmggYi9mcy9wcm9jL2ludGVybmFsLmhcbmluZGV4IGIyMzJlMTA5ODExN2IuLjY3MTM3NTdkYTA5OTIgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvaW50ZXJuYWwuaFxuQEAgLTM4NSwxMCAmIzQzOzM4NSw4IEBAIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cztcbiBcbiBzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4IHtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHRib29sIG1tYXBfbG9ja2VkO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrZWRfdm1hO1xuLSNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHByb2NfbWFwc19wcml2YXRlIHtcbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IDgxN2UzZTBmOTE5NDMuLjA5NmJmMGIwYjllMGUgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTEzMCw4ICYjNDM7MTMwLDYgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV90YXNrX21lbXBvbGljeShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gfVxuICNlbmRpZlxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4tXG4gc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0aW50IHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbkBAIC0yMzMsNDYgJiM0MzsyMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHR2bWFfaXRlcl9zZXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBwcml2LVx1MDAzZWxvY2tfY3R4LmxvY2tlZF92bWEtXHUwMDNldm1fZW5kKTtcbiB9XG4gXG4tI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgaW50IGxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJldHVybiBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC1cdTAwM2VtbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXHUwMDNlbW0pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRyZXR1cm4gbG9ja19jdHhfbW0obG9ja19jdHgpID09IDA7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfdm1hX3JhbmdlKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuLVx0XHRcdFx0XHQgICBsb2ZmX3QgbGFzdF9wb3MpXG4te1xuLVx0cmV0dXJuIHZtYV9uZXh0KFx1MDAyNnByaXYtXHUwMDNlaXRlcik7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuLVx0XHRcdFx0XHQgbG9mZl90IHBvcylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpIHt9XG4tc3RhdGljIGlubGluZSB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KSB7fVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbkBAIC01NjAsOCAmIzQzOzUxOCw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0UFJPQ01BUF9RVUVSWV9WTUFfRkxBR1NcdFx0XHRcdFxcXG4gKVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4tXG4gc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xuQEAgLTYxMiwyNiAmIzQzOzU2OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0XG4gXHRyZXR1cm4gdm1hO1xuIH1cbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0cmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXHUwMDNlbW0pO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LFxuLVx0XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdHJldHVybiBmaW5kX3ZtYShsb2NrX2N0eC1cdTAwM2VtbSwgYWRkcik7XG4tfVxuLVxuLSNlbmRpZiAgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X21hdGNoaW5nX3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCxcbiBcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgZmxhZ3MpXG4ge1xuQEAgLTEzMTQsOCAmIzQzOzEyNTAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfb3BzID0ge1xuIFx0LndhbGtfbG9ja1x0XHQ9IFBHV0FMS19SRExPQ0ssXG4gfTtcbiBcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfd2Fsa192bWFfbG9ja19vcHMgPSB7XG4gXHQucG1kX2VudHJ5XHRcdD0gc21hcHNfcHRlX3JhbmdlLFxuIFx0Lmh1Z2V0bGJfZW50cnlcdFx0PSBzbWFwc19odWdldGxiX3JhbmdlLFxuQEAgLTEzNDUsMjIgJiM0MzsxMjc5LDYgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiBcdTAwMjZzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcztcbiB9XG4gXG4tI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbi1nZXRfc21hcHNfd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuLXtcbi1cdHJldHVybiBcdTAwMjZzbWFwc193YWxrX29wcztcbi19XG4tXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuLWdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4te1xuLVx0cmV0dXJuIFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfb3BzO1xuLX1cbi1cbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuIC8qXG4gICogR2F0aGVyIG1lbSBzdGF0cyBmcm9tIEB2bWEgd2l0aCB0aGUgaW5kaWNhdGVkIGJlZ2lubmluZ1xuICAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuXG5AQCAtMzQ5Nyw3ICYjNDM7MzQxNSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX29wcyA9IHtcbiBcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuIH07XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNob3dfbnVtYV92bWFfbG9ja19vcHMgPSB7XG4gXHQuaHVnZXRsYl9lbnRyeSA9IGdhdGhlcl9odWdldGxiX3N0YXRzLFxuIFx0LnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHMsXG5AQCAtMzUxMiwxNiAmIzQzOzM0MjksNiBAQCBnZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gXHUwMDI2c2hvd19udW1hX3ZtYV9sb2NrX29wcztcbiB9XG4gXG4tI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbi1nZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4te1xuLVx0cmV0dXJuIFx1MDAyNnNob3dfbnVtYV9vcHM7XG4tfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4gLypcbiAgKiBEaXNwbGF5IHBhZ2VzIGFsbG9jYXRlZCBwZXIgbm9kZSBhbmQgbWVtb3J5IHBvbGljeSB2aWEgL3Byb2MuXG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA3ZmFiZTZjNjZiNGI3Li5kOTg1MGY4NDYyNDI3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC05MzEsNyAmIzQzOzkzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbnVtYWJfc3RhdGVfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbiAgKiBUaGVzZSBtdXN0IGJlIGhlcmUgcmF0aGVyIHRoYW4gbW1hcF9sb2NrLmggYXMgZGVwZW5kZW50IG9uIHZtX2ZhdWx0IHR5cGUsXG4gICogZGVjbGFyZWQgaW4gdGhpcyBoZWFkZXIuXG4gICovXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIHtcbiBcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spXG5AQCAtOTQ3LDE3ICYjNDM7OTQ2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9mYXVsdF9sb2NrZWQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRlbHNlXG4gXHRcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sodm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfZmF1bHRfbG9ja2VkKGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLXtcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbi19XG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fZmxhZ3NfdGVzdChpbnQgZmxhZywgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggYjVkNGNkM2IwNjdiZi4uZDhlMjQ2ZmQwOWQzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtOTUwLDcgJiM0Mzs5NTAsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0XHR2bWFfZmxhZ3NfdCBmbGFncztcbiBcdH07XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC8qXG4gXHQgKiBDYW4gb25seSBiZSB3cml0dGVuICh1c2luZyBXUklURV9PTkNFKCkpIHdoaWxlIGhvbGRpbmcgYm90aDpcbiBcdCAqICAtIG1tYXBfbG9jayAoaW4gd3JpdGUgbW9kZSlcbkBAIC05NjYsNyAmIzQzOzk2NSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XG4gXHQgKiBzbG93cGF0aC5cbiBcdCAqL1xuIFx0dW5zaWduZWQgaW50IHZtX2xvY2tfc2VxO1xuLSNlbmRpZlxuJiM0MztcbiBcdC8qXG4gXHQgKiBMb3cgMzItYml0cyBvZiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0LlxuIFx0ICogU2VlIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgY29tbWVudCBmb3IgZGV0YWlscy5cbkBAIC0xMDAzLDcgJiM0MzsxMDAyLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4gXHRzdHJ1Y3Qgdm1hX251bWFiX3N0YXRlICpudW1hYl9zdGF0ZTtcdC8qIE5VTUEgQmFsYW5jaW5nIHN0YXRlICovXG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC8qXG4gXHQgKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZmlyc3RseSwgd2hldGhlciB0aGUgVk1BIGlzIGF0dGFjaGVkLCBzZWNvbmRseSxcbiBcdCAqIGlmIGF0dGFjaGVkLCBob3cgbWFueSByZWFkIGxvY2tzIGFyZSB0YWtlbiwgYW5kIHRoaXJkbHksIGlmIHRoZVxuQEAgLTEwNDYsNyAmIzQzOzEwNDQsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xuIFx0c3RydWN0IGxvY2tkZXBfbWFwIHZtbG9ja19kZXBfbWFwO1xuICNlbmRpZlxuLSNlbmRpZlxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdC8qXG4gXHQgKiBIaWdoIDMyLWJpdHMgb2YgdmlydHVhbCBwYWdlIG9mZnNldC5cbkBAIC0xMjU0LDcgJiM0MzsxMjUxLDYgQEAgc3RydWN0IG1tX3N0cnVjdCB7XG4gXHRcdFx0XHRcdCAgKiBpbml0X21tLm1tbGlzdCwgYW5kIGFyZSBwcm90ZWN0ZWRcbiBcdFx0XHRcdFx0ICAqIGJ5IG1tbGlzdF9sb2NrXG4gXHRcdFx0XHRcdCAgKi9cbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRzdHJ1Y3QgcmN1d2FpdCB2bWFfd3JpdGVyX3dhaXQ7XG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgZmllbGQgaGFzIGxvY2stbGlrZSBzZW1hbnRpY3MsIG1lYW5pbmcgaXQgaXMgc29tZXRpbWVzXG5AQCAtMTI3NCw3ICYjNDM7MTI3MCw3IEBAIHN0cnVjdCBtbV9zdHJ1Y3Qge1xuIFx0XHQgKiBtbWFwX2xvY2suXG4gXHRcdCAqL1xuIFx0XHRzZXFjb3VudF90IG1tX2xvY2tfc2VxO1xuLSNlbmRpZlxuJiM0MztcbiBcdFx0c3RydWN0IGZ1dGV4X21tX2RhdGFcdGZ1dGV4O1xuIFxuIFx0XHR1bnNpZ25lZCBsb25nIGhpd2F0ZXJfcnNzOyAvKiBIaWdoLXdhdGVybWFyayBvZiBSU1MgdXNhZ2UgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggODdmNzdlM2RhNzdmMC4uZmRkOGY1Y2Y1NzIyMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC03Niw4ICYjNDM7NzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0cndzZW1fYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2bW0tXHUwMDNlbW1hcF9sb2NrKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAjZGVmaW5lIF9fdm1hX2xvY2tkZXBfbWFwKHZtYSkgKFx1MDAyNnZtYS1cdTAwM2V2bWxvY2tfZGVwX21hcClcbiAjZWxzZVxuQEAgLTIzMCwxMCAmIzQzOzIyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3JlZmNvdW50X3B1dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB9XG4gXG4gLypcbi0gKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBsb2NraW5nIHdpbGwgbm90XG4tICogZmFpbCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcbiYjNDM7ICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdm1hIGxvY2sgaXMgbm90XG4mIzQzOyAqIGNvbnRlbmRlZCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcbiAgKiBub3QgYmUgdXNlZCBpbiBzdWNoIGNhc2VzIGJlY2F1c2UgaXQgbWlnaHQgZmFpbCBkdWUgdG8gbW1fbG9ja19zZXEgb3ZlcmZsb3cuXG4gICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgdG8gb2J0YWluIHZtYSByZWFkIGxvY2sgYW5kIGRyb3AgdGhlIG1tYXAgcmVhZCBsb2NrLlxuJiM0MzsgKiBWTUEgY2FuJiMzOTt0IGJlIGRldGFjaGVkIHdoaWxlIHdlIGFyZSBob2xkaW5nIG1tYXAgbG9jaywgdGhlcmVmb3JlIGluIHByYWN0aWNlIHRoaXNcbiYjNDM7ICogZnVuY3Rpb24gY2FuIGZhaWwgb25seSB3aGVuIHRoZXJlIGFyZSBzbyBtYW55IHJlYWRlcnMgdGhhdCB2bV9yZWZjbnQgb3ZlcmZsb3dzLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgc3ViY2xhc3MpXG4ge1xuQEAgLTI0OSwxNiAmIzQzOzI0OSwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkX25lc3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50XG4gfVxuIFxuIC8qXG4tICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgbG9ja2luZyB3aWxsIG5vdFxuLSAqIGZhaWwgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXG4mIzQzOyAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHZtYSBsb2NrIGlzIG5vdFxuJiM0MzsgKiBjb250ZW5kZWQgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXG4gICogbm90IGJlIHVzZWQgaW4gc3VjaCBjYXNlcyBiZWNhdXNlIGl0IG1pZ2h0IGZhaWwgZHVlIHRvIG1tX2xvY2tfc2VxIG92ZXJmbG93LlxuICAqIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1c2VkIHRvIG9idGFpbiB2bWEgcmVhZCBsb2NrIGFuZCBkcm9wIHRoZSBtbWFwIHJlYWQgbG9jay5cbiYjNDM7ICogVk1BIGNhbiYjMzk7dCBiZSBkZXRhY2hlZCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBtbWFwIGxvY2ssIHRoZXJlZm9yZSBpbiBwcmFjdGljZSB0aGlzXG4mIzQzOyAqIGZ1bmN0aW9uIGNhbiBmYWlsIG9ubHkgd2hlbiB0aGVyZSBhcmUgc28gbWFueSByZWFkZXJzIHRoYXQgdm1fcmVmY250IG92ZXJmbG93cy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHZtYSwgMCk7XG4gfVxuIFxuJiM0MztzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZW5kX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0dm1hX3JlZmNvdW50X3B1dCh2bWEpO1xuQEAgLTQ4NCw1NCAmIzQzOzQ4OSw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19uZXh0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHZtYV9pdGVyYXRvciAqaXRlcixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGlubGluZSB2b2lkIG1tX2xvY2tfc2VxY291bnRfaW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9iZWdpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9lbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9XG4tXG4tc3RhdGljIGlubGluZSBib29sIG1tYXBfbG9ja19zcGVjdWxhdGVfdHJ5X2JlZ2luKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgKnNlcSlcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtbWFwX2xvY2tfc3BlY3VsYXRlX3JldHJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgc2VxKVxuLXtcbi1cdHJldHVybiB0cnVlO1xuLX1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2xvY2tfaW5pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCByZXNldF9yZWZjbnQpIHt9XG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9lbmRfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX3N0YXJ0X3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXG4taW50IHZtYV9zdGFydF93cml0ZV9raWxsYWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkgeyByZXR1cm4gMDsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi1cdFx0eyBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTsgfVxuLXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYXR0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tXHRcdHsgcmV0dXJuIHRydWU7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9kZXRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX21hcmtfYXR0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9tYXJrX2RldGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9zdGFiaWxpc2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdC8qIElmIG5vIFZNQSBsb2NrcywgdGhlbiBlaXRoZXIgbW1hcCBsb2NrIHN1ZmZpY2VzIHRvIHN0YWJpbGlzZS4gKi9cbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuLX1cbi1cbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aWYgKHZtYV9pc19hdHRhY2hlZCh2bWEpKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuaW5kZXggNDFmZTg3ZDczMDJmMi4uODg0OGUyNmVmNTgxMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5AQCAtMjcyLDEzICYjNDM7MjcyLDggQEAgc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayB7XG4gLypcbiAgKiBBY3F1aXJlIGEgc3RhYmxlIHJlYWQtc2lkZSByZWZlcmVuY2Ugb24gdGhlIFZNQSBjb3ZlcmluZyBAaXAuXG4gICpcbi0gKiBXaXRoIENPTkZJR19QRVJfVk1BX0xPQ0s9eSB0aGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkXG4tICogbG9jayBoZWxkIGFuZCBtbWFwX2xvY2sgZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuXG4tICpcbi0gKiBXaXRoIENPTkZJR19QRVJfVk1BX0xPQ0s9biBpdCByZXR1cm5zIGEgVk1BIHdpdGggbW1hcF9sb2NrIHN0aWxsXG4tICogaGVsZDsgdGhlIGNhbGxlciBtdXN0IHNuYXBzaG90IGFueSBmaWVsZHMgaXQgbmVlZHMgYW5kIHBpbiB2bV9maWxlXG4tICogd2l0aCBnZXRfZmlsZSgpIGJlZm9yZSBzdGFja19tYXBfdW5sb2NrX3ZtYSgpIGRyb3BzIG1tYXBfbG9jaywgYXNcbi0gKiB0aGUgVk1BIG1heSBiZSBzcGxpdCwgbWVyZ2VkLCBvciBmcmVlZCBhZnRlciB0aGF0LlxuJiM0MzsgKiBUaGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkIGxvY2sgaGVsZCBhbmQgbW1hcF9sb2NrXG4mIzQzOyAqIGRyb3BwZWQsIHNvIHRoZSBjYWxsZXIgbWF5IHNsZWVwLlxuICAqXG4gICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2Ugbm8gbG9jayBpcyBoZWxkLlxuICAqL1xuQEAgLTI4OCw3ICYjNDM7MjgzLDYgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2stXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcbi1cdC8qIG5vb3AgdW5kZXIgIUNPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgaXApO1xuIFx0aWYgKHZtYSkge1xuIFx0XHRsb2NrLVx1MDAzZXZtYSA9IHZtYTtcbkBAIC0zMDgsMTMgJiM0MzszMDIsMTEgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHRpZiAoIXZtYV9zdGFydF9yZWFkX2xvY2tlZCh2bWEpKSB7XG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLSNlbmRpZlxuIFxuIFx0bG9jay1cdTAwM2V2bWEgPSB2bWE7XG4gXHRyZXR1cm4gdm1hO1xuQEAgLTMyMiwxMSAmIzQzOzMxNCw3IEBAIHN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKVxuIFxuIHN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spXG4ge1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHR2bWFfZW5kX3JlYWQobG9jay1cdTAwM2V2bWEpO1xuLSNlbHNlXG4tXHRtbWFwX3JlYWRfdW5sb2NrKGxvY2stXHUwMDNlbW0pO1xuLSNlbmRpZlxuIFx0bG9jay1cdTAwM2V2bWEgPSBOVUxMO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jIGIva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuaW5kZXggZTc5MWFlMDY1YzM5Yi4uNmNmODE1YmM4NGJlZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbkBAIC04MzUsMTEgJiM0Mzs4MzUsNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2l0ZXJfdGFza192bWFfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQsXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYV9rZXJuKSAhPSBzaXplb2Yoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hKSk7XG4gXHRCVUlMRF9CVUdfT04oX19hbGlnbm9mX18oc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hX2tlcm4pICE9IF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSkpO1xuIFxuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QRVJfVk1BX0xPQ0spKSB7XG4tXHRcdGtpdC1cdTAwM2VkYXRhID0gTlVMTDtcbi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0fVxuLVxuIFx0LypcbiBcdCAqIFJlamVjdCBpcnFzLWRpc2FibGVkIGNvbnRleHRzIGluY2x1ZGluZyBOTUkuIE9wZXJhdGlvbnMgdXNlZFxuIFx0ICogYnkgX25leHQoKSBhbmQgX2Rlc3Ryb3koKSAodm1hX2VuZF9yZWFkLCBmcHV0LCBicGZfaXRlcl9tbXB1dF9hc3luYylcbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggZjBlMmUxMzFhOWE1YS4uZmY5MWY1ZjY2YzgwZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0xMDc3LDkgJiM0MzsxMDc3LDcgQEAgc3RhdGljIHZvaWQgbW1hcF9pbml0X2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0aW5pdF9yd3NlbShcdTAwMjZtbS1cdTAwM2VtbWFwX2xvY2spO1xuIFx0bW1fbG9ja19zZXFjb3VudF9pbml0KG1tKTtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0cmN1d2FpdF9pbml0KFx1MDAyNm1tLVx1MDAzZXZtYV93cml0ZXJfd2FpdCk7XG4tI2VuZGlmXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICptbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDA2MDE5MGUxMmJjZWQuLjc3MTAzYjQ2YjY3OTIgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnXG5AQCAtMTQyNSwxOSAmIzQzOzE0MjUsNiBAQCBjb25maWcgTFJVX0dFTl9TVEFUU1xuIGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuIFx0ZGVmX2Jvb2wgeVxuIFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbi0jIH1cbi1cbi1jb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbi0gICAgICAgZGVmX2Jvb2wgblxuLVxuLWNvbmZpZyBQRVJfVk1BX0xPQ0tcbi1cdGRlZl9ib29sIHlcbi1cdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4tXHRoZWxwXG4tXHQgIEFsbG93IHBlci12bWEgbG9ja2luZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZy5cbi1cbi1cdCAgVGhpcyBmZWF0dXJlIGFsbG93cyBsb2NraW5nIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYSBzZXBhcmF0ZWx5IHdoZW5cbi1cdCAgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW5zdGVhZCBvZiB0YWtpbmcgbW1hcF9sb2NrLlxuIFxuIGNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcuZGVidWcgYi9tbS9LY29uZmlnLmRlYnVnXG5pbmRleCA1NzM3YTUwNGVmYmJlLi4xZGQxNTBlZGZlNzFjIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZy5kZWJ1Z1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZy5kZWJ1Z1xuQEAgLTMxMCw3ICYjNDM7MzEwLDYgQEAgY29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0VcbiBcbiBjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG4gXHRib29sIFwmIzM0O1N0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcJiMzNDtcbi1cdGRlcGVuZHMgb24gUEVSX1ZNQV9MT0NLXG4gXHRoZWxwXG4gXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1Y2Nlc3MsIHJldHJ5IGFuZCBmYWlsdXJlIGNvdW50ZXJzIG9mIHBhZ2VcbiBcdCAgZmF1bHRzIGhhbmRsZWQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZXItdm1hIGxvY2tzLiBXaGVuIGVuYWJsZWQsIHRoZVxuZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jXG5pbmRleCA5YTAyOTdiMzk4OGQ4Li42NTVlNmJjYzBlOGQ5IDEwMDY0NFxuLS0tIGEvbW0vZGVidWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWcuY1xuQEAgLTE1NywxNyAmIzQzOzE1NywxMyBAQCB2b2lkIGR1bXBfdm1hKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cHJfZW1lcmcoXCYjMzQ7dm1hICVweCBzdGFydCAlcHggZW5kICVweCBtbSAlcHhcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7cHJvdCAlbHggYW5vbl92bWEgJXB4IHZtX29wcyAlcHhcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7cGdvZmYgJWx4IGZpbGUgJXB4IHByaXZhdGVfZGF0YSAlcHhcXG5cJiMzNDtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRcJiMzNDtyZWZjbnQgJXhcXG5cJiMzNDtcbi0jZW5kaWZcbiBcdFx0XCYjMzQ7ZmxhZ3M6ICUjbHgoJXBHdilcXG5cJiMzNDssXG4gXHRcdHZtYSwgKHZvaWQgKil2bWEtXHUwMDNldm1fc3RhcnQsICh2b2lkICopdm1hLVx1MDAzZXZtX2VuZCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHQodW5zaWduZWQgbG9uZylwZ3Byb3RfdmFsKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpLFxuIFx0XHR2bWEtXHUwMDNlYW5vbl92bWEsIHZtYS1cdTAwM2V2bV9vcHMsIHZtYV9zdGFydF9wZ29mZih2bWEpLFxuIFx0XHR2bWEtXHUwMDNldm1fZmlsZSwgdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRyZWZjb3VudF9yZWFkKFx1MDAyNnZtYS1cdTAwM2V2bV9yZWZjbnQpLFxuLSNlbmRpZlxuIFx0XHR2bWEtXHUwMDNldm1fZmxhZ3MsIFx1MDAyNnZtYS1cdTAwM2V2bV9mbGFncyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woZHVtcF92bWEpO1xuZGlmZiAtLWdpdCBhL21tL2luaXQtbW0uYyBiL21tL2luaXQtbW0uY1xuaW5kZXggM2U3OTJhYWQ3NjI2MS4uYTFiYjJjMmQwMjg0YSAxMDA2NDRcbi0tLSBhL21tL2luaXQtbW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW5pdC1tbS5jXG5AQCAtMzksMTAgJiM0MzszOSw4IEBAIHN0cnVjdCBtbV9zdHJ1Y3QgaW5pdF9tbSA9IHtcbiBcdC5wYWdlX3RhYmxlX2xvY2sgPSAgX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spLFxuIFx0LmFyZ19sb2NrXHQ9ICBfX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X21tLmFyZ19sb2NrKSxcbiBcdC5tbWxpc3RcdFx0PSBMSVNUX0hFQURfSU5JVChpbml0X21tLm1tbGlzdCksXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC52bWFfd3JpdGVyX3dhaXQgPSBfX1JDVVdBSVRfSU5JVElBTElaRVIoaW5pdF9tbS52bWFfd3JpdGVyX3dhaXQpLFxuIFx0Lm1tX2xvY2tfc2VxXHQ9IFNFUUNOVF9aRVJPKGluaXRfbW0ubW1fbG9ja19zZXEpLFxuLSNlbmRpZlxuICNpZmRlZiBDT05GSUdfU0NIRURfTU1fQ0lEXG4gXHQubW1fY2lkLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5tbV9jaWQubG9jayksXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYTYyMGQ0MjVlYzk1ZS4uZjEwOWY2Yzg3YjI4YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTY4MTMsNyAmIzQzOzY4MTMsNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBzYW5pdGl6ZV9mYXVsdF9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdCAhaXNfY293X21hcHBpbmcodm1hLVx1MDAzZXZtX2ZsYWdzKSkpXG4gXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4gXHR9XG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC8qXG4gXHQgKiBQZXItVk1BIGxvY2tzIGNhbiYjMzk7dCBiZSB1c2VkIHdpdGggRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgYmVjYXVzZSBvZlxuIFx0ICogdGhlIGFzc3VtcHRpb24gdGhhdCBsb2NrIGlzIGRyb3BwZWQgb24gVk1fRkFVTFRfUkVUUlkuXG5AQCAtNjgyMiw3ICYjNDM7NjgyMSw2IEBAIHN0YXRpYyB2bV9mYXVsdF90IHNhbml0aXplX2ZhdWx0X2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdChGQVVMVF9GTEFHX1ZNQV9MT0NLIHwgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKSA9PVxuIFx0XHRcdChGQVVMVF9GTEFHX1ZNQV9MT0NLIHwgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKSlcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4tI2VuZGlmXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbW1hcF9sb2NrLmMgYi9tbS9tbWFwX2xvY2suY1xuaW5kZXggODk4YzJlZjFlOTU4MC4uNmZmMDVlNjhlNjFiZSAxMDA2NDRcbi0tLSBhL21tL21tYXBfbG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbWFwX2xvY2suY1xuQEAgLTQzLDkgJiM0Mzs0Myw2IEBAIHZvaWQgX19tbWFwX2xvY2tfZG9fdHJhY2VfcmVsZWFzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGJvb2wgd3JpdGUpXG4gRVhQT1JUX1NZTUJPTChfX21tYXBfbG9ja19kb190cmFjZV9yZWxlYXNlZCk7XG4gI2VuZGlmIC8qIENPTkZJR19UUkFDSU5HICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuLVxuIC8qIFN0YXRlIHNoYXJlZCBhY3Jvc3MgX192bWFfW3N0YXJ0LCBlbmRdX2V4Y2x1ZGVfcmVhZGVycy4gKi9cbiBzdHJ1Y3Qgdm1hX2V4Y2x1ZGVfcmVhZGVyc19zdGF0ZSB7XG4gXHQvKiBJbnB1dCBwYXJhbWV0ZXJzLiAqL1xuQEAgLTM0MSw2ICYjNDM7MzM4LDM1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja192bWFfdW5kZXJfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTsgYW5kIGxvY2sgaXQgZm9yIHJlYWRpbmcuIFdhaXRzIGZvciB3cml0ZXJzIHRvXG4mIzQzOyAqIGZpbmlzaCBpZiB0aGUgVk1BIGlzIGJlaW5nIG1vZGlmaWVkLiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm8gVk1BIGNvdmVyaW5nXG4mIzQzOyAqICYjMzk7YWRkcmVzcyYjMzk7LlxuJiM0MzsgKlxuJiM0MzsgKiBVc2Ugb25seSBpbiBjb2RlIHBhdGhzIHdoZXJlIG5vIG1tYXBfbG9jayBhbmQgbm8gVk1BIGxvY2sgaXMgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGZhc3QgcGF0aCBkb2VzIG5vdCB0YWtlIG1tYXBfbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4mIzQzO1xuJiM0MztcdC8qIEZhc3QgcGF0aDogcmV0dXJuIHN0YWJsZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTs6ICovXG4mIzQzO1x0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiYjNDM7XHRpZiAodm1hKVxuJiM0MztcdFx0cmV0dXJuIHZtYTtcbiYjNDM7XG4mIzQzO1x0LyogU2xvdyBwYXRoOiBwcmVjbHVkZSBWTUEgd3JpdGVycyBieSB0ZW1wb3JhcmlseSBnZXR0aW5nIG1tYXAgcmVhZCBsb2NrLiAqL1xuJiM0MztcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbiYjNDM7XHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbiYjNDM7XHRpZiAodm1hIFx1MDAyNlx1MDAyNiAhdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHZtYSkpXG4mIzQzO1x0XHR2bWEgPSBOVUxMO1xuJiM0MztcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdm1hO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfbmV4dF92bWFfdW5kZXJfbW1hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbiBcdFx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZyb21fYWRkcilcbkBAIC00MzEsNyAmIzQzOzQ1Nyw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19uZXh0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcbiBcdHJldHVybiB2bWE7XG4gfVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4gXG4gI2lmZGVmIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4dGFibGUuaFx1MDAzZVxuQEAgLTU0OCwyMyAmIzQzOzU3MywzIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQSAqL1xuLVxuLSNlbHNlIC8qIENPTkZJR19NTVUgKi9cbi1cbi0vKlxuLSAqIEF0IGxlYXN0IHh0ZW5zYSBlbmRzIHVwIGhhdmluZyBwcm90ZWN0aW9uIGZhdWx0cyBldmVuIHdpdGggbm9cbi0gKiBNTVUuLiBObyBzdGFjayBleHBhbnNpb24sIGF0IGxlYXN0LlxuLSAqL1xuLXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0aWYgKCF2bWEpXG4tXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0cmV0dXJuIHZtYTtcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggZWQ0ODYwYzAxOTM2Yy4uZmJjZjY0YzU5YTk3MyAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2V3YWxrLmNcbkBAIC00NDYsNyAmIzQzOzQ0Niw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX21tX3dhbGtfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2spXG4ge1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHRzd2l0Y2ggKHdhbGtfbG9jaykge1xuIFx0Y2FzZSBQR1dBTEtfV1JMT0NLOlxuIFx0XHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcbkBAIC00NjEsNyAmIzQzOzQ2MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFBHV0FMS19SRExPQ0sgaXMgaGFuZGxlZCBieSBwcm9jZXNzX21tX3dhbGtfbG9jayAqL1xuIFx0XHRicmVhaztcbiBcdH1cbi0jZW5kaWZcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IGI5MTc0MzE3NTllZTAuLjRlNGE0Yjc0Nzk3NzIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTI2MCwxMSAmIzQzOzI2MCw5IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Fub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxuIFx0LyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi9cbiBcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gPT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LyogT25seSBtZXJnaW5nIGFuIHVuZmF1bHRlZCBWTUEgbGVhdmVzIHRoZSBkZXN0aW5hdGlvbiBhdHRhY2hlZC4gKi9cbiBcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHR2bWFfaXNfYXR0YWNoZWQoZHN0KSk7XG4tI2VuZGlmXG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1heWJlX3JldXNlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCAyNThiMDMxODJhNzgwLi5jM2EwYzM4YTNkYzNiIDEwMDY0NFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuY1xuQEAgLTEyMiw3ICYjNDM7MTIyLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIHZtYTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiAvKlxuICAqIHVmZmRfbG9ja192bWEoKSAtIExvb2t1cCBhbmQgbG9jayB2bWEgY29ycmVzcG9uZGluZyB0byBAYWRkcmVzcy5cbiAgKiBAbW06IG1tIHRvIHNlYXJjaCB2bWEgaW4uXG5AQCAtMTMwLDggJiM0MzsxMjksMTAgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuICAqXG4gICogU2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbW1hcF9sb2NrLlxuICAqXG4tICogUmV0dXJuOiBBIGxvY2tlZCB2bWEgY29udGFpbmluZyBAYWRkcmVzcywgLUVOT0VOVCBpZiBubyB2bWEgaXMgZm91bmQsIG9yXG4tICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4mIzM5O3QgYmUgYWxsb2NhdGVkLlxuJiM0MzsgKiBSZXR1cm46IEEgbG9ja2VkIHZtYSBjb250YWluaW5nIEBhZGRyZXNzLCAtRU5PRU5UIGlmIG5vIHZtYSBpcyBmb3VuZCxcbiYjNDM7ICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4mIzM5O3QgYmUgYWxsb2NhdGVkLCBvciAtRUFHQUlOIGlmIHZtYSByZWZjb3VudFxuJiM0MzsgKiBvdmVyZmxvdyBoYXBwZW5lZCBkdWUgdG8gaGlnaCBudW1iZXIgb2YgcmVhZGVycyBhbmQgdGhlIGNhbGxlciBzaG91bGRcbiYjNDM7ICogcmV0cnkgbGF0ZXIuXG4gICovXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdWZmZF9sb2NrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG5AQCAtMTgyLDM0ICYjNDM7MTgzLDYgQEAgc3RhdGljIHZvaWQgdWZmZF9tZmlsbF91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHR2bWFfZW5kX3JlYWQodm1hKTtcbiB9XG4gXG4tI2Vsc2Vcbi1cbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp1ZmZkX21maWxsX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLFxuLVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXG4te1xuLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hO1xuLVxuLVx0bW1hcF9yZWFkX2xvY2soZHN0X21tKTtcbi1cdGRzdF92bWEgPSBmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKGRzdF9tbSwgZHN0X3N0YXJ0KTtcbi1cdGlmIChJU19FUlIoZHN0X3ZtYSkpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cbi1cdGlmICh2YWxpZGF0ZV9kc3Rfdm1hKGRzdF92bWEsIGRzdF9zdGFydCAmIzQzOyBsZW4pKVxuLVx0XHRyZXR1cm4gZHN0X3ZtYTtcbi1cbi1cdGRzdF92bWEgPSBFUlJfUFRSKC1FTk9FTlQpO1xuLW91dF91bmxvY2s6XG4tXHRtbWFwX3JlYWRfdW5sb2NrKGRzdF9tbSk7XG4tXHRyZXR1cm4gZHN0X3ZtYTtcbi19XG4tXG4tc3RhdGljIHZvaWQgdWZmZF9tZmlsbF91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4te1xuLVx0bW1hcF9yZWFkX3VubG9jayh2bWEtXHUwMDNldm1fbW0pO1xuLX1cbi0jZW5kaWZcbi1cbiBzdGF0aWMgdm9pZCBtZmlsbF9wdXRfdm1hKHN0cnVjdCBtZmlsbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aWYgKCFzdGF0ZS1cdTAwM2V2bWEpXG5AQCAtMTg1Miw3ICYjNDM7MTgyNSw2IEBAIGludCBmaW5kX3ZtYXNfbW1fbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gc3RhdGljIGludCB1ZmZkX21vdmVfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsXG5AQCAtMTkyNywzMSAmIzQzOzE4OTksNiBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbiBcdFx0dm1hX2VuZF9yZWFkKGRzdF92bWEpO1xuIH1cbiBcbi0jZWxzZVxuLVxuLXN0YXRpYyBpbnQgdWZmZF9tb3ZlX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LFxuLVx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqZHN0X3ZtYXAsXG4tXHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipzcmNfdm1hcClcbi17XG4tXHRpbnQgZXJyO1xuLVxuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0ZXJyID0gZmluZF92bWFzX21tX2xvY2tlZChtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIGRzdF92bWFwLCBzcmNfdm1hcCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLVx0XHRcdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKVxuLXtcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZChzcmNfdm1hLVx1MDAzZXZtX21tKTtcbi1cdG1tYXBfcmVhZF91bmxvY2soZHN0X3ZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLSNlbmRpZlxuLVxuIC8qKlxuICAqIG1vdmVfcGFnZXMgLSBtb3ZlIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgb2YgYW4gZXhpc3Rpbmcgdm1hXG4gICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLjYyZGVmZTcwZjNjZWIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0yMTY3LDI3ICYjNDM7MjE2NywxOCBAQCBzdGF0aWMgdm9pZCB0Y3BfemNfZmluYWxpemVfcnhfdHN0YW1wKHN0cnVjdCBzb2NrICpzayxcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdFx0XHRcdCAgIGJvb2wgKm1tYXBfbG9ja2VkKVxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyZXNzKTtcbiBcbi1cdGlmICh2bWEpIHtcbi1cdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuLVx0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdCptbWFwX2xvY2tlZCA9IGZhbHNlO1xuLVx0XHRyZXR1cm4gdm1hO1xuLVx0fVxuJiM0MztcdGlmICghdm1hKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbi1cdGlmICghdm1hIHx8IHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiYjNDM7XHRpZiAodm1hLVx1MDAzZXZtX29wcyAhPSBcdTAwMjZ0Y3Bfdm1fb3BzKSB7XG4mIzQzO1x0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4tXHQqbW1hcF9sb2NrZWQgPSB0cnVlO1xuJiM0MztcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuQEAgLTIyMDgsNyAmIzQzOzIxOTksNiBAQCBzdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcbiBcdHUzMiBzZXEgPSB0cC1cdTAwM2Vjb3BpZWRfc2VxO1xuIFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcDtcbiBcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcbi1cdGJvb2wgbW1hcF9sb2NrZWQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0emMtXHUwMDNlY29weWJ1Zl9sZW4gPSAwO1xuQEAgLTIyMzMsNyAmIzQzOzIyMjMsNyBAQCBzdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHR2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC1cdTAwM2VtbSwgYWRkcmVzcywgXHUwMDI2bW1hcF9sb2NrZWQpO1xuJiM0MztcdHZtYSA9IGZpbmRfdGNwX3ZtYShjdXJyZW50LVx1MDAzZW1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0yMzE1LDEwICYjNDM7MjMwNSw3IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHRcdCAgIHpjLCB0b3RhbF9ieXRlc190b19tYXApO1xuIFx0fVxuIG91dDpcbi1cdGlmIChtbWFwX2xvY2tlZClcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhjdXJyZW50LVx1MDAzZW1tKTtcbi1cdGVsc2Vcbi1cdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4mIzQzO1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHQvKiBUcnkgdG8gY29weSBzdHJhZ2dsZXIgZGF0YS4gKi9cbiBcdGlmICghcmV0KVxuIFx0XHRjb3B5bGVuID0gdGNwX3pjX2hhbmRsZV9sZWZ0b3Zlcih6Yywgc2ssIHNrYiwgXHUwMDI2c2VxLCBjb3B5YnVmX2xlbiwgdHNzKTtcbmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9tbS5ycyBiL3J1c3Qva2VybmVsL21tLnJzXG5pbmRleCA0NzY0ZDdiNjhmMmE3Li44NzdmYWQ2OGJlOWMzIDEwMDY0NFxuLS0tIGEvcnVzdC9rZXJuZWwvbW0ucnNcbiYjNDM7JiM0MzsmIzQzOyBiL3J1c3Qva2VybmVsL21tLnJzXG5AQCAtMTc0LDI2ICYjNDM7MTc0LDM4IEBAIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcdTAwM2MmIzM5O2FcdTAwM2UocHRyOiAqY29uc3QgYmluZGluZ3M6Om1tX3N0cnVjdCkgLVx1MDAzZSBcdTAwMjYmIzM5O2EgTW1XaXRoVXNlciB7XG4gICAgIC8vLyBXaGVuIHBlci12bWEgbG9ja3MgYXJlIGRpc2FibGVkLCB0aGlzIGFsd2F5cyByZXR1cm5zIGBOb25lYC5cbiAgICAgI1tpbmxpbmVdXG4gICAgIHB1YiBmbiBsb2NrX3ZtYV91bmRlcl9yY3UoXHUwMDI2c2VsZiwgdm1hX2FkZHI6IHVzaXplKSAtXHUwMDNlIE9wdGlvblx1MDAzY1ZtYVJlYWRHdWFyZFx1MDAzYyYjMzk7X1x1MDAzZVx1MDAzZSB7XG4tICAgICAgICAjW2NmZyhDT05GSUdfUEVSX1ZNQV9MT0NLKV1cbiAgICAgICAgIHtcbiAgICAgICAgICAgICAvLyBTQUZFVFk6IENhbGxpbmcgYGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3VgIGlzIGFsd2F5cyBva2F5IGdpdmVuIGFuIG1tIHdoZXJlXG4gICAgICAgICAgICAgLy8gYG1tX3VzZXJzYCBpcyBub24temVyby5cbiAgICAgICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdShzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcbi0gICAgICAgICAgICBpZiAhdm1hLmlzX251bGwoKSB7XG4tICAgICAgICAgICAgICAgIHJldHVybiBTb21lKFZtYVJlYWRHdWFyZCB7XG4tICAgICAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbi0gICAgICAgICAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC5cbi0gICAgICAgICAgICAgICAgICAgIHZtYTogdW5zYWZlIHsgVm1hUmVmOjpmcm9tX3Jhdyh2bWEpIH0sXG4tICAgICAgICAgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxuLSAgICAgICAgICAgICAgICB9KTtcbiYjNDM7ICAgICAgICAgICAgaWYgdm1hLmlzX251bGwoKSB7XG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZTtcbiAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcbiYjNDM7ICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogSWYgYGxvY2tfdm1hX3VuZGVyX3JjdWAgcmV0dXJucyBhIG5vbi1udWxsIHB0ciwgdGhlbiBpdCBwb2ludHMgYXQgYVxuJiM0MzsgICAgICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLlxuJiM0MzsgICAgICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSxcbiYjNDM7ICAgICAgICAgICAgICAgIF9udHM6IE5vdFRocmVhZFNhZmUsXG4mIzQzOyAgICAgICAgICAgIH0pXG4gICAgICAgICB9XG4mIzQzOyAgICB9XG4gXG4tICAgICAgICAvLyBTaWxlbmNlIHdhcm5pbmdzIGFib3V0IHVudXNlZCB2YXJpYWJsZXMuXG4tICAgICAgICAjW2NmZyhub3QoQ09ORklHX1BFUl9WTUFfTE9DSykpXVxuLSAgICAgICAgbGV0IF8gPSB2bWFfYWRkcjtcbi1cbi0gICAgICAgIE5vbmVcbiYjNDM7ICAgIC8vLyBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTsgYW5kIGxvY2sgaXQgZm9yIHJlYWRpbmcuIFdhaXRzIGZvciB3cml0ZXJzIHRvIGZpbmlzaCBpZiB0aGVcbiYjNDM7ICAgIC8vLyBWTUEgaXMgYmVpbmcgbW9kaWZpZWQuXG4mIzQzOyAgICAjW2lubGluZV1cbiYjNDM7ICAgIHB1YiBmbiB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjVm1hUmVhZEd1YXJkXHUwMDNjJiMzOTtfXHUwMDNlXHUwMDNlIHtcbiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVyb1xuJiM0MzsgICAgICAgIC8vIGBtbV91c2Vyc2AuXG4mIzQzOyAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcbiYjNDM7ICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIE5vbmU7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcbiYjNDM7ICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbiYjNDM7ICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLlxuJiM0MzsgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LFxuJiM0MzsgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxuJiM0MzsgICAgICAgIH0pXG4gICAgIH1cbiBcbiAgICAgLy8vIExvY2sgdGhlIG1tYXAgcmVhZCBsb2NrLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCA4MDBlNWZhMDJkNzhmLi4zNjJmZWRhMjg1MjY0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTU4Miw3ICYjNDM7NTgyLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiBcdFx0dm1hX2ZsYWdzX3QgZmxhZ3M7XG4gXHR9O1xuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHQvKlxuIFx0ICogQ2FuIG9ubHkgYmUgd3JpdHRlbiAodXNpbmcgV1JJVEVfT05DRSgpKSB3aGlsZSBob2xkaW5nIGJvdGg6XG4gXHQgKiAgLSBtbWFwX2xvY2sgKGluIHdyaXRlIG1vZGUpXG5AQCAtNTk4LDcgJiM0Mzs1OTcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0ICogc2xvd3BhdGguXG4gXHQgKi9cbiBcdHVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTtcbi0jZW5kaWZcbiYjNDM7XG4gXHR1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2xvO1xuIFxuIFx0LypcbkBAIC02MzIsMTAgJiM0Mzs2MzEsOCBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiBcdHN0cnVjdCB2bWFfbnVtYWJfc3RhdGUgKm51bWFiX3N0YXRlO1x0LyogTlVNQSBCYWxhbmNpbmcgc3RhdGUgKi9cbiAjZW5kaWZcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LyogVW5zdGFibGUgUkNVIHJlYWRlcnMgYXJlIGFsbG93ZWQgdG8gcmVhZCB0aGlzLiAqL1xuIFx0cmVmY291bnRfdCB2bV9yZWZjbnQ7XG4tI2VuZGlmXG4gI2lmZGVmIENPTkZJR182NEJJVFxuIFx0dW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9oaTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXG5pbmRleCA4YTQ4YjIzMWFhN2FiLi41NGQ1YzMzNjBhYTI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ09ORklHX01NVVx0XHQxXG4tI2RlZmluZSBDT05GSUdfUEVSX1ZNQV9MT0NLXHQxXG4gXG4gI2lmZGVmIF9fQ09OQ0FUXG4gI3VuZGVmIF9fQ09OQ0FUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDE6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0FORFJPSURfQklOREVSX0lQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYV9zdGFydF9yZWFkX3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2JpbmRlcl9wYWdlX2luc2VydCYjMzQ7LAogICAgJiMzNDtiaW5kZXJfYWxsb2NfZnJlZV9wYWdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VmZmRfbG9ja192bWEmIzM0OywKICAgICYjMzQ7dWZmZF9tb3ZlX2xvY2smIzM0OywKICAgICYjMzQ7c3RhY2tfbWFwX2xvY2tfdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWNjOTk4NDg1ODcwMTE2MDQ1ZjdlMjNjOWNlMzg3Zjg4ZDkzY2UzYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMDE6MTc6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA5MTg3MjQwYTAyZGI1Li5mODE1MjA5MTY3Y2Q4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTQxLDcgJiM0Mzs0MSw2IEBAIGNvbmZpZyBBUk0KIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTIGlmIEFSTV9MUEFFCi0Jc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlQKIAlzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUAogCXNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZwppbmRleCAxMWE5YzUzNGI3YjQ4Li4yMWViNjRiMjRhMmM3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9LY29uZmlnCkBAIC04MSw3ICYjNDM7ODEsNiBAQCBjb25maWcgQVJNNjQKIAlzZWxlY3QgQVJDSF9IQVNfUFRFX1BST1ROT05FCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkcKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLCi0Jc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19SVAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1NDSEVEX1NNVApkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKaW5kZXggZTIwYWNiZTVmZTdiNS4uNzc0MWUzOWVjYTJiNyAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnCkBAIC02OSw3ICYjNDM7NjksNiBAQCBjb25maWcgTE9PTkdBUkNICiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTCiAJc2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBpZiA2NEJJVAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HIGlmIE5VTUEKLQlzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19SVAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1NDSEVEX1NNVCBpZiBTTVAKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQyAgaWYgU01QCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnCmluZGV4IGI1YWQ3YzE3M2VmMGMuLmRkOGY2MDYwZmI3YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnCkBAIC0xNyw3ICYjNDM7MTcsNiBAQCBjb25maWcgUFBDX1BPV0VSTlYKIAlzZWxlY3QgUFBDX0RPT1JCRUxMCiAJc2VsZWN0IE1NVV9OT1RJRklFUgogCXNlbGVjdCBGT1JDRV9TTVAKLQlzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sKIAlzZWxlY3QgUFBDX1JBRElYX0JST0FEQ0FTVF9UTEJJRSBpZiBQUENfUkFESVhfTU1VCiAJZGVmYXVsdCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggNzQ5MTBjZTNhNTQxYy4uN2QxMjVlMjg4ZjZlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTIzLDcgJiM0MzsyMyw2IEBAIGNvbmZpZyBQUENfUFNFUklFUwogCXNlbGVjdCBIT1RQTFVHX0NQVQogCXNlbGVjdCBGT1JDRV9TTVAKIAlzZWxlY3QgU1dJT1RMQgotCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSwogCXNlbGVjdCBQUENfUkFESVhfQlJPQURDQVNUX1RMQklFIGlmIFBQQ19SQURJWF9NTVUKIAlkZWZhdWx0IHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnCmluZGV4IDdiOWMzNzNkODJmYWMuLmZhYTg1YTAzMWZlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L0tjb25maWcKQEAgLTcwLDcgJiM0Mzs3MCw2IEBAIGNvbmZpZyBSSVNDVgogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR19USElOCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTIGlmIDY0QklUICZhbXA7JmFtcDsgTU1VCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDSyBpZiBNTVUKLQlzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgaWYgTU1VCiAJc2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBpZiBNTVUKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19SVAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1NIQURPV19DQUxMX1NUQUNLIGlmIEhBVkVfU0hBRE9XX0NBTExfU1RBQ0sKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggYWI4ZmNjYzJjYzRlMi4uZDEyNzRiY2E4YzM5YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTE1MSw3ICYjNDM7MTUxLDYgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9IQVNfUFRFX1BST1ROT05FCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkcKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLCi0Jc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLCiAJc2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVAKIAlzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGCiAJc2VsZWN0IEFSQ0hfVVNFX1NZTV9BTk5PVEFUSU9OUwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggZmIyOThlMjE5MTc5Mi4uNzk0NzlkMjk1NzZmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yNyw3ICYjNDM7MjcsNiBAQCBjb25maWcgWDg2XzY0CiAJc2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1MKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19JTlQxMjggaWYgQ0NfSEFTX0lOVDEyOAotCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFCiAJc2VsZWN0IEhBVkVfQVJDSF9TT0ZUX0RJUlRZCiAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCkBAIC0xODQ2LDcgJiM0MzsxODQ1LDYgQEAgY29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDSwogCWJvb2wgJiMzNDtYODYgdXNlcnNwYWNlIHNoYWRvdyBzdGFjayYjMzQ7CiAJZGVwZW5kcyBvbiBBU19XUlVTUwogCWRlcGVuZHMgb24gWDg2XzY0Ci0JZGVwZW5kcyBvbiBQRVJfVk1BX0xPQ0sKIAlzZWxlY3QgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTCiAJc2VsZWN0IEFSQ0hfSEFTX1VTRVJfU0hBRE9XX1NUQUNLCiAJc2VsZWN0IFg4Nl9DRVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycwppbmRleCBlODJhNTUyMzgwNGY0Li5mN2FkODhhMGQ4MDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzCkBAIC00MzksMjIgJiM0Mzs0MzksOSBAQCB1bnNhZmUgZm4gdXNlX3BhZ2Vfc2xvdygmYW1wO3NlbGYsIGk6IHVzaXplKSAtJmd0OyBSZXN1bHQmbHQ7KCkmZ3Q7IHsKICAgICAgICAgLy8gd29ya3F1ZXVlLgogICAgICAgICBsZXQgbW0gPSBNbVdpdGhVc2VyOjppbnRvX21tcHV0X2FzeW5jKHNlbGYubW0ubW1nZXRfbm90X3plcm8oKS5va19vcihFU1JDSCk/KTsKICAgICAgICAgewotICAgICAgICAgICAgbGV0IHZtYV9yZWFkOwotICAgICAgICAgICAgbGV0IG1tYXBfcmVhZDsKLSAgICAgICAgICAgIGxldCB2bWEgPSBpZiBsZXQgU29tZShyZXQpID0gbW0ubG9ja192bWFfdW5kZXJfcmN1KHZtYV9hZGRyKSB7Ci0gICAgICAgICAgICAgICAgdm1hX3JlYWQgPSByZXQ7Ci0gICAgICAgICAgICAgICAgY2hlY2tfdm1hKCZhbXA7dm1hX3JlYWQsIHNlbGYpCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1tYXBfcmVhZCA9IG1tLm1tYXBfcmVhZF9sb2NrKCk7Ci0gICAgICAgICAgICAgICAgbW1hcF9yZWFkCi0gICAgICAgICAgICAgICAgICAgIC52bWFfbG9va3VwKHZtYV9hZGRyKQotICAgICAgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHZtYXwgY2hlY2tfdm1hKHZtYSwgc2VsZikpCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBtYXRjaCB2bWEgewotICAgICAgICAgICAgICAgIFNvbWUodm1hKSA9Jmd0OyB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsICZhbXA7bmV3X3BhZ2UpPywKLSAgICAgICAgICAgICAgICBOb25lID0mZ3Q7IHJldHVybiBFcnIoRVNSQ0gpLAotICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIGxldCB2bWFfcmVhZF9ndWFyZCA9IG1tLnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHZtYV9hZGRyKS5va19vcihFU1JDSCk/OwomIzQzOyAgICAgICAgICAgIGxldCB2bWEgPSBjaGVja192bWEoJmFtcDt2bWFfcmVhZF9ndWFyZCwgc2VsZikub2tfb3IoRVNSQ0gpPzsKJiM0MzsgICAgICAgICAgICB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsICZhbXA7bmV3X3BhZ2UpPzsKICAgICAgICAgfQogCiAgICAgICAgIGxldCBpbm5lciA9IHNlbGYubG9jay5sb2NrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMKaW5kZXggZTQ0ODhhZDg2YTY1NS4uNTE5ZGNkZWQxOWIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYwpAQCAtMjU5LDIxICYjNDM7MjU5LDE0IEBAIHN0YXRpYyBpbnQgYmluZGVyX3BhZ2VfaW5zZXJ0KHN0cnVjdCBiaW5kZXJfYWxsb2MgKmFsbG9jLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCWludCByZXQgPSAtRVNSQ0g7CiAKLQkvKiBhdHRlbXB0IHBlci12bWEgbG9jayBmaXJzdCAqLwotCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7Ci0JaWYgKHZtYSkgewotCQlpZiAoYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpCi0JCQlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpOwotCQl2bWFfZW5kX3JlYWQodm1hKTsKJiM0MzsJdm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHIpOwomIzQzOwlpZiAoIXZtYSkKIAkJcmV0dXJuIHJldDsKLQl9CiAKLQkvKiBmYWxsIGJhY2sgdG8gbW1hcF9sb2NrICovCi0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwotCWlmICh2bWEgJmFtcDsmYW1wOyBiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSkKJiM0MzsJaWYgKGJpbmRlcl9hbGxvY19pc19tYXBwZWQoYWxsb2MpKQogCQlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpOwotCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwomIzQzOwl2bWFfZW5kX3JlYWQodm1hKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTQyLDcgJiM0MzsxMTM1LDYgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZV90b19mcmVlOwogCXVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyOwotCWludCBtbV9sb2NrZWQgPSAwOwogCXNpemVfdCBpbmRleDsKIAogCWlmICghbW1nZXRfbm90X3plcm8obW0pKQpAQCAtMTE1MSwxNCAmIzQzOzExNDMsMjAgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwKIAlpbmRleCA9IG1kYXRhLSZndDtwYWdlX2luZGV4OwogCXBhZ2VfYWRkciA9IGFsbG9jLSZndDt2bV9zdGFydCAmIzQzOyBpbmRleCAqIFBBR0VfU0laRTsKIAotCS8qIGF0dGVtcHQgcGVyLXZtYSBsb2NrIGZpcnN0ICovCiYjNDM7CS8qCiYjNDM7CSAqIEF0dGVtcHQgcGVyLXZtYSBsb2NrLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEKJiM0MzsJICogJiMzNDt0cnlsb2NrJiMzNDsuIEl0IGNhbiBmYWlsIGV2ZW4gaWYgdGhlIFZNQSBleGlzdHMKJiM0MzsJICogZm9yICYjMzk7cGFnZV9hZGRyJiMzOTsuCiYjNDM7CSAqLwogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgcGFnZV9hZGRyKTsKIAlpZiAoIXZtYSkgewotCQkvKiBmYWxsIGJhY2sgdG8gbW1hcF9sb2NrICovCi0JCWlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKQotCQkJZ290byBlcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkOwotCQltbV9sb2NrZWQgPSAxOwotCQl2bWEgPSB2bWFfbG9va3VwKG1tLCBwYWdlX2FkZHIpOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSB2bWEgZXhpc3RzLCB3ZSBjYW4mIzM5O3QgY29udGludWUgYmVjYXVzZSB3ZSBjYW5ub3QKJiM0MzsJCSAqIHJlbW92ZSB0aGUgcGFnZSBmcm9tIHRoZSB2bWEuIEhvd2V2ZXIsIGlmIHRoZSB2bWEgd2FzCiYjNDM7CQkgKiB1bm1hcHBlZCwgaXQmIzM5O3Mgb2theSB0byBjb250aW51ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGJpbmRlcl9hbGxvY19pc19tYXBwZWQoYWxsb2MpKQomIzQzOwkJCWdvdG8gZXJyX3ZtYV9sb2NrX2ZhaWxlZDsKIAl9CiAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDthbGxvYy0mZ3Q7bXV0ZXgpKQpAQCAtMTE5MSw5ICYjNDM7MTE4OSw3IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sCiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7YWxsb2MtJmd0O211dGV4KTsKLQlpZiAobW1fbG9ja2VkKQotCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKLQllbHNlCiYjNDM7CWlmICh2bWEpCiAJCXZtYV9lbmRfcmVhZCh2bWEpOwogCW1tcHV0X2FzeW5jKG1tKTsKIAliaW5kZXJfZnJlZV9wYWdlKHBhZ2VfdG9fZnJlZSk7CkBAIC0xMjAzLDExICYjNDM7MTE5OSw5IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sCiBlcnJfaW52YWxpZF92bWE6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YWxsb2MtJmd0O211dGV4KTsKIGVycl9nZXRfYWxsb2NfbXV0ZXhfZmFpbGVkOgotCWlmIChtbV9sb2NrZWQpCi0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwotCWVsc2UKJiM0MzsJaWYgKHZtYSkKIAkJdm1hX2VuZF9yZWFkKHZtYSk7Ci1lcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkOgomIzQzO2Vycl92bWFfbG9ja19mYWlsZWQ6CiAJbW1wdXRfYXN5bmMobW0pOwogZXJyX21tZ2V0OgogCXJldHVybiBMUlVfU0tJUDsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaAppbmRleCBiMjMyZTEwOTgxMTdiLi42NzEzNzU3ZGEwOTkyIDEwMDY0NAotLS0gYS9mcy9wcm9jL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9pbnRlcm5hbC5oCkBAIC0zODUsMTAgJiM0MzszODUsOCBAQCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHM7CiAKIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAlib29sIG1tYXBfbG9ja2VkOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja2VkX3ZtYTsKLSNlbmRpZgogfTsKIAogc3RydWN0IHByb2NfbWFwc19wcml2YXRlIHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA4MTdlM2UwZjkxOTQzLi4wOTZiZjBiMGI5ZTBlIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0xMzAsOCAmIzQzOzEzMCw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19tZW1wb2xpY3koc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCi0KIHN0YXRpYyBpbmxpbmUgaW50IGxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQogewogCWludCByZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC0mZ3Q7bW0pOwpAQCAtMjMzLDQ2ICYjNDM7MjMxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogCXZtYV9pdGVyX3NldCgmYW1wO3ByaXYtJmd0O2l0ZXIsIHByaXYtJmd0O2xvY2tfY3R4LmxvY2tlZF92bWEtJmd0O3ZtX2VuZCk7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KLQotc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JcmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LSZndDttbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCW1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtJmd0O21tKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGxvY2tfdm1hX3JhbmdlKHN0cnVjdCBzZXFfZmlsZSAqbSwKLQkJCQkgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCXJldHVybiBsb2NrX2N0eF9tbShsb2NrX2N0eCkgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja192bWFfcmFuZ2Uoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCi0JCQkJCSAgIGxvZmZfdCBsYXN0X3BvcykKLXsKLQlyZXR1cm4gdm1hX25leHQoJmFtcDtwcml2LSZndDtpdGVyKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCi0JCQkJCSBsb2ZmX3QgcG9zKQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRyb3BfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikge30KLQotI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KLQogc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tJmd0O3ByaXZhdGU7CkBAIC01NjAsOCAmIzQzOzUxOCw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJUFJPQ01BUF9RVUVSWV9WTUFfRkxBR1MJCQkJXAogKQogCi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwotCiBzdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKIAlyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7CkBAIC02MTIsMjYgJiM0Mzs1NjgsNiBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdAogCXJldHVybiB2bWE7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KLQotc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JcmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LSZndDttbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHF1ZXJ5X3ZtYV90ZWFyZG93bihzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQltbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LSZndDttbSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gZmluZF92bWEobG9ja19jdHgtJmd0O21tLCBhZGRyKTsKLX0KLQotI2VuZGlmICAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovCi0KIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X21hdGNoaW5nX3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCwKIAkJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiBmbGFncykKIHsKQEAgLTEzMTQsOCAmIzQzOzEyNTAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfb3BzID0gewogCS53YWxrX2xvY2sJCT0gUEdXQUxLX1JETE9DSywKIH07CiAKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfd2Fsa192bWFfbG9ja19vcHMgPSB7CiAJLnBtZF9lbnRyeQkJPSBzbWFwc19wdGVfcmFuZ2UsCiAJLmh1Z2V0bGJfZW50cnkJCT0gc21hcHNfaHVnZXRsYl9yYW5nZSwKQEAgLTEzNDUsMjIgJiM0MzsxMjc5LDYgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gJmFtcDtzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wczsKIH0KIAotI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCi1nZXRfc21hcHNfd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQotewotCXJldHVybiAmYW1wO3NtYXBzX3dhbGtfb3BzOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCi1nZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQotewotCXJldHVybiAmYW1wO3NtYXBzX3NobWVtX3dhbGtfb3BzOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCiAvKgogICogR2F0aGVyIG1lbSBzdGF0cyBmcm9tIEB2bWEgd2l0aCB0aGUgaW5kaWNhdGVkIGJlZ2lubmluZwogICogYWRkcmVzcyBAc3RhcnQsIGFuZCBrZWVwIHRoZW0gaW4gQG1zcy4KQEAgLTM0OTcsNyAmIzQzOzM0MTUsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNob3dfbnVtYV9vcHMgPSB7CiAJLndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssCiB9OwogCi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0gewogCS5odWdldGxiX2VudHJ5ID0gZ2F0aGVyX2h1Z2V0bGJfc3RhdHMsCiAJLnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHMsCkBAIC0zNTEyLDE2ICYjNDM7MzQyOSw2IEBAIGdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gJmFtcDtzaG93X251bWFfdm1hX2xvY2tfb3BzOwogfQogCi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovCi0KLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKLWdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKLXsKLQlyZXR1cm4gJmFtcDtzaG93X251bWFfb3BzOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCiAvKgogICogRGlzcGxheSBwYWdlcyBhbGxvY2F0ZWQgcGVyIG5vZGUgYW5kIG1lbW9yeSBwb2xpY3kgdmlhIC9wcm9jLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggN2ZhYmU2YzY2YjRiNy4uZDk4NTBmODQ2MjQyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtOTMxLDcgJiM0Mzs5MzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX251bWFiX3N0YXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9CiAgKiBUaGVzZSBtdXN0IGJlIGhlcmUgcmF0aGVyIHRoYW4gbW1hcF9sb2NrLmggYXMgZGVwZW5kZW50IG9uIHZtX2ZhdWx0IHR5cGUsCiAgKiBkZWNsYXJlZCBpbiB0aGlzIGhlYWRlci4KICAqLwotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2ZhdWx0X2xvY2soc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CiAJaWYgKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19WTUFfTE9DSykKQEAgLTk0NywxNyAmIzQzOzk0Niw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfZmF1bHRfbG9ja2VkKGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCWVsc2UKIAkJbW1hcF9hc3NlcnRfbG9ja2VkKHZtZi0mZ3Q7dm1hLSZndDt2bV9tbSk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfZmF1bHRfbG9jayhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKLXsKLQltbWFwX3JlYWRfdW5sb2NrKHZtZi0mZ3Q7dm1hLSZndDt2bV9tbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfZmF1bHRfbG9ja2VkKGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKQotewotCW1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtJmd0O3ZtYS0mZ3Q7dm1fbW0pOwotfQotI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KIAogc3RhdGljIGlubGluZSBib29sIG1tX2ZsYWdzX3Rlc3QoaW50IGZsYWcsIGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IGI1ZDRjZDNiMDY3YmYuLmQ4ZTI0NmZkMDlkMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTk1MCw3ICYjNDM7OTUwLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKIAkJdm1hX2ZsYWdzX3QgZmxhZ3M7CiAJfTsKIAotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAkvKgogCSAqIENhbiBvbmx5IGJlIHdyaXR0ZW4gKHVzaW5nIFdSSVRFX09OQ0UoKSkgd2hpbGUgaG9sZGluZyBib3RoOgogCSAqICAtIG1tYXBfbG9jayAoaW4gd3JpdGUgbW9kZSkKQEAgLTk2Niw3ICYjNDM7OTY1LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKIAkgKiBzbG93cGF0aC4KIAkgKi8KIAl1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7Ci0jZW5kaWYKJiM0MzsKIAkvKgogCSAqIExvdyAzMi1iaXRzIG9mIHZpcnR1YWwgcGFnZSBvZmZzZXQuCiAJICogU2VlIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgY29tbWVudCBmb3IgZGV0YWlscy4KQEAgLTEwMDMsNyAmIzQzOzEwMDIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgewogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwogCXN0cnVjdCB2bWFfbnVtYWJfc3RhdGUgKm51bWFiX3N0YXRlOwkvKiBOVU1BIEJhbGFuY2luZyBzdGF0ZSAqLwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogCS8qCiAJICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIGZpcnN0bHksIHdoZXRoZXIgdGhlIFZNQSBpcyBhdHRhY2hlZCwgc2Vjb25kbHksCiAJICogaWYgYXR0YWNoZWQsIGhvdyBtYW55IHJlYWQgbG9ja3MgYXJlIHRha2VuLCBhbmQgdGhpcmRseSwgaWYgdGhlCkBAIC0xMDQ2LDcgJiM0MzsxMDQ0LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogCXN0cnVjdCBsb2NrZGVwX21hcCB2bWxvY2tfZGVwX21hcDsKICNlbmRpZgotI2VuZGlmCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJLyoKIAkgKiBIaWdoIDMyLWJpdHMgb2YgdmlydHVhbCBwYWdlIG9mZnNldC4KQEAgLTEyNTQsNyAmIzQzOzEyNTEsNiBAQCBzdHJ1Y3QgbW1fc3RydWN0IHsKIAkJCQkJICAqIGluaXRfbW0ubW1saXN0LCBhbmQgYXJlIHByb3RlY3RlZAogCQkJCQkgICogYnkgbW1saXN0X2xvY2sKIAkJCQkJICAqLwotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAkJc3RydWN0IHJjdXdhaXQgdm1hX3dyaXRlcl93YWl0OwogCQkvKgogCQkgKiBUaGlzIGZpZWxkIGhhcyBsb2NrLWxpa2Ugc2VtYW50aWNzLCBtZWFuaW5nIGl0IGlzIHNvbWV0aW1lcwpAQCAtMTI3NCw3ICYjNDM7MTI3MCw3IEBAIHN0cnVjdCBtbV9zdHJ1Y3QgewogCQkgKiBtbWFwX2xvY2suCiAJCSAqLwogCQlzZXFjb3VudF90IG1tX2xvY2tfc2VxOwotI2VuZGlmCiYjNDM7CiAJCXN0cnVjdCBmdXRleF9tbV9kYXRhCWZ1dGV4OwogCiAJCXVuc2lnbmVkIGxvbmcgaGl3YXRlcl9yc3M7IC8qIEhpZ2gtd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggODdmNzdlM2RhNzdmMC4uZmRkOGY1Y2Y1NzIyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCkBAIC03Niw4ICYjNDM7NzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXJ3c2VtX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7bW0tJmd0O21tYXBfbG9jayk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCi0KICNpZmRlZiBDT05GSUdfTE9DS0RFUAogI2RlZmluZSBfX3ZtYV9sb2NrZGVwX21hcCh2bWEpICgmYW1wO3ZtYS0mZ3Q7dm1sb2NrX2RlcF9tYXApCiAjZWxzZQpAQCAtMjMwLDEwICYjNDM7MjI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfcmVmY291bnRfcHV0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogfQogCiAvKgotICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgbG9ja2luZyB3aWxsIG5vdAotICogZmFpbCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGQKJiM0MzsgKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB2bWEgbG9jayBpcyBub3QKJiM0MzsgKiBjb250ZW5kZWQgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkCiAgKiBub3QgYmUgdXNlZCBpbiBzdWNoIGNhc2VzIGJlY2F1c2UgaXQgbWlnaHQgZmFpbCBkdWUgdG8gbW1fbG9ja19zZXEgb3ZlcmZsb3cuCiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCB0byBvYnRhaW4gdm1hIHJlYWQgbG9jayBhbmQgZHJvcCB0aGUgbW1hcCByZWFkIGxvY2suCiYjNDM7ICogVk1BIGNhbiYjMzk7dCBiZSBkZXRhY2hlZCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBtbWFwIGxvY2ssIHRoZXJlZm9yZSBpbiBwcmFjdGljZSB0aGlzCiYjNDM7ICogZnVuY3Rpb24gY2FuIGZhaWwgb25seSB3aGVuIHRoZXJlIGFyZSBzbyBtYW55IHJlYWRlcnMgdGhhdCB2bV9yZWZjbnQgb3ZlcmZsb3dzLgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkX25lc3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50IHN1YmNsYXNzKQogewpAQCAtMjQ5LDE2ICYjNDM7MjQ5LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQKIH0KIAogLyoKLSAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGxvY2tpbmcgd2lsbCBub3QKLSAqIGZhaWwgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkCiYjNDM7ICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdm1hIGxvY2sgaXMgbm90CiYjNDM7ICogY29udGVuZGVkIChub2JvZHkgY2FuIGNvbmN1cnJlbnRseSB3cml0ZS1sb2NrIHRoZSB2bWEpLiB2bWFfc3RhcnRfcmVhZCgpIHNob3VsZAogICogbm90IGJlIHVzZWQgaW4gc3VjaCBjYXNlcyBiZWNhdXNlIGl0IG1pZ2h0IGZhaWwgZHVlIHRvIG1tX2xvY2tfc2VxIG92ZXJmbG93LgogICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgdG8gb2J0YWluIHZtYSByZWFkIGxvY2sgYW5kIGRyb3AgdGhlIG1tYXAgcmVhZCBsb2NrLgomIzQzOyAqIFZNQSBjYW4mIzM5O3QgYmUgZGV0YWNoZWQgd2hpbGUgd2UgYXJlIGhvbGRpbmcgbW1hcCBsb2NrLCB0aGVyZWZvcmUgaW4gcHJhY3RpY2UgdGhpcwomIzQzOyAqIGZ1bmN0aW9uIGNhbiBmYWlsIG9ubHkgd2hlbiB0aGVyZSBhcmUgc28gbWFueSByZWFkZXJzIHRoYXQgdm1fcmVmY250IG92ZXJmbG93cy4KICAqLwogc3RhdGljIGlubGluZSBib29sIHZtYV9zdGFydF9yZWFkX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlyZXR1cm4gdm1hX3N0YXJ0X3JlYWRfbG9ja2VkX25lc3RlZCh2bWEsIDApOwogfQogCiYjNDM7c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHZtYV9lbmRfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2bWFfcmVmY291bnRfcHV0KHZtYSk7CkBAIC00ODQsNTQgJiM0Mzs0ODksNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfbmV4dF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICAgICBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICppdGVyLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAotI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fQotc3RhdGljIGlubGluZSB2b2lkIG1tX2xvY2tfc2VxY291bnRfYmVnaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9lbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBtbWFwX2xvY2tfc3BlY3VsYXRlX3RyeV9iZWdpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50ICpzZXEpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgbW1hcF9sb2NrX3NwZWN1bGF0ZV9yZXRyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHNlcSkKLXsKLQlyZXR1cm4gdHJ1ZTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbG9ja19pbml0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHJlc2V0X3JlZmNudCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZW5kX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX3N0YXJ0X3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fQotc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sKLWludCB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLQkJeyBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLSZndDt2bV9tbSk7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYXR0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi0JCXsgcmV0dXJuIHRydWU7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2F0dGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fQotc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfZGV0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX21hcmtfYXR0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX21hcmtfZGV0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCW1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtJmd0O3ZtX21tKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfc3RhYmlsaXNlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQkvKiBJZiBubyBWTUEgbG9ja3MsIHRoZW4gZWl0aGVyIG1tYXAgbG9jayBzdWZmaWNlcyB0byBzdGFiaWxpc2UuICovCi0JbW1hcF9hc3NlcnRfbG9ja2VkKHZtYS0mZ3Q7dm1fbW0pOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCiBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9jYW5fbW9kaWZ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCWlmICh2bWFfaXNfYXR0YWNoZWQodm1hKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuYwppbmRleCA0MWZlODdkNzMwMmYyLi44ODQ4ZTI2ZWY1ODEzIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGFja21hcC5jCkBAIC0yNzIsMTMgJiM0MzsyNzIsOCBAQCBzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrIHsKIC8qCiAgKiBBY3F1aXJlIGEgc3RhYmxlIHJlYWQtc2lkZSByZWZlcmVuY2Ugb24gdGhlIFZNQSBjb3ZlcmluZyBAaXAuCiAgKgotICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPXkgdGhpcyByZXR1cm5zIGEgVk1BIHdpdGggaXRzIHBlci1WTUEgcmVhZAotICogbG9jayBoZWxkIGFuZCBtbWFwX2xvY2sgZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuCi0gKgotICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPW4gaXQgcmV0dXJucyBhIFZNQSB3aXRoIG1tYXBfbG9jayBzdGlsbAotICogaGVsZDsgdGhlIGNhbGxlciBtdXN0IHNuYXBzaG90IGFueSBmaWVsZHMgaXQgbmVlZHMgYW5kIHBpbiB2bV9maWxlCi0gKiB3aXRoIGdldF9maWxlKCkgYmVmb3JlIHN0YWNrX21hcF91bmxvY2tfdm1hKCkgZHJvcHMgbW1hcF9sb2NrLCBhcwotICogdGhlIFZNQSBtYXkgYmUgc3BsaXQsIG1lcmdlZCwgb3IgZnJlZWQgYWZ0ZXIgdGhhdC4KJiM0MzsgKiBUaGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkIGxvY2sgaGVsZCBhbmQgbW1hcF9sb2NrCiYjNDM7ICogZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuCiAgKgogICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2Ugbm8gbG9jayBpcyBoZWxkLgogICovCkBAIC0yODgsNyAmIzQzOzI4Myw2IEBAIHN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKQogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gbG9jay0mZ3Q7bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKLQkvKiBub29wIHVuZGVyICFDT05GSUdfUEVSX1ZNQV9MT0NLICovCiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7CiAJaWYgKHZtYSkgewogCQlsb2NrLSZndDt2bWEgPSB2bWE7CkBAIC0zMDgsMTMgJiM0MzszMDIsMTEgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCiAJCXJldHVybiBOVUxMOwogCX0KIAotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAlpZiAoIXZtYV9zdGFydF9yZWFkX2xvY2tlZCh2bWEpKSB7CiAJCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0jZW5kaWYKIAogCWxvY2stJmd0O3ZtYSA9IHZtYTsKIAlyZXR1cm4gdm1hOwpAQCAtMzIyLDExICYjNDM7MzE0LDcgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCiAKIHN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spCiB7Ci0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogCXZtYV9lbmRfcmVhZChsb2NrLSZndDt2bWEpOwotI2Vsc2UKLQltbWFwX3JlYWRfdW5sb2NrKGxvY2stJmd0O21tKTsKLSNlbmRpZgogCWxvY2stJmd0O3ZtYSA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jCmluZGV4IGU3OTFhZTA2NWMzOWIuLjZjZjgxNWJjODRiZWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90YXNrX2l0ZXIuYwpAQCAtODM1LDExICYjNDM7ODM1LDYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0LAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hX2tlcm4pICE9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEpKTsKIAlCVUlMRF9CVUdfT04oX19hbGlnbm9mX18oc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hX2tlcm4pICE9IF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSkpOwogCi0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19QRVJfVk1BX0xPQ0spKSB7Ci0JCWtpdC0mZ3Q7ZGF0YSA9IE5VTEw7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KIAkvKgogCSAqIFJlamVjdCBpcnFzLWRpc2FibGVkIGNvbnRleHRzIGluY2x1ZGluZyBOTUkuIE9wZXJhdGlvbnMgdXNlZAogCSAqIGJ5IF9uZXh0KCkgYW5kIF9kZXN0cm95KCkgKHZtYV9lbmRfcmVhZCwgZnB1dCwgYnBmX2l0ZXJfbW1wdXRfYXN5bmMpCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBmMGUyZTEzMWE5YTVhLi5mZjkxZjVmNjZjODBkIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mb3JrLmMKQEAgLTEwNzcsOSAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBtbWFwX2luaXRfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlpbml0X3J3c2VtKCZhbXA7bW0tJmd0O21tYXBfbG9jayk7CiAJbW1fbG9ja19zZXFjb3VudF9pbml0KG1tKTsKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJcmN1d2FpdF9pbml0KCZhbXA7bW0tJmd0O3ZtYV93cml0ZXJfd2FpdCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDA2MDE5MGUxMmJjZWQuLjc3MTAzYjQ2YjY3OTIgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtMTQyNSwxOSAmIzQzOzE0MjUsNiBAQCBjb25maWcgTFJVX0dFTl9TVEFUUwogY29uZmlnIExSVV9HRU5fV0FMS1NfTU1VCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gTFJVX0dFTiAmYW1wOyZhbXA7IEFSQ0hfSEFTX0hXX1BURV9ZT1VORwotIyB9Ci0KLWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSwotICAgICAgIGRlZl9ib29sIG4KLQotY29uZmlnIFBFUl9WTUFfTE9DSwotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLICZhbXA7JmFtcDsgTU1VICZhbXA7JmFtcDsgU01QCi0JaGVscAotCSAgQWxsb3cgcGVyLXZtYSBsb2NraW5nIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLgotCi0JICBUaGlzIGZlYXR1cmUgYWxsb3dzIGxvY2tpbmcgZWFjaCB2aXJ0dWFsIG1lbW9yeSBhcmVhIHNlcGFyYXRlbHkgd2hlbgotCSAgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW5zdGVhZCBvZiB0YWtpbmcgbW1hcF9sb2NrLgogCiBjb25maWcgTE9DS19NTV9BTkRfRklORF9WTUEKIAlib29sCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnLmRlYnVnIGIvbW0vS2NvbmZpZy5kZWJ1ZwppbmRleCA1NzM3YTUwNGVmYmJlLi4xZGQxNTBlZGZlNzFjIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnLmRlYnVnCiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWcuZGVidWcKQEAgLTMxMCw3ICYjNDM7MzEwLDYgQEAgY29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0UKIAogY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUUwogCWJvb2wgJiMzNDtTdGF0aXN0aWNzIGZvciBwZXItdm1hIGxvY2tzJiMzNDsKLQlkZXBlbmRzIG9uIFBFUl9WTUFfTE9DSwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1Y2Nlc3MsIHJldHJ5IGFuZCBmYWlsdXJlIGNvdW50ZXJzIG9mIHBhZ2UKIAkgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGUKZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jCmluZGV4IDlhMDI5N2IzOTg4ZDguLjY1NWU2YmNjMGU4ZDkgMTAwNjQ0Ci0tLSBhL21tL2RlYnVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWcuYwpAQCAtMTU3LDE3ICYjNDM7MTU3LDEzIEBAIHZvaWQgZHVtcF92bWEoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcHJfZW1lcmcoJiMzNDt2bWEgJXB4IHN0YXJ0ICVweCBlbmQgJXB4IG1tICVweFxuJiMzNDsKIAkJJiMzNDtwcm90ICVseCBhbm9uX3ZtYSAlcHggdm1fb3BzICVweFxuJiMzNDsKIAkJJiMzNDtwZ29mZiAlbHggZmlsZSAlcHggcHJpdmF0ZV9kYXRhICVweFxuJiMzNDsKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJCSYjMzQ7cmVmY250ICV4XG4mIzM0OwotI2VuZGlmCiAJCSYjMzQ7ZmxhZ3M6ICUjbHgoJXBHdilcbiYjMzQ7LAogCQl2bWEsICh2b2lkICopdm1hLSZndDt2bV9zdGFydCwgKHZvaWQgKil2bWEtJmd0O3ZtX2VuZCwgdm1hLSZndDt2bV9tbSwKIAkJKHVuc2lnbmVkIGxvbmcpcGdwcm90X3ZhbCh2bWEtJmd0O3ZtX3BhZ2VfcHJvdCksCiAJCXZtYS0mZ3Q7YW5vbl92bWEsIHZtYS0mZ3Q7dm1fb3BzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwKIAkJdm1hLSZndDt2bV9maWxlLCB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSwKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJCXJlZmNvdW50X3JlYWQoJmFtcDt2bWEtJmd0O3ZtX3JlZmNudCksCi0jZW5kaWYKIAkJdm1hLSZndDt2bV9mbGFncywgJmFtcDt2bWEtJmd0O3ZtX2ZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZHVtcF92bWEpOwpkaWZmIC0tZ2l0IGEvbW0vaW5pdC1tbS5jIGIvbW0vaW5pdC1tbS5jCmluZGV4IDNlNzkyYWFkNzYyNjEuLmExYmIyYzJkMDI4NGEgMTAwNjQ0Ci0tLSBhL21tL2luaXQtbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbml0LW1tLmMKQEAgLTM5LDEwICYjNDM7MzksOCBAQCBzdHJ1Y3QgbW1fc3RydWN0IGluaXRfbW0gPSB7CiAJLnBhZ2VfdGFibGVfbG9jayA9ICBfX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X21tLnBhZ2VfdGFibGVfbG9jayksCiAJLmFyZ19sb2NrCT0gIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluaXRfbW0uYXJnX2xvY2spLAogCS5tbWxpc3QJCT0gTElTVF9IRUFEX0lOSVQoaW5pdF9tbS5tbWxpc3QpLAotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAkudm1hX3dyaXRlcl93YWl0ID0gX19SQ1VXQUlUX0lOSVRJQUxJWkVSKGluaXRfbW0udm1hX3dyaXRlcl93YWl0KSwKIAkubW1fbG9ja19zZXEJPSBTRVFDTlRfWkVSTyhpbml0X21tLm1tX2xvY2tfc2VxKSwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19TQ0hFRF9NTV9DSUQKIAkubW1fY2lkLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5tbV9jaWQubG9jayksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggYTYyMGQ0MjVlYzk1ZS4uZjEwOWY2Yzg3YjI4YyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTY4MTMsNyAmIzQzOzY4MTMsNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBzYW5pdGl6ZV9mYXVsdF9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgIWlzX2Nvd19tYXBwaW5nKHZtYS0mZ3Q7dm1fZmxhZ3MpKSkKIAkJCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwogCX0KLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJLyoKIAkgKiBQZXItVk1BIGxvY2tzIGNhbiYjMzk7dCBiZSB1c2VkIHdpdGggRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgYmVjYXVzZSBvZgogCSAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgbG9jayBpcyBkcm9wcGVkIG9uIFZNX0ZBVUxUX1JFVFJZLgpAQCAtNjgyMiw3ICYjNDM7NjgyMSw2IEBAIHN0YXRpYyB2bV9mYXVsdF90IHNhbml0aXplX2ZhdWx0X2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJKEZBVUxUX0ZMQUdfVk1BX0xPQ0sgfCBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCkpID09CiAJCQkoRkFVTFRfRkxBR19WTUFfTE9DSyB8IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSkpCiAJCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwotI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL21tYXBfbG9jay5jIGIvbW0vbW1hcF9sb2NrLmMKaW5kZXggODk4YzJlZjFlOTU4MC4uNmZmMDVlNjhlNjFiZSAxMDA2NDQKLS0tIGEvbW0vbW1hcF9sb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1hcF9sb2NrLmMKQEAgLTQzLDkgJiM0Mzs0Myw2IEBAIHZvaWQgX19tbWFwX2xvY2tfZG9fdHJhY2VfcmVsZWFzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGJvb2wgd3JpdGUpCiBFWFBPUlRfU1lNQk9MKF9fbW1hcF9sb2NrX2RvX3RyYWNlX3JlbGVhc2VkKTsKICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqLwogCi0jaWZkZWYgQ09ORklHX01NVQotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKLQogLyogU3RhdGUgc2hhcmVkIGFjcm9zcyBfX3ZtYV9bc3RhcnQsIGVuZF1fZXhjbHVkZV9yZWFkZXJzLiAqLwogc3RydWN0IHZtYV9leGNsdWRlX3JlYWRlcnNfc3RhdGUgewogCS8qIElucHV0IHBhcmFtZXRlcnMuICovCkBAIC0zNDEsNiAmIzQzOzMzOCwzNSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzOy8qCiYjNDM7ICogRmluZCB0aGUgVk1BIGNvdmVyaW5nICYjMzk7YWRkcmVzcyYjMzk7IGFuZCBsb2NrIGl0IGZvciByZWFkaW5nLiBXYWl0cyBmb3Igd3JpdGVycyB0bwomIzQzOyAqIGZpbmlzaCBpZiB0aGUgVk1BIGlzIGJlaW5nIG1vZGlmaWVkLiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm8gVk1BIGNvdmVyaW5nCiYjNDM7ICogJiMzOTthZGRyZXNzJiMzOTsuCiYjNDM7ICoKJiM0MzsgKiBVc2Ugb25seSBpbiBjb2RlIHBhdGhzIHdoZXJlIG5vIG1tYXBfbG9jayBhbmQgbm8gVk1BIGxvY2sgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIFRoZSBmYXN0IHBhdGggZG9lcyBub3QgdGFrZSBtbWFwX2xvY2suCiYjNDM7ICovCiYjNDM7c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsKJiM0MzsJLyogRmFzdCBwYXRoOiByZXR1cm4gc3RhYmxlIFZNQSBjb3ZlcmluZyAmIzM5O2FkZHJlc3MmIzM5OzogKi8KJiM0MzsJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKJiM0MzsJaWYgKHZtYSkKJiM0MzsJCXJldHVybiB2bWE7CiYjNDM7CiYjNDM7CS8qIFNsb3cgcGF0aDogcHJlY2x1ZGUgVk1BIHdyaXRlcnMgYnkgdGVtcG9yYXJpbHkgZ2V0dGluZyBtbWFwIHJlYWQgbG9jay4gKi8KJiM0MzsJbW1hcF9yZWFkX2xvY2sobW0pOwomIzQzOwl2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTsKJiM0MzsJaWYgKHZtYSAmYW1wOyZhbXA7ICF2bWFfc3RhcnRfcmVhZF9sb2NrZWQodm1hKSkKJiM0MzsJCXZtYSA9IE5VTEw7CiYjNDM7CW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gdm1hOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfbmV4dF92bWFfdW5kZXJfbW1hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkJCSAgICBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksCiAJCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZnJvbV9hZGRyKQpAQCAtNDMxLDcgJiM0Mzs0NTcsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfbmV4dF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAKIAlyZXR1cm4gdm1hOwogfQotI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KIAogI2lmZGVmIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQQogI2luY2x1ZGUgJmx0O2xpbnV4L2V4dGFibGUuaCZndDsKQEAgLTU0OCwyMyAmIzQzOzU3MywzIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJcmV0dXJuIE5VTEw7CiB9CiAjZW5kaWYgLyogQ09ORklHX0xPQ0tfTU1fQU5EX0ZJTkRfVk1BICovCi0KLSNlbHNlIC8qIENPTkZJR19NTVUgKi8KLQotLyoKLSAqIEF0IGxlYXN0IHh0ZW5zYSBlbmRzIHVwIGhhdmluZyBwcm90ZWN0aW9uIGZhdWx0cyBldmVuIHdpdGggbm8KLSAqIE1NVS4uIE5vIHN0YWNrIGV4cGFuc2lvbiwgYXQgbGVhc3QuCi0gKi8KLXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCi0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwotCWlmICghdm1hKQotCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKLQlyZXR1cm4gdm1hOwotfQotCi0jZW5kaWYgLyogQ09ORklHX01NVSAqLwpkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggZWQ0ODYwYzAxOTM2Yy4uZmJjZjY0YzU5YTk3MyAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC00NDYsNyAmIzQzOzQ0Niw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX21tX3dhbGtfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCSBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jaykKIHsKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJc3dpdGNoICh3YWxrX2xvY2spIHsKIAljYXNlIFBHV0FMS19XUkxPQ0s6CiAJCXZtYV9zdGFydF93cml0ZSh2bWEpOwpAQCAtNDYxLDcgJiM0Mzs0NjAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkvKiBQR1dBTEtfUkRMT0NLIGlzIGhhbmRsZWQgYnkgcHJvY2Vzc19tbV93YWxrX2xvY2sgKi8KIAkJYnJlYWs7CiAJfQotI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggYjkxNzQzMTc1OWVlMC4uNGU0YTRiNzQ3OTc3MiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMjYwLDExICYjNDM7MjYwLDkgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsCiAJLyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi8KIAlWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uID09IFZNQV9PUF9NRVJHRV9VTkZBVUxURUQgJmFtcDsmYW1wOwogCQkJIWxpc3RfaXNfc2luZ3VsYXIoJmFtcDtzcmMtJmd0O2Fub25fdm1hX2NoYWluKSk7Ci0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogCS8qIE9ubHkgbWVyZ2luZyBhbiB1bmZhdWx0ZWQgVk1BIGxlYXZlcyB0aGUgZGVzdGluYXRpb24gYXR0YWNoZWQuICovCiAJVk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEICZhbXA7JmFtcDsKIAkJCXZtYV9pc19hdHRhY2hlZChkc3QpKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBtYXliZV9yZXVzZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IDI1OGIwMzE4MmE3ODAuLmMzYTBjMzhhM2RjM2IgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMTIyLDcgJiM0MzsxMjIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJcmV0dXJuIHZtYTsKIH0KIAotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIC8qCiAgKiB1ZmZkX2xvY2tfdm1hKCkgLSBMb29rdXAgYW5kIGxvY2sgdm1hIGNvcnJlc3BvbmRpbmcgdG8gQGFkZHJlc3MuCiAgKiBAbW06IG1tIHRvIHNlYXJjaCB2bWEgaW4uCkBAIC0xMzAsOCAmIzQzOzEyOSwxMCBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAgKgogICogU2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbW1hcF9sb2NrLgogICoKLSAqIFJldHVybjogQSBsb2NrZWQgdm1hIGNvbnRhaW5pbmcgQGFkZHJlc3MsIC1FTk9FTlQgaWYgbm8gdm1hIGlzIGZvdW5kLCBvcgotICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4mIzM5O3QgYmUgYWxsb2NhdGVkLgomIzQzOyAqIFJldHVybjogQSBsb2NrZWQgdm1hIGNvbnRhaW5pbmcgQGFkZHJlc3MsIC1FTk9FTlQgaWYgbm8gdm1hIGlzIGZvdW5kLAomIzQzOyAqIC1FTk9NRU0gaWYgYW5vbl92bWEgY291bGRuJiMzOTt0IGJlIGFsbG9jYXRlZCwgb3IgLUVBR0FJTiBpZiB2bWEgcmVmY291bnQKJiM0MzsgKiBvdmVyZmxvdyBoYXBwZW5lZCBkdWUgdG8gaGlnaCBudW1iZXIgb2YgcmVhZGVycyBhbmQgdGhlIGNhbGxlciBzaG91bGQKJiM0MzsgKiByZXRyeSBsYXRlci4KICAqLwogc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdWZmZF9sb2NrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQpAQCAtMTgyLDM0ICYjNDM7MTgzLDYgQEAgc3RhdGljIHZvaWQgdWZmZF9tZmlsbF91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJdm1hX2VuZF9yZWFkKHZtYSk7CiB9CiAKLSNlbHNlCi0KLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVmZmRfbWZpbGxfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWE7Ci0KLQltbWFwX3JlYWRfbG9jayhkc3RfbW0pOwotCWRzdF92bWEgPSBmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKGRzdF9tbSwgZHN0X3N0YXJ0KTsKLQlpZiAoSVNfRVJSKGRzdF92bWEpKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlpZiAodmFsaWRhdGVfZHN0X3ZtYShkc3Rfdm1hLCBkc3Rfc3RhcnQgJiM0MzsgbGVuKSkKLQkJcmV0dXJuIGRzdF92bWE7Ci0KLQlkc3Rfdm1hID0gRVJSX1BUUigtRU5PRU5UKTsKLW91dF91bmxvY2s6Ci0JbW1hcF9yZWFkX3VubG9jayhkc3RfbW0pOwotCXJldHVybiBkc3Rfdm1hOwotfQotCi1zdGF0aWMgdm9pZCB1ZmZkX21maWxsX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQltbWFwX3JlYWRfdW5sb2NrKHZtYS0mZ3Q7dm1fbW0pOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIG1maWxsX3B1dF92bWEoc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSkKIHsKIAlpZiAoIXN0YXRlLSZndDt2bWEpCkBAIC0xODUyLDcgJiM0MzsxODI1LDYgQEAgaW50IGZpbmRfdm1hc19tbV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiBzdGF0aWMgaW50IHVmZmRfbW92ZV9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCwKIAkJCSAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsCkBAIC0xOTI3LDMxICYjNDM7MTg5OSw2IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLAogCQl2bWFfZW5kX3JlYWQoZHN0X3ZtYSk7CiB9CiAKLSNlbHNlCi0KLXN0YXRpYyBpbnQgdWZmZF9tb3ZlX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LAotCQkJICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwKLQkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqZHN0X3ZtYXAsCi0JCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnNyY192bWFwKQotewotCWludCBlcnI7Ci0KLQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JZXJyID0gZmluZF92bWFzX21tX2xvY2tlZChtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIGRzdF92bWFwLCBzcmNfdm1hcCk7Ci0JaWYgKGVycikKLQkJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsCi0JCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSkKLXsKLQltbWFwX2Fzc2VydF9sb2NrZWQoc3JjX3ZtYS0mZ3Q7dm1fbW0pOwotCW1tYXBfcmVhZF91bmxvY2soZHN0X3ZtYS0mZ3Q7dm1fbW0pOwotfQotI2VuZGlmCi0KIC8qKgogICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWEKICAqIEBjdHg6IHBvaW50ZXIgdG8gdGhlIHVzZXJmYXVsdGZkIGNvbnRleHQKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNDU1NDQxZjFiNjk0OS4uNjJkZWZlNzBmM2NlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTIxNjcsMjcgJiM0MzsyMTY3LDE4IEBAIHN0YXRpYyB2b2lkIHRjcF96Y19maW5hbGl6ZV9yeF90c3RhbXAoc3RydWN0IHNvY2sgKnNrLAogfQogCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCQkJICAgYm9vbCAqbW1hcF9sb2NrZWQpCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpOwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyZXNzKTsKIAotCWlmICh2bWEpIHsKLQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewotCQkJdm1hX2VuZF9yZWFkKHZtYSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQkqbW1hcF9sb2NrZWQgPSBmYWxzZTsKLQkJcmV0dXJuIHZtYTsKLQl9CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAKLQltbWFwX3JlYWRfbG9jayhtbSk7Ci0Jdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcmVzcyk7Ci0JaWYgKCF2bWEgfHwgdm1hLSZndDt2bV9vcHMgIT0gJmFtcDt0Y3Bfdm1fb3BzKSB7Ci0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwlpZiAodm1hLSZndDt2bV9vcHMgIT0gJmFtcDt0Y3Bfdm1fb3BzKSB7CiYjNDM7CQl2bWFfZW5kX3JlYWQodm1hKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCSptbWFwX2xvY2tlZCA9IHRydWU7CiYjNDM7CiAJcmV0dXJuIHZtYTsKIH0KIApAQCAtMjIwOCw3ICYjNDM7MjE5OSw2IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLAogCXUzMiBzZXEgPSB0cC0mZ3Q7Y29waWVkX3NlcTsKIAl1MzIgdG90YWxfYnl0ZXNfdG9fbWFwOwogCWludCBpbnEgPSB0Y3BfaW5xKHNrKTsKLQlib29sIG1tYXBfbG9ja2VkOwogCWludCByZXQ7CiAKIAl6Yy0mZ3Q7Y29weWJ1Zl9sZW4gPSAwOwpAQCAtMjIzMyw3ICYjNDM7MjIyMyw3IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLAogCQlyZXR1cm4gMDsKIAl9CiAKLQl2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC0mZ3Q7bW0sIGFkZHJlc3MsICZhbXA7bW1hcF9sb2NrZWQpOwomIzQzOwl2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC0mZ3Q7bW0sIGFkZHJlc3MpOwogCWlmICghdm1hKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjMxNSwxMCAmIzQzOzIzMDUsNyBAQCBzdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCSAgIHpjLCB0b3RhbF9ieXRlc190b19tYXApOwogCX0KIG91dDoKLQlpZiAobW1hcF9sb2NrZWQpCi0JCW1tYXBfcmVhZF91bmxvY2soY3VycmVudC0mZ3Q7bW0pOwotCWVsc2UKLQkJdm1hX2VuZF9yZWFkKHZtYSk7CiYjNDM7CXZtYV9lbmRfcmVhZCh2bWEpOwogCS8qIFRyeSB0byBjb3B5IHN0cmFnZ2xlciBkYXRhLiAqLwogCWlmICghcmV0KQogCQljb3B5bGVuID0gdGNwX3pjX2hhbmRsZV9sZWZ0b3Zlcih6Yywgc2ssIHNrYiwgJmFtcDtzZXEsIGNvcHlidWZfbGVuLCB0c3MpOwpkaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvbW0ucnMgYi9ydXN0L2tlcm5lbC9tbS5ycwppbmRleCA0NzY0ZDdiNjhmMmE3Li44NzdmYWQ2OGJlOWMzIDEwMDY0NAotLS0gYS9ydXN0L2tlcm5lbC9tbS5ycwomIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2tlcm5lbC9tbS5ycwpAQCAtMTc0LDI2ICYjNDM7MTc0LDM4IEBAIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXcmbHQ7JiMzOTthJmd0OyhwdHI6ICpjb25zdCBiaW5kaW5nczo6bW1fc3RydWN0KSAtJmd0OyAmYW1wOyYjMzk7YSBNbVdpdGhVc2VyIHsKICAgICAvLy8gV2hlbiBwZXItdm1hIGxvY2tzIGFyZSBkaXNhYmxlZCwgdGhpcyBhbHdheXMgcmV0dXJucyBgTm9uZWAuCiAgICAgI1tpbmxpbmVdCiAgICAgcHViIGZuIGxvY2tfdm1hX3VuZGVyX3JjdSgmYW1wO3NlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLSZndDsgT3B0aW9uJmx0O1ZtYVJlYWRHdWFyZCZsdDsmIzM5O18mZ3Q7Jmd0OyB7Ci0gICAgICAgICNbY2ZnKENPTkZJR19QRVJfVk1BX0xPQ0spXQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBTQUZFVFk6IENhbGxpbmcgYGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3VgIGlzIGFsd2F5cyBva2F5IGdpdmVuIGFuIG1tIHdoZXJlCiAgICAgICAgICAgICAvLyBgbW1fdXNlcnNgIGlzIG5vbi16ZXJvLgogICAgICAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3Uoc2VsZi5hc19yYXcoKSwgdm1hX2FkZHIpIH07Ci0gICAgICAgICAgICBpZiAhdm1hLmlzX251bGwoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNvbWUoVm1hUmVhZEd1YXJkIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgbG9ja192bWFfdW5kZXJfcmN1YCByZXR1cm5zIGEgbm9uLW51bGwgcHRyLCB0aGVuIGl0IHBvaW50cyBhdCBhCi0gICAgICAgICAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC4KLSAgICAgICAgICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSwKLSAgICAgICAgICAgICAgICAgICAgX250czogTm90VGhyZWFkU2FmZSwKLSAgICAgICAgICAgICAgICB9KTsKJiM0MzsgICAgICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHsKJiM0MzsgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmU7CiAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgU29tZShWbWFSZWFkR3VhcmQgewomIzQzOyAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGEKJiM0MzsgICAgICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLgomIzQzOyAgICAgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LAomIzQzOyAgICAgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLAomIzQzOyAgICAgICAgICAgIH0pCiAgICAgICAgIH0KJiM0MzsgICAgfQogCi0gICAgICAgIC8vIFNpbGVuY2Ugd2FybmluZ3MgYWJvdXQgdW51c2VkIHZhcmlhYmxlcy4KLSAgICAgICAgI1tjZmcobm90KENPTkZJR19QRVJfVk1BX0xPQ0spKV0KLSAgICAgICAgbGV0IF8gPSB2bWFfYWRkcjsKLQotICAgICAgICBOb25lCiYjNDM7ICAgIC8vLyBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTsgYW5kIGxvY2sgaXQgZm9yIHJlYWRpbmcuIFdhaXRzIGZvciB3cml0ZXJzIHRvIGZpbmlzaCBpZiB0aGUKJiM0MzsgICAgLy8vIFZNQSBpcyBiZWluZyBtb2RpZmllZC4KJiM0MzsgICAgI1tpbmxpbmVdCiYjNDM7ICAgIHB1YiBmbiB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCgmYW1wO3NlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLSZndDsgT3B0aW9uJmx0O1ZtYVJlYWRHdWFyZCZsdDsmIzM5O18mZ3Q7Jmd0OyB7CiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVybwomIzQzOyAgICAgICAgLy8gYG1tX3VzZXJzYC4KJiM0MzsgICAgICAgIGxldCB2bWEgPSB1bnNhZmUgeyBiaW5kaW5nczo6dm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc2VsZi5hc19yYXcoKSwgdm1hX2FkZHIpIH07CiYjNDM7ICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHsKJiM0MzsgICAgICAgICAgICByZXR1cm4gTm9uZTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHsKJiM0MzsgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgcmV0dXJucyBhIG5vbi1udWxsIHB0ciwgdGhlbiBpdCBwb2ludHMgYXQgYQomIzQzOyAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC4KJiM0MzsgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LAomIzQzOyAgICAgICAgICAgIF9udHM6IE5vdFRocmVhZFNhZmUsCiYjNDM7ICAgICAgICB9KQogICAgIH0KIAogICAgIC8vLyBMb2NrIHRoZSBtbWFwIHJlYWQgbG9jay4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IDgwMGU1ZmEwMmQ3OGYuLjM2MmZlZGEyODUyNjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaApAQCAtNTgyLDcgJiM0Mzs1ODIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgewogCQl2bWFfZmxhZ3NfdCBmbGFnczsKIAl9OwogCi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogCS8qCiAJICogQ2FuIG9ubHkgYmUgd3JpdHRlbiAodXNpbmcgV1JJVEVfT05DRSgpKSB3aGlsZSBob2xkaW5nIGJvdGg6CiAJICogIC0gbW1hcF9sb2NrIChpbiB3cml0ZSBtb2RlKQpAQCAtNTk4LDcgJiM0Mzs1OTcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgewogCSAqIHNsb3dwYXRoLgogCSAqLwogCXVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTsKLSNlbmRpZgomIzQzOwogCXVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfbG87CiAKIAkvKgpAQCAtNjMyLDEwICYjNDM7NjMxLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKIAlzdHJ1Y3Qgdm1hX251bWFiX3N0YXRlICpudW1hYl9zdGF0ZTsJLyogTlVNQSBCYWxhbmNpbmcgc3RhdGUgKi8KICNlbmRpZgotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAkvKiBVbnN0YWJsZSBSQ1UgcmVhZGVycyBhcmUgYWxsb3dlZCB0byByZWFkIHRoaXMuICovCiAJcmVmY291bnRfdCB2bV9yZWZjbnQ7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2hpOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oCmluZGV4IDhhNDhiMjMxYWE3YWIuLjU0ZDVjMzM2MGFhMjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oCkBAIC0xNSw3ICYjNDM7MTUsNiBAQAogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogCiAjZGVmaW5lIENPTkZJR19NTVUJCTEKLSNkZWZpbmUgQ09ORklHX1BFUl9WTUFfTE9DSwkxCiAKICNpZmRlZiBfX0NPTkNBVAogI3VuZGVmIF9fQ09OQ0FUCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDg4CgkJCQkJCQlvdXRwdXQ6IDIzNgoJCQkJCQkJdGhvdWdodHM6IDE5ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFVuY29uZGl0aW9uYWwgUGVyLVZNQSBMb2NraW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaWcgb25lLiBJdCYjMzk7cyBlc3NlbnRpYWxseSByaXBwaW5nIG91dCB0aGUgY29uZGl0aW9uYWwgYENPTkZJR19QRVJfVk1BX0xPQ0tgIGFuZCBmb3JjaW5nIHBlci1WTUEgbG9ja2luZyB0byBiZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZCBhY3Jvc3MgdGhlIGJvYXJkLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgYW5kIGl0JiMzOTtzIGdvaW5nIHRvIHJpcHBsZSBvdXQgdG8gYSAqbG90KiBvZiBzdWJzeXN0ZW1zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzICphYnNvbHV0ZWx5KiB3YXJyYW50cyBzZXJpb3VzIGZ1enppbmcgZWZmb3J0LgoKVGhlIGtleSB0aGluZyBJJiMzOTttIHNlZWluZyBpcyB0aGlzIG5ldyBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGZ1bmN0aW9uIGluIGBtbS9tbWFwX2xvY2suY2AuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSByZWFkLXNpZGUgbG9jayBvbiBhIFZNQSB3aXRob3V0IHJlbHlpbmcgb24gUkNVIGluIHRoZSBmYXN0IHBhdGgsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGlzIGlzIGEgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbiBhbmQsIGdpdmVuIGl0cyBwZXJ2YXNpdmUgdXNlIGluIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIGRldGFpbC4gVGhlIHNsb3cgcGF0aCBhY3F1aXJpbmcgdGhlIGBtbWFwX3JlYWRfbG9ja2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLgoKQmV5b25kIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAsIEkmIzM5O20gc2VlaW5nIG1vZGlmaWNhdGlvbnMgaW4gc29tZSBjcml0aWNhbCBhcmVhcy4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuY2AgYW5kIGBkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNgIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBCaW5kZXIsIGEgY3JpdGljYWwgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIG1lY2hhbmlzbSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGlzc3VlcyBoZXJlLCB0aGV5IGNvdWxkIG1hbmlmZXN0IGFzIHZlcnkgaGFyZC10by1kZWJ1ZyBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy4gYGJpbmRlcl9wYWdlX2luc2VydGAgYW5kIGBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlYCBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBoZXJlLgoKYG5ldC9pcHY0L3RjcC5jYCBpcyBhbHNvIGdldHRpbmcgdG91Y2hlZC4gU3BlY2lmaWNhbGx5LCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBsb2NraW5nIGZvciBhIHplcm8tY29weSByZWNlaXZlIHBhdGggaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhhdCYjMzk7cyBhbiBhcmVhIHdpdGggdmVyeSB0aWdodCB0aW1pbmcgY29uc3RyYWludHMgYW5kIGhpZ2ggcGVyZm9ybWFuY2UgZXhwZWN0YXRpb25zLiBDb25jdXJyZW50IGFjY2VzcyB0byB0aGUgVk1BcyBkdXJpbmcgdGhpcyBmdW5jdGlvbiBpcyB3b3J0aCBzY3J1dGluaXppbmcuCgpVc2VyZmF1bHRmZCAoYG1tL3VzZXJmYXVsdGZkLmNgKSBpcyBhbm90aGVyIGNydWNpYWwgYXJlYS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIGZhdWx0IGhhbmRsaW5nLCBhbmQgYW55IGxvY2tpbmcgZXJyb3JzIGhlcmUgY291bGQgZWFzaWx5IGxlYWQgdG8gcHJpdmlsZWdlIGVzY2FsYXRpb24uIGB1ZmZkX2xvY2tfdm1hYCBhbmQgYHVmZmRfbW92ZV9sb2NrYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuCgpBbmQgZmluYWxseSBCUEYgc3RhY2ttYXBzLiBJIHNlZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHN0YWNrX21hcF9sb2NrX3ZtYWAgZnVuY3Rpb24uIEJQRiBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkgcG93ZXJmdWwsIHNvIGFueXRoaW5nIHRoYXQgYWZmZWN0cyBpdHMgbWVtb3J5IHNhZmV0eSBpcyBjcml0aWNhbC4gQWxzbyBgYnBmX2l0ZXJfdGFza192bWFfbmV3YCBpcyBhIEJQRiBrZnVuYywgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQuCgpGdXJ0aGVybW9yZSwgY2hhbmdlcyB0byBwcm9jZnMgKGBmcy9wcm9jL3Rhc2tfbW11LmNgKSB0aGF0IGFyZSBub3cgdW5jb25kaXRpb25hbGx5IHVzaW5nIHBlci1WTUEgbG9ja2luZyBuZWVkcyB0byBiZSBjaGVja2VkLiBJJiMzOTttIHNlZWluZyBgbG9ja19jdHhfbW1gIGlzIG5vdyBhbHdheXMgdXNpbmcgdGhlIHNhbWUgY29kZSBwYXRoLCBpdCBtYXkgbmVlZCB0byBiZSBjaGVja2VkLgoKU2luY2Ugd2UgYXJlIG1ha2luZyBhbGwgcGVyLVZNQSBsb2NraW5nIHVuY29uZGl0aW9uYWxseSBlbmFibGVkLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBVU0VSRkFVTFRGRGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQU5EUk9JRF9CSU5ERVJfSVBDYCB0byBmdWxseSBleGVyY2lzZSB0aGVzZSBjb2RlIHBhdGhzLgoKVG8gc3VtbWFyaXplLCB0aGlzIGlzIHdoYXQgSSYjMzk7bSBzZWVpbmcgYXMgdGhlIGtleSBmb2N1cyBhcmVhcyBmb3IgdGhpcyBwYXRjaDoKCiogICAqKldvcnRoRnV6emluZyoqOiBZZXMKKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCAobmV3IGZ1bmN0aW9uLCBjZW50cmFsIHRvIHRoZSBwYXRjaCkKICAgICogICBgYmluZGVyX3BhZ2VfaW5zZXJ0YAogICAgKiAgIGBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlYAogICAgKiAgIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAKICAgICogICBgdWZmZF9sb2NrX3ZtYWAKICAgICogICBgdWZmZF9tb3ZlX2xvY2tgCiAgICAqICAgYHN0YWNrX21hcF9sb2NrX3ZtYWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOgogICAgKiAgIGBVU0VSRkFVTFRGRGAKICAgICogICBgQlBGX1NZU0NBTExgCiAgICAqICAgYEFORFJPSURfQklOREVSX0lQQ2AKCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlLCBhbmQgdGhlbiBnZXQgdG8gZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QU5EUk9JRF9CSU5ERVJfSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7YmluZGVyX3BhZ2VfaW5zZXJ0JiMzNDssCiAgICAmIzM0O2JpbmRlcl9hbGxvY19mcmVlX3BhZ2UmIzM0OywKICAgICYjMzQ7dGNwX3plcm9jb3B5X3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dWZmZF9sb2NrX3ZtYSYjMzQ7LAogICAgJiMzNDt1ZmZkX21vdmVfbG9jayYjMzQ7LAogICAgJiMzNDtzdGFja19tYXBfbG9ja192bWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYENPTkZJR19QRVJfVk1BX0xPQ0tgIG9wdGlvbiBhbmQgbWFrZXMgcGVyLVZNQSBsb2NraW5nIHVuY29uZGl0aW9uYWwgYWNyb3NzIHRoZSBrZXJuZWwuIEl0IGludHJvZHVjZXMgYSBuZXcgQVBJIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgYW5kIG1vZGlmaWVzIHNldmVyYWwgc3Vic3lzdGVtcyAoQmluZGVyLCBUQ1AgemVyb2NvcHksIFVzZXJmYXVsdGZkLCBCUEYgc3RhY2ttYXAsIHByb2NmcykgdG8gdXNlIGl0IG9yIHJlbHkgb24gdW5jb25kaXRpb25hbCBwZXItVk1BIGxvY2tpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIHN1YnN5c3RlbXMgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0FORFJPSURfQklOREVSX0lQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYV9zdGFydF9yZWFkX3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2JpbmRlcl9wYWdlX2luc2VydCYjMzQ7LAogICAgJiMzNDtiaW5kZXJfYWxsb2NfZnJlZV9wYWdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VmZmRfbG9ja192bWEmIzM0OywKICAgICYjMzQ7dWZmZF9tb3ZlX2xvY2smIzM0OywKICAgICYjMzQ7c3RhY2tfbWFwX2xvY2tfdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDE6MTc6MjEuMTg1MzU0OTM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3Njc4NzkxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFfc3RhcnRfcmVhZF91bmxvY2tlZFwiLFxuICAgIFwiYmluZGVyX3BhZ2VfaW5zZXJ0XCIsXG4gICAgXCJiaW5kZXJfYWxsb2NfZnJlZV9wYWdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiLFxuICAgIFwidWZmZF9sb2NrX3ZtYVwiLFxuICAgIFwidWZmZF9tb3ZlX2xvY2tcIixcbiAgICBcInN0YWNrX21hcF9sb2NrX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAxOjE3OjIxLjE4NTM2MDQzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3MDE5NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWNjOTk4NDg1ODcwMTE2MDQ1ZjdlMjNjOWNlMzg3Zjg4ZDkzY2UzY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDAxOjE3OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnXFxuaW5kZXggOTE4NzI0MGEwMmRiNS4uZjgxNTIwOTE2N2NkOCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybS9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm0vS2NvbmZpZ1xcbkBAIC00MSw3ICs0MSw2IEBAIGNvbmZpZyBBUk1cXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNV1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DRklcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTIGlmIEFSTV9MUEFFXFxuLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFxcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbmluZGV4IDExYTljNTM0YjdiNDguLjIxZWI2NGIyNGEyYzcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTgxLDcgKzgxLDYgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBBUkNIX0hBU19QVEVfUFJPVE5PTkVcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1xcbi1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfU01UXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuaW5kZXggZTIwYWNiZTVmZTdiNS4uNzc0MWUzOWVjYTJiNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xcbkBAIC02OSw3ICs2OSw2IEBAIGNvbmZpZyBMT09OR0FSQ0hcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19QVEVfUFJPVE5PTkUgaWYgNjRCSVRcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkcgaWYgTlVNQVxcbi1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfU01UIGlmIFNNUFxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQyAgaWYgU01QXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcXG5pbmRleCBiNWFkN2MxNzNlZjBjLi5kZDhmNjA2MGZiN2EyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnXFxuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcXG5AQCAtMTcsNyArMTcsNiBAQCBjb25maWcgUFBDX1BPV0VSTlZcXG4gXFx0c2VsZWN0IFBQQ19ET09SQkVMTFxcbiBcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuIFxcdHNlbGVjdCBGT1JDRV9TTVBcXG4tXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuIFxcdHNlbGVjdCBQUENfUkFESVhfQlJPQURDQVNUX1RMQklFIGlmIFBQQ19SQURJWF9NTVVcXG4gXFx0ZGVmYXVsdCB5XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXFxuaW5kZXggNzQ5MTBjZTNhNTQxYy4uN2QxMjVlMjg4ZjZlZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZ1xcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXFxuQEAgLTIzLDcgKzIzLDYgQEAgY29uZmlnIFBQQ19QU0VSSUVTXFxuIFxcdHNlbGVjdCBIT1RQTFVHX0NQVVxcbiBcXHRzZWxlY3QgRk9SQ0VfU01QXFxuIFxcdHNlbGVjdCBTV0lPVExCXFxuLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbiBcXHRzZWxlY3QgUFBDX1JBRElYX0JST0FEQ0FTVF9UTEJJRSBpZiBQUENfUkFESVhfTU1VXFxuIFxcdGRlZmF1bHQgeVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXFxuaW5kZXggN2I5YzM3M2Q4MmZhYy4uZmFhODVhMDMxZmU1NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L0tjb25maWdcXG4rKysgYi9hcmNoL3Jpc2N2L0tjb25maWdcXG5AQCAtNzAsNyArNzAsNiBAQCBjb25maWcgUklTQ1ZcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HX1RISU5cXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTIGlmIDY0QklUIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLIGlmIE1NVVxcbi1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgaWYgTU1VXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19QVEVfUFJPVE5PTkUgaWYgTU1VXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1JUXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1NIQURPV19DQUxMX1NUQUNLIGlmIEhBVkVfU0hBRE9XX0NBTExfU1RBQ0tcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xcbmluZGV4IGFiOGZjY2MyY2M0ZTIuLmQxMjc0YmNhOGMzOWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xcbkBAIC0xNTEsNyArMTUxLDYgQEAgY29uZmlnIFMzOTBcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORVxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXFxuLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXFxuIFxcdHNlbGVjdCBBUkNIX1VTRV9TWU1fQU5OT1RBVElPTlNcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcXG5pbmRleCBmYjI5OGUyMTkxNzkyLi43OTQ3OWQyOTU3NmZmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXFxuQEAgLTI3LDcgKzI3LDYgQEAgY29uZmlnIFg4Nl82NFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSU5UMTI4IGlmIENDX0hBU19JTlQxMjhcXG4tXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfU09GVF9ESVJUWVxcbiBcXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcXG5AQCAtMTg0Niw3ICsxODQ1LDYgQEAgY29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbiBcXHRib29sIFxcXCJYODYgdXNlcnNwYWNlIHNoYWRvdyBzdGFja1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBBU19XUlVTU1xcbiBcXHRkZXBlbmRzIG9uIFg4Nl82NFxcbi1cXHRkZXBlbmRzIG9uIFBFUl9WTUFfTE9DS1xcbiBcXHRzZWxlY3QgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19VU0VSX1NIQURPV19TVEFDS1xcbiBcXHRzZWxlY3QgWDg2X0NFVFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNcXG5pbmRleCBlODJhNTUyMzgwNGY0Li5mN2FkODhhMGQ4MDY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yc1xcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yc1xcbkBAIC00MzksMjIgKzQzOSw5IEBAIHVuc2FmZSBmbiB1c2VfcGFnZV9zbG93KFxcdTAwMjZzZWxmLCBpOiB1c2l6ZSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzYygpXFx1MDAzZSB7XFxuICAgICAgICAgLy8gd29ya3F1ZXVlLlxcbiAgICAgICAgIGxldCBtbSA9IE1tV2l0aFVzZXI6OmludG9fbW1wdXRfYXN5bmMoc2VsZi5tbS5tbWdldF9ub3RfemVybygpLm9rX29yKEVTUkNIKT8pO1xcbiAgICAgICAgIHtcXG4tICAgICAgICAgICAgbGV0IHZtYV9yZWFkO1xcbi0gICAgICAgICAgICBsZXQgbW1hcF9yZWFkO1xcbi0gICAgICAgICAgICBsZXQgdm1hID0gaWYgbGV0IFNvbWUocmV0KSA9IG1tLmxvY2tfdm1hX3VuZGVyX3JjdSh2bWFfYWRkcikge1xcbi0gICAgICAgICAgICAgICAgdm1hX3JlYWQgPSByZXQ7XFxuLSAgICAgICAgICAgICAgICBjaGVja192bWEoXFx1MDAyNnZtYV9yZWFkLCBzZWxmKVxcbi0gICAgICAgICAgICB9IGVsc2Uge1xcbi0gICAgICAgICAgICAgICAgbW1hcF9yZWFkID0gbW0ubW1hcF9yZWFkX2xvY2soKTtcXG4tICAgICAgICAgICAgICAgIG1tYXBfcmVhZFxcbi0gICAgICAgICAgICAgICAgICAgIC52bWFfbG9va3VwKHZtYV9hZGRyKVxcbi0gICAgICAgICAgICAgICAgICAgIC5hbmRfdGhlbih8dm1hfCBjaGVja192bWEodm1hLCBzZWxmKSlcXG4tICAgICAgICAgICAgfTtcXG4tXFxuLSAgICAgICAgICAgIG1hdGNoIHZtYSB7XFxuLSAgICAgICAgICAgICAgICBTb21lKHZtYSkgPVxcdTAwM2Ugdm1hLnZtX2luc2VydF9wYWdlKHVzZXJfcGFnZV9hZGRyLCBcXHUwMDI2bmV3X3BhZ2UpPyxcXG4tICAgICAgICAgICAgICAgIE5vbmUgPVxcdTAwM2UgcmV0dXJuIEVycihFU1JDSCksXFxuLSAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgbGV0IHZtYV9yZWFkX2d1YXJkID0gbW0udm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQodm1hX2FkZHIpLm9rX29yKEVTUkNIKT87XFxuKyAgICAgICAgICAgIGxldCB2bWEgPSBjaGVja192bWEoXFx1MDAyNnZtYV9yZWFkX2d1YXJkLCBzZWxmKS5va19vcihFU1JDSCk/O1xcbisgICAgICAgICAgICB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsIFxcdTAwMjZuZXdfcGFnZSk/O1xcbiAgICAgICAgIH1cXG4gXFxuICAgICAgICAgbGV0IGlubmVyID0gc2VsZi5sb2NrLmxvY2soKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jXFxuaW5kZXggZTQ0ODhhZDg2YTY1NS4uNTE5ZGNkZWQxOWIyNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmNcXG4rKysgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmNcXG5AQCAtMjU5LDIxICsyNTksMTQgQEAgc3RhdGljIGludCBiaW5kZXJfcGFnZV9pbnNlcnQoc3RydWN0IGJpbmRlcl9hbGxvYyAqYWxsb2MsXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRpbnQgcmV0ID0gLUVTUkNIO1xcbiBcXG4tXFx0LyogYXR0ZW1wdCBwZXItdm1hIGxvY2sgZmlyc3QgKi9cXG4tXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcXG4tXFx0aWYgKHZtYSkge1xcbi1cXHRcXHRpZiAoYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpXFxuLVxcdFxcdFxcdHJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgYWRkciwgcGFnZSk7XFxuLVxcdFxcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbitcXHR2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcik7XFxuK1xcdGlmICghdm1hKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuIFxcbi1cXHQvKiBmYWxsIGJhY2sgdG8gbW1hcF9sb2NrICovXFxuLVxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuLVxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpXFxuK1xcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcXG4gXFx0XFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuK1xcbitcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMTE0Miw3ICsxMTM1LDYgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlX3RvX2ZyZWU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyO1xcbi1cXHRpbnQgbW1fbG9ja2VkID0gMDtcXG4gXFx0c2l6ZV90IGluZGV4O1xcbiBcXG4gXFx0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXFxuQEAgLTExNTEsMTQgKzExNDMsMjAgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gXFx0aW5kZXggPSBtZGF0YS1cXHUwMDNlcGFnZV9pbmRleDtcXG4gXFx0cGFnZV9hZGRyID0gYWxsb2MtXFx1MDAzZXZtX3N0YXJ0ICsgaW5kZXggKiBQQUdFX1NJWkU7XFxuIFxcbi1cXHQvKiBhdHRlbXB0IHBlci12bWEgbG9jayBmaXJzdCAqL1xcbitcXHQvKlxcbitcXHQgKiBBdHRlbXB0IHBlci12bWEgbG9jay4gVGhpcyBpcyBlc3NlbnRpYWxseSBhXFxuK1xcdCAqIFxcXCJ0cnlsb2NrXFxcIi4gSXQgY2FuIGZhaWwgZXZlbiBpZiB0aGUgVk1BIGV4aXN0c1xcbitcXHQgKiBmb3IgJ3BhZ2VfYWRkcicuXFxuK1xcdCAqL1xcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHBhZ2VfYWRkcik7XFxuIFxcdGlmICghdm1hKSB7XFxuLVxcdFxcdC8qIGZhbGwgYmFjayB0byBtbWFwX2xvY2sgKi9cXG4tXFx0XFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayhtbSkpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX21tYXBfcmVhZF9sb2NrX2ZhaWxlZDtcXG4tXFx0XFx0bW1fbG9ja2VkID0gMTtcXG4tXFx0XFx0dm1hID0gdm1hX2xvb2t1cChtbSwgcGFnZV9hZGRyKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIHZtYSBleGlzdHMsIHdlIGNhbid0IGNvbnRpbnVlIGJlY2F1c2Ugd2UgY2Fubm90XFxuK1xcdFxcdCAqIHJlbW92ZSB0aGUgcGFnZSBmcm9tIHRoZSB2bWEuIEhvd2V2ZXIsIGlmIHRoZSB2bWEgd2FzXFxuK1xcdFxcdCAqIHVubWFwcGVkLCBpdCdzIG9rYXkgdG8gY29udGludWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3ZtYV9sb2NrX2ZhaWxlZDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZhbGxvYy1cXHUwMDNlbXV0ZXgpKVxcbkBAIC0xMTkxLDkgKzExODksNyBAQCBlbnVtIGxydV9zdGF0dXMgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbiBcXHR9XFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmFsbG9jLVxcdTAwM2VtdXRleCk7XFxuLVxcdGlmIChtbV9sb2NrZWQpXFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRlbHNlXFxuK1xcdGlmICh2bWEpXFxuIFxcdFxcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbiBcXHRtbXB1dF9hc3luYyhtbSk7XFxuIFxcdGJpbmRlcl9mcmVlX3BhZ2UocGFnZV90b19mcmVlKTtcXG5AQCAtMTIwMywxMSArMTE5OSw5IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuIGVycl9pbnZhbGlkX3ZtYTpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhbGxvYy1cXHUwMDNlbXV0ZXgpO1xcbiBlcnJfZ2V0X2FsbG9jX211dGV4X2ZhaWxlZDpcXG4tXFx0aWYgKG1tX2xvY2tlZClcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKHZtYSlcXG4gXFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuLWVycl9tbWFwX3JlYWRfbG9ja19mYWlsZWQ6XFxuK2Vycl92bWFfbG9ja19mYWlsZWQ6XFxuIFxcdG1tcHV0X2FzeW5jKG1tKTtcXG4gZXJyX21tZ2V0OlxcbiBcXHRyZXR1cm4gTFJVX1NLSVA7XFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaFxcbmluZGV4IGIyMzJlMTA5ODExN2IuLjY3MTM3NTdkYTA5OTIgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvcHJvYy9pbnRlcm5hbC5oXFxuQEAgLTM4NSwxMCArMzg1LDggQEAgc3RydWN0IG1lbV9zaXplX3N0YXRzO1xcbiBcXG4gc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCB7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBcXHRib29sIG1tYXBfbG9ja2VkO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tlZF92bWE7XFxuLSNlbmRpZlxcbiB9O1xcbiBcXG4gc3RydWN0IHByb2NfbWFwc19wcml2YXRlIHtcXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuaW5kZXggODE3ZTNlMGY5MTk0My4uMDk2YmYwYjBiOWUwZSAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcXG5AQCAtMTMwLDggKzEzMCw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19tZW1wb2xpY3koc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IGxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbiB7XFxuIFxcdGludCByZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbkBAIC0yMzMsNDYgKzIzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcXG4gXFx0dm1hX2l0ZXJfc2V0KFxcdTAwMjZwcml2LVxcdTAwM2VpdGVyLCBwcml2LVxcdTAwM2Vsb2NrX2N0eC5sb2NrZWRfdm1hLVxcdTAwM2V2bV9lbmQpO1xcbiB9XFxuIFxcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXFxuLVxcbi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4te1xcbi1cXHRyZXR1cm4gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobG9ja19jdHgtXFx1MDAzZW1tKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbi17XFxuLVxcdHJldHVybiBsb2NrX2N0eF9tbShsb2NrX2N0eCkgPT0gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja192bWFfcmFuZ2Uoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGxvZmZfdCBsYXN0X3BvcylcXG4te1xcbi1cXHRyZXR1cm4gdm1hX25leHQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4tXFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBwb3MpXFxuLXtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KSB7fVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpIHt9XFxuLVxcbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xcbi1cXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxcbiB7XFxuIFxcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuQEAgLTU2MCw4ICs1MTgsNiBAQCBzdGF0aWMgaW50IHBpZF9tYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdFxcdFBST0NNQVBfUVVFUllfVk1BX0ZMQUdTXFx0XFx0XFx0XFx0XFxcXFxcbiApXFxuIFxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbi1cXG4gc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuIHtcXG4gXFx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xcbkBAIC02MTIsMjYgKzU2OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0XFxuIFxcdHJldHVybiB2bWE7XFxuIH1cXG4gXFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4tXFxuLXN0YXRpYyBpbnQgcXVlcnlfdm1hX3NldHVwKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbi17XFxuLVxcdHJldHVybiBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBxdWVyeV92bWFfdGVhcmRvd24oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4te1xcbi1cXHRyZXR1cm4gZmluZF92bWEobG9ja19jdHgtXFx1MDAzZW1tLCBhZGRyKTtcXG4tfVxcbi1cXG4tI2VuZGlmICAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXFxuLVxcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV9tYXRjaGluZ192bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiBmbGFncylcXG4ge1xcbkBAIC0xMzE0LDggKzEyNTAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfb3BzID0ge1xcbiBcXHQud2Fsa19sb2NrXFx0XFx0PSBQR1dBTEtfUkRMT0NLLFxcbiB9O1xcbiBcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfd2Fsa192bWFfbG9ja19vcHMgPSB7XFxuIFxcdC5wbWRfZW50cnlcXHRcXHQ9IHNtYXBzX3B0ZV9yYW5nZSxcXG4gXFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHNtYXBzX2h1Z2V0bGJfcmFuZ2UsXFxuQEAgLTEzNDUsMjIgKzEyNzksNiBAQCBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gXFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzO1xcbiB9XFxuIFxcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXFxuLVxcbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXFxuLWdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuLXtcXG4tXFx0cmV0dXJuIFxcdTAwMjZzbWFwc193YWxrX29wcztcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxcbi1nZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbi17XFxuLVxcdHJldHVybiBcXHUwMDI2c21hcHNfc2htZW1fd2Fsa19vcHM7XFxuLX1cXG4tXFxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXFxuLVxcbiAvKlxcbiAgKiBHYXRoZXIgbWVtIHN0YXRzIGZyb20gQHZtYSB3aXRoIHRoZSBpbmRpY2F0ZWQgYmVnaW5uaW5nXFxuICAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuXFxuQEAgLTM0OTcsNyArMzQxNSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX29wcyA9IHtcXG4gXFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuIH07XFxuIFxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNob3dfbnVtYV92bWFfbG9ja19vcHMgPSB7XFxuIFxcdC5odWdldGxiX2VudHJ5ID0gZ2F0aGVyX2h1Z2V0bGJfc3RhdHMsXFxuIFxcdC5wbWRfZW50cnkgPSBnYXRoZXJfcHRlX3N0YXRzLFxcbkBAIC0zNTEyLDE2ICszNDI5LDYgQEAgZ2V0X3Nob3dfbnVtYV9vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gXFx1MDAyNnNob3dfbnVtYV92bWFfbG9ja19vcHM7XFxuIH1cXG4gXFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4tXFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcXG4tZ2V0X3Nob3dfbnVtYV9vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbi17XFxuLVxcdHJldHVybiBcXHUwMDI2c2hvd19udW1hX29wcztcXG4tfVxcbi1cXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4tXFxuIC8qXFxuICAqIERpc3BsYXkgcGFnZXMgYWxsb2NhdGVkIHBlciBub2RlIGFuZCBtZW1vcnkgcG9saWN5IHZpYSAvcHJvYy5cXG4gICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxcbmluZGV4IDdmYWJlNmM2NmI0YjcuLmQ5ODUwZjg0NjI0MjcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTkzMSw3ICs5MzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX251bWFiX3N0YXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XFxuICAqIFRoZXNlIG11c3QgYmUgaGVyZSByYXRoZXIgdGhhbiBtbWFwX2xvY2suaCBhcyBkZXBlbmRlbnQgb24gdm1fZmF1bHQgdHlwZSxcXG4gICogZGVjbGFyZWQgaW4gdGhpcyBoZWFkZXIuXFxuICAqL1xcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiB7XFxuIFxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSylcXG5AQCAtOTQ3LDE3ICs5NDYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2ZhdWx0X2xvY2tlZChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0ZWxzZVxcbiBcXHRcXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4gfVxcbi0jZWxzZVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi17XFxuLVxcdG1tYXBfcmVhZF91bmxvY2sodm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9mYXVsdF9sb2NrZWQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLXtcXG4tXFx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSk7XFxuLX1cXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9mbGFnc190ZXN0KGludCBmbGFnLCBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5pbmRleCBiNWQ0Y2QzYjA2N2JmLi5kOGUyNDZmZDA5ZDMxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbkBAIC05NTAsNyArOTUwLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcXG4gXFx0XFx0dm1hX2ZsYWdzX3QgZmxhZ3M7XFxuIFxcdH07XFxuIFxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBcXHQvKlxcbiBcXHQgKiBDYW4gb25seSBiZSB3cml0dGVuICh1c2luZyBXUklURV9PTkNFKCkpIHdoaWxlIGhvbGRpbmcgYm90aDpcXG4gXFx0ICogIC0gbW1hcF9sb2NrIChpbiB3cml0ZSBtb2RlKVxcbkBAIC05NjYsNyArOTY1LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcXG4gXFx0ICogc2xvd3BhdGguXFxuIFxcdCAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7XFxuLSNlbmRpZlxcbitcXG4gXFx0LypcXG4gXFx0ICogTG93IDMyLWJpdHMgb2YgdmlydHVhbCBwYWdlIG9mZnNldC5cXG4gXFx0ICogU2VlIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgY29tbWVudCBmb3IgZGV0YWlscy5cXG5AQCAtMTAwMyw3ICsxMDAyLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcXG4gI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbiBcXHRzdHJ1Y3Qgdm1hX251bWFiX3N0YXRlICpudW1hYl9zdGF0ZTtcXHQvKiBOVU1BIEJhbGFuY2luZyBzdGF0ZSAqL1xcbiAjZW5kaWZcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0LypcXG4gXFx0ICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIGZpcnN0bHksIHdoZXRoZXIgdGhlIFZNQSBpcyBhdHRhY2hlZCwgc2Vjb25kbHksXFxuIFxcdCAqIGlmIGF0dGFjaGVkLCBob3cgbWFueSByZWFkIGxvY2tzIGFyZSB0YWtlbiwgYW5kIHRoaXJkbHksIGlmIHRoZVxcbkBAIC0xMDQ2LDcgKzEwNDQsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcXG4gXFx0c3RydWN0IGxvY2tkZXBfbWFwIHZtbG9ja19kZXBfbWFwO1xcbiAjZW5kaWZcXG4tI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfNjRCSVRcXG4gXFx0LypcXG4gXFx0ICogSGlnaCAzMi1iaXRzIG9mIHZpcnR1YWwgcGFnZSBvZmZzZXQuXFxuQEAgLTEyNTQsNyArMTI1MSw2IEBAIHN0cnVjdCBtbV9zdHJ1Y3Qge1xcbiBcXHRcXHRcXHRcXHRcXHQgICogaW5pdF9tbS5tbWxpc3QsIGFuZCBhcmUgcHJvdGVjdGVkXFxuIFxcdFxcdFxcdFxcdFxcdCAgKiBieSBtbWxpc3RfbG9ja1xcbiBcXHRcXHRcXHRcXHRcXHQgICovXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdFxcdHN0cnVjdCByY3V3YWl0IHZtYV93cml0ZXJfd2FpdDtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhpcyBmaWVsZCBoYXMgbG9jay1saWtlIHNlbWFudGljcywgbWVhbmluZyBpdCBpcyBzb21ldGltZXNcXG5AQCAtMTI3NCw3ICsxMjcwLDcgQEAgc3RydWN0IG1tX3N0cnVjdCB7XFxuIFxcdFxcdCAqIG1tYXBfbG9jay5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHNlcWNvdW50X3QgbW1fbG9ja19zZXE7XFxuLSNlbmRpZlxcbitcXG4gXFx0XFx0c3RydWN0IGZ1dGV4X21tX2RhdGFcXHRmdXRleDtcXG4gXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgaGl3YXRlcl9yc3M7IC8qIEhpZ2gtd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbmluZGV4IDg3Zjc3ZTNkYTc3ZjAuLmZkZDhmNWNmNTcyMjIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG5AQCAtNzYsOCArNzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRyd3NlbV9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2bW0tXFx1MDAzZW1tYXBfbG9jayk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuLVxcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gI2RlZmluZSBfX3ZtYV9sb2NrZGVwX21hcCh2bWEpIChcXHUwMDI2dm1hLVxcdTAwM2V2bWxvY2tfZGVwX21hcClcXG4gI2Vsc2VcXG5AQCAtMjMwLDEwICsyMjgsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9yZWZjb3VudF9wdXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGxvY2tpbmcgd2lsbCBub3RcXG4tICogZmFpbCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcXG4rICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdm1hIGxvY2sgaXMgbm90XFxuKyAqIGNvbnRlbmRlZCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcXG4gICogbm90IGJlIHVzZWQgaW4gc3VjaCBjYXNlcyBiZWNhdXNlIGl0IG1pZ2h0IGZhaWwgZHVlIHRvIG1tX2xvY2tfc2VxIG92ZXJmbG93LlxcbiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCB0byBvYnRhaW4gdm1hIHJlYWQgbG9jayBhbmQgZHJvcCB0aGUgbW1hcCByZWFkIGxvY2suXFxuKyAqIFZNQSBjYW4ndCBiZSBkZXRhY2hlZCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBtbWFwIGxvY2ssIHRoZXJlZm9yZSBpbiBwcmFjdGljZSB0aGlzXFxuKyAqIGZ1bmN0aW9uIGNhbiBmYWlsIG9ubHkgd2hlbiB0aGVyZSBhcmUgc28gbWFueSByZWFkZXJzIHRoYXQgdm1fcmVmY250IG92ZXJmbG93cy5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgc3ViY2xhc3MpXFxuIHtcXG5AQCAtMjQ5LDE2ICsyNDksMjEgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV9zdGFydF9yZWFkX2xvY2tlZF9uZXN0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGludFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBsb2NraW5nIHdpbGwgbm90XFxuLSAqIGZhaWwgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXFxuKyAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHZtYSBsb2NrIGlzIG5vdFxcbisgKiBjb250ZW5kZWQgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXFxuICAqIG5vdCBiZSB1c2VkIGluIHN1Y2ggY2FzZXMgYmVjYXVzZSBpdCBtaWdodCBmYWlsIGR1ZSB0byBtbV9sb2NrX3NlcSBvdmVyZmxvdy5cXG4gICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgdG8gb2J0YWluIHZtYSByZWFkIGxvY2sgYW5kIGRyb3AgdGhlIG1tYXAgcmVhZCBsb2NrLlxcbisgKiBWTUEgY2FuJ3QgYmUgZGV0YWNoZWQgd2hpbGUgd2UgYXJlIGhvbGRpbmcgbW1hcCBsb2NrLCB0aGVyZWZvcmUgaW4gcHJhY3RpY2UgdGhpc1xcbisgKiBmdW5jdGlvbiBjYW4gZmFpbCBvbmx5IHdoZW4gdGhlcmUgYXJlIHNvIG1hbnkgcmVhZGVycyB0aGF0IHZtX3JlZmNudCBvdmVyZmxvd3MuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHJldHVybiB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHZtYSwgMCk7XFxuIH1cXG4gXFxuK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9lbmRfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHR2bWFfcmVmY291bnRfcHV0KHZtYSk7XFxuQEAgLTQ4NCw1NCArNDg5LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB2bWFfaXRlcmF0b3IgKml0ZXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcXG4gXFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9sb2NrX3NlcWNvdW50X2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9sb2NrX3NlcWNvdW50X2JlZ2luKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9lbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9XFxuLVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW1hcF9sb2NrX3NwZWN1bGF0ZV90cnlfYmVnaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCAqc2VxKVxcbi17XFxuLVxcdHJldHVybiBmYWxzZTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSBib29sIG1tYXBfbG9ja19zcGVjdWxhdGVfcmV0cnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBzZXEpXFxuLXtcXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9sb2NrX2luaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgcmVzZXRfcmVmY250KSB7fVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2VuZF9yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX3N0YXJ0X3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxcbi1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbi1pbnQgdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7IHJldHVybiAwOyB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tXFx0XFx0eyBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVxcdTAwM2V2bV9tbSk7IH1cXG4tc3RhdGljIGlubGluZSBib29sIHZtYV9pc19hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tXFx0XFx0eyByZXR1cm4gdHJ1ZTsgfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfZGV0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbWFya19hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9tYXJrX2RldGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxcbi1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi17XFxuLVxcdHJldHVybiBOVUxMO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLXtcXG4tXFx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cXHUwMDNldm1fbW0pO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9zdGFiaWxpc2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi17XFxuLVxcdC8qIElmIG5vIFZNQSBsb2NrcywgdGhlbiBlaXRoZXIgbW1hcCBsb2NrIHN1ZmZpY2VzIHRvIHN0YWJpbGlzZS4gKi9cXG4tXFx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cXHUwMDNldm1fbW0pO1xcbi19XFxuLVxcbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfY2FuX21vZGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbmluZGV4IDQxZmU4N2Q3MzAyZjIuLjg4NDhlMjZlZjU4MTMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXFxuKysrIGIva2VybmVsL2JwZi9zdGFja21hcC5jXFxuQEAgLTI3MiwxMyArMjcyLDggQEAgc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayB7XFxuIC8qXFxuICAqIEFjcXVpcmUgYSBzdGFibGUgcmVhZC1zaWRlIHJlZmVyZW5jZSBvbiB0aGUgVk1BIGNvdmVyaW5nIEBpcC5cXG4gICpcXG4tICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPXkgdGhpcyByZXR1cm5zIGEgVk1BIHdpdGggaXRzIHBlci1WTUEgcmVhZFxcbi0gKiBsb2NrIGhlbGQgYW5kIG1tYXBfbG9jayBkcm9wcGVkLCBzbyB0aGUgY2FsbGVyIG1heSBzbGVlcC5cXG4tICpcXG4tICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPW4gaXQgcmV0dXJucyBhIFZNQSB3aXRoIG1tYXBfbG9jayBzdGlsbFxcbi0gKiBoZWxkOyB0aGUgY2FsbGVyIG11c3Qgc25hcHNob3QgYW55IGZpZWxkcyBpdCBuZWVkcyBhbmQgcGluIHZtX2ZpbGVcXG4tICogd2l0aCBnZXRfZmlsZSgpIGJlZm9yZSBzdGFja19tYXBfdW5sb2NrX3ZtYSgpIGRyb3BzIG1tYXBfbG9jaywgYXNcXG4tICogdGhlIFZNQSBtYXkgYmUgc3BsaXQsIG1lcmdlZCwgb3IgZnJlZWQgYWZ0ZXIgdGhhdC5cXG4rICogVGhpcyByZXR1cm5zIGEgVk1BIHdpdGggaXRzIHBlci1WTUEgcmVhZCBsb2NrIGhlbGQgYW5kIG1tYXBfbG9ja1xcbisgKiBkcm9wcGVkLCBzbyB0aGUgY2FsbGVyIG1heSBzbGVlcC5cXG4gICpcXG4gICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2Ugbm8gbG9jayBpcyBoZWxkLlxcbiAgKi9cXG5AQCAtMjg4LDcgKzI4Myw2IEBAIHN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKVxcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2stXFx1MDAzZW1tO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFxuLVxcdC8qIG5vb3AgdW5kZXIgIUNPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4gXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7XFxuIFxcdGlmICh2bWEpIHtcXG4gXFx0XFx0bG9jay1cXHUwMDNldm1hID0gdm1hO1xcbkBAIC0zMDgsMTMgKzMwMiwxMSBAQCBzdGFja19tYXBfbG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBpcClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdGlmICghdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHZtYSkpIHtcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi0jZW5kaWZcXG4gXFxuIFxcdGxvY2stXFx1MDAzZXZtYSA9IHZtYTtcXG4gXFx0cmV0dXJuIHZtYTtcXG5AQCAtMzIyLDExICszMTQsNyBAQCBzdGFja19tYXBfbG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBpcClcXG4gXFxuIHN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spXFxuIHtcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0dm1hX2VuZF9yZWFkKGxvY2stXFx1MDAzZXZtYSk7XFxuLSNlbHNlXFxuLVxcdG1tYXBfcmVhZF91bmxvY2sobG9jay1cXHUwMDNlbW0pO1xcbi0jZW5kaWZcXG4gXFx0bG9jay1cXHUwMDNldm1hID0gTlVMTDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90YXNrX2l0ZXIuYyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcXG5pbmRleCBlNzkxYWUwNjVjMzliLi42Y2Y4MTViYzg0YmVmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jXFxuQEAgLTgzNSwxMSArODM1LDYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0LFxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYV9rZXJuKSAhPSBzaXplb2Yoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hKSk7XFxuIFxcdEJVSUxEX0JVR19PTihfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWFfa2VybikgIT0gX19hbGlnbm9mX18oc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hKSk7XFxuIFxcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BFUl9WTUFfTE9DSykpIHtcXG4tXFx0XFx0a2l0LVxcdTAwM2VkYXRhID0gTlVMTDtcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHR9XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBSZWplY3QgaXJxcy1kaXNhYmxlZCBjb250ZXh0cyBpbmNsdWRpbmcgTk1JLiBPcGVyYXRpb25zIHVzZWRcXG4gXFx0ICogYnkgX25leHQoKSBhbmQgX2Rlc3Ryb3koKSAodm1hX2VuZF9yZWFkLCBmcHV0LCBicGZfaXRlcl9tbXB1dF9hc3luYylcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcXG5pbmRleCBmMGUyZTEzMWE5YTVhLi5mZjkxZjVmNjZjODBkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mb3JrLmNcXG4rKysgYi9rZXJuZWwvZm9yay5jXFxuQEAgLTEwNzcsOSArMTA3Nyw3IEBAIHN0YXRpYyB2b2lkIG1tYXBfaW5pdF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuIFxcdGluaXRfcndzZW0oXFx1MDAyNm1tLVxcdTAwM2VtbWFwX2xvY2spO1xcbiBcXHRtbV9sb2NrX3NlcWNvdW50X2luaXQobW0pO1xcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBcXHRyY3V3YWl0X2luaXQoXFx1MDAyNm1tLVxcdTAwM2V2bWFfd3JpdGVyX3dhaXQpO1xcbi0jZW5kaWZcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcXG5pbmRleCAwNjAxOTBlMTJiY2VkLi43NzEwM2I0NmI2NzkyIDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWdcXG4rKysgYi9tbS9LY29uZmlnXFxuQEAgLTE0MjUsMTkgKzE0MjUsNiBAQCBjb25maWcgTFJVX0dFTl9TVEFUU1xcbiBjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4gXFx0ZGVmX2Jvb2wgeVxcbiBcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuLSMgfVxcbi1cXG4tY29uZmlnIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuLSAgICAgICBkZWZfYm9vbCBuXFxuLVxcbi1jb25maWcgUEVSX1ZNQV9MT0NLXFxuLVxcdGRlZl9ib29sIHlcXG4tXFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcXHUwMDI2XFx1MDAyNiBNTVUgXFx1MDAyNlxcdTAwMjYgU01QXFxuLVxcdGhlbHBcXG4tXFx0ICBBbGxvdyBwZXItdm1hIGxvY2tpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcuXFxuLVxcbi1cXHQgIFRoaXMgZmVhdHVyZSBhbGxvd3MgbG9ja2luZyBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEgc2VwYXJhdGVseSB3aGVuXFxuLVxcdCAgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW5zdGVhZCBvZiB0YWtpbmcgbW1hcF9sb2NrLlxcbiBcXG4gY29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuIFxcdGJvb2xcXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWdcXG5pbmRleCA1NzM3YTUwNGVmYmJlLi4xZGQxNTBlZGZlNzFjIDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWcuZGVidWdcXG4rKysgYi9tbS9LY29uZmlnLmRlYnVnXFxuQEAgLTMxMCw3ICszMTAsNiBAQCBjb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbiBcXG4gY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbiBcXHRib29sIFxcXCJTdGF0aXN0aWNzIGZvciBwZXItdm1hIGxvY2tzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIFBFUl9WTUFfTE9DS1xcbiBcXHRoZWxwXFxuIFxcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VjY2VzcywgcmV0cnkgYW5kIGZhaWx1cmUgY291bnRlcnMgb2YgcGFnZVxcbiBcXHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWcuYyBiL21tL2RlYnVnLmNcXG5pbmRleCA5YTAyOTdiMzk4OGQ4Li42NTVlNmJjYzBlOGQ5IDEwMDY0NFxcbi0tLSBhL21tL2RlYnVnLmNcXG4rKysgYi9tbS9kZWJ1Zy5jXFxuQEAgLTE1NywxNyArMTU3LDEzIEBAIHZvaWQgZHVtcF92bWEoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdHByX2VtZXJnKFxcXCJ2bWEgJXB4IHN0YXJ0ICVweCBlbmQgJXB4IG1tICVweFxcXFxuXFxcIlxcbiBcXHRcXHRcXFwicHJvdCAlbHggYW5vbl92bWEgJXB4IHZtX29wcyAlcHhcXFxcblxcXCJcXG4gXFx0XFx0XFxcInBnb2ZmICVseCBmaWxlICVweCBwcml2YXRlX2RhdGEgJXB4XFxcXG5cXFwiXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdFxcdFxcXCJyZWZjbnQgJXhcXFxcblxcXCJcXG4tI2VuZGlmXFxuIFxcdFxcdFxcXCJmbGFnczogJSNseCglcEd2KVxcXFxuXFxcIixcXG4gXFx0XFx0dm1hLCAodm9pZCAqKXZtYS1cXHUwMDNldm1fc3RhcnQsICh2b2lkICopdm1hLVxcdTAwM2V2bV9lbmQsIHZtYS1cXHUwMDNldm1fbW0sXFxuIFxcdFxcdCh1bnNpZ25lZCBsb25nKXBncHJvdF92YWwodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpLFxcbiBcXHRcXHR2bWEtXFx1MDAzZWFub25fdm1hLCB2bWEtXFx1MDAzZXZtX29wcywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksXFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fZmlsZSwgdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEsXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdFxcdHJlZmNvdW50X3JlYWQoXFx1MDAyNnZtYS1cXHUwMDNldm1fcmVmY250KSxcXG4tI2VuZGlmXFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fZmxhZ3MsIFxcdTAwMjZ2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGR1bXBfdm1hKTtcXG5kaWZmIC0tZ2l0IGEvbW0vaW5pdC1tbS5jIGIvbW0vaW5pdC1tbS5jXFxuaW5kZXggM2U3OTJhYWQ3NjI2MS4uYTFiYjJjMmQwMjg0YSAxMDA2NDRcXG4tLS0gYS9tbS9pbml0LW1tLmNcXG4rKysgYi9tbS9pbml0LW1tLmNcXG5AQCAtMzksMTAgKzM5LDggQEAgc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0ge1xcbiBcXHQucGFnZV90YWJsZV9sb2NrID0gIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluaXRfbW0ucGFnZV90YWJsZV9sb2NrKSxcXG4gXFx0LmFyZ19sb2NrXFx0PSAgX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5hcmdfbG9jayksXFxuIFxcdC5tbWxpc3RcXHRcXHQ9IExJU1RfSEVBRF9JTklUKGluaXRfbW0ubW1saXN0KSxcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0LnZtYV93cml0ZXJfd2FpdCA9IF9fUkNVV0FJVF9JTklUSUFMSVpFUihpbml0X21tLnZtYV93cml0ZXJfd2FpdCksXFxuIFxcdC5tbV9sb2NrX3NlcVxcdD0gU0VRQ05UX1pFUk8oaW5pdF9tbS5tbV9sb2NrX3NlcSksXFxuLSNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX1NDSEVEX01NX0NJRFxcbiBcXHQubW1fY2lkLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5tbV9jaWQubG9jayksXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggYTYyMGQ0MjVlYzk1ZS4uZjEwOWY2Yzg3YjI4YyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTY4MTMsNyArNjgxMyw2IEBAIHN0YXRpYyB2bV9mYXVsdF90IHNhbml0aXplX2ZhdWx0X2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHQgIWlzX2Nvd19tYXBwaW5nKHZtYS1cXHUwMDNldm1fZmxhZ3MpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XFxuIFxcdH1cXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0LypcXG4gXFx0ICogUGVyLVZNQSBsb2NrcyBjYW4ndCBiZSB1c2VkIHdpdGggRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgYmVjYXVzZSBvZlxcbiBcXHQgKiB0aGUgYXNzdW1wdGlvbiB0aGF0IGxvY2sgaXMgZHJvcHBlZCBvbiBWTV9GQVVMVF9SRVRSWS5cXG5AQCAtNjgyMiw3ICs2ODIxLDYgQEAgc3RhdGljIHZtX2ZhdWx0X3Qgc2FuaXRpemVfZmF1bHRfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdChGQVVMVF9GTEFHX1ZNQV9MT0NLIHwgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKSA9PVxcbiBcXHRcXHRcXHQoRkFVTFRfRkxBR19WTUFfTE9DSyB8IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSkpXFxuIFxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xcbi0jZW5kaWZcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL21tYXBfbG9jay5jIGIvbW0vbW1hcF9sb2NrLmNcXG5pbmRleCA4OThjMmVmMWU5NTgwLi42ZmYwNWU2OGU2MWJlIDEwMDY0NFxcbi0tLSBhL21tL21tYXBfbG9jay5jXFxuKysrIGIvbW0vbW1hcF9sb2NrLmNcXG5AQCAtNDMsOSArNDMsNiBAQCB2b2lkIF9fbW1hcF9sb2NrX2RvX3RyYWNlX3JlbGVhc2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBib29sIHdyaXRlKVxcbiBFWFBPUlRfU1lNQk9MKF9fbW1hcF9sb2NrX2RvX3RyYWNlX3JlbGVhc2VkKTtcXG4gI2VuZGlmIC8qIENPTkZJR19UUkFDSU5HICovXFxuIFxcbi0jaWZkZWYgQ09ORklHX01NVVxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbi1cXG4gLyogU3RhdGUgc2hhcmVkIGFjcm9zcyBfX3ZtYV9bc3RhcnQsIGVuZF1fZXhjbHVkZV9yZWFkZXJzLiAqL1xcbiBzdHJ1Y3Qgdm1hX2V4Y2x1ZGVfcmVhZGVyc19zdGF0ZSB7XFxuIFxcdC8qIElucHV0IHBhcmFtZXRlcnMuICovXFxuQEAgLTM0MSw2ICszMzgsMzUgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbisvKlxcbisgKiBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJ2FkZHJlc3MnIGFuZCBsb2NrIGl0IGZvciByZWFkaW5nLiBXYWl0cyBmb3Igd3JpdGVycyB0b1xcbisgKiBmaW5pc2ggaWYgdGhlIFZNQSBpcyBiZWluZyBtb2RpZmllZC4gUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzIG5vIFZNQSBjb3ZlcmluZ1xcbisgKiAnYWRkcmVzcycuXFxuKyAqXFxuKyAqIFVzZSBvbmx5IGluIGNvZGUgcGF0aHMgd2hlcmUgbm8gbW1hcF9sb2NrIGFuZCBubyBWTUEgbG9jayBpcyBoZWxkLlxcbisgKlxcbisgKiBUaGUgZmFzdCBwYXRoIGRvZXMgbm90IHRha2UgbW1hcF9sb2NrLlxcbisgKi9cXG4rc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4re1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4rXFxuK1xcdC8qIEZhc3QgcGF0aDogcmV0dXJuIHN0YWJsZSBWTUEgY292ZXJpbmcgJ2FkZHJlc3MnOiAqL1xcbitcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbitcXHRpZiAodm1hKVxcbitcXHRcXHRyZXR1cm4gdm1hO1xcbitcXG4rXFx0LyogU2xvdyBwYXRoOiBwcmVjbHVkZSBWTUEgd3JpdGVycyBieSB0ZW1wb3JhcmlseSBnZXR0aW5nIG1tYXAgcmVhZCBsb2NrLiAqL1xcbitcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuK1xcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpO1xcbitcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2ICF2bWFfc3RhcnRfcmVhZF9sb2NrZWQodm1hKSlcXG4rXFx0XFx0dm1hID0gTlVMTDtcXG4rXFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuK1xcbitcXHRyZXR1cm4gdm1hO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hX3VuZGVyX21tYXBfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZnJvbV9hZGRyKVxcbkBAIC00MzEsNyArNDU3LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXG4gXFx0cmV0dXJuIHZtYTtcXG4gfVxcbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXh0YWJsZS5oXFx1MDAzZVxcbkBAIC01NDgsMjMgKzU3MywzIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuICNlbmRpZiAvKiBDT05GSUdfTE9DS19NTV9BTkRfRklORF9WTUEgKi9cXG4tXFxuLSNlbHNlIC8qIENPTkZJR19NTVUgKi9cXG4tXFxuLS8qXFxuLSAqIEF0IGxlYXN0IHh0ZW5zYSBlbmRzIHVwIGhhdmluZyBwcm90ZWN0aW9uIGZhdWx0cyBldmVuIHdpdGggbm9cXG4tICogTU1VLi4gTm8gc3RhY2sgZXhwYW5zaW9uLCBhdCBsZWFzdC5cXG4tICovXFxuLXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLXtcXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcbi1cXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuLVxcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xcbi1cXHRpZiAoIXZtYSlcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLVxcdHJldHVybiB2bWE7XFxuLX1cXG4tXFxuLSNlbmRpZiAvKiBDT05GSUdfTU1VICovXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggZWQ0ODYwYzAxOTM2Yy4uZmJjZjY0YzU5YTk3MyAxMDA2NDRcXG4tLS0gYS9tbS9wYWdld2Fsay5jXFxuKysrIGIvbW0vcGFnZXdhbGsuY1xcbkBAIC00NDYsNyArNDQ2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NfbW1fd2Fsa19sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRcXHQgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2spXFxuIHtcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0c3dpdGNoICh3YWxrX2xvY2spIHtcXG4gXFx0Y2FzZSBQR1dBTEtfV1JMT0NLOlxcbiBcXHRcXHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcXG5AQCAtNDYxLDcgKzQ2MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdC8qIFBHV0FMS19SRExPQ0sgaXMgaGFuZGxlZCBieSBwcm9jZXNzX21tX3dhbGtfbG9jayAqL1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbi0jZW5kaWZcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggYjkxNzQzMTc1OWVlMC4uNGU0YTRiNzQ3OTc3MiAxMDA2NDRcXG4tLS0gYS9tbS9ybWFwLmNcXG4rKysgYi9tbS9ybWFwLmNcXG5AQCAtMjYwLDExICsyNjAsOSBAQCBzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4gXFx0LyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi9cXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiA9PSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCFsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZzcmMtXFx1MDAzZWFub25fdm1hX2NoYWluKSk7XFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdC8qIE9ubHkgbWVyZ2luZyBhbiB1bmZhdWx0ZWQgVk1BIGxlYXZlcyB0aGUgZGVzdGluYXRpb24gYXR0YWNoZWQuICovXFxuIFxcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHR2bWFfaXNfYXR0YWNoZWQoZHN0KSk7XFxuLSNlbmRpZlxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtYXliZV9yZXVzZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcXG5pbmRleCAyNThiMDMxODJhNzgwLi5jM2EwYzM4YTNkYzNiIDEwMDY0NFxcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXFxuQEAgLTEyMiw3ICsxMjIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiB2bWE7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIC8qXFxuICAqIHVmZmRfbG9ja192bWEoKSAtIExvb2t1cCBhbmQgbG9jayB2bWEgY29ycmVzcG9uZGluZyB0byBAYWRkcmVzcy5cXG4gICogQG1tOiBtbSB0byBzZWFyY2ggdm1hIGluLlxcbkBAIC0xMzAsOCArMTI5LDEwIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF92bWFfYW5kX3ByZXBhcmVfYW5vbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gICpcXG4gICogU2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbW1hcF9sb2NrLlxcbiAgKlxcbi0gKiBSZXR1cm46IEEgbG9ja2VkIHZtYSBjb250YWluaW5nIEBhZGRyZXNzLCAtRU5PRU5UIGlmIG5vIHZtYSBpcyBmb3VuZCwgb3JcXG4tICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQuXFxuKyAqIFJldHVybjogQSBsb2NrZWQgdm1hIGNvbnRhaW5pbmcgQGFkZHJlc3MsIC1FTk9FTlQgaWYgbm8gdm1hIGlzIGZvdW5kLFxcbisgKiAtRU5PTUVNIGlmIGFub25fdm1hIGNvdWxkbid0IGJlIGFsbG9jYXRlZCwgb3IgLUVBR0FJTiBpZiB2bWEgcmVmY291bnRcXG4rICogb3ZlcmZsb3cgaGFwcGVuZWQgZHVlIHRvIGhpZ2ggbnVtYmVyIG9mIHJlYWRlcnMgYW5kIHRoZSBjYWxsZXIgc2hvdWxkXFxuKyAqIHJldHJ5IGxhdGVyLlxcbiAgKi9cXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdWZmZF9sb2NrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG5AQCAtMTgyLDM0ICsxODMsNiBAQCBzdGF0aWMgdm9pZCB1ZmZkX21maWxsX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIH1cXG4gXFxuLSNlbHNlXFxuLVxcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp1ZmZkX21maWxsX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXFxuLXtcXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hO1xcbi1cXG4tXFx0bW1hcF9yZWFkX2xvY2soZHN0X21tKTtcXG4tXFx0ZHN0X3ZtYSA9IGZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oZHN0X21tLCBkc3Rfc3RhcnQpO1xcbi1cXHRpZiAoSVNfRVJSKGRzdF92bWEpKVxcbi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuLVxcbi1cXHRpZiAodmFsaWRhdGVfZHN0X3ZtYShkc3Rfdm1hLCBkc3Rfc3RhcnQgKyBsZW4pKVxcbi1cXHRcXHRyZXR1cm4gZHN0X3ZtYTtcXG4tXFxuLVxcdGRzdF92bWEgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbi1vdXRfdW5sb2NrOlxcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKGRzdF9tbSk7XFxuLVxcdHJldHVybiBkc3Rfdm1hO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCB1ZmZkX21maWxsX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4te1xcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKHZtYS1cXHUwMDNldm1fbW0pO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4gc3RhdGljIHZvaWQgbWZpbGxfcHV0X3ZtYShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbiB7XFxuIFxcdGlmICghc3RhdGUtXFx1MDAzZXZtYSlcXG5AQCAtMTg1Miw3ICsxODI1LDYgQEAgaW50IGZpbmRfdm1hc19tbV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBzdGF0aWMgaW50IHVmZmRfbW92ZV9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LFxcbkBAIC0xOTI3LDMxICsxODk5LDYgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuIFxcdFxcdHZtYV9lbmRfcmVhZChkc3Rfdm1hKTtcXG4gfVxcbiBcXG4tI2Vsc2VcXG4tXFxuLXN0YXRpYyBpbnQgdWZmZF9tb3ZlX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsXFxuLVxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqZHN0X3ZtYXAsXFxuLVxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqc3JjX3ZtYXApXFxuLXtcXG4tXFx0aW50IGVycjtcXG4tXFxuLVxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0ZXJyID0gZmluZF92bWFzX21tX2xvY2tlZChtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIGRzdF92bWFwLCBzcmNfdm1hcCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpXFxuLXtcXG4tXFx0bW1hcF9hc3NlcnRfbG9ja2VkKHNyY192bWEtXFx1MDAzZXZtX21tKTtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhkc3Rfdm1hLVxcdTAwM2V2bV9tbSk7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbiAvKipcXG4gICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG4gICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXFxuaW5kZXggNDU1NDQxZjFiNjk0OS4uNjJkZWZlNzBmM2NlYiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xcbisrKyBiL25ldC9pcHY0L3RjcC5jXFxuQEAgLTIxNjcsMjcgKzIxNjcsMTggQEAgc3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBib29sICptbWFwX2xvY2tlZClcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiB7XFxuLVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7XFxuIFxcbi1cXHRpZiAodm1hKSB7XFxuLVxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX29wcyAhPSBcXHUwMDI2dGNwX3ZtX29wcykge1xcbi1cXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4tXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdFxcdH1cXG4tXFx0XFx0Km1tYXBfbG9ja2VkID0gZmFsc2U7XFxuLVxcdFxcdHJldHVybiB2bWE7XFxuLVxcdH1cXG4rXFx0aWYgKCF2bWEpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcXG4tXFx0aWYgKCF2bWEgfHwgdm1hLVxcdTAwM2V2bV9vcHMgIT0gXFx1MDAyNnRjcF92bV9vcHMpIHtcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuK1xcdGlmICh2bWEtXFx1MDAzZXZtX29wcyAhPSBcXHUwMDI2dGNwX3ZtX29wcykge1xcbitcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4tXFx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcXG4rXFxuIFxcdHJldHVybiB2bWE7XFxuIH1cXG4gXFxuQEAgLTIyMDgsNyArMjE5OSw2IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHR1MzIgc2VxID0gdHAtXFx1MDAzZWNvcGllZF9zZXE7XFxuIFxcdHUzMiB0b3RhbF9ieXRlc190b19tYXA7XFxuIFxcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcXG4tXFx0Ym9vbCBtbWFwX2xvY2tlZDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHpjLVxcdTAwM2Vjb3B5YnVmX2xlbiA9IDA7XFxuQEAgLTIyMzMsNyArMjIyMyw3IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXFx1MDAzZW1tLCBhZGRyZXNzLCBcXHUwMDI2bW1hcF9sb2NrZWQpO1xcbitcXHR2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC1cXHUwMDNlbW0sIGFkZHJlc3MpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC0yMzE1LDEwICsyMzA1LDcgQEAgc3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHpjLCB0b3RhbF9ieXRlc190b19tYXApO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0aWYgKG1tYXBfbG9ja2VkKVxcbi1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4rXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIFxcdC8qIFRyeSB0byBjb3B5IHN0cmFnZ2xlciBkYXRhLiAqL1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0Y29weWxlbiA9IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoemMsIHNrLCBza2IsIFxcdTAwMjZzZXEsIGNvcHlidWZfbGVuLCB0c3MpO1xcbmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9tbS5ycyBiL3J1c3Qva2VybmVsL21tLnJzXFxuaW5kZXggNDc2NGQ3YjY4ZjJhNy4uODc3ZmFkNjhiZTljMyAxMDA2NDRcXG4tLS0gYS9ydXN0L2tlcm5lbC9tbS5yc1xcbisrKyBiL3J1c3Qva2VybmVsL21tLnJzXFxuQEAgLTE3NCwyNiArMTc0LDM4IEBAIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcXHUwMDNjJ2FcXHUwMDNlKHB0cjogKmNvbnN0IGJpbmRpbmdzOjptbV9zdHJ1Y3QpIC1cXHUwMDNlIFxcdTAwMjYnYSBNbVdpdGhVc2VyIHtcXG4gICAgIC8vLyBXaGVuIHBlci12bWEgbG9ja3MgYXJlIGRpc2FibGVkLCB0aGlzIGFsd2F5cyByZXR1cm5zIGBOb25lYC5cXG4gICAgICNbaW5saW5lXVxcbiAgICAgcHViIGZuIGxvY2tfdm1hX3VuZGVyX3JjdShcXHUwMDI2c2VsZiwgdm1hX2FkZHI6IHVzaXplKSAtXFx1MDAzZSBPcHRpb25cXHUwMDNjVm1hUmVhZEd1YXJkXFx1MDAzYydfXFx1MDAzZVxcdTAwM2Uge1xcbi0gICAgICAgICNbY2ZnKENPTkZJR19QRVJfVk1BX0xPQ0spXVxcbiAgICAgICAgIHtcXG4gICAgICAgICAgICAgLy8gU0FGRVRZOiBDYWxsaW5nIGBiaW5kaW5nczo6bG9ja192bWFfdW5kZXJfcmN1YCBpcyBhbHdheXMgb2theSBnaXZlbiBhbiBtbSB3aGVyZVxcbiAgICAgICAgICAgICAvLyBgbW1fdXNlcnNgIGlzIG5vbi16ZXJvLlxcbiAgICAgICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdShzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcXG4tICAgICAgICAgICAgaWYgIXZtYS5pc19udWxsKCkge1xcbi0gICAgICAgICAgICAgICAgcmV0dXJuIFNvbWUoVm1hUmVhZEd1YXJkIHtcXG4tICAgICAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcXG4tICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXFxuLSAgICAgICAgICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSxcXG4tICAgICAgICAgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxcbi0gICAgICAgICAgICAgICAgfSk7XFxuKyAgICAgICAgICAgIGlmIHZtYS5pc19udWxsKCkge1xcbisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmU7XFxuICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgU29tZShWbWFSZWFkR3VhcmQge1xcbisgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgbG9ja192bWFfdW5kZXJfcmN1YCByZXR1cm5zIGEgbm9uLW51bGwgcHRyLCB0aGVuIGl0IHBvaW50cyBhdCBhXFxuKyAgICAgICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXFxuKyAgICAgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LFxcbisgICAgICAgICAgICAgICAgX250czogTm90VGhyZWFkU2FmZSxcXG4rICAgICAgICAgICAgfSlcXG4gICAgICAgICB9XFxuKyAgICB9XFxuIFxcbi0gICAgICAgIC8vIFNpbGVuY2Ugd2FybmluZ3MgYWJvdXQgdW51c2VkIHZhcmlhYmxlcy5cXG4tICAgICAgICAjW2NmZyhub3QoQ09ORklHX1BFUl9WTUFfTE9DSykpXVxcbi0gICAgICAgIGxldCBfID0gdm1hX2FkZHI7XFxuLVxcbi0gICAgICAgIE5vbmVcXG4rICAgIC8vLyBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJ2FkZHJlc3MnIGFuZCBsb2NrIGl0IGZvciByZWFkaW5nLiBXYWl0cyBmb3Igd3JpdGVycyB0byBmaW5pc2ggaWYgdGhlXFxuKyAgICAvLy8gVk1BIGlzIGJlaW5nIG1vZGlmaWVkLlxcbisgICAgI1tpbmxpbmVdXFxuKyAgICBwdWIgZm4gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoXFx1MDAyNnNlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLVxcdTAwM2UgT3B0aW9uXFx1MDAzY1ZtYVJlYWRHdWFyZFxcdTAwM2MnX1xcdTAwM2VcXHUwMDNlIHtcXG4rICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVyb1xcbisgICAgICAgIC8vIGBtbV91c2Vyc2AuXFxuKyAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcXG4rICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcXG4rICAgICAgICAgICAgcmV0dXJuIE5vbmU7XFxuKyAgICAgICAgfVxcbisgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcXG4rICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcXG4rICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLlxcbisgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LFxcbisgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxcbisgICAgICAgIH0pXFxuICAgICB9XFxuIFxcbiAgICAgLy8vIExvY2sgdGhlIG1tYXAgcmVhZCBsb2NrLlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbmluZGV4IDgwMGU1ZmEwMmQ3OGYuLjM2MmZlZGEyODUyNjQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG5AQCAtNTgyLDcgKzU4Miw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuIFxcdFxcdHZtYV9mbGFnc190IGZsYWdzO1xcbiBcXHR9O1xcbiBcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0LypcXG4gXFx0ICogQ2FuIG9ubHkgYmUgd3JpdHRlbiAodXNpbmcgV1JJVEVfT05DRSgpKSB3aGlsZSBob2xkaW5nIGJvdGg6XFxuIFxcdCAqICAtIG1tYXBfbG9jayAoaW4gd3JpdGUgbW9kZSlcXG5AQCAtNTk4LDcgKzU5Nyw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuIFxcdCAqIHNsb3dwYXRoLlxcbiBcXHQgKi9cXG4gXFx0dW5zaWduZWQgaW50IHZtX2xvY2tfc2VxO1xcbi0jZW5kaWZcXG4rXFxuIFxcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfbG87XFxuIFxcbiBcXHQvKlxcbkBAIC02MzIsMTAgKzYzMSw4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG4gXFx0c3RydWN0IHZtYV9udW1hYl9zdGF0ZSAqbnVtYWJfc3RhdGU7XFx0LyogTlVNQSBCYWxhbmNpbmcgc3RhdGUgKi9cXG4gI2VuZGlmXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdC8qIFVuc3RhYmxlIFJDVSByZWFkZXJzIGFyZSBhbGxvd2VkIHRvIHJlYWQgdGhpcy4gKi9cXG4gXFx0cmVmY291bnRfdCB2bV9yZWZjbnQ7XFxuLSNlbmRpZlxcbiAjaWZkZWYgQ09ORklHXzY0QklUXFxuIFxcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfaGk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXFxuaW5kZXggOGE0OGIyMzFhYTdhYi4uNTRkNWMzMzYwYWEyNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXFxuQEAgLTE1LDcgKzE1LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBDT05GSUdfTU1VXFx0XFx0MVxcbi0jZGVmaW5lIENPTkZJR19QRVJfVk1BX0xPQ0tcXHQxXFxuIFxcbiAjaWZkZWYgX19DT05DQVRcXG4gI3VuZGVmIF9fQ09OQ0FUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAxOjE3OjIxLjU4MzA1NDExMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzcwMTcxNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQU5EUk9JRF9CSU5ERVJfSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRcIixcbiAgICBcImJpbmRlcl9wYWdlX2luc2VydFwiLFxuICAgIFwiYmluZGVyX2FsbG9jX2ZyZWVfcGFnZVwiLFxuICAgIFwidGNwX3plcm9jb3B5X3JlY2VpdmVcIixcbiAgICBcInVmZmRfbG9ja192bWFcIixcbiAgICBcInVmZmRfbW92ZV9sb2NrXCIsXG4gICAgXCJzdGFja19tYXBfbG9ja192bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgQ09ORklHX1BFUl9WTUFfTE9DS2Agb3B0aW9uIGFuZCBtYWtlcyBwZXItVk1BIGxvY2tpbmcgdW5jb25kaXRpb25hbCBhY3Jvc3MgdGhlIGtlcm5lbC4gSXQgaW50cm9kdWNlcyBhIG5ldyBBUEkgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBzdWJzeXN0ZW1zIChCaW5kZXIsIFRDUCB6ZXJvY29weSwgVXNlcmZhdWx0ZmQsIEJQRiBzdGFja21hcCwgcHJvY2ZzKSB0byB1c2UgaXQgb3IgcmVseSBvbiB1bmNvbmRpdGlvbmFsIHBlci1WTUEgbG9ja2luZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgc3Vic3lzdGVtcyB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2M5OTg0ODU4NzAxMTYwNDVmN2UyM2M5Y2UzODdmODhkOTNjZTNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwMToxNzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnXG5pbmRleCA5MTg3MjQwYTAyZGI1Li5mODE1MjA5MTY3Y2Q4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm0vS2NvbmZpZ1xuQEAgLTQxLDcgKzQxLDYgQEAgY29uZmlnIEFSTVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNV1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFVExCRlMgaWYgQVJNX0xQQUVcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcbiBcdHNlbGVjdCBBUkNIX1VTRV9CVUlMVElOX0JTV0FQXG4gXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCAxMWE5YzUzNGI3YjQ4Li4yMWViNjRiMjRhMmM3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC04MSw3ICs4MSw2IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1JUXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9TTVRcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuaW5kZXggZTIwYWNiZTVmZTdiNS4uNzc0MWUzOWVjYTJiNyAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbisrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbkBAIC02OSw3ICs2OSw2IEBAIGNvbmZpZyBMT09OR0FSQ0hcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HU1xuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBpZiA2NEJJVFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkcgaWYgTlVNQVxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfU01UIGlmIFNNUFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfTUMgIGlmIFNNUFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcbmluZGV4IGI1YWQ3YzE3M2VmMGMuLmRkOGY2MDYwZmI3YTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZ1xuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcbkBAIC0xNyw3ICsxNyw2IEBAIGNvbmZpZyBQUENfUE9XRVJOVlxuIFx0c2VsZWN0IFBQQ19ET09SQkVMTFxuIFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuIFx0c2VsZWN0IEZPUkNFX1NNUFxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgUFBDX1JBRElYX0JST0FEQ0FTVF9UTEJJRSBpZiBQUENfUkFESVhfTU1VXG4gXHRkZWZhdWx0IHlcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXG5pbmRleCA3NDkxMGNlM2E1NDFjLi43ZDEyNWUyODhmNmVmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXG5AQCAtMjMsNyArMjMsNiBAQCBjb25maWcgUFBDX1BTRVJJRVNcbiBcdHNlbGVjdCBIT1RQTFVHX0NQVVxuIFx0c2VsZWN0IEZPUkNFX1NNUFxuIFx0c2VsZWN0IFNXSU9UTEJcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IFBQQ19SQURJWF9CUk9BRENBU1RfVExCSUUgaWYgUFBDX1JBRElYX01NVVxuIFx0ZGVmYXVsdCB5XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXG5pbmRleCA3YjljMzczZDgyZmFjLi5mYWE4NWEwMzFmZTU3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L0tjb25maWdcbkBAIC03MCw3ICs3MCw2IEBAIGNvbmZpZyBSSVNDVlxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HX1RISU5cbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HUyBpZiA2NEJJVCBcdTAwMjZcdTAwMjYgTU1VXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLIGlmIE1NVVxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIGlmIE1NVVxuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBpZiBNTVVcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1JUXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TSEFET1dfQ0FMTF9TVEFDSyBpZiBIQVZFX1NIQURPV19DQUxMX1NUQUNLXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggYWI4ZmNjYzJjYzRlMi4uZDEyNzRiY2E4YzM5YyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTE1MSw3ICsxNTEsNiBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcbiBcdHNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUZcbiBcdHNlbGVjdCBBUkNIX1VTRV9TWU1fQU5OT1RBVElPTlNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggZmIyOThlMjE5MTc5Mi4uNzk0NzlkMjk1NzZmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbisrKyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yNyw3ICsyNyw2IEBAIGNvbmZpZyBYODZfNjRcbiBcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4XG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NPRlRfRElSVFlcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQVxuQEAgLTE4NDYsNyArMTg0NSw2IEBAIGNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbiBcdGJvb2wgXCJYODYgdXNlcnNwYWNlIHNoYWRvdyBzdGFja1wiXG4gXHRkZXBlbmRzIG9uIEFTX1dSVVNTXG4gXHRkZXBlbmRzIG9uIFg4Nl82NFxuLVx0ZGVwZW5kcyBvbiBQRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcbiBcdHNlbGVjdCBBUkNIX0hBU19VU0VSX1NIQURPV19TVEFDS1xuIFx0c2VsZWN0IFg4Nl9DRVRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNcbmluZGV4IGU4MmE1NTIzODA0ZjQuLmY3YWQ4OGEwZDgwNjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yc1xuQEAgLTQzOSwyMiArNDM5LDkgQEAgdW5zYWZlIGZuIHVzZV9wYWdlX3Nsb3coXHUwMDI2c2VsZiwgaTogdXNpemUpIC1cdTAwM2UgUmVzdWx0XHUwMDNjKClcdTAwM2Uge1xuICAgICAgICAgLy8gd29ya3F1ZXVlLlxuICAgICAgICAgbGV0IG1tID0gTW1XaXRoVXNlcjo6aW50b19tbXB1dF9hc3luYyhzZWxmLm1tLm1tZ2V0X25vdF96ZXJvKCkub2tfb3IoRVNSQ0gpPyk7XG4gICAgICAgICB7XG4tICAgICAgICAgICAgbGV0IHZtYV9yZWFkO1xuLSAgICAgICAgICAgIGxldCBtbWFwX3JlYWQ7XG4tICAgICAgICAgICAgbGV0IHZtYSA9IGlmIGxldCBTb21lKHJldCkgPSBtbS5sb2NrX3ZtYV91bmRlcl9yY3Uodm1hX2FkZHIpIHtcbi0gICAgICAgICAgICAgICAgdm1hX3JlYWQgPSByZXQ7XG4tICAgICAgICAgICAgICAgIGNoZWNrX3ZtYShcdTAwMjZ2bWFfcmVhZCwgc2VsZilcbi0gICAgICAgICAgICB9IGVsc2Uge1xuLSAgICAgICAgICAgICAgICBtbWFwX3JlYWQgPSBtbS5tbWFwX3JlYWRfbG9jaygpO1xuLSAgICAgICAgICAgICAgICBtbWFwX3JlYWRcbi0gICAgICAgICAgICAgICAgICAgIC52bWFfbG9va3VwKHZtYV9hZGRyKVxuLSAgICAgICAgICAgICAgICAgICAgLmFuZF90aGVuKHx2bWF8IGNoZWNrX3ZtYSh2bWEsIHNlbGYpKVxuLSAgICAgICAgICAgIH07XG4tXG4tICAgICAgICAgICAgbWF0Y2ggdm1hIHtcbi0gICAgICAgICAgICAgICAgU29tZSh2bWEpID1cdTAwM2Ugdm1hLnZtX2luc2VydF9wYWdlKHVzZXJfcGFnZV9hZGRyLCBcdTAwMjZuZXdfcGFnZSk/LFxuLSAgICAgICAgICAgICAgICBOb25lID1cdTAwM2UgcmV0dXJuIEVycihFU1JDSCksXG4tICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIGxldCB2bWFfcmVhZF9ndWFyZCA9IG1tLnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHZtYV9hZGRyKS5va19vcihFU1JDSCk/O1xuKyAgICAgICAgICAgIGxldCB2bWEgPSBjaGVja192bWEoXHUwMDI2dm1hX3JlYWRfZ3VhcmQsIHNlbGYpLm9rX29yKEVTUkNIKT87XG4rICAgICAgICAgICAgdm1hLnZtX2luc2VydF9wYWdlKHVzZXJfcGFnZV9hZGRyLCBcdTAwMjZuZXdfcGFnZSk/O1xuICAgICAgICAgfVxuIFxuICAgICAgICAgbGV0IGlubmVyID0gc2VsZi5sb2NrLmxvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmNcbmluZGV4IGU0NDg4YWQ4NmE2NTUuLjUxOWRjZGVkMTliMjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmNcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuY1xuQEAgLTI1OSwyMSArMjU5LDE0IEBAIHN0YXRpYyBpbnQgYmluZGVyX3BhZ2VfaW5zZXJ0KHN0cnVjdCBiaW5kZXJfYWxsb2MgKmFsbG9jLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgcmV0ID0gLUVTUkNIO1xuIFxuLVx0LyogYXR0ZW1wdCBwZXItdm1hIGxvY2sgZmlyc3QgKi9cbi1cdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4tXHRpZiAodm1hKSB7XG4tXHRcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbi1cdFx0XHRyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpO1xuLVx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbitcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyKTtcbitcdGlmICghdm1hKVxuIFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuIFxuLVx0LyogZmFsbCBiYWNrIHRvIG1tYXBfbG9jayAqL1xuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4tXHRpZiAodm1hIFx1MDAyNlx1MDAyNiBiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbitcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbiBcdFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1xuK1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xMTQyLDcgKzExMzUsNiBAQCBlbnVtIGxydV9zdGF0dXMgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZV90b19mcmVlO1xuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2FkZHI7XG4tXHRpbnQgbW1fbG9ja2VkID0gMDtcbiBcdHNpemVfdCBpbmRleDtcbiBcbiBcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxuQEAgLTExNTEsMTQgKzExNDMsMjAgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiBcdGluZGV4ID0gbWRhdGEtXHUwMDNlcGFnZV9pbmRleDtcbiBcdHBhZ2VfYWRkciA9IGFsbG9jLVx1MDAzZXZtX3N0YXJ0ICsgaW5kZXggKiBQQUdFX1NJWkU7XG4gXG4tXHQvKiBhdHRlbXB0IHBlci12bWEgbG9jayBmaXJzdCAqL1xuK1x0LypcbitcdCAqIEF0dGVtcHQgcGVyLXZtYSBsb2NrLiBUaGlzIGlzIGVzc2VudGlhbGx5IGFcbitcdCAqIFwidHJ5bG9ja1wiLiBJdCBjYW4gZmFpbCBldmVuIGlmIHRoZSBWTUEgZXhpc3RzXG4rXHQgKiBmb3IgJ3BhZ2VfYWRkcicuXG4rXHQgKi9cbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgcGFnZV9hZGRyKTtcbiBcdGlmICghdm1hKSB7XG4tXHRcdC8qIGZhbGwgYmFjayB0byBtbWFwX2xvY2sgKi9cbi1cdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayhtbSkpXG4tXHRcdFx0Z290byBlcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkO1xuLVx0XHRtbV9sb2NrZWQgPSAxO1xuLVx0XHR2bWEgPSB2bWFfbG9va3VwKG1tLCBwYWdlX2FkZHIpO1xuK1x0XHQvKlxuK1x0XHQgKiBJZiB0aGUgdm1hIGV4aXN0cywgd2UgY2FuJ3QgY29udGludWUgYmVjYXVzZSB3ZSBjYW5ub3RcbitcdFx0ICogcmVtb3ZlIHRoZSBwYWdlIGZyb20gdGhlIHZtYS4gSG93ZXZlciwgaWYgdGhlIHZtYSB3YXNcbitcdFx0ICogdW5tYXBwZWQsIGl0J3Mgb2theSB0byBjb250aW51ZS5cbitcdFx0ICovXG4rXHRcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbitcdFx0XHRnb3RvIGVycl92bWFfbG9ja19mYWlsZWQ7XG4gXHR9XG4gXG4gXHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2YWxsb2MtXHUwMDNlbXV0ZXgpKVxuQEAgLTExOTEsOSArMTE4OSw3IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWxsb2MtXHUwMDNlbXV0ZXgpO1xuLVx0aWYgKG1tX2xvY2tlZClcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRlbHNlXG4rXHRpZiAodm1hKVxuIFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdG1tcHV0X2FzeW5jKG1tKTtcbiBcdGJpbmRlcl9mcmVlX3BhZ2UocGFnZV90b19mcmVlKTtcbkBAIC0xMjAzLDExICsxMTk5LDkgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiBlcnJfaW52YWxpZF92bWE6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWxsb2MtXHUwMDNlbXV0ZXgpO1xuIGVycl9nZXRfYWxsb2NfbXV0ZXhfZmFpbGVkOlxuLVx0aWYgKG1tX2xvY2tlZClcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRlbHNlXG4rXHRpZiAodm1hKVxuIFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbi1lcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkOlxuK2Vycl92bWFfbG9ja19mYWlsZWQ6XG4gXHRtbXB1dF9hc3luYyhtbSk7XG4gZXJyX21tZ2V0OlxuIFx0cmV0dXJuIExSVV9TS0lQO1xuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaFxuaW5kZXggYjIzMmUxMDk4MTE3Yi4uNjcxMzc1N2RhMDk5MiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvaW50ZXJuYWwuaFxuKysrIGIvZnMvcHJvYy9pbnRlcm5hbC5oXG5AQCAtMzg1LDEwICszODUsOCBAQCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHM7XG4gXG4gc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0Ym9vbCBtbWFwX2xvY2tlZDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja2VkX3ZtYTtcbi0jZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSB7XG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCA4MTdlM2UwZjkxOTQzLi4wOTZiZjBiMGI5ZTBlIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0xMzAsOCArMTMwLDYgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV90YXNrX21lbXBvbGljeShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gfVxuICNlbmRpZlxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4tXG4gc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0aW50IHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbkBAIC0yMzMsNDYgKzIzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHZtYV9pdGVyX3NldChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIHByaXYtXHUwMDNlbG9ja19jdHgubG9ja2VkX3ZtYS1cdTAwM2V2bV9lbmQpO1xuIH1cbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0cmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cdTAwM2VtbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrX3ZtYV9yYW5nZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4tXHRcdFx0XHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJldHVybiBsb2NrX2N0eF9tbShsb2NrX2N0eCkgPT0gMDtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja192bWFfcmFuZ2Uoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4tXHRcdFx0XHRcdCAgIGxvZmZfdCBsYXN0X3Bvcylcbi17XG4tXHRyZXR1cm4gdm1hX25leHQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4tXHRcdFx0XHRcdCBsb2ZmX3QgcG9zKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGRyb3BfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpIHt9XG4tXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcm9jX2dldF92bWEoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0c3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuQEAgLTU2MCw4ICs1MTgsNiBAQCBzdGF0aWMgaW50IHBpZF9tYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFBST0NNQVBfUVVFUllfVk1BX0ZMQUdTXHRcdFx0XHRcXFxuIClcbiBcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuLVxuIHN0YXRpYyBpbnQgcXVlcnlfdm1hX3NldHVwKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuIHtcbiBcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbkBAIC02MTIsMjYgKzU2OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0XG4gXHRyZXR1cm4gdm1hO1xuIH1cbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0cmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXHUwMDNlbW0pO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LFxuLVx0XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdHJldHVybiBmaW5kX3ZtYShsb2NrX2N0eC1cdTAwM2VtbSwgYWRkcik7XG4tfVxuLVxuLSNlbmRpZiAgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X21hdGNoaW5nX3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCxcbiBcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgZmxhZ3MpXG4ge1xuQEAgLTEzMTQsOCArMTI1MCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfc2htZW1fd2Fsa19vcHMgPSB7XG4gXHQud2Fsa19sb2NrXHRcdD0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzbWFwc193YWxrX3ZtYV9sb2NrX29wcyA9IHtcbiBcdC5wbWRfZW50cnlcdFx0PSBzbWFwc19wdGVfcmFuZ2UsXG4gXHQuaHVnZXRsYl9lbnRyeVx0XHQ9IHNtYXBzX2h1Z2V0bGJfcmFuZ2UsXG5AQCAtMTM0NSwyMiArMTI3OSw2IEBAIGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gXHUwMDI2c21hcHNfc2htZW1fd2Fsa192bWFfbG9ja19vcHM7XG4gfVxuIFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4tZ2V0X3NtYXBzX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbi17XG4tXHRyZXR1cm4gXHUwMDI2c21hcHNfd2Fsa19vcHM7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbi1nZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuLXtcbi1cdHJldHVybiBcdTAwMjZzbWFwc19zaG1lbV93YWxrX29wcztcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbiAvKlxuICAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmdcbiAgKiBhZGRyZXNzIEBzdGFydCwgYW5kIGtlZXAgdGhlbSBpbiBAbXNzLlxuQEAgLTM0OTcsNyArMzQxNSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX29wcyA9IHtcbiBcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuIH07XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNob3dfbnVtYV92bWFfbG9ja19vcHMgPSB7XG4gXHQuaHVnZXRsYl9lbnRyeSA9IGdhdGhlcl9odWdldGxiX3N0YXRzLFxuIFx0LnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHMsXG5AQCAtMzUxMiwxNiArMzQyOSw2IEBAIGdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiBcdTAwMjZzaG93X251bWFfdm1hX2xvY2tfb3BzO1xuIH1cbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuLWdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbi17XG4tXHRyZXR1cm4gXHUwMDI2c2hvd19udW1hX29wcztcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbiAvKlxuICAqIERpc3BsYXkgcGFnZXMgYWxsb2NhdGVkIHBlciBub2RlIGFuZCBtZW1vcnkgcG9saWN5IHZpYSAvcHJvYy5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDdmYWJlNmM2NmI0YjcuLmQ5ODUwZjg0NjI0MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTkzMSw3ICs5MzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX251bWFiX3N0YXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XG4gICogVGhlc2UgbXVzdCBiZSBoZXJlIHJhdGhlciB0aGFuIG1tYXBfbG9jay5oIGFzIGRlcGVuZGVudCBvbiB2bV9mYXVsdCB0eXBlLFxuICAqIGRlY2xhcmVkIGluIHRoaXMgaGVhZGVyLlxuICAqL1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfZmF1bHRfbG9jayhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiB7XG4gXHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKVxuQEAgLTk0NywxNyArOTQ2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9mYXVsdF9sb2NrZWQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRlbHNlXG4gXHRcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sodm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfZmF1bHRfbG9ja2VkKGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLXtcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbi19XG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fZmxhZ3NfdGVzdChpbnQgZmxhZywgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggYjVkNGNkM2IwNjdiZi4uZDhlMjQ2ZmQwOWQzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtOTUwLDcgKzk1MCw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XG4gXHRcdHZtYV9mbGFnc190IGZsYWdzO1xuIFx0fTtcbiBcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LypcbiBcdCAqIENhbiBvbmx5IGJlIHdyaXR0ZW4gKHVzaW5nIFdSSVRFX09OQ0UoKSkgd2hpbGUgaG9sZGluZyBib3RoOlxuIFx0ICogIC0gbW1hcF9sb2NrIChpbiB3cml0ZSBtb2RlKVxuQEAgLTk2Niw3ICs5NjUsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0ICogc2xvd3BhdGguXG4gXHQgKi9cbiBcdHVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTtcbi0jZW5kaWZcbitcbiBcdC8qXG4gXHQgKiBMb3cgMzItYml0cyBvZiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0LlxuIFx0ICogU2VlIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgY29tbWVudCBmb3IgZGV0YWlscy5cbkBAIC0xMDAzLDcgKzEwMDIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiBcdHN0cnVjdCB2bWFfbnVtYWJfc3RhdGUgKm51bWFiX3N0YXRlO1x0LyogTlVNQSBCYWxhbmNpbmcgc3RhdGUgKi9cbiAjZW5kaWZcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LypcbiBcdCAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBmaXJzdGx5LCB3aGV0aGVyIHRoZSBWTUEgaXMgYXR0YWNoZWQsIHNlY29uZGx5LFxuIFx0ICogaWYgYXR0YWNoZWQsIGhvdyBtYW55IHJlYWQgbG9ja3MgYXJlIHRha2VuLCBhbmQgdGhpcmRseSwgaWYgdGhlXG5AQCAtMTA0Niw3ICsxMDQ0LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcbiBcdHN0cnVjdCBsb2NrZGVwX21hcCB2bWxvY2tfZGVwX21hcDtcbiAjZW5kaWZcbi0jZW5kaWZcbiAjaWZkZWYgQ09ORklHXzY0QklUXG4gXHQvKlxuIFx0ICogSGlnaCAzMi1iaXRzIG9mIHZpcnR1YWwgcGFnZSBvZmZzZXQuXG5AQCAtMTI1NCw3ICsxMjUxLDYgQEAgc3RydWN0IG1tX3N0cnVjdCB7XG4gXHRcdFx0XHRcdCAgKiBpbml0X21tLm1tbGlzdCwgYW5kIGFyZSBwcm90ZWN0ZWRcbiBcdFx0XHRcdFx0ICAqIGJ5IG1tbGlzdF9sb2NrXG4gXHRcdFx0XHRcdCAgKi9cbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRzdHJ1Y3QgcmN1d2FpdCB2bWFfd3JpdGVyX3dhaXQ7XG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgZmllbGQgaGFzIGxvY2stbGlrZSBzZW1hbnRpY3MsIG1lYW5pbmcgaXQgaXMgc29tZXRpbWVzXG5AQCAtMTI3NCw3ICsxMjcwLDcgQEAgc3RydWN0IG1tX3N0cnVjdCB7XG4gXHRcdCAqIG1tYXBfbG9jay5cbiBcdFx0ICovXG4gXHRcdHNlcWNvdW50X3QgbW1fbG9ja19zZXE7XG4tI2VuZGlmXG4rXG4gXHRcdHN0cnVjdCBmdXRleF9tbV9kYXRhXHRmdXRleDtcbiBcbiBcdFx0dW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzczsgLyogSGlnaC13YXRlcm1hcmsgb2YgUlNTIHVzYWdlICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDg3Zjc3ZTNkYTc3ZjAuLmZkZDhmNWNmNTcyMjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5AQCAtNzYsOCArNzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0cndzZW1fYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2bW0tXHUwMDNlbW1hcF9sb2NrKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAjZGVmaW5lIF9fdm1hX2xvY2tkZXBfbWFwKHZtYSkgKFx1MDAyNnZtYS1cdTAwM2V2bWxvY2tfZGVwX21hcClcbiAjZWxzZVxuQEAgLTIzMCwxMCArMjI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfcmVmY291bnRfcHV0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIH1cbiBcbiAvKlxuLSAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGxvY2tpbmcgd2lsbCBub3Rcbi0gKiBmYWlsIChub2JvZHkgY2FuIGNvbmN1cnJlbnRseSB3cml0ZS1sb2NrIHRoZSB2bWEpLiB2bWFfc3RhcnRfcmVhZCgpIHNob3VsZFxuKyAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHZtYSBsb2NrIGlzIG5vdFxuKyAqIGNvbnRlbmRlZCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcbiAgKiBub3QgYmUgdXNlZCBpbiBzdWNoIGNhc2VzIGJlY2F1c2UgaXQgbWlnaHQgZmFpbCBkdWUgdG8gbW1fbG9ja19zZXEgb3ZlcmZsb3cuXG4gICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgdG8gb2J0YWluIHZtYSByZWFkIGxvY2sgYW5kIGRyb3AgdGhlIG1tYXAgcmVhZCBsb2NrLlxuKyAqIFZNQSBjYW4ndCBiZSBkZXRhY2hlZCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBtbWFwIGxvY2ssIHRoZXJlZm9yZSBpbiBwcmFjdGljZSB0aGlzXG4rICogZnVuY3Rpb24gY2FuIGZhaWwgb25seSB3aGVuIHRoZXJlIGFyZSBzbyBtYW55IHJlYWRlcnMgdGhhdCB2bV9yZWZjbnQgb3ZlcmZsb3dzLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgc3ViY2xhc3MpXG4ge1xuQEAgLTI0OSwxNiArMjQ5LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnRcbiB9XG4gXG4gLypcbi0gKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBsb2NraW5nIHdpbGwgbm90XG4tICogZmFpbCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcbisgKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB2bWEgbG9jayBpcyBub3RcbisgKiBjb250ZW5kZWQgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXG4gICogbm90IGJlIHVzZWQgaW4gc3VjaCBjYXNlcyBiZWNhdXNlIGl0IG1pZ2h0IGZhaWwgZHVlIHRvIG1tX2xvY2tfc2VxIG92ZXJmbG93LlxuICAqIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1c2VkIHRvIG9idGFpbiB2bWEgcmVhZCBsb2NrIGFuZCBkcm9wIHRoZSBtbWFwIHJlYWQgbG9jay5cbisgKiBWTUEgY2FuJ3QgYmUgZGV0YWNoZWQgd2hpbGUgd2UgYXJlIGhvbGRpbmcgbW1hcCBsb2NrLCB0aGVyZWZvcmUgaW4gcHJhY3RpY2UgdGhpc1xuKyAqIGZ1bmN0aW9uIGNhbiBmYWlsIG9ubHkgd2hlbiB0aGVyZSBhcmUgc28gbWFueSByZWFkZXJzIHRoYXQgdm1fcmVmY250IG92ZXJmbG93cy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHZtYSwgMCk7XG4gfVxuIFxuK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZW5kX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0dm1hX3JlZmNvdW50X3B1dCh2bWEpO1xuQEAgLTQ4NCw1NCArNDg5LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICppdGVyLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9sb2NrX3NlcWNvdW50X2JlZ2luKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9sb2NrX3NlcWNvdW50X2VuZChzdHJ1Y3QgbW1fc3RydWN0ICptbSkge31cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgbW1hcF9sb2NrX3NwZWN1bGF0ZV90cnlfYmVnaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCAqc2VxKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIG1tYXBfbG9ja19zcGVjdWxhdGVfcmV0cnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBzZXEpXG4te1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbG9ja19pbml0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHJlc2V0X3JlZmNudCkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2VuZF9yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc3RhcnRfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XG4tc3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcbi1pbnQgdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7IHJldHVybiAwOyB9XG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfd3JpdGVfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLVx0XHR7IG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pOyB9XG4tc3RhdGljIGlubGluZSBib29sIHZtYV9pc19hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi1cdFx0eyByZXR1cm4gdHJ1ZTsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2F0dGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2RldGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbWFya19hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX21hcmtfZGV0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XG4tXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLXtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4te1xuLVx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X3N0YWJpbGlzZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4te1xuLVx0LyogSWYgbm8gVk1BIGxvY2tzLCB0aGVuIGVpdGhlciBtbWFwIGxvY2sgc3VmZmljZXMgdG8gc3RhYmlsaXNlLiAqL1xuLVx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfY2FuX21vZGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCA0MWZlODdkNzMwMmYyLi44ODQ4ZTI2ZWY1ODEzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC0yNzIsMTMgKzI3Miw4IEBAIHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sge1xuIC8qXG4gICogQWNxdWlyZSBhIHN0YWJsZSByZWFkLXNpZGUgcmVmZXJlbmNlIG9uIHRoZSBWTUEgY292ZXJpbmcgQGlwLlxuICAqXG4tICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPXkgdGhpcyByZXR1cm5zIGEgVk1BIHdpdGggaXRzIHBlci1WTUEgcmVhZFxuLSAqIGxvY2sgaGVsZCBhbmQgbW1hcF9sb2NrIGRyb3BwZWQsIHNvIHRoZSBjYWxsZXIgbWF5IHNsZWVwLlxuLSAqXG4tICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPW4gaXQgcmV0dXJucyBhIFZNQSB3aXRoIG1tYXBfbG9jayBzdGlsbFxuLSAqIGhlbGQ7IHRoZSBjYWxsZXIgbXVzdCBzbmFwc2hvdCBhbnkgZmllbGRzIGl0IG5lZWRzIGFuZCBwaW4gdm1fZmlsZVxuLSAqIHdpdGggZ2V0X2ZpbGUoKSBiZWZvcmUgc3RhY2tfbWFwX3VubG9ja192bWEoKSBkcm9wcyBtbWFwX2xvY2ssIGFzXG4tICogdGhlIFZNQSBtYXkgYmUgc3BsaXQsIG1lcmdlZCwgb3IgZnJlZWQgYWZ0ZXIgdGhhdC5cbisgKiBUaGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkIGxvY2sgaGVsZCBhbmQgbW1hcF9sb2NrXG4rICogZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuXG4gICpcbiAgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBubyBsb2NrIGlzIGhlbGQuXG4gICovXG5AQCAtMjg4LDcgKzI4Myw2IEBAIHN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKVxuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBsb2NrLVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXG4tXHQvKiBub29wIHVuZGVyICFDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGlwKTtcbiBcdGlmICh2bWEpIHtcbiBcdFx0bG9jay1cdTAwM2V2bWEgPSB2bWE7XG5AQCAtMzA4LDEzICszMDIsMTEgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHRpZiAoIXZtYV9zdGFydF9yZWFkX2xvY2tlZCh2bWEpKSB7XG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLSNlbmRpZlxuIFxuIFx0bG9jay1cdTAwM2V2bWEgPSB2bWE7XG4gXHRyZXR1cm4gdm1hO1xuQEAgLTMyMiwxMSArMzE0LDcgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXG4gXG4gc3RhdGljIHZvaWQgc3RhY2tfbWFwX3VubG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaylcbiB7XG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdHZtYV9lbmRfcmVhZChsb2NrLVx1MDAzZXZtYSk7XG4tI2Vsc2Vcbi1cdG1tYXBfcmVhZF91bmxvY2sobG9jay1cdTAwM2VtbSk7XG4tI2VuZGlmXG4gXHRsb2NrLVx1MDAzZXZtYSA9IE5VTEw7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jXG5pbmRleCBlNzkxYWUwNjVjMzliLi42Y2Y4MTViYzg0YmVmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuKysrIGIva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuQEAgLTgzNSwxMSArODM1LDYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0LFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWFfa2VybikgIT0gc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSkpO1xuIFx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYV9rZXJuKSAhPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEpKTtcbiBcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfUEVSX1ZNQV9MT0NLKSkge1xuLVx0XHRraXQtXHUwMDNlZGF0YSA9IE5VTEw7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdH1cbi1cbiBcdC8qXG4gXHQgKiBSZWplY3QgaXJxcy1kaXNhYmxlZCBjb250ZXh0cyBpbmNsdWRpbmcgTk1JLiBPcGVyYXRpb25zIHVzZWRcbiBcdCAqIGJ5IF9uZXh0KCkgYW5kIF9kZXN0cm95KCkgKHZtYV9lbmRfcmVhZCwgZnB1dCwgYnBmX2l0ZXJfbW1wdXRfYXN5bmMpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IGYwZTJlMTMxYTlhNWEuLmZmOTFmNWY2NmM4MGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZm9yay5jXG4rKysgYi9rZXJuZWwvZm9yay5jXG5AQCAtMTA3Nyw5ICsxMDc3LDcgQEAgc3RhdGljIHZvaWQgbW1hcF9pbml0X2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0aW5pdF9yd3NlbShcdTAwMjZtbS1cdTAwM2VtbWFwX2xvY2spO1xuIFx0bW1fbG9ja19zZXFjb3VudF9pbml0KG1tKTtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0cmN1d2FpdF9pbml0KFx1MDAyNm1tLVx1MDAzZXZtYV93cml0ZXJfd2FpdCk7XG4tI2VuZGlmXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICptbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDA2MDE5MGUxMmJjZWQuLjc3MTAzYjQ2YjY3OTIgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4rKysgYi9tbS9LY29uZmlnXG5AQCAtMTQyNSwxOSArMTQyNSw2IEBAIGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4gY29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4gXHRkZWZfYm9vbCB5XG4gXHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuLSMgfVxuLVxuLWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuLSAgICAgICBkZWZfYm9vbCBuXG4tXG4tY29uZmlnIFBFUl9WTUFfTE9DS1xuLVx0ZGVmX2Jvb2wgeVxuLVx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBTTVBcbi1cdGhlbHBcbi1cdCAgQWxsb3cgcGVyLXZtYSBsb2NraW5nIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLlxuLVxuLVx0ICBUaGlzIGZlYXR1cmUgYWxsb3dzIGxvY2tpbmcgZWFjaCB2aXJ0dWFsIG1lbW9yeSBhcmVhIHNlcGFyYXRlbHkgd2hlblxuLVx0ICBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbnN0ZWFkIG9mIHRha2luZyBtbWFwX2xvY2suXG4gXG4gY29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4gXHRib29sXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWdcbmluZGV4IDU3MzdhNTA0ZWZiYmUuLjFkZDE1MGVkZmU3MWMgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnLmRlYnVnXG4rKysgYi9tbS9LY29uZmlnLmRlYnVnXG5AQCAtMzEwLDcgKzMxMCw2IEBAIGNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXG4gXG4gY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuIFx0Ym9vbCBcIlN0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcIlxuLVx0ZGVwZW5kcyBvbiBQRVJfVk1BX0xPQ0tcbiBcdGhlbHBcbiBcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VjY2VzcywgcmV0cnkgYW5kIGZhaWx1cmUgY291bnRlcnMgb2YgcGFnZVxuIFx0ICBmYXVsdHMgaGFuZGxlZCB1bmRlciBwcm90ZWN0aW9uIG9mIHBlci12bWEgbG9ja3MuIFdoZW4gZW5hYmxlZCwgdGhlXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWcuYyBiL21tL2RlYnVnLmNcbmluZGV4IDlhMDI5N2IzOTg4ZDguLjY1NWU2YmNjMGU4ZDkgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Zy5jXG4rKysgYi9tbS9kZWJ1Zy5jXG5AQCAtMTU3LDE3ICsxNTcsMTMgQEAgdm9pZCBkdW1wX3ZtYShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHByX2VtZXJnKFwidm1hICVweCBzdGFydCAlcHggZW5kICVweCBtbSAlcHhcXG5cIlxuIFx0XHRcInByb3QgJWx4IGFub25fdm1hICVweCB2bV9vcHMgJXB4XFxuXCJcbiBcdFx0XCJwZ29mZiAlbHggZmlsZSAlcHggcHJpdmF0ZV9kYXRhICVweFxcblwiXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdFx0XCJyZWZjbnQgJXhcXG5cIlxuLSNlbmRpZlxuIFx0XHRcImZsYWdzOiAlI2x4KCVwR3YpXFxuXCIsXG4gXHRcdHZtYSwgKHZvaWQgKil2bWEtXHUwMDNldm1fc3RhcnQsICh2b2lkICopdm1hLVx1MDAzZXZtX2VuZCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHQodW5zaWduZWQgbG9uZylwZ3Byb3RfdmFsKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpLFxuIFx0XHR2bWEtXHUwMDNlYW5vbl92bWEsIHZtYS1cdTAwM2V2bV9vcHMsIHZtYV9zdGFydF9wZ29mZih2bWEpLFxuIFx0XHR2bWEtXHUwMDNldm1fZmlsZSwgdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRyZWZjb3VudF9yZWFkKFx1MDAyNnZtYS1cdTAwM2V2bV9yZWZjbnQpLFxuLSNlbmRpZlxuIFx0XHR2bWEtXHUwMDNldm1fZmxhZ3MsIFx1MDAyNnZtYS1cdTAwM2V2bV9mbGFncyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woZHVtcF92bWEpO1xuZGlmZiAtLWdpdCBhL21tL2luaXQtbW0uYyBiL21tL2luaXQtbW0uY1xuaW5kZXggM2U3OTJhYWQ3NjI2MS4uYTFiYjJjMmQwMjg0YSAxMDA2NDRcbi0tLSBhL21tL2luaXQtbW0uY1xuKysrIGIvbW0vaW5pdC1tbS5jXG5AQCAtMzksMTAgKzM5LDggQEAgc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0ge1xuIFx0LnBhZ2VfdGFibGVfbG9jayA9ICBfX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X21tLnBhZ2VfdGFibGVfbG9jayksXG4gXHQuYXJnX2xvY2tcdD0gIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluaXRfbW0uYXJnX2xvY2spLFxuIFx0Lm1tbGlzdFx0XHQ9IExJU1RfSEVBRF9JTklUKGluaXRfbW0ubW1saXN0KSxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LnZtYV93cml0ZXJfd2FpdCA9IF9fUkNVV0FJVF9JTklUSUFMSVpFUihpbml0X21tLnZtYV93cml0ZXJfd2FpdCksXG4gXHQubW1fbG9ja19zZXFcdD0gU0VRQ05UX1pFUk8oaW5pdF9tbS5tbV9sb2NrX3NlcSksXG4tI2VuZGlmXG4gI2lmZGVmIENPTkZJR19TQ0hFRF9NTV9DSURcbiBcdC5tbV9jaWQubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X21tLm1tX2NpZC5sb2NrKSxcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBhNjIwZDQyNWVjOTVlLi5mMTA5ZjZjODdiMjhjIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNjgxMyw3ICs2ODEzLDYgQEAgc3RhdGljIHZtX2ZhdWx0X3Qgc2FuaXRpemVfZmF1bHRfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHQgIWlzX2Nvd19tYXBwaW5nKHZtYS1cdTAwM2V2bV9mbGFncykpKVxuIFx0XHRcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuIFx0fVxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHQvKlxuIFx0ICogUGVyLVZNQSBsb2NrcyBjYW4ndCBiZSB1c2VkIHdpdGggRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgYmVjYXVzZSBvZlxuIFx0ICogdGhlIGFzc3VtcHRpb24gdGhhdCBsb2NrIGlzIGRyb3BwZWQgb24gVk1fRkFVTFRfUkVUUlkuXG5AQCAtNjgyMiw3ICs2ODIxLDYgQEAgc3RhdGljIHZtX2ZhdWx0X3Qgc2FuaXRpemVfZmF1bHRfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0KEZBVUxUX0ZMQUdfVk1BX0xPQ0sgfCBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCkpID09XG4gXHRcdFx0KEZBVUxUX0ZMQUdfVk1BX0xPQ0sgfCBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCkpKVxuIFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcbi0jZW5kaWZcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tbWFwX2xvY2suYyBiL21tL21tYXBfbG9jay5jXG5pbmRleCA4OThjMmVmMWU5NTgwLi42ZmYwNWU2OGU2MWJlIDEwMDY0NFxuLS0tIGEvbW0vbW1hcF9sb2NrLmNcbisrKyBiL21tL21tYXBfbG9jay5jXG5AQCAtNDMsOSArNDMsNiBAQCB2b2lkIF9fbW1hcF9sb2NrX2RvX3RyYWNlX3JlbGVhc2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBib29sIHdyaXRlKVxuIEVYUE9SVF9TWU1CT0woX19tbWFwX2xvY2tfZG9fdHJhY2VfcmVsZWFzZWQpO1xuICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbi1cbiAvKiBTdGF0ZSBzaGFyZWQgYWNyb3NzIF9fdm1hX1tzdGFydCwgZW5kXV9leGNsdWRlX3JlYWRlcnMuICovXG4gc3RydWN0IHZtYV9leGNsdWRlX3JlYWRlcnNfc3RhdGUge1xuIFx0LyogSW5wdXQgcGFyYW1ldGVycy4gKi9cbkBAIC0zNDEsNiArMzM4LDM1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja192bWFfdW5kZXJfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuKy8qXG4rICogRmluZCB0aGUgVk1BIGNvdmVyaW5nICdhZGRyZXNzJyBhbmQgbG9jayBpdCBmb3IgcmVhZGluZy4gV2FpdHMgZm9yIHdyaXRlcnMgdG9cbisgKiBmaW5pc2ggaWYgdGhlIFZNQSBpcyBiZWluZyBtb2RpZmllZC4gUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzIG5vIFZNQSBjb3ZlcmluZ1xuKyAqICdhZGRyZXNzJy5cbisgKlxuKyAqIFVzZSBvbmx5IGluIGNvZGUgcGF0aHMgd2hlcmUgbm8gbW1hcF9sb2NrIGFuZCBubyBWTUEgbG9jayBpcyBoZWxkLlxuKyAqXG4rICogVGhlIGZhc3QgcGF0aCBkb2VzIG5vdCB0YWtlIG1tYXBfbG9jay5cbisgKi9cbitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuK3tcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1xuK1x0LyogRmFzdCBwYXRoOiByZXR1cm4gc3RhYmxlIFZNQSBjb3ZlcmluZyAnYWRkcmVzcyc6ICovXG4rXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuK1x0aWYgKHZtYSlcbitcdFx0cmV0dXJuIHZtYTtcbitcbitcdC8qIFNsb3cgcGF0aDogcHJlY2x1ZGUgVk1BIHdyaXRlcnMgYnkgdGVtcG9yYXJpbHkgZ2V0dGluZyBtbWFwIHJlYWQgbG9jay4gKi9cbitcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbitcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpO1xuK1x0aWYgKHZtYSBcdTAwMjZcdTAwMjYgIXZtYV9zdGFydF9yZWFkX2xvY2tlZCh2bWEpKVxuK1x0XHR2bWEgPSBOVUxMO1xuK1x0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXG4rXHRyZXR1cm4gdm1hO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hX3VuZGVyX21tYXBfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmcm9tX2FkZHIpXG5AQCAtNDMxLDcgKzQ1Nyw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19uZXh0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcbiBcdHJldHVybiB2bWE7XG4gfVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4gXG4gI2lmZGVmIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4dGFibGUuaFx1MDAzZVxuQEAgLTU0OCwyMyArNTczLDMgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX21tX2FuZF9maW5kX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBOVUxMO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xPQ0tfTU1fQU5EX0ZJTkRfVk1BICovXG4tXG4tI2Vsc2UgLyogQ09ORklHX01NVSAqL1xuLVxuLS8qXG4tICogQXQgbGVhc3QgeHRlbnNhIGVuZHMgdXAgaGF2aW5nIHByb3RlY3Rpb24gZmF1bHRzIGV2ZW4gd2l0aCBub1xuLSAqIE1NVS4uIE5vIHN0YWNrIGV4cGFuc2lvbiwgYXQgbGVhc3QuXG4tICovXG4tc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX21tX2FuZF9maW5kX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVxuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4tXHRpZiAoIXZtYSlcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRyZXR1cm4gdm1hO1xuLX1cbi1cbi0jZW5kaWYgLyogQ09ORklHX01NVSAqL1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCBlZDQ4NjBjMDE5MzZjLi5mYmNmNjRjNTlhOTczIDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuKysrIGIvbW0vcGFnZXdhbGsuY1xuQEAgLTQ0Niw3ICs0NDYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc19tbV93YWxrX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3Nfdm1hX3dhbGtfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdFx0IGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKVxuIHtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0c3dpdGNoICh3YWxrX2xvY2spIHtcbiBcdGNhc2UgUEdXQUxLX1dSTE9DSzpcbiBcdFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XG5AQCAtNDYxLDcgKzQ2MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFBHV0FMS19SRExPQ0sgaXMgaGFuZGxlZCBieSBwcm9jZXNzX21tX3dhbGtfbG9jayAqL1xuIFx0XHRicmVhaztcbiBcdH1cbi0jZW5kaWZcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IGI5MTc0MzE3NTllZTAuLjRlNGE0Yjc0Nzk3NzIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTI2MCwxMSArMjYwLDkgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gXHQvKiBGb3IgdGhlIGFub25fdm1hIHRvIGJlIGNvbXBhdGlibGUsIGl0IGNhbiBvbmx5IGJlIHNpbmd1bGFyLiAqL1xuIFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiA9PSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpO1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHQvKiBPbmx5IG1lcmdpbmcgYW4gdW5mYXVsdGVkIFZNQSBsZWF2ZXMgdGhlIGRlc3RpbmF0aW9uIGF0dGFjaGVkLiAqL1xuIFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFx1MDAyNlx1MDAyNlxuIFx0XHRcdHZtYV9pc19hdHRhY2hlZChkc3QpKTtcbi0jZW5kaWZcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWF5YmVfcmV1c2VfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDI1OGIwMzE4MmE3ODAuLmMzYTBjMzhhM2RjM2IgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTIyLDcgKzEyMiw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF92bWFfYW5kX3ByZXBhcmVfYW5vbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gLypcbiAgKiB1ZmZkX2xvY2tfdm1hKCkgLSBMb29rdXAgYW5kIGxvY2sgdm1hIGNvcnJlc3BvbmRpbmcgdG8gQGFkZHJlc3MuXG4gICogQG1tOiBtbSB0byBzZWFyY2ggdm1hIGluLlxuQEAgLTEzMCw4ICsxMjksMTAgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuICAqXG4gICogU2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbW1hcF9sb2NrLlxuICAqXG4tICogUmV0dXJuOiBBIGxvY2tlZCB2bWEgY29udGFpbmluZyBAYWRkcmVzcywgLUVOT0VOVCBpZiBubyB2bWEgaXMgZm91bmQsIG9yXG4tICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQuXG4rICogUmV0dXJuOiBBIGxvY2tlZCB2bWEgY29udGFpbmluZyBAYWRkcmVzcywgLUVOT0VOVCBpZiBubyB2bWEgaXMgZm91bmQsXG4rICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQsIG9yIC1FQUdBSU4gaWYgdm1hIHJlZmNvdW50XG4rICogb3ZlcmZsb3cgaGFwcGVuZWQgZHVlIHRvIGhpZ2ggbnVtYmVyIG9mIHJlYWRlcnMgYW5kIHRoZSBjYWxsZXIgc2hvdWxkXG4rICogcmV0cnkgbGF0ZXIuXG4gICovXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdWZmZF9sb2NrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG5AQCAtMTgyLDM0ICsxODMsNiBAQCBzdGF0aWMgdm9pZCB1ZmZkX21maWxsX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIH1cbiBcbi0jZWxzZVxuLVxuLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVmZmRfbWZpbGxfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sXG4tXHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuLVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGxlbilcbi17XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWE7XG4tXG4tXHRtbWFwX3JlYWRfbG9jayhkc3RfbW0pO1xuLVx0ZHN0X3ZtYSA9IGZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oZHN0X21tLCBkc3Rfc3RhcnQpO1xuLVx0aWYgKElTX0VSUihkc3Rfdm1hKSlcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuLVxuLVx0aWYgKHZhbGlkYXRlX2RzdF92bWEoZHN0X3ZtYSwgZHN0X3N0YXJ0ICsgbGVuKSlcbi1cdFx0cmV0dXJuIGRzdF92bWE7XG4tXG4tXHRkc3Rfdm1hID0gRVJSX1BUUigtRU5PRU5UKTtcbi1vdXRfdW5sb2NrOlxuLVx0bW1hcF9yZWFkX3VubG9jayhkc3RfbW0pO1xuLVx0cmV0dXJuIGRzdF92bWE7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHVmZmRfbWZpbGxfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sodm1hLVx1MDAzZXZtX21tKTtcbi19XG4tI2VuZGlmXG4tXG4gc3RhdGljIHZvaWQgbWZpbGxfcHV0X3ZtYShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdGlmICghc3RhdGUtXHUwMDNldm1hKVxuQEAgLTE4NTIsNyArMTgyNSw2IEBAIGludCBmaW5kX3ZtYXNfbW1fbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gc3RhdGljIGludCB1ZmZkX21vdmVfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsXG5AQCAtMTkyNywzMSArMTg5OSw2IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuIFx0XHR2bWFfZW5kX3JlYWQoZHN0X3ZtYSk7XG4gfVxuIFxuLSNlbHNlXG4tXG4tc3RhdGljIGludCB1ZmZkX21vdmVfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsXG4tXHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipkc3Rfdm1hcCxcbi1cdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnNyY192bWFwKVxuLXtcbi1cdGludCBlcnI7XG4tXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRlcnIgPSBmaW5kX3ZtYXNfbW1fbG9ja2VkKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgZHN0X3ZtYXAsIHNyY192bWFwKTtcbi1cdGlmIChlcnIpXG4tXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tXHRcdFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpXG4te1xuLVx0bW1hcF9hc3NlcnRfbG9ja2VkKHNyY192bWEtXHUwMDNldm1fbW0pO1xuLVx0bW1hcF9yZWFkX3VubG9jayhkc3Rfdm1hLVx1MDAzZXZtX21tKTtcbi19XG4tI2VuZGlmXG4tXG4gLyoqXG4gICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcbiAgKiBAY3R4OiBwb2ludGVyIHRvIHRoZSB1c2VyZmF1bHRmZCBjb250ZXh0XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNDU1NDQxZjFiNjk0OS4uNjJkZWZlNzBmM2NlYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTIxNjcsMjcgKzIxNjcsMTggQEAgc3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICBib29sICptbWFwX2xvY2tlZClcbitcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHJlc3MpO1xuIFxuLVx0aWYgKHZtYSkge1xuLVx0XHRpZiAodm1hLVx1MDAzZXZtX29wcyAhPSBcdTAwMjZ0Y3Bfdm1fb3BzKSB7XG4tXHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdH1cbi1cdFx0Km1tYXBfbG9ja2VkID0gZmFsc2U7XG4tXHRcdHJldHVybiB2bWE7XG4tXHR9XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbi1cdGlmICghdm1hIHx8IHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbitcdGlmICh2bWEtXHUwMDNldm1fb3BzICE9IFx1MDAyNnRjcF92bV9vcHMpIHtcbitcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcbitcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuQEAgLTIyMDgsNyArMjE5OSw2IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuIFx0dTMyIHNlcSA9IHRwLVx1MDAzZWNvcGllZF9zZXE7XG4gXHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwO1xuIFx0aW50IGlucSA9IHRjcF9pbnEoc2spO1xuLVx0Ym9vbCBtbWFwX2xvY2tlZDtcbiBcdGludCByZXQ7XG4gXG4gXHR6Yy1cdTAwM2Vjb3B5YnVmX2xlbiA9IDA7XG5AQCAtMjIzMyw3ICsyMjIzLDcgQEAgc3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXHUwMDNlbW0sIGFkZHJlc3MsIFx1MDAyNm1tYXBfbG9ja2VkKTtcbitcdHZtYSA9IGZpbmRfdGNwX3ZtYShjdXJyZW50LVx1MDAzZW1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0yMzE1LDEwICsyMzA1LDcgQEAgc3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdFx0ICAgemMsIHRvdGFsX2J5dGVzX3RvX21hcCk7XG4gXHR9XG4gb3V0OlxuLVx0aWYgKG1tYXBfbG9ja2VkKVxuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuLVx0ZWxzZVxuLVx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbitcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIFx0LyogVHJ5IHRvIGNvcHkgc3RyYWdnbGVyIGRhdGEuICovXG4gXHRpZiAoIXJldClcbiBcdFx0Y29weWxlbiA9IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoemMsIHNrLCBza2IsIFx1MDAyNnNlcSwgY29weWJ1Zl9sZW4sIHRzcyk7XG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvbW0ucnMgYi9ydXN0L2tlcm5lbC9tbS5yc1xuaW5kZXggNDc2NGQ3YjY4ZjJhNy4uODc3ZmFkNjhiZTljMyAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL21tLnJzXG4rKysgYi9ydXN0L2tlcm5lbC9tbS5yc1xuQEAgLTE3NCwyNiArMTc0LDM4IEBAIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcdTAwM2MnYVx1MDAzZShwdHI6ICpjb25zdCBiaW5kaW5nczo6bW1fc3RydWN0KSAtXHUwMDNlIFx1MDAyNidhIE1tV2l0aFVzZXIge1xuICAgICAvLy8gV2hlbiBwZXItdm1hIGxvY2tzIGFyZSBkaXNhYmxlZCwgdGhpcyBhbHdheXMgcmV0dXJucyBgTm9uZWAuXG4gICAgICNbaW5saW5lXVxuICAgICBwdWIgZm4gbG9ja192bWFfdW5kZXJfcmN1KFx1MDAyNnNlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLVx1MDAzZSBPcHRpb25cdTAwM2NWbWFSZWFkR3VhcmRcdTAwM2MnX1x1MDAzZVx1MDAzZSB7XG4tICAgICAgICAjW2NmZyhDT05GSUdfUEVSX1ZNQV9MT0NLKV1cbiAgICAgICAgIHtcbiAgICAgICAgICAgICAvLyBTQUZFVFk6IENhbGxpbmcgYGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3VgIGlzIGFsd2F5cyBva2F5IGdpdmVuIGFuIG1tIHdoZXJlXG4gICAgICAgICAgICAgLy8gYG1tX3VzZXJzYCBpcyBub24temVyby5cbiAgICAgICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdShzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcbi0gICAgICAgICAgICBpZiAhdm1hLmlzX251bGwoKSB7XG4tICAgICAgICAgICAgICAgIHJldHVybiBTb21lKFZtYVJlYWRHdWFyZCB7XG4tICAgICAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbi0gICAgICAgICAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC5cbi0gICAgICAgICAgICAgICAgICAgIHZtYTogdW5zYWZlIHsgVm1hUmVmOjpmcm9tX3Jhdyh2bWEpIH0sXG4tICAgICAgICAgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxuLSAgICAgICAgICAgICAgICB9KTtcbisgICAgICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcbisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmU7XG4gICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcbisgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgbG9ja192bWFfdW5kZXJfcmN1YCByZXR1cm5zIGEgbm9uLW51bGwgcHRyLCB0aGVuIGl0IHBvaW50cyBhdCBhXG4rICAgICAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC5cbisgICAgICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSxcbisgICAgICAgICAgICAgICAgX250czogTm90VGhyZWFkU2FmZSxcbisgICAgICAgICAgICB9KVxuICAgICAgICAgfVxuKyAgICB9XG4gXG4tICAgICAgICAvLyBTaWxlbmNlIHdhcm5pbmdzIGFib3V0IHVudXNlZCB2YXJpYWJsZXMuXG4tICAgICAgICAjW2NmZyhub3QoQ09ORklHX1BFUl9WTUFfTE9DSykpXVxuLSAgICAgICAgbGV0IF8gPSB2bWFfYWRkcjtcbi1cbi0gICAgICAgIE5vbmVcbisgICAgLy8vIEZpbmQgdGhlIFZNQSBjb3ZlcmluZyAnYWRkcmVzcycgYW5kIGxvY2sgaXQgZm9yIHJlYWRpbmcuIFdhaXRzIGZvciB3cml0ZXJzIHRvIGZpbmlzaCBpZiB0aGVcbisgICAgLy8vIFZNQSBpcyBiZWluZyBtb2RpZmllZC5cbisgICAgI1tpbmxpbmVdXG4rICAgIHB1YiBmbiB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjVm1hUmVhZEd1YXJkXHUwMDNjJ19cdTAwM2VcdTAwM2Uge1xuKyAgICAgICAgLy8gU0FGRVRZOiBXZSBtYXkgaW52b2tlIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgYmVjYXVzZSB3ZSBrbm93IHRoaXMgYG1tYCBoYXMgbm9uLXplcm9cbisgICAgICAgIC8vIGBtbV91c2Vyc2AuXG4rICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHNlbGYuYXNfcmF3KCksIHZtYV9hZGRyKSB9O1xuKyAgICAgICAgaWYgdm1hLmlzX251bGwoKSB7XG4rICAgICAgICAgICAgcmV0dXJuIE5vbmU7XG4rICAgICAgICB9XG4rICAgICAgICBTb21lKFZtYVJlYWRHdWFyZCB7XG4rICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbisgICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXG4rICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSxcbisgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxuKyAgICAgICAgfSlcbiAgICAgfVxuIFxuICAgICAvLy8gTG9jayB0aGUgbW1hcCByZWFkIGxvY2suXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbmluZGV4IDgwMGU1ZmEwMmQ3OGYuLjM2MmZlZGEyODUyNjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5AQCAtNTgyLDcgKzU4Miw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XG4gXHRcdHZtYV9mbGFnc190IGZsYWdzO1xuIFx0fTtcbiBcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LypcbiBcdCAqIENhbiBvbmx5IGJlIHdyaXR0ZW4gKHVzaW5nIFdSSVRFX09OQ0UoKSkgd2hpbGUgaG9sZGluZyBib3RoOlxuIFx0ICogIC0gbW1hcF9sb2NrIChpbiB3cml0ZSBtb2RlKVxuQEAgLTU5OCw3ICs1OTcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0ICogc2xvd3BhdGguXG4gXHQgKi9cbiBcdHVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTtcbi0jZW5kaWZcbitcbiBcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfbG87XG4gXG4gXHQvKlxuQEAgLTYzMiwxMCArNjMxLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4gXHRzdHJ1Y3Qgdm1hX251bWFiX3N0YXRlICpudW1hYl9zdGF0ZTtcdC8qIE5VTUEgQmFsYW5jaW5nIHN0YXRlICovXG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC8qIFVuc3RhYmxlIFJDVSByZWFkZXJzIGFyZSBhbGxvd2VkIHRvIHJlYWQgdGhpcy4gKi9cbiBcdHJlZmNvdW50X3Qgdm1fcmVmY250O1xuLSNlbmRpZlxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfaGk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmggYi90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxuaW5kZXggOGE0OGIyMzFhYTdhYi4uNTRkNWMzMzYwYWEyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxuQEAgLTE1LDcgKzE1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ09ORklHX01NVVx0XHQxXG4tI2RlZmluZSBDT05GSUdfUEVSX1ZNQV9MT0NLXHQxXG4gXG4gI2lmZGVmIF9fQ09OQ0FUXG4gI3VuZGVmIF9fQ09OQ0FUXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMToxNzoyMS41ODMwNTU1MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDI5MDk5Nzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgVW5jb25kaXRpb25hbCBQZXItVk1BIExvY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYmlnIG9uZS4gSXQncyBlc3NlbnRpYWxseSByaXBwaW5nIG91dCB0aGUgY29uZGl0aW9uYWwgYENPTkZJR19QRVJfVk1BX0xPQ0tgIGFuZCBmb3JjaW5nIHBlci1WTUEgbG9ja2luZyB0byBiZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZCBhY3Jvc3MgdGhlIGJvYXJkLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBhcmUgaGFuZGxlZCBpbiB0aGUga2VybmVsLCBhbmQgaXQncyBnb2luZyB0byByaXBwbGUgb3V0IHRvIGEgKmxvdCogb2Ygc3Vic3lzdGVtcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyAqYWJzb2x1dGVseSogd2FycmFudHMgc2VyaW91cyBmdXp6aW5nIGVmZm9ydC5cblxuVGhlIGtleSB0aGluZyBJJ20gc2VlaW5nIGlzIHRoaXMgbmV3IGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgZnVuY3Rpb24gaW4gYG1tL21tYXBfbG9jay5jYC4gSXQncyBkZXNpZ25lZCB0byBwcm92aWRlIGEgcmVhZC1zaWRlIGxvY2sgb24gYSBWTUEgd2l0aG91dCByZWx5aW5nIG9uIFJDVSBpbiB0aGUgZmFzdCBwYXRoLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhpcyBpcyBhIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb24gYW5kLCBnaXZlbiBpdHMgcGVydmFzaXZlIHVzZSBpbiB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiBkZXRhaWwuIFRoZSBzbG93IHBhdGggYWNxdWlyaW5nIHRoZSBgbW1hcF9yZWFkX2xvY2tgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy5cblxuQmV5b25kIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAsIEknbSBzZWVpbmcgbW9kaWZpY2F0aW9ucyBpbiBzb21lIGNyaXRpY2FsIGFyZWFzLiBgZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jYCBhbmQgYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yc2AgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGF0J3MgQmluZGVyLCBhIGNyaXRpY2FsIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBtZWNoYW5pc20sIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpc3N1ZXMgaGVyZSwgdGhleSBjb3VsZCBtYW5pZmVzdCBhcyB2ZXJ5IGhhcmQtdG8tZGVidWcgY3Jhc2hlcyBvciB2dWxuZXJhYmlsaXRpZXMuIGBiaW5kZXJfcGFnZV9pbnNlcnRgIGFuZCBgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZWAgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaGVyZS5cblxuYG5ldC9pcHY0L3RjcC5jYCBpcyBhbHNvIGdldHRpbmcgdG91Y2hlZC4gU3BlY2lmaWNhbGx5LCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLiBUaGUgZmFjdCB0aGF0IHRoZXkncmUgY2hhbmdpbmcgdGhlIGxvY2tpbmcgZm9yIGEgemVyby1jb3B5IHJlY2VpdmUgcGF0aCBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGF0J3MgYW4gYXJlYSB3aXRoIHZlcnkgdGlnaHQgdGltaW5nIGNvbnN0cmFpbnRzIGFuZCBoaWdoIHBlcmZvcm1hbmNlIGV4cGVjdGF0aW9ucy4gQ29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIFZNQXMgZHVyaW5nIHRoaXMgZnVuY3Rpb24gaXMgd29ydGggc2NydXRpbml6aW5nLlxuXG5Vc2VyZmF1bHRmZCAoYG1tL3VzZXJmYXVsdGZkLmNgKSBpcyBhbm90aGVyIGNydWNpYWwgYXJlYS4gV2UncmUgZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgZmF1bHQgaGFuZGxpbmcsIGFuZCBhbnkgbG9ja2luZyBlcnJvcnMgaGVyZSBjb3VsZCBlYXNpbHkgbGVhZCB0byBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gYHVmZmRfbG9ja192bWFgIGFuZCBgdWZmZF9tb3ZlX2xvY2tgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy5cblxuQW5kIGZpbmFsbHkgQlBGIHN0YWNrbWFwcy4gSSBzZWUgY2hhbmdlcyBpbiBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGBzdGFja19tYXBfbG9ja192bWFgIGZ1bmN0aW9uLiBCUEYgaXMgYmVjb21pbmcgaW5jcmVhc2luZ2x5IHBvd2VyZnVsLCBzbyBhbnl0aGluZyB0aGF0IGFmZmVjdHMgaXRzIG1lbW9yeSBzYWZldHkgaXMgY3JpdGljYWwuIEFsc28gYGJwZl9pdGVyX3Rhc2tfdm1hX25ld2AgaXMgYSBCUEYga2Z1bmMsIHdoaWNoIGlzIGFsc28gaW1wb3J0YW50LlxuXG5GdXJ0aGVybW9yZSwgY2hhbmdlcyB0byBwcm9jZnMgKGBmcy9wcm9jL3Rhc2tfbW11LmNgKSB0aGF0IGFyZSBub3cgdW5jb25kaXRpb25hbGx5IHVzaW5nIHBlci1WTUEgbG9ja2luZyBuZWVkcyB0byBiZSBjaGVja2VkLiBJJ20gc2VlaW5nIGBsb2NrX2N0eF9tbWAgaXMgbm93IGFsd2F5cyB1c2luZyB0aGUgc2FtZSBjb2RlIHBhdGgsIGl0IG1heSBuZWVkIHRvIGJlIGNoZWNrZWQuXG5cblNpbmNlIHdlIGFyZSBtYWtpbmcgYWxsIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZCwgSSdsbCBuZWVkIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBVU0VSRkFVTFRGRGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQU5EUk9JRF9CSU5ERVJfSVBDYCB0byBmdWxseSBleGVyY2lzZSB0aGVzZSBjb2RlIHBhdGhzLlxuXG5UbyBzdW1tYXJpemUsIHRoaXMgaXMgd2hhdCBJJ20gc2VlaW5nIGFzIHRoZSBrZXkgZm9jdXMgYXJlYXMgZm9yIHRoaXMgcGF0Y2g6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBZZXNcbiogICAqKkZvY3VzU3ltYm9scyoqOlxuICAgICogICBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIChuZXcgZnVuY3Rpb24sIGNlbnRyYWwgdG8gdGhlIHBhdGNoKVxuICAgICogICBgYmluZGVyX3BhZ2VfaW5zZXJ0YFxuICAgICogICBgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZWBcbiAgICAqICAgYHRjcF96ZXJvY29weV9yZWNlaXZlYFxuICAgICogICBgdWZmZF9sb2NrX3ZtYWBcbiAgICAqICAgYHVmZmRfbW92ZV9sb2NrYFxuICAgICogICBgc3RhY2tfbWFwX2xvY2tfdm1hYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOlxuICAgICogICBgVVNFUkZBVUxURkRgXG4gICAgKiAgIGBCUEZfU1lTQ0FMTGBcbiAgICAqICAgYEFORFJPSURfQklOREVSX0lQQ2BcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUsIGFuZCB0aGVuIGdldCB0byBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4OCwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTg1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDE6MTc6NDEuODc0MDU2MjcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE2NjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFfc3RhcnRfcmVhZF91bmxvY2tlZFwiLFxuICAgIFwiYmluZGVyX3BhZ2VfaW5zZXJ0XCIsXG4gICAgXCJiaW5kZXJfYWxsb2NfZnJlZV9wYWdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiLFxuICAgIFwidWZmZF9sb2NrX3ZtYVwiLFxuICAgIFwidWZmZF9tb3ZlX2xvY2tcIixcbiAgICBcInN0YWNrX21hcF9sb2NrX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFfc3RhcnRfcmVhZF91bmxvY2tlZFwiLFxuICAgIFwiYmluZGVyX3BhZ2VfaW5zZXJ0XCIsXG4gICAgXCJiaW5kZXJfYWxsb2NfZnJlZV9wYWdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiLFxuICAgIFwidWZmZF9sb2NrX3ZtYVwiLFxuICAgIFwidWZmZF9tb3ZlX2xvY2tcIixcbiAgICBcInN0YWNrX21hcF9sb2NrX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowj72ht[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 01:16:17 +0000 UTC FinishedAt: 2026-08-03 01:17:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "94f9b3980dd446b56acf1dfed649e9b32a9f3813", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "BPF_SYSCALL", "ANDROID_BINDER_IPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "94f9b3980dd446b56acf1dfed649e9b32a9f3813", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "BPF_SYSCALL", "ANDROID_BINDER_IPC" ], "series_id": "6dbf5a04-692d-4119-a85f-65d0e30124fc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vma_start_read_unlocked", "binder_page_insert", "binder_alloc_free_page", "tcp_zerocopy_receive", "uffd_lock_vma", "uffd_move_lock", "stack_map_lock_vma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "59d09544-f280-48fe-8ca9-a2fd8225e9df" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAxOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0FORFJPSURfQklOREVSX0lQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYV9zdGFydF9yZWFkX3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2JpbmRlcl9wYWdlX2luc2VydCYjMzQ7LAogICAgJiMzNDtiaW5kZXJfYWxsb2NfZnJlZV9wYWdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VmZmRfbG9ja192bWEmIzM0OywKICAgICYjMzQ7dWZmZF9tb3ZlX2xvY2smIzM0OywKICAgICYjMzQ7c3RhY2tfbWFwX2xvY2tfdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAxOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWNjOTk4NDg1ODcwMTE2MDQ1ZjdlMjNjOWNlMzg3Zjg4ZDkzY2UzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDE6MTc6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWdcbmluZGV4IDkxODcyNDBhMDJkYjUuLmY4MTUyMDkxNjdjZDggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9LY29uZmlnXG5AQCAtNDEsNyAmIzQzOzQxLDYgQEAgY29uZmlnIEFSTVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNV1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFVExCRlMgaWYgQVJNX0xQQUVcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcbiBcdHNlbGVjdCBBUkNIX1VTRV9CVUlMVElOX0JTV0FQXG4gXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCAxMWE5YzUzNGI3YjQ4Li4yMWViNjRiMjRhMmM3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC04MSw3ICYjNDM7ODEsNiBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBBUkNIX0hBU19QVEVfUFJPVE5PTkVcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfU01UXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbmluZGV4IGUyMGFjYmU1ZmU3YjUuLjc3NDFlMzllY2EyYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5AQCAtNjksNyAmIzQzOzY5LDYgQEAgY29uZmlnIExPT05HQVJDSFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1BST1ROT05FIGlmIDY0QklUXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lORyBpZiBOVU1BXG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1JUXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9TTVQgaWYgU01QXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQyAgaWYgU01QXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZ1xuaW5kZXggYjVhZDdjMTczZWYwYy4uZGQ4ZjYwNjBmYjdhMiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZ1xuQEAgLTE3LDcgJiM0MzsxNyw2IEBAIGNvbmZpZyBQUENfUE9XRVJOVlxuIFx0c2VsZWN0IFBQQ19ET09SQkVMTFxuIFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuIFx0c2VsZWN0IEZPUkNFX1NNUFxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgUFBDX1JBRElYX0JST0FEQ0FTVF9UTEJJRSBpZiBQUENfUkFESVhfTU1VXG4gXHRkZWZhdWx0IHlcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXG5pbmRleCA3NDkxMGNlM2E1NDFjLi43ZDEyNWUyODhmNmVmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXG5AQCAtMjMsNyAmIzQzOzIzLDYgQEAgY29uZmlnIFBQQ19QU0VSSUVTXG4gXHRzZWxlY3QgSE9UUExVR19DUFVcbiBcdHNlbGVjdCBGT1JDRV9TTVBcbiBcdHNlbGVjdCBTV0lPVExCXG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBQUENfUkFESVhfQlJPQURDQVNUX1RMQklFIGlmIFBQQ19SQURJWF9NTVVcbiBcdGRlZmF1bHQgeVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuaW5kZXggN2I5YzM3M2Q4MmZhYy4uZmFhODVhMDMxZmU1NyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9LY29uZmlnXG5AQCAtNzAsNyAmIzQzOzcwLDYgQEAgY29uZmlnIFJJU0NWXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTIGlmIDY0QklUIFx1MDAyNlx1MDAyNiBNTVVcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0sgaWYgTU1VXG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgaWYgTU1VXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1BST1ROT05FIGlmIE1NVVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1NIQURPV19DQUxMX1NUQUNLIGlmIEhBVkVfU0hBRE9XX0NBTExfU1RBQ0tcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCBhYjhmY2NjMmNjNGUyLi5kMTI3NGJjYThjMzljIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnXG5AQCAtMTUxLDcgJiM0MzsxNTEsNiBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcbiBcdHNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUZcbiBcdHNlbGVjdCBBUkNIX1VTRV9TWU1fQU5OT1RBVElPTlNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggZmIyOThlMjE5MTc5Mi4uNzk0NzlkMjk1NzZmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yNyw3ICYjNDM7MjcsNiBAQCBjb25maWcgWDg2XzY0XG4gXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19JTlQxMjggaWYgQ0NfSEFTX0lOVDEyOFxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0c2VsZWN0IEhBVkVfQVJDSF9TT0ZUX0RJUlRZXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcbkBAIC0xODQ2LDcgJiM0MzsxODQ1LDYgQEAgY29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xuIFx0Ym9vbCBcJiMzNDtYODYgdXNlcnNwYWNlIHNoYWRvdyBzdGFja1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBBU19XUlVTU1xuIFx0ZGVwZW5kcyBvbiBYODZfNjRcbi1cdGRlcGVuZHMgb24gUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXG4gXHRzZWxlY3QgQVJDSF9IQVNfVVNFUl9TSEFET1dfU1RBQ0tcbiBcdHNlbGVjdCBYODZfQ0VUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzXG5pbmRleCBlODJhNTUyMzgwNGY0Li5mN2FkODhhMGQ4MDY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNcbkBAIC00MzksMjIgJiM0Mzs0MzksOSBAQCB1bnNhZmUgZm4gdXNlX3BhZ2Vfc2xvdyhcdTAwMjZzZWxmLCBpOiB1c2l6ZSkgLVx1MDAzZSBSZXN1bHRcdTAwM2MoKVx1MDAzZSB7XG4gICAgICAgICAvLyB3b3JrcXVldWUuXG4gICAgICAgICBsZXQgbW0gPSBNbVdpdGhVc2VyOjppbnRvX21tcHV0X2FzeW5jKHNlbGYubW0ubW1nZXRfbm90X3plcm8oKS5va19vcihFU1JDSCk/KTtcbiAgICAgICAgIHtcbi0gICAgICAgICAgICBsZXQgdm1hX3JlYWQ7XG4tICAgICAgICAgICAgbGV0IG1tYXBfcmVhZDtcbi0gICAgICAgICAgICBsZXQgdm1hID0gaWYgbGV0IFNvbWUocmV0KSA9IG1tLmxvY2tfdm1hX3VuZGVyX3JjdSh2bWFfYWRkcikge1xuLSAgICAgICAgICAgICAgICB2bWFfcmVhZCA9IHJldDtcbi0gICAgICAgICAgICAgICAgY2hlY2tfdm1hKFx1MDAyNnZtYV9yZWFkLCBzZWxmKVxuLSAgICAgICAgICAgIH0gZWxzZSB7XG4tICAgICAgICAgICAgICAgIG1tYXBfcmVhZCA9IG1tLm1tYXBfcmVhZF9sb2NrKCk7XG4tICAgICAgICAgICAgICAgIG1tYXBfcmVhZFxuLSAgICAgICAgICAgICAgICAgICAgLnZtYV9sb29rdXAodm1hX2FkZHIpXG4tICAgICAgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHZtYXwgY2hlY2tfdm1hKHZtYSwgc2VsZikpXG4tICAgICAgICAgICAgfTtcbi1cbi0gICAgICAgICAgICBtYXRjaCB2bWEge1xuLSAgICAgICAgICAgICAgICBTb21lKHZtYSkgPVx1MDAzZSB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsIFx1MDAyNm5ld19wYWdlKT8sXG4tICAgICAgICAgICAgICAgIE5vbmUgPVx1MDAzZSByZXR1cm4gRXJyKEVTUkNIKSxcbi0gICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgIGxldCB2bWFfcmVhZF9ndWFyZCA9IG1tLnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHZtYV9hZGRyKS5va19vcihFU1JDSCk/O1xuJiM0MzsgICAgICAgICAgICBsZXQgdm1hID0gY2hlY2tfdm1hKFx1MDAyNnZtYV9yZWFkX2d1YXJkLCBzZWxmKS5va19vcihFU1JDSCk/O1xuJiM0MzsgICAgICAgICAgICB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsIFx1MDAyNm5ld19wYWdlKT87XG4gICAgICAgICB9XG4gXG4gICAgICAgICBsZXQgaW5uZXIgPSBzZWxmLmxvY2subG9jaygpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuY1xuaW5kZXggZTQ0ODhhZDg2YTY1NS4uNTE5ZGNkZWQxOWIyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jXG5AQCAtMjU5LDIxICYjNDM7MjU5LDE0IEBAIHN0YXRpYyBpbnQgYmluZGVyX3BhZ2VfaW5zZXJ0KHN0cnVjdCBiaW5kZXJfYWxsb2MgKmFsbG9jLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgcmV0ID0gLUVTUkNIO1xuIFxuLVx0LyogYXR0ZW1wdCBwZXItdm1hIGxvY2sgZmlyc3QgKi9cbi1cdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4tXHRpZiAodm1hKSB7XG4tXHRcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbi1cdFx0XHRyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpO1xuLVx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiYjNDM7XHR2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcik7XG4mIzQzO1x0aWYgKCF2bWEpXG4gXHRcdHJldHVybiByZXQ7XG4tXHR9XG4gXG4tXHQvKiBmYWxsIGJhY2sgdG8gbW1hcF9sb2NrICovXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbi1cdGlmICh2bWEgXHUwMDI2XHUwMDI2IGJpbmRlcl9hbGxvY19pc19tYXBwZWQoYWxsb2MpKVxuJiM0MztcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbiBcdFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiM0MztcbiYjNDM7XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTExNDIsNyAmIzQzOzExMzUsNiBAQCBlbnVtIGxydV9zdGF0dXMgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZV90b19mcmVlO1xuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2FkZHI7XG4tXHRpbnQgbW1fbG9ja2VkID0gMDtcbiBcdHNpemVfdCBpbmRleDtcbiBcbiBcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxuQEAgLTExNTEsMTQgJiM0MzsxMTQzLDIwIEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gXHRpbmRleCA9IG1kYXRhLVx1MDAzZXBhZ2VfaW5kZXg7XG4gXHRwYWdlX2FkZHIgPSBhbGxvYy1cdTAwM2V2bV9zdGFydCAmIzQzOyBpbmRleCAqIFBBR0VfU0laRTtcbiBcbi1cdC8qIGF0dGVtcHQgcGVyLXZtYSBsb2NrIGZpcnN0ICovXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBdHRlbXB0IHBlci12bWEgbG9jay4gVGhpcyBpcyBlc3NlbnRpYWxseSBhXG4mIzQzO1x0ICogXCYjMzQ7dHJ5bG9ja1wmIzM0Oy4gSXQgY2FuIGZhaWwgZXZlbiBpZiB0aGUgVk1BIGV4aXN0c1xuJiM0MztcdCAqIGZvciAmIzM5O3BhZ2VfYWRkciYjMzk7LlxuJiM0MztcdCAqL1xuIFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBwYWdlX2FkZHIpO1xuIFx0aWYgKCF2bWEpIHtcbi1cdFx0LyogZmFsbCBiYWNrIHRvIG1tYXBfbG9jayAqL1xuLVx0XHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKG1tKSlcbi1cdFx0XHRnb3RvIGVycl9tbWFwX3JlYWRfbG9ja19mYWlsZWQ7XG4tXHRcdG1tX2xvY2tlZCA9IDE7XG4tXHRcdHZtYSA9IHZtYV9sb29rdXAobW0sIHBhZ2VfYWRkcik7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIHZtYSBleGlzdHMsIHdlIGNhbiYjMzk7dCBjb250aW51ZSBiZWNhdXNlIHdlIGNhbm5vdFxuJiM0MztcdFx0ICogcmVtb3ZlIHRoZSBwYWdlIGZyb20gdGhlIHZtYS4gSG93ZXZlciwgaWYgdGhlIHZtYSB3YXNcbiYjNDM7XHRcdCAqIHVubWFwcGVkLCBpdCYjMzk7cyBva2F5IHRvIGNvbnRpbnVlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3ZtYV9sb2NrX2ZhaWxlZDtcbiBcdH1cbiBcbiBcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZhbGxvYy1cdTAwM2VtdXRleCkpXG5AQCAtMTE5MSw5ICYjNDM7MTE4OSw3IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWxsb2MtXHUwMDNlbXV0ZXgpO1xuLVx0aWYgKG1tX2xvY2tlZClcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRlbHNlXG4mIzQzO1x0aWYgKHZtYSlcbiBcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRtbXB1dF9hc3luYyhtbSk7XG4gXHRiaW5kZXJfZnJlZV9wYWdlKHBhZ2VfdG9fZnJlZSk7XG5AQCAtMTIwMywxMSAmIzQzOzExOTksOSBAQCBlbnVtIGxydV9zdGF0dXMgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIGVycl9pbnZhbGlkX3ZtYTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZhbGxvYy1cdTAwM2VtdXRleCk7XG4gZXJyX2dldF9hbGxvY19tdXRleF9mYWlsZWQ6XG4tXHRpZiAobW1fbG9ja2VkKVxuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAodm1hKVxuIFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbi1lcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkOlxuJiM0MztlcnJfdm1hX2xvY2tfZmFpbGVkOlxuIFx0bW1wdXRfYXN5bmMobW0pO1xuIGVycl9tbWdldDpcbiBcdHJldHVybiBMUlVfU0tJUDtcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2ludGVybmFsLmggYi9mcy9wcm9jL2ludGVybmFsLmhcbmluZGV4IGIyMzJlMTA5ODExN2IuLjY3MTM3NTdkYTA5OTIgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvaW50ZXJuYWwuaFxuQEAgLTM4NSwxMCAmIzQzOzM4NSw4IEBAIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cztcbiBcbiBzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4IHtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHRib29sIG1tYXBfbG9ja2VkO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrZWRfdm1hO1xuLSNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHByb2NfbWFwc19wcml2YXRlIHtcbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IDgxN2UzZTBmOTE5NDMuLjA5NmJmMGIwYjllMGUgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTEzMCw4ICYjNDM7MTMwLDYgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV90YXNrX21lbXBvbGljeShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gfVxuICNlbmRpZlxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4tXG4gc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0aW50IHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbkBAIC0yMzMsNDYgJiM0MzsyMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHR2bWFfaXRlcl9zZXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBwcml2LVx1MDAzZWxvY2tfY3R4LmxvY2tlZF92bWEtXHUwMDNldm1fZW5kKTtcbiB9XG4gXG4tI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgaW50IGxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJldHVybiBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC1cdTAwM2VtbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXHUwMDNlbW0pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRyZXR1cm4gbG9ja19jdHhfbW0obG9ja19jdHgpID09IDA7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfdm1hX3JhbmdlKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuLVx0XHRcdFx0XHQgICBsb2ZmX3QgbGFzdF9wb3MpXG4te1xuLVx0cmV0dXJuIHZtYV9uZXh0KFx1MDAyNnByaXYtXHUwMDNlaXRlcik7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuLVx0XHRcdFx0XHQgbG9mZl90IHBvcylcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpIHt9XG4tc3RhdGljIGlubGluZSB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KSB7fVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbkBAIC01NjAsOCAmIzQzOzUxOCw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0UFJPQ01BUF9RVUVSWV9WTUFfRkxBR1NcdFx0XHRcdFxcXG4gKVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4tXG4gc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xuQEAgLTYxMiwyNiAmIzQzOzU2OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0XG4gXHRyZXR1cm4gdm1hO1xuIH1cbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0cmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXHUwMDNlbW0pO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LFxuLVx0XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdHJldHVybiBmaW5kX3ZtYShsb2NrX2N0eC1cdTAwM2VtbSwgYWRkcik7XG4tfVxuLVxuLSNlbmRpZiAgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X21hdGNoaW5nX3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCxcbiBcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgZmxhZ3MpXG4ge1xuQEAgLTEzMTQsOCAmIzQzOzEyNTAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfb3BzID0ge1xuIFx0LndhbGtfbG9ja1x0XHQ9IFBHV0FMS19SRExPQ0ssXG4gfTtcbiBcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfd2Fsa192bWFfbG9ja19vcHMgPSB7XG4gXHQucG1kX2VudHJ5XHRcdD0gc21hcHNfcHRlX3JhbmdlLFxuIFx0Lmh1Z2V0bGJfZW50cnlcdFx0PSBzbWFwc19odWdldGxiX3JhbmdlLFxuQEAgLTEzNDUsMjIgJiM0MzsxMjc5LDYgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiBcdTAwMjZzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcztcbiB9XG4gXG4tI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbi1nZXRfc21hcHNfd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuLXtcbi1cdHJldHVybiBcdTAwMjZzbWFwc193YWxrX29wcztcbi19XG4tXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuLWdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4te1xuLVx0cmV0dXJuIFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfb3BzO1xuLX1cbi1cbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuIC8qXG4gICogR2F0aGVyIG1lbSBzdGF0cyBmcm9tIEB2bWEgd2l0aCB0aGUgaW5kaWNhdGVkIGJlZ2lubmluZ1xuICAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuXG5AQCAtMzQ5Nyw3ICYjNDM7MzQxNSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX29wcyA9IHtcbiBcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuIH07XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNob3dfbnVtYV92bWFfbG9ja19vcHMgPSB7XG4gXHQuaHVnZXRsYl9lbnRyeSA9IGdhdGhlcl9odWdldGxiX3N0YXRzLFxuIFx0LnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHMsXG5AQCAtMzUxMiwxNiAmIzQzOzM0MjksNiBAQCBnZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gXHUwMDI2c2hvd19udW1hX3ZtYV9sb2NrX29wcztcbiB9XG4gXG4tI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbi1nZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4te1xuLVx0cmV0dXJuIFx1MDAyNnNob3dfbnVtYV9vcHM7XG4tfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4gLypcbiAgKiBEaXNwbGF5IHBhZ2VzIGFsbG9jYXRlZCBwZXIgbm9kZSBhbmQgbWVtb3J5IHBvbGljeSB2aWEgL3Byb2MuXG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA3ZmFiZTZjNjZiNGI3Li5kOTg1MGY4NDYyNDI3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC05MzEsNyAmIzQzOzkzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbnVtYWJfc3RhdGVfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbiAgKiBUaGVzZSBtdXN0IGJlIGhlcmUgcmF0aGVyIHRoYW4gbW1hcF9sb2NrLmggYXMgZGVwZW5kZW50IG9uIHZtX2ZhdWx0IHR5cGUsXG4gICogZGVjbGFyZWQgaW4gdGhpcyBoZWFkZXIuXG4gICovXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIHtcbiBcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spXG5AQCAtOTQ3LDE3ICYjNDM7OTQ2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9mYXVsdF9sb2NrZWQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRlbHNlXG4gXHRcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sodm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfZmF1bHRfbG9ja2VkKGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLXtcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbi19XG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fZmxhZ3NfdGVzdChpbnQgZmxhZywgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggYjVkNGNkM2IwNjdiZi4uZDhlMjQ2ZmQwOWQzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtOTUwLDcgJiM0Mzs5NTAsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0XHR2bWFfZmxhZ3NfdCBmbGFncztcbiBcdH07XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC8qXG4gXHQgKiBDYW4gb25seSBiZSB3cml0dGVuICh1c2luZyBXUklURV9PTkNFKCkpIHdoaWxlIGhvbGRpbmcgYm90aDpcbiBcdCAqICAtIG1tYXBfbG9jayAoaW4gd3JpdGUgbW9kZSlcbkBAIC05NjYsNyAmIzQzOzk2NSw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XG4gXHQgKiBzbG93cGF0aC5cbiBcdCAqL1xuIFx0dW5zaWduZWQgaW50IHZtX2xvY2tfc2VxO1xuLSNlbmRpZlxuJiM0MztcbiBcdC8qXG4gXHQgKiBMb3cgMzItYml0cyBvZiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0LlxuIFx0ICogU2VlIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgY29tbWVudCBmb3IgZGV0YWlscy5cbkBAIC0xMDAzLDcgJiM0MzsxMDAyLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4gXHRzdHJ1Y3Qgdm1hX251bWFiX3N0YXRlICpudW1hYl9zdGF0ZTtcdC8qIE5VTUEgQmFsYW5jaW5nIHN0YXRlICovXG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC8qXG4gXHQgKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZmlyc3RseSwgd2hldGhlciB0aGUgVk1BIGlzIGF0dGFjaGVkLCBzZWNvbmRseSxcbiBcdCAqIGlmIGF0dGFjaGVkLCBob3cgbWFueSByZWFkIGxvY2tzIGFyZSB0YWtlbiwgYW5kIHRoaXJkbHksIGlmIHRoZVxuQEAgLTEwNDYsNyAmIzQzOzEwNDQsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xuIFx0c3RydWN0IGxvY2tkZXBfbWFwIHZtbG9ja19kZXBfbWFwO1xuICNlbmRpZlxuLSNlbmRpZlxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdC8qXG4gXHQgKiBIaWdoIDMyLWJpdHMgb2YgdmlydHVhbCBwYWdlIG9mZnNldC5cbkBAIC0xMjU0LDcgJiM0MzsxMjUxLDYgQEAgc3RydWN0IG1tX3N0cnVjdCB7XG4gXHRcdFx0XHRcdCAgKiBpbml0X21tLm1tbGlzdCwgYW5kIGFyZSBwcm90ZWN0ZWRcbiBcdFx0XHRcdFx0ICAqIGJ5IG1tbGlzdF9sb2NrXG4gXHRcdFx0XHRcdCAgKi9cbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRzdHJ1Y3QgcmN1d2FpdCB2bWFfd3JpdGVyX3dhaXQ7XG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgZmllbGQgaGFzIGxvY2stbGlrZSBzZW1hbnRpY3MsIG1lYW5pbmcgaXQgaXMgc29tZXRpbWVzXG5AQCAtMTI3NCw3ICYjNDM7MTI3MCw3IEBAIHN0cnVjdCBtbV9zdHJ1Y3Qge1xuIFx0XHQgKiBtbWFwX2xvY2suXG4gXHRcdCAqL1xuIFx0XHRzZXFjb3VudF90IG1tX2xvY2tfc2VxO1xuLSNlbmRpZlxuJiM0MztcbiBcdFx0c3RydWN0IGZ1dGV4X21tX2RhdGFcdGZ1dGV4O1xuIFxuIFx0XHR1bnNpZ25lZCBsb25nIGhpd2F0ZXJfcnNzOyAvKiBIaWdoLXdhdGVybWFyayBvZiBSU1MgdXNhZ2UgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggODdmNzdlM2RhNzdmMC4uZmRkOGY1Y2Y1NzIyMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC03Niw4ICYjNDM7NzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0cndzZW1fYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2bW0tXHUwMDNlbW1hcF9sb2NrKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAjZGVmaW5lIF9fdm1hX2xvY2tkZXBfbWFwKHZtYSkgKFx1MDAyNnZtYS1cdTAwM2V2bWxvY2tfZGVwX21hcClcbiAjZWxzZVxuQEAgLTIzMCwxMCAmIzQzOzIyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3JlZmNvdW50X3B1dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB9XG4gXG4gLypcbi0gKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBsb2NraW5nIHdpbGwgbm90XG4tICogZmFpbCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcbiYjNDM7ICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdm1hIGxvY2sgaXMgbm90XG4mIzQzOyAqIGNvbnRlbmRlZCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcbiAgKiBub3QgYmUgdXNlZCBpbiBzdWNoIGNhc2VzIGJlY2F1c2UgaXQgbWlnaHQgZmFpbCBkdWUgdG8gbW1fbG9ja19zZXEgb3ZlcmZsb3cuXG4gICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgdG8gb2J0YWluIHZtYSByZWFkIGxvY2sgYW5kIGRyb3AgdGhlIG1tYXAgcmVhZCBsb2NrLlxuJiM0MzsgKiBWTUEgY2FuJiMzOTt0IGJlIGRldGFjaGVkIHdoaWxlIHdlIGFyZSBob2xkaW5nIG1tYXAgbG9jaywgdGhlcmVmb3JlIGluIHByYWN0aWNlIHRoaXNcbiYjNDM7ICogZnVuY3Rpb24gY2FuIGZhaWwgb25seSB3aGVuIHRoZXJlIGFyZSBzbyBtYW55IHJlYWRlcnMgdGhhdCB2bV9yZWZjbnQgb3ZlcmZsb3dzLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgc3ViY2xhc3MpXG4ge1xuQEAgLTI0OSwxNiAmIzQzOzI0OSwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkX25lc3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50XG4gfVxuIFxuIC8qXG4tICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgbG9ja2luZyB3aWxsIG5vdFxuLSAqIGZhaWwgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXG4mIzQzOyAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHZtYSBsb2NrIGlzIG5vdFxuJiM0MzsgKiBjb250ZW5kZWQgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXG4gICogbm90IGJlIHVzZWQgaW4gc3VjaCBjYXNlcyBiZWNhdXNlIGl0IG1pZ2h0IGZhaWwgZHVlIHRvIG1tX2xvY2tfc2VxIG92ZXJmbG93LlxuICAqIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1c2VkIHRvIG9idGFpbiB2bWEgcmVhZCBsb2NrIGFuZCBkcm9wIHRoZSBtbWFwIHJlYWQgbG9jay5cbiYjNDM7ICogVk1BIGNhbiYjMzk7dCBiZSBkZXRhY2hlZCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBtbWFwIGxvY2ssIHRoZXJlZm9yZSBpbiBwcmFjdGljZSB0aGlzXG4mIzQzOyAqIGZ1bmN0aW9uIGNhbiBmYWlsIG9ubHkgd2hlbiB0aGVyZSBhcmUgc28gbWFueSByZWFkZXJzIHRoYXQgdm1fcmVmY250IG92ZXJmbG93cy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHZtYSwgMCk7XG4gfVxuIFxuJiM0MztzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZW5kX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0dm1hX3JlZmNvdW50X3B1dCh2bWEpO1xuQEAgLTQ4NCw1NCAmIzQzOzQ4OSw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19uZXh0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHZtYV9pdGVyYXRvciAqaXRlcixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGlubGluZSB2b2lkIG1tX2xvY2tfc2VxY291bnRfaW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9iZWdpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9lbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9XG4tXG4tc3RhdGljIGlubGluZSBib29sIG1tYXBfbG9ja19zcGVjdWxhdGVfdHJ5X2JlZ2luKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgKnNlcSlcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtbWFwX2xvY2tfc3BlY3VsYXRlX3JldHJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgc2VxKVxuLXtcbi1cdHJldHVybiB0cnVlO1xuLX1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2xvY2tfaW5pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCByZXNldF9yZWZjbnQpIHt9XG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9lbmRfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX3N0YXJ0X3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrXG4taW50IHZtYV9zdGFydF93cml0ZV9raWxsYWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkgeyByZXR1cm4gMDsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi1cdFx0eyBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTsgfVxuLXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYXR0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tXHRcdHsgcmV0dXJuIHRydWU7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9kZXRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX21hcmtfYXR0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9tYXJrX2RldGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9zdGFiaWxpc2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdC8qIElmIG5vIFZNQSBsb2NrcywgdGhlbiBlaXRoZXIgbW1hcCBsb2NrIHN1ZmZpY2VzIHRvIHN0YWJpbGlzZS4gKi9cbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuLX1cbi1cbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2Nhbl9tb2RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aWYgKHZtYV9pc19hdHRhY2hlZCh2bWEpKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuaW5kZXggNDFmZTg3ZDczMDJmMi4uODg0OGUyNmVmNTgxMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5AQCAtMjcyLDEzICYjNDM7MjcyLDggQEAgc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayB7XG4gLypcbiAgKiBBY3F1aXJlIGEgc3RhYmxlIHJlYWQtc2lkZSByZWZlcmVuY2Ugb24gdGhlIFZNQSBjb3ZlcmluZyBAaXAuXG4gICpcbi0gKiBXaXRoIENPTkZJR19QRVJfVk1BX0xPQ0s9eSB0aGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkXG4tICogbG9jayBoZWxkIGFuZCBtbWFwX2xvY2sgZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuXG4tICpcbi0gKiBXaXRoIENPTkZJR19QRVJfVk1BX0xPQ0s9biBpdCByZXR1cm5zIGEgVk1BIHdpdGggbW1hcF9sb2NrIHN0aWxsXG4tICogaGVsZDsgdGhlIGNhbGxlciBtdXN0IHNuYXBzaG90IGFueSBmaWVsZHMgaXQgbmVlZHMgYW5kIHBpbiB2bV9maWxlXG4tICogd2l0aCBnZXRfZmlsZSgpIGJlZm9yZSBzdGFja19tYXBfdW5sb2NrX3ZtYSgpIGRyb3BzIG1tYXBfbG9jaywgYXNcbi0gKiB0aGUgVk1BIG1heSBiZSBzcGxpdCwgbWVyZ2VkLCBvciBmcmVlZCBhZnRlciB0aGF0LlxuJiM0MzsgKiBUaGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkIGxvY2sgaGVsZCBhbmQgbW1hcF9sb2NrXG4mIzQzOyAqIGRyb3BwZWQsIHNvIHRoZSBjYWxsZXIgbWF5IHNsZWVwLlxuICAqXG4gICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2Ugbm8gbG9jayBpcyBoZWxkLlxuICAqL1xuQEAgLTI4OCw3ICYjNDM7MjgzLDYgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2stXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcbi1cdC8qIG5vb3AgdW5kZXIgIUNPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgaXApO1xuIFx0aWYgKHZtYSkge1xuIFx0XHRsb2NrLVx1MDAzZXZtYSA9IHZtYTtcbkBAIC0zMDgsMTMgJiM0MzszMDIsMTEgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHRpZiAoIXZtYV9zdGFydF9yZWFkX2xvY2tlZCh2bWEpKSB7XG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLSNlbmRpZlxuIFxuIFx0bG9jay1cdTAwM2V2bWEgPSB2bWE7XG4gXHRyZXR1cm4gdm1hO1xuQEAgLTMyMiwxMSAmIzQzOzMxNCw3IEBAIHN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKVxuIFxuIHN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spXG4ge1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHR2bWFfZW5kX3JlYWQobG9jay1cdTAwM2V2bWEpO1xuLSNlbHNlXG4tXHRtbWFwX3JlYWRfdW5sb2NrKGxvY2stXHUwMDNlbW0pO1xuLSNlbmRpZlxuIFx0bG9jay1cdTAwM2V2bWEgPSBOVUxMO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jIGIva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuaW5kZXggZTc5MWFlMDY1YzM5Yi4uNmNmODE1YmM4NGJlZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcbkBAIC04MzUsMTEgJiM0Mzs4MzUsNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2l0ZXJfdGFza192bWFfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSAqaXQsXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYV9rZXJuKSAhPSBzaXplb2Yoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hKSk7XG4gXHRCVUlMRF9CVUdfT04oX19hbGlnbm9mX18oc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hX2tlcm4pICE9IF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSkpO1xuIFxuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QRVJfVk1BX0xPQ0spKSB7XG4tXHRcdGtpdC1cdTAwM2VkYXRhID0gTlVMTDtcbi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0fVxuLVxuIFx0LypcbiBcdCAqIFJlamVjdCBpcnFzLWRpc2FibGVkIGNvbnRleHRzIGluY2x1ZGluZyBOTUkuIE9wZXJhdGlvbnMgdXNlZFxuIFx0ICogYnkgX25leHQoKSBhbmQgX2Rlc3Ryb3koKSAodm1hX2VuZF9yZWFkLCBmcHV0LCBicGZfaXRlcl9tbXB1dF9hc3luYylcbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggZjBlMmUxMzFhOWE1YS4uZmY5MWY1ZjY2YzgwZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0xMDc3LDkgJiM0MzsxMDc3LDcgQEAgc3RhdGljIHZvaWQgbW1hcF9pbml0X2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0aW5pdF9yd3NlbShcdTAwMjZtbS1cdTAwM2VtbWFwX2xvY2spO1xuIFx0bW1fbG9ja19zZXFjb3VudF9pbml0KG1tKTtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0cmN1d2FpdF9pbml0KFx1MDAyNm1tLVx1MDAzZXZtYV93cml0ZXJfd2FpdCk7XG4tI2VuZGlmXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICptbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDA2MDE5MGUxMmJjZWQuLjc3MTAzYjQ2YjY3OTIgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnXG5AQCAtMTQyNSwxOSAmIzQzOzE0MjUsNiBAQCBjb25maWcgTFJVX0dFTl9TVEFUU1xuIGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuIFx0ZGVmX2Jvb2wgeVxuIFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbi0jIH1cbi1cbi1jb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbi0gICAgICAgZGVmX2Jvb2wgblxuLVxuLWNvbmZpZyBQRVJfVk1BX0xPQ0tcbi1cdGRlZl9ib29sIHlcbi1cdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4tXHRoZWxwXG4tXHQgIEFsbG93IHBlci12bWEgbG9ja2luZyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZy5cbi1cbi1cdCAgVGhpcyBmZWF0dXJlIGFsbG93cyBsb2NraW5nIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYSBzZXBhcmF0ZWx5IHdoZW5cbi1cdCAgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW5zdGVhZCBvZiB0YWtpbmcgbW1hcF9sb2NrLlxuIFxuIGNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcuZGVidWcgYi9tbS9LY29uZmlnLmRlYnVnXG5pbmRleCA1NzM3YTUwNGVmYmJlLi4xZGQxNTBlZGZlNzFjIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZy5kZWJ1Z1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZy5kZWJ1Z1xuQEAgLTMxMCw3ICYjNDM7MzEwLDYgQEAgY29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0VcbiBcbiBjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG4gXHRib29sIFwmIzM0O1N0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcJiMzNDtcbi1cdGRlcGVuZHMgb24gUEVSX1ZNQV9MT0NLXG4gXHRoZWxwXG4gXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1Y2Nlc3MsIHJldHJ5IGFuZCBmYWlsdXJlIGNvdW50ZXJzIG9mIHBhZ2VcbiBcdCAgZmF1bHRzIGhhbmRsZWQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZXItdm1hIGxvY2tzLiBXaGVuIGVuYWJsZWQsIHRoZVxuZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jXG5pbmRleCA5YTAyOTdiMzk4OGQ4Li42NTVlNmJjYzBlOGQ5IDEwMDY0NFxuLS0tIGEvbW0vZGVidWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWcuY1xuQEAgLTE1NywxNyAmIzQzOzE1NywxMyBAQCB2b2lkIGR1bXBfdm1hKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cHJfZW1lcmcoXCYjMzQ7dm1hICVweCBzdGFydCAlcHggZW5kICVweCBtbSAlcHhcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7cHJvdCAlbHggYW5vbl92bWEgJXB4IHZtX29wcyAlcHhcXG5cJiMzNDtcbiBcdFx0XCYjMzQ7cGdvZmYgJWx4IGZpbGUgJXB4IHByaXZhdGVfZGF0YSAlcHhcXG5cJiMzNDtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRcJiMzNDtyZWZjbnQgJXhcXG5cJiMzNDtcbi0jZW5kaWZcbiBcdFx0XCYjMzQ7ZmxhZ3M6ICUjbHgoJXBHdilcXG5cJiMzNDssXG4gXHRcdHZtYSwgKHZvaWQgKil2bWEtXHUwMDNldm1fc3RhcnQsICh2b2lkICopdm1hLVx1MDAzZXZtX2VuZCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHQodW5zaWduZWQgbG9uZylwZ3Byb3RfdmFsKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpLFxuIFx0XHR2bWEtXHUwMDNlYW5vbl92bWEsIHZtYS1cdTAwM2V2bV9vcHMsIHZtYV9zdGFydF9wZ29mZih2bWEpLFxuIFx0XHR2bWEtXHUwMDNldm1fZmlsZSwgdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRyZWZjb3VudF9yZWFkKFx1MDAyNnZtYS1cdTAwM2V2bV9yZWZjbnQpLFxuLSNlbmRpZlxuIFx0XHR2bWEtXHUwMDNldm1fZmxhZ3MsIFx1MDAyNnZtYS1cdTAwM2V2bV9mbGFncyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woZHVtcF92bWEpO1xuZGlmZiAtLWdpdCBhL21tL2luaXQtbW0uYyBiL21tL2luaXQtbW0uY1xuaW5kZXggM2U3OTJhYWQ3NjI2MS4uYTFiYjJjMmQwMjg0YSAxMDA2NDRcbi0tLSBhL21tL2luaXQtbW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW5pdC1tbS5jXG5AQCAtMzksMTAgJiM0MzszOSw4IEBAIHN0cnVjdCBtbV9zdHJ1Y3QgaW5pdF9tbSA9IHtcbiBcdC5wYWdlX3RhYmxlX2xvY2sgPSAgX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spLFxuIFx0LmFyZ19sb2NrXHQ9ICBfX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X21tLmFyZ19sb2NrKSxcbiBcdC5tbWxpc3RcdFx0PSBMSVNUX0hFQURfSU5JVChpbml0X21tLm1tbGlzdCksXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC52bWFfd3JpdGVyX3dhaXQgPSBfX1JDVVdBSVRfSU5JVElBTElaRVIoaW5pdF9tbS52bWFfd3JpdGVyX3dhaXQpLFxuIFx0Lm1tX2xvY2tfc2VxXHQ9IFNFUUNOVF9aRVJPKGluaXRfbW0ubW1fbG9ja19zZXEpLFxuLSNlbmRpZlxuICNpZmRlZiBDT05GSUdfU0NIRURfTU1fQ0lEXG4gXHQubW1fY2lkLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5tbV9jaWQubG9jayksXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYTYyMGQ0MjVlYzk1ZS4uZjEwOWY2Yzg3YjI4YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTY4MTMsNyAmIzQzOzY4MTMsNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBzYW5pdGl6ZV9mYXVsdF9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdCAhaXNfY293X21hcHBpbmcodm1hLVx1MDAzZXZtX2ZsYWdzKSkpXG4gXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4gXHR9XG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC8qXG4gXHQgKiBQZXItVk1BIGxvY2tzIGNhbiYjMzk7dCBiZSB1c2VkIHdpdGggRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgYmVjYXVzZSBvZlxuIFx0ICogdGhlIGFzc3VtcHRpb24gdGhhdCBsb2NrIGlzIGRyb3BwZWQgb24gVk1fRkFVTFRfUkVUUlkuXG5AQCAtNjgyMiw3ICYjNDM7NjgyMSw2IEBAIHN0YXRpYyB2bV9mYXVsdF90IHNhbml0aXplX2ZhdWx0X2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdChGQVVMVF9GTEFHX1ZNQV9MT0NLIHwgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKSA9PVxuIFx0XHRcdChGQVVMVF9GTEFHX1ZNQV9MT0NLIHwgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKSlcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4tI2VuZGlmXG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vbW1hcF9sb2NrLmMgYi9tbS9tbWFwX2xvY2suY1xuaW5kZXggODk4YzJlZjFlOTU4MC4uNmZmMDVlNjhlNjFiZSAxMDA2NDRcbi0tLSBhL21tL21tYXBfbG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbWFwX2xvY2suY1xuQEAgLTQzLDkgJiM0Mzs0Myw2IEBAIHZvaWQgX19tbWFwX2xvY2tfZG9fdHJhY2VfcmVsZWFzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGJvb2wgd3JpdGUpXG4gRVhQT1JUX1NZTUJPTChfX21tYXBfbG9ja19kb190cmFjZV9yZWxlYXNlZCk7XG4gI2VuZGlmIC8qIENPTkZJR19UUkFDSU5HICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuLVxuIC8qIFN0YXRlIHNoYXJlZCBhY3Jvc3MgX192bWFfW3N0YXJ0LCBlbmRdX2V4Y2x1ZGVfcmVhZGVycy4gKi9cbiBzdHJ1Y3Qgdm1hX2V4Y2x1ZGVfcmVhZGVyc19zdGF0ZSB7XG4gXHQvKiBJbnB1dCBwYXJhbWV0ZXJzLiAqL1xuQEAgLTM0MSw2ICYjNDM7MzM4LDM1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja192bWFfdW5kZXJfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTsgYW5kIGxvY2sgaXQgZm9yIHJlYWRpbmcuIFdhaXRzIGZvciB3cml0ZXJzIHRvXG4mIzQzOyAqIGZpbmlzaCBpZiB0aGUgVk1BIGlzIGJlaW5nIG1vZGlmaWVkLiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm8gVk1BIGNvdmVyaW5nXG4mIzQzOyAqICYjMzk7YWRkcmVzcyYjMzk7LlxuJiM0MzsgKlxuJiM0MzsgKiBVc2Ugb25seSBpbiBjb2RlIHBhdGhzIHdoZXJlIG5vIG1tYXBfbG9jayBhbmQgbm8gVk1BIGxvY2sgaXMgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGZhc3QgcGF0aCBkb2VzIG5vdCB0YWtlIG1tYXBfbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4mIzQzO1xuJiM0MztcdC8qIEZhc3QgcGF0aDogcmV0dXJuIHN0YWJsZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTs6ICovXG4mIzQzO1x0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiYjNDM7XHRpZiAodm1hKVxuJiM0MztcdFx0cmV0dXJuIHZtYTtcbiYjNDM7XG4mIzQzO1x0LyogU2xvdyBwYXRoOiBwcmVjbHVkZSBWTUEgd3JpdGVycyBieSB0ZW1wb3JhcmlseSBnZXR0aW5nIG1tYXAgcmVhZCBsb2NrLiAqL1xuJiM0MztcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbiYjNDM7XHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbiYjNDM7XHRpZiAodm1hIFx1MDAyNlx1MDAyNiAhdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHZtYSkpXG4mIzQzO1x0XHR2bWEgPSBOVUxMO1xuJiM0MztcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdm1hO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfbmV4dF92bWFfdW5kZXJfbW1hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbiBcdFx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZyb21fYWRkcilcbkBAIC00MzEsNyAmIzQzOzQ1Nyw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19uZXh0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcbiBcdHJldHVybiB2bWE7XG4gfVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4gXG4gI2lmZGVmIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4dGFibGUuaFx1MDAzZVxuQEAgLTU0OCwyMyAmIzQzOzU3MywzIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQSAqL1xuLVxuLSNlbHNlIC8qIENPTkZJR19NTVUgKi9cbi1cbi0vKlxuLSAqIEF0IGxlYXN0IHh0ZW5zYSBlbmRzIHVwIGhhdmluZyBwcm90ZWN0aW9uIGZhdWx0cyBldmVuIHdpdGggbm9cbi0gKiBNTVUuLiBObyBzdGFjayBleHBhbnNpb24sIGF0IGxlYXN0LlxuLSAqL1xuLXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi17XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0aWYgKCF2bWEpXG4tXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0cmV0dXJuIHZtYTtcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggZWQ0ODYwYzAxOTM2Yy4uZmJjZjY0YzU5YTk3MyAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2V3YWxrLmNcbkBAIC00NDYsNyAmIzQzOzQ0Niw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX21tX3dhbGtfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2spXG4ge1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHRzd2l0Y2ggKHdhbGtfbG9jaykge1xuIFx0Y2FzZSBQR1dBTEtfV1JMT0NLOlxuIFx0XHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcbkBAIC00NjEsNyAmIzQzOzQ2MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFBHV0FMS19SRExPQ0sgaXMgaGFuZGxlZCBieSBwcm9jZXNzX21tX3dhbGtfbG9jayAqL1xuIFx0XHRicmVhaztcbiBcdH1cbi0jZW5kaWZcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IGI5MTc0MzE3NTllZTAuLjRlNGE0Yjc0Nzk3NzIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTI2MCwxMSAmIzQzOzI2MCw5IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2Fub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxuIFx0LyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi9cbiBcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gPT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LyogT25seSBtZXJnaW5nIGFuIHVuZmF1bHRlZCBWTUEgbGVhdmVzIHRoZSBkZXN0aW5hdGlvbiBhdHRhY2hlZC4gKi9cbiBcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiBcdFx0XHR2bWFfaXNfYXR0YWNoZWQoZHN0KSk7XG4tI2VuZGlmXG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1heWJlX3JldXNlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCAyNThiMDMxODJhNzgwLi5jM2EwYzM4YTNkYzNiIDEwMDY0NFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuY1xuQEAgLTEyMiw3ICYjNDM7MTIyLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIHZtYTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiAvKlxuICAqIHVmZmRfbG9ja192bWEoKSAtIExvb2t1cCBhbmQgbG9jayB2bWEgY29ycmVzcG9uZGluZyB0byBAYWRkcmVzcy5cbiAgKiBAbW06IG1tIHRvIHNlYXJjaCB2bWEgaW4uXG5AQCAtMTMwLDggJiM0MzsxMjksMTAgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuICAqXG4gICogU2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbW1hcF9sb2NrLlxuICAqXG4tICogUmV0dXJuOiBBIGxvY2tlZCB2bWEgY29udGFpbmluZyBAYWRkcmVzcywgLUVOT0VOVCBpZiBubyB2bWEgaXMgZm91bmQsIG9yXG4tICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4mIzM5O3QgYmUgYWxsb2NhdGVkLlxuJiM0MzsgKiBSZXR1cm46IEEgbG9ja2VkIHZtYSBjb250YWluaW5nIEBhZGRyZXNzLCAtRU5PRU5UIGlmIG5vIHZtYSBpcyBmb3VuZCxcbiYjNDM7ICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4mIzM5O3QgYmUgYWxsb2NhdGVkLCBvciAtRUFHQUlOIGlmIHZtYSByZWZjb3VudFxuJiM0MzsgKiBvdmVyZmxvdyBoYXBwZW5lZCBkdWUgdG8gaGlnaCBudW1iZXIgb2YgcmVhZGVycyBhbmQgdGhlIGNhbGxlciBzaG91bGRcbiYjNDM7ICogcmV0cnkgbGF0ZXIuXG4gICovXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdWZmZF9sb2NrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG5AQCAtMTgyLDM0ICYjNDM7MTgzLDYgQEAgc3RhdGljIHZvaWQgdWZmZF9tZmlsbF91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHR2bWFfZW5kX3JlYWQodm1hKTtcbiB9XG4gXG4tI2Vsc2Vcbi1cbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp1ZmZkX21maWxsX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLFxuLVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXG4te1xuLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hO1xuLVxuLVx0bW1hcF9yZWFkX2xvY2soZHN0X21tKTtcbi1cdGRzdF92bWEgPSBmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKGRzdF9tbSwgZHN0X3N0YXJ0KTtcbi1cdGlmIChJU19FUlIoZHN0X3ZtYSkpXG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cbi1cdGlmICh2YWxpZGF0ZV9kc3Rfdm1hKGRzdF92bWEsIGRzdF9zdGFydCAmIzQzOyBsZW4pKVxuLVx0XHRyZXR1cm4gZHN0X3ZtYTtcbi1cbi1cdGRzdF92bWEgPSBFUlJfUFRSKC1FTk9FTlQpO1xuLW91dF91bmxvY2s6XG4tXHRtbWFwX3JlYWRfdW5sb2NrKGRzdF9tbSk7XG4tXHRyZXR1cm4gZHN0X3ZtYTtcbi19XG4tXG4tc3RhdGljIHZvaWQgdWZmZF9tZmlsbF91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4te1xuLVx0bW1hcF9yZWFkX3VubG9jayh2bWEtXHUwMDNldm1fbW0pO1xuLX1cbi0jZW5kaWZcbi1cbiBzdGF0aWMgdm9pZCBtZmlsbF9wdXRfdm1hKHN0cnVjdCBtZmlsbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aWYgKCFzdGF0ZS1cdTAwM2V2bWEpXG5AQCAtMTg1Miw3ICYjNDM7MTgyNSw2IEBAIGludCBmaW5kX3ZtYXNfbW1fbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gc3RhdGljIGludCB1ZmZkX21vdmVfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsXG5AQCAtMTkyNywzMSAmIzQzOzE4OTksNiBAQCBzdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbiBcdFx0dm1hX2VuZF9yZWFkKGRzdF92bWEpO1xuIH1cbiBcbi0jZWxzZVxuLVxuLXN0YXRpYyBpbnQgdWZmZF9tb3ZlX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LFxuLVx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqZHN0X3ZtYXAsXG4tXHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipzcmNfdm1hcClcbi17XG4tXHRpbnQgZXJyO1xuLVxuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0ZXJyID0gZmluZF92bWFzX21tX2xvY2tlZChtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIGRzdF92bWFwLCBzcmNfdm1hcCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLVx0XHRcdCAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKVxuLXtcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZChzcmNfdm1hLVx1MDAzZXZtX21tKTtcbi1cdG1tYXBfcmVhZF91bmxvY2soZHN0X3ZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLSNlbmRpZlxuLVxuIC8qKlxuICAqIG1vdmVfcGFnZXMgLSBtb3ZlIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgb2YgYW4gZXhpc3Rpbmcgdm1hXG4gICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDQ1NTQ0MWYxYjY5NDkuLjYyZGVmZTcwZjNjZWIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0yMTY3LDI3ICYjNDM7MjE2NywxOCBAQCBzdGF0aWMgdm9pZCB0Y3BfemNfZmluYWxpemVfcnhfdHN0YW1wKHN0cnVjdCBzb2NrICpzayxcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdFx0XHRcdCAgIGJvb2wgKm1tYXBfbG9ja2VkKVxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyZXNzKTtcbiBcbi1cdGlmICh2bWEpIHtcbi1cdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuLVx0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdCptbWFwX2xvY2tlZCA9IGZhbHNlO1xuLVx0XHRyZXR1cm4gdm1hO1xuLVx0fVxuJiM0MztcdGlmICghdm1hKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbi1cdGlmICghdm1hIHx8IHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiYjNDM7XHRpZiAodm1hLVx1MDAzZXZtX29wcyAhPSBcdTAwMjZ0Y3Bfdm1fb3BzKSB7XG4mIzQzO1x0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4tXHQqbW1hcF9sb2NrZWQgPSB0cnVlO1xuJiM0MztcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuQEAgLTIyMDgsNyAmIzQzOzIxOTksNiBAQCBzdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcbiBcdHUzMiBzZXEgPSB0cC1cdTAwM2Vjb3BpZWRfc2VxO1xuIFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcDtcbiBcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcbi1cdGJvb2wgbW1hcF9sb2NrZWQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0emMtXHUwMDNlY29weWJ1Zl9sZW4gPSAwO1xuQEAgLTIyMzMsNyAmIzQzOzIyMjMsNyBAQCBzdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHR2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC1cdTAwM2VtbSwgYWRkcmVzcywgXHUwMDI2bW1hcF9sb2NrZWQpO1xuJiM0MztcdHZtYSA9IGZpbmRfdGNwX3ZtYShjdXJyZW50LVx1MDAzZW1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0yMzE1LDEwICYjNDM7MjMwNSw3IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHRcdCAgIHpjLCB0b3RhbF9ieXRlc190b19tYXApO1xuIFx0fVxuIG91dDpcbi1cdGlmIChtbWFwX2xvY2tlZClcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhjdXJyZW50LVx1MDAzZW1tKTtcbi1cdGVsc2Vcbi1cdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4mIzQzO1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHQvKiBUcnkgdG8gY29weSBzdHJhZ2dsZXIgZGF0YS4gKi9cbiBcdGlmICghcmV0KVxuIFx0XHRjb3B5bGVuID0gdGNwX3pjX2hhbmRsZV9sZWZ0b3Zlcih6Yywgc2ssIHNrYiwgXHUwMDI2c2VxLCBjb3B5YnVmX2xlbiwgdHNzKTtcbmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9tbS5ycyBiL3J1c3Qva2VybmVsL21tLnJzXG5pbmRleCA0NzY0ZDdiNjhmMmE3Li44NzdmYWQ2OGJlOWMzIDEwMDY0NFxuLS0tIGEvcnVzdC9rZXJuZWwvbW0ucnNcbiYjNDM7JiM0MzsmIzQzOyBiL3J1c3Qva2VybmVsL21tLnJzXG5AQCAtMTc0LDI2ICYjNDM7MTc0LDM4IEBAIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcdTAwM2MmIzM5O2FcdTAwM2UocHRyOiAqY29uc3QgYmluZGluZ3M6Om1tX3N0cnVjdCkgLVx1MDAzZSBcdTAwMjYmIzM5O2EgTW1XaXRoVXNlciB7XG4gICAgIC8vLyBXaGVuIHBlci12bWEgbG9ja3MgYXJlIGRpc2FibGVkLCB0aGlzIGFsd2F5cyByZXR1cm5zIGBOb25lYC5cbiAgICAgI1tpbmxpbmVdXG4gICAgIHB1YiBmbiBsb2NrX3ZtYV91bmRlcl9yY3UoXHUwMDI2c2VsZiwgdm1hX2FkZHI6IHVzaXplKSAtXHUwMDNlIE9wdGlvblx1MDAzY1ZtYVJlYWRHdWFyZFx1MDAzYyYjMzk7X1x1MDAzZVx1MDAzZSB7XG4tICAgICAgICAjW2NmZyhDT05GSUdfUEVSX1ZNQV9MT0NLKV1cbiAgICAgICAgIHtcbiAgICAgICAgICAgICAvLyBTQUZFVFk6IENhbGxpbmcgYGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3VgIGlzIGFsd2F5cyBva2F5IGdpdmVuIGFuIG1tIHdoZXJlXG4gICAgICAgICAgICAgLy8gYG1tX3VzZXJzYCBpcyBub24temVyby5cbiAgICAgICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdShzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcbi0gICAgICAgICAgICBpZiAhdm1hLmlzX251bGwoKSB7XG4tICAgICAgICAgICAgICAgIHJldHVybiBTb21lKFZtYVJlYWRHdWFyZCB7XG4tICAgICAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbi0gICAgICAgICAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC5cbi0gICAgICAgICAgICAgICAgICAgIHZtYTogdW5zYWZlIHsgVm1hUmVmOjpmcm9tX3Jhdyh2bWEpIH0sXG4tICAgICAgICAgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxuLSAgICAgICAgICAgICAgICB9KTtcbiYjNDM7ICAgICAgICAgICAgaWYgdm1hLmlzX251bGwoKSB7XG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZTtcbiAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcbiYjNDM7ICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogSWYgYGxvY2tfdm1hX3VuZGVyX3JjdWAgcmV0dXJucyBhIG5vbi1udWxsIHB0ciwgdGhlbiBpdCBwb2ludHMgYXQgYVxuJiM0MzsgICAgICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLlxuJiM0MzsgICAgICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSxcbiYjNDM7ICAgICAgICAgICAgICAgIF9udHM6IE5vdFRocmVhZFNhZmUsXG4mIzQzOyAgICAgICAgICAgIH0pXG4gICAgICAgICB9XG4mIzQzOyAgICB9XG4gXG4tICAgICAgICAvLyBTaWxlbmNlIHdhcm5pbmdzIGFib3V0IHVudXNlZCB2YXJpYWJsZXMuXG4tICAgICAgICAjW2NmZyhub3QoQ09ORklHX1BFUl9WTUFfTE9DSykpXVxuLSAgICAgICAgbGV0IF8gPSB2bWFfYWRkcjtcbi1cbi0gICAgICAgIE5vbmVcbiYjNDM7ICAgIC8vLyBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTsgYW5kIGxvY2sgaXQgZm9yIHJlYWRpbmcuIFdhaXRzIGZvciB3cml0ZXJzIHRvIGZpbmlzaCBpZiB0aGVcbiYjNDM7ICAgIC8vLyBWTUEgaXMgYmVpbmcgbW9kaWZpZWQuXG4mIzQzOyAgICAjW2lubGluZV1cbiYjNDM7ICAgIHB1YiBmbiB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjVm1hUmVhZEd1YXJkXHUwMDNjJiMzOTtfXHUwMDNlXHUwMDNlIHtcbiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVyb1xuJiM0MzsgICAgICAgIC8vIGBtbV91c2Vyc2AuXG4mIzQzOyAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcbiYjNDM7ICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcbiYjNDM7ICAgICAgICAgICAgcmV0dXJuIE5vbmU7XG4mIzQzOyAgICAgICAgfVxuJiM0MzsgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcbiYjNDM7ICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbiYjNDM7ICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLlxuJiM0MzsgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LFxuJiM0MzsgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxuJiM0MzsgICAgICAgIH0pXG4gICAgIH1cbiBcbiAgICAgLy8vIExvY2sgdGhlIG1tYXAgcmVhZCBsb2NrLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCA4MDBlNWZhMDJkNzhmLi4zNjJmZWRhMjg1MjY0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTU4Miw3ICYjNDM7NTgyLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiBcdFx0dm1hX2ZsYWdzX3QgZmxhZ3M7XG4gXHR9O1xuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHQvKlxuIFx0ICogQ2FuIG9ubHkgYmUgd3JpdHRlbiAodXNpbmcgV1JJVEVfT05DRSgpKSB3aGlsZSBob2xkaW5nIGJvdGg6XG4gXHQgKiAgLSBtbWFwX2xvY2sgKGluIHdyaXRlIG1vZGUpXG5AQCAtNTk4LDcgJiM0Mzs1OTcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0ICogc2xvd3BhdGguXG4gXHQgKi9cbiBcdHVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTtcbi0jZW5kaWZcbiYjNDM7XG4gXHR1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2xvO1xuIFxuIFx0LypcbkBAIC02MzIsMTAgJiM0Mzs2MzEsOCBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiBcdHN0cnVjdCB2bWFfbnVtYWJfc3RhdGUgKm51bWFiX3N0YXRlO1x0LyogTlVNQSBCYWxhbmNpbmcgc3RhdGUgKi9cbiAjZW5kaWZcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LyogVW5zdGFibGUgUkNVIHJlYWRlcnMgYXJlIGFsbG93ZWQgdG8gcmVhZCB0aGlzLiAqL1xuIFx0cmVmY291bnRfdCB2bV9yZWZjbnQ7XG4tI2VuZGlmXG4gI2lmZGVmIENPTkZJR182NEJJVFxuIFx0dW5zaWduZWQgaW50IF9fdm1fdmlydF9wZ29mZl9oaTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXG5pbmRleCA4YTQ4YjIzMWFhN2FiLi41NGQ1YzMzNjBhYTI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ09ORklHX01NVVx0XHQxXG4tI2RlZmluZSBDT05GSUdfUEVSX1ZNQV9MT0NLXHQxXG4gXG4gI2lmZGVmIF9fQ09OQ0FUXG4gI3VuZGVmIF9fQ09OQ0FUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDE6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0FORFJPSURfQklOREVSX0lQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYV9zdGFydF9yZWFkX3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2JpbmRlcl9wYWdlX2luc2VydCYjMzQ7LAogICAgJiMzNDtiaW5kZXJfYWxsb2NfZnJlZV9wYWdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VmZmRfbG9ja192bWEmIzM0OywKICAgICYjMzQ7dWZmZF9tb3ZlX2xvY2smIzM0OywKICAgICYjMzQ7c3RhY2tfbWFwX2xvY2tfdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWNjOTk4NDg1ODcwMTE2MDQ1ZjdlMjNjOWNlMzg3Zjg4ZDkzY2UzYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMDE6MTc6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA5MTg3MjQwYTAyZGI1Li5mODE1MjA5MTY3Y2Q4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTQxLDcgJiM0Mzs0MSw2IEBAIGNvbmZpZyBBUk0KIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTIGlmIEFSTV9MUEFFCi0Jc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlQKIAlzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUAogCXNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZwppbmRleCAxMWE5YzUzNGI3YjQ4Li4yMWViNjRiMjRhMmM3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9LY29uZmlnCkBAIC04MSw3ICYjNDM7ODEsNiBAQCBjb25maWcgQVJNNjQKIAlzZWxlY3QgQVJDSF9IQVNfUFRFX1BST1ROT05FCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkcKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLCi0Jc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19SVAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1NDSEVEX1NNVApkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKaW5kZXggZTIwYWNiZTVmZTdiNS4uNzc0MWUzOWVjYTJiNyAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnCkBAIC02OSw3ICYjNDM7NjksNiBAQCBjb25maWcgTE9PTkdBUkNICiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTCiAJc2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBpZiA2NEJJVAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HIGlmIE5VTUEKLQlzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19SVAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1NDSEVEX1NNVCBpZiBTTVAKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQyAgaWYgU01QCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnCmluZGV4IGI1YWQ3YzE3M2VmMGMuLmRkOGY2MDYwZmI3YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnCkBAIC0xNyw3ICYjNDM7MTcsNiBAQCBjb25maWcgUFBDX1BPV0VSTlYKIAlzZWxlY3QgUFBDX0RPT1JCRUxMCiAJc2VsZWN0IE1NVV9OT1RJRklFUgogCXNlbGVjdCBGT1JDRV9TTVAKLQlzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sKIAlzZWxlY3QgUFBDX1JBRElYX0JST0FEQ0FTVF9UTEJJRSBpZiBQUENfUkFESVhfTU1VCiAJZGVmYXVsdCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggNzQ5MTBjZTNhNTQxYy4uN2QxMjVlMjg4ZjZlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTIzLDcgJiM0MzsyMyw2IEBAIGNvbmZpZyBQUENfUFNFUklFUwogCXNlbGVjdCBIT1RQTFVHX0NQVQogCXNlbGVjdCBGT1JDRV9TTVAKIAlzZWxlY3QgU1dJT1RMQgotCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSwogCXNlbGVjdCBQUENfUkFESVhfQlJPQURDQVNUX1RMQklFIGlmIFBQQ19SQURJWF9NTVUKIAlkZWZhdWx0IHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnCmluZGV4IDdiOWMzNzNkODJmYWMuLmZhYTg1YTAzMWZlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L0tjb25maWcKQEAgLTcwLDcgJiM0Mzs3MCw2IEBAIGNvbmZpZyBSSVNDVgogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR19USElOCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTIGlmIDY0QklUICZhbXA7JmFtcDsgTU1VCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDSyBpZiBNTVUKLQlzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgaWYgTU1VCiAJc2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBpZiBNTVUKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19SVAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1NIQURPV19DQUxMX1NUQUNLIGlmIEhBVkVfU0hBRE9XX0NBTExfU1RBQ0sKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggYWI4ZmNjYzJjYzRlMi4uZDEyNzRiY2E4YzM5YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTE1MSw3ICYjNDM7MTUxLDYgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9IQVNfUFRFX1BST1ROT05FCiAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkcKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLCi0Jc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLCiAJc2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVAKIAlzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGCiAJc2VsZWN0IEFSQ0hfVVNFX1NZTV9BTk5PVEFUSU9OUwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggZmIyOThlMjE5MTc5Mi4uNzk0NzlkMjk1NzZmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0yNyw3ICYjNDM7MjcsNiBAQCBjb25maWcgWDg2XzY0CiAJc2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1MKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19JTlQxMjggaWYgQ0NfSEFTX0lOVDEyOAotCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFCiAJc2VsZWN0IEhBVkVfQVJDSF9TT0ZUX0RJUlRZCiAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCkBAIC0xODQ2LDcgJiM0MzsxODQ1LDYgQEAgY29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDSwogCWJvb2wgJiMzNDtYODYgdXNlcnNwYWNlIHNoYWRvdyBzdGFjayYjMzQ7CiAJZGVwZW5kcyBvbiBBU19XUlVTUwogCWRlcGVuZHMgb24gWDg2XzY0Ci0JZGVwZW5kcyBvbiBQRVJfVk1BX0xPQ0sKIAlzZWxlY3QgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTCiAJc2VsZWN0IEFSQ0hfSEFTX1VTRVJfU0hBRE9XX1NUQUNLCiAJc2VsZWN0IFg4Nl9DRVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycwppbmRleCBlODJhNTUyMzgwNGY0Li5mN2FkODhhMGQ4MDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzCkBAIC00MzksMjIgJiM0Mzs0MzksOSBAQCB1bnNhZmUgZm4gdXNlX3BhZ2Vfc2xvdygmYW1wO3NlbGYsIGk6IHVzaXplKSAtJmd0OyBSZXN1bHQmbHQ7KCkmZ3Q7IHsKICAgICAgICAgLy8gd29ya3F1ZXVlLgogICAgICAgICBsZXQgbW0gPSBNbVdpdGhVc2VyOjppbnRvX21tcHV0X2FzeW5jKHNlbGYubW0ubW1nZXRfbm90X3plcm8oKS5va19vcihFU1JDSCk/KTsKICAgICAgICAgewotICAgICAgICAgICAgbGV0IHZtYV9yZWFkOwotICAgICAgICAgICAgbGV0IG1tYXBfcmVhZDsKLSAgICAgICAgICAgIGxldCB2bWEgPSBpZiBsZXQgU29tZShyZXQpID0gbW0ubG9ja192bWFfdW5kZXJfcmN1KHZtYV9hZGRyKSB7Ci0gICAgICAgICAgICAgICAgdm1hX3JlYWQgPSByZXQ7Ci0gICAgICAgICAgICAgICAgY2hlY2tfdm1hKCZhbXA7dm1hX3JlYWQsIHNlbGYpCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1tYXBfcmVhZCA9IG1tLm1tYXBfcmVhZF9sb2NrKCk7Ci0gICAgICAgICAgICAgICAgbW1hcF9yZWFkCi0gICAgICAgICAgICAgICAgICAgIC52bWFfbG9va3VwKHZtYV9hZGRyKQotICAgICAgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHZtYXwgY2hlY2tfdm1hKHZtYSwgc2VsZikpCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBtYXRjaCB2bWEgewotICAgICAgICAgICAgICAgIFNvbWUodm1hKSA9Jmd0OyB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsICZhbXA7bmV3X3BhZ2UpPywKLSAgICAgICAgICAgICAgICBOb25lID0mZ3Q7IHJldHVybiBFcnIoRVNSQ0gpLAotICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIGxldCB2bWFfcmVhZF9ndWFyZCA9IG1tLnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHZtYV9hZGRyKS5va19vcihFU1JDSCk/OwomIzQzOyAgICAgICAgICAgIGxldCB2bWEgPSBjaGVja192bWEoJmFtcDt2bWFfcmVhZF9ndWFyZCwgc2VsZikub2tfb3IoRVNSQ0gpPzsKJiM0MzsgICAgICAgICAgICB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsICZhbXA7bmV3X3BhZ2UpPzsKICAgICAgICAgfQogCiAgICAgICAgIGxldCBpbm5lciA9IHNlbGYubG9jay5sb2NrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMKaW5kZXggZTQ0ODhhZDg2YTY1NS4uNTE5ZGNkZWQxOWIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYwpAQCAtMjU5LDIxICYjNDM7MjU5LDE0IEBAIHN0YXRpYyBpbnQgYmluZGVyX3BhZ2VfaW5zZXJ0KHN0cnVjdCBiaW5kZXJfYWxsb2MgKmFsbG9jLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCWludCByZXQgPSAtRVNSQ0g7CiAKLQkvKiBhdHRlbXB0IHBlci12bWEgbG9jayBmaXJzdCAqLwotCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7Ci0JaWYgKHZtYSkgewotCQlpZiAoYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpCi0JCQlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpOwotCQl2bWFfZW5kX3JlYWQodm1hKTsKJiM0MzsJdm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHIpOwomIzQzOwlpZiAoIXZtYSkKIAkJcmV0dXJuIHJldDsKLQl9CiAKLQkvKiBmYWxsIGJhY2sgdG8gbW1hcF9sb2NrICovCi0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwotCWlmICh2bWEgJmFtcDsmYW1wOyBiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSkKJiM0MzsJaWYgKGJpbmRlcl9hbGxvY19pc19tYXBwZWQoYWxsb2MpKQogCQlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpOwotCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwomIzQzOwl2bWFfZW5kX3JlYWQodm1hKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTQyLDcgJiM0MzsxMTM1LDYgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZV90b19mcmVlOwogCXVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyOwotCWludCBtbV9sb2NrZWQgPSAwOwogCXNpemVfdCBpbmRleDsKIAogCWlmICghbW1nZXRfbm90X3plcm8obW0pKQpAQCAtMTE1MSwxNCAmIzQzOzExNDMsMjAgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwKIAlpbmRleCA9IG1kYXRhLSZndDtwYWdlX2luZGV4OwogCXBhZ2VfYWRkciA9IGFsbG9jLSZndDt2bV9zdGFydCAmIzQzOyBpbmRleCAqIFBBR0VfU0laRTsKIAotCS8qIGF0dGVtcHQgcGVyLXZtYSBsb2NrIGZpcnN0ICovCiYjNDM7CS8qCiYjNDM7CSAqIEF0dGVtcHQgcGVyLXZtYSBsb2NrLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEKJiM0MzsJICogJiMzNDt0cnlsb2NrJiMzNDsuIEl0IGNhbiBmYWlsIGV2ZW4gaWYgdGhlIFZNQSBleGlzdHMKJiM0MzsJICogZm9yICYjMzk7cGFnZV9hZGRyJiMzOTsuCiYjNDM7CSAqLwogCXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgcGFnZV9hZGRyKTsKIAlpZiAoIXZtYSkgewotCQkvKiBmYWxsIGJhY2sgdG8gbW1hcF9sb2NrICovCi0JCWlmICghbW1hcF9yZWFkX3RyeWxvY2sobW0pKQotCQkJZ290byBlcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkOwotCQltbV9sb2NrZWQgPSAxOwotCQl2bWEgPSB2bWFfbG9va3VwKG1tLCBwYWdlX2FkZHIpOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSB2bWEgZXhpc3RzLCB3ZSBjYW4mIzM5O3QgY29udGludWUgYmVjYXVzZSB3ZSBjYW5ub3QKJiM0MzsJCSAqIHJlbW92ZSB0aGUgcGFnZSBmcm9tIHRoZSB2bWEuIEhvd2V2ZXIsIGlmIHRoZSB2bWEgd2FzCiYjNDM7CQkgKiB1bm1hcHBlZCwgaXQmIzM5O3Mgb2theSB0byBjb250aW51ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGJpbmRlcl9hbGxvY19pc19tYXBwZWQoYWxsb2MpKQomIzQzOwkJCWdvdG8gZXJyX3ZtYV9sb2NrX2ZhaWxlZDsKIAl9CiAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDthbGxvYy0mZ3Q7bXV0ZXgpKQpAQCAtMTE5MSw5ICYjNDM7MTE4OSw3IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sCiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7YWxsb2MtJmd0O211dGV4KTsKLQlpZiAobW1fbG9ja2VkKQotCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKLQllbHNlCiYjNDM7CWlmICh2bWEpCiAJCXZtYV9lbmRfcmVhZCh2bWEpOwogCW1tcHV0X2FzeW5jKG1tKTsKIAliaW5kZXJfZnJlZV9wYWdlKHBhZ2VfdG9fZnJlZSk7CkBAIC0xMjAzLDExICYjNDM7MTE5OSw5IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sCiBlcnJfaW52YWxpZF92bWE6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7YWxsb2MtJmd0O211dGV4KTsKIGVycl9nZXRfYWxsb2NfbXV0ZXhfZmFpbGVkOgotCWlmIChtbV9sb2NrZWQpCi0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwotCWVsc2UKJiM0MzsJaWYgKHZtYSkKIAkJdm1hX2VuZF9yZWFkKHZtYSk7Ci1lcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkOgomIzQzO2Vycl92bWFfbG9ja19mYWlsZWQ6CiAJbW1wdXRfYXN5bmMobW0pOwogZXJyX21tZ2V0OgogCXJldHVybiBMUlVfU0tJUDsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaAppbmRleCBiMjMyZTEwOTgxMTdiLi42NzEzNzU3ZGEwOTkyIDEwMDY0NAotLS0gYS9mcy9wcm9jL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9pbnRlcm5hbC5oCkBAIC0zODUsMTAgJiM0MzszODUsOCBAQCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHM7CiAKIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAlib29sIG1tYXBfbG9ja2VkOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja2VkX3ZtYTsKLSNlbmRpZgogfTsKIAogc3RydWN0IHByb2NfbWFwc19wcml2YXRlIHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA4MTdlM2UwZjkxOTQzLi4wOTZiZjBiMGI5ZTBlIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0xMzAsOCAmIzQzOzEzMCw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19tZW1wb2xpY3koc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCi0KIHN0YXRpYyBpbmxpbmUgaW50IGxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQogewogCWludCByZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC0mZ3Q7bW0pOwpAQCAtMjMzLDQ2ICYjNDM7MjMxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogCXZtYV9pdGVyX3NldCgmYW1wO3ByaXYtJmd0O2l0ZXIsIHByaXYtJmd0O2xvY2tfY3R4LmxvY2tlZF92bWEtJmd0O3ZtX2VuZCk7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KLQotc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JcmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LSZndDttbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCW1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtJmd0O21tKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGxvY2tfdm1hX3JhbmdlKHN0cnVjdCBzZXFfZmlsZSAqbSwKLQkJCQkgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCXJldHVybiBsb2NrX2N0eF9tbShsb2NrX2N0eCkgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja192bWFfcmFuZ2Uoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCi0JCQkJCSAgIGxvZmZfdCBsYXN0X3BvcykKLXsKLQlyZXR1cm4gdm1hX25leHQoJmFtcDtwcml2LSZndDtpdGVyKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCi0JCQkJCSBsb2ZmX3QgcG9zKQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRyb3BfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikge30KLQotI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KLQogc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tJmd0O3ByaXZhdGU7CkBAIC01NjAsOCAmIzQzOzUxOCw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJUFJPQ01BUF9RVUVSWV9WTUFfRkxBR1MJCQkJXAogKQogCi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwotCiBzdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKIAlyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7CkBAIC02MTIsMjYgJiM0Mzs1NjgsNiBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdAogCXJldHVybiB2bWE7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KLQotc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JcmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LSZndDttbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHF1ZXJ5X3ZtYV90ZWFyZG93bihzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQltbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LSZndDttbSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gZmluZF92bWEobG9ja19jdHgtJmd0O21tLCBhZGRyKTsKLX0KLQotI2VuZGlmICAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovCi0KIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X21hdGNoaW5nX3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCwKIAkJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiBmbGFncykKIHsKQEAgLTEzMTQsOCAmIzQzOzEyNTAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfb3BzID0gewogCS53YWxrX2xvY2sJCT0gUEdXQUxLX1JETE9DSywKIH07CiAKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfd2Fsa192bWFfbG9ja19vcHMgPSB7CiAJLnBtZF9lbnRyeQkJPSBzbWFwc19wdGVfcmFuZ2UsCiAJLmh1Z2V0bGJfZW50cnkJCT0gc21hcHNfaHVnZXRsYl9yYW5nZSwKQEAgLTEzNDUsMjIgJiM0MzsxMjc5LDYgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gJmFtcDtzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wczsKIH0KIAotI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCi1nZXRfc21hcHNfd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQotewotCXJldHVybiAmYW1wO3NtYXBzX3dhbGtfb3BzOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCi1nZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQotewotCXJldHVybiAmYW1wO3NtYXBzX3NobWVtX3dhbGtfb3BzOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCiAvKgogICogR2F0aGVyIG1lbSBzdGF0cyBmcm9tIEB2bWEgd2l0aCB0aGUgaW5kaWNhdGVkIGJlZ2lubmluZwogICogYWRkcmVzcyBAc3RhcnQsIGFuZCBrZWVwIHRoZW0gaW4gQG1zcy4KQEAgLTM0OTcsNyAmIzQzOzM0MTUsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNob3dfbnVtYV9vcHMgPSB7CiAJLndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssCiB9OwogCi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0gewogCS5odWdldGxiX2VudHJ5ID0gZ2F0aGVyX2h1Z2V0bGJfc3RhdHMsCiAJLnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHMsCkBAIC0zNTEyLDE2ICYjNDM7MzQyOSw2IEBAIGdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gJmFtcDtzaG93X251bWFfdm1hX2xvY2tfb3BzOwogfQogCi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovCi0KLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKLWdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKLXsKLQlyZXR1cm4gJmFtcDtzaG93X251bWFfb3BzOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCiAvKgogICogRGlzcGxheSBwYWdlcyBhbGxvY2F0ZWQgcGVyIG5vZGUgYW5kIG1lbW9yeSBwb2xpY3kgdmlhIC9wcm9jLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggN2ZhYmU2YzY2YjRiNy4uZDk4NTBmODQ2MjQyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtOTMxLDcgJiM0Mzs5MzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX251bWFiX3N0YXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9CiAgKiBUaGVzZSBtdXN0IGJlIGhlcmUgcmF0aGVyIHRoYW4gbW1hcF9sb2NrLmggYXMgZGVwZW5kZW50IG9uIHZtX2ZhdWx0IHR5cGUsCiAgKiBkZWNsYXJlZCBpbiB0aGlzIGhlYWRlci4KICAqLwotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2ZhdWx0X2xvY2soc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CiAJaWYgKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19WTUFfTE9DSykKQEAgLTk0NywxNyAmIzQzOzk0Niw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfZmF1bHRfbG9ja2VkKGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCWVsc2UKIAkJbW1hcF9hc3NlcnRfbG9ja2VkKHZtZi0mZ3Q7dm1hLSZndDt2bV9tbSk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfZmF1bHRfbG9jayhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKLXsKLQltbWFwX3JlYWRfdW5sb2NrKHZtZi0mZ3Q7dm1hLSZndDt2bV9tbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfZmF1bHRfbG9ja2VkKGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKQotewotCW1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtJmd0O3ZtYS0mZ3Q7dm1fbW0pOwotfQotI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KIAogc3RhdGljIGlubGluZSBib29sIG1tX2ZsYWdzX3Rlc3QoaW50IGZsYWcsIGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IGI1ZDRjZDNiMDY3YmYuLmQ4ZTI0NmZkMDlkMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTk1MCw3ICYjNDM7OTUwLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKIAkJdm1hX2ZsYWdzX3QgZmxhZ3M7CiAJfTsKIAotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAkvKgogCSAqIENhbiBvbmx5IGJlIHdyaXR0ZW4gKHVzaW5nIFdSSVRFX09OQ0UoKSkgd2hpbGUgaG9sZGluZyBib3RoOgogCSAqICAtIG1tYXBfbG9jayAoaW4gd3JpdGUgbW9kZSkKQEAgLTk2Niw3ICYjNDM7OTY1LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKIAkgKiBzbG93cGF0aC4KIAkgKi8KIAl1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7Ci0jZW5kaWYKJiM0MzsKIAkvKgogCSAqIExvdyAzMi1iaXRzIG9mIHZpcnR1YWwgcGFnZSBvZmZzZXQuCiAJICogU2VlIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgY29tbWVudCBmb3IgZGV0YWlscy4KQEAgLTEwMDMsNyAmIzQzOzEwMDIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgewogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwogCXN0cnVjdCB2bWFfbnVtYWJfc3RhdGUgKm51bWFiX3N0YXRlOwkvKiBOVU1BIEJhbGFuY2luZyBzdGF0ZSAqLwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogCS8qCiAJICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIGZpcnN0bHksIHdoZXRoZXIgdGhlIFZNQSBpcyBhdHRhY2hlZCwgc2Vjb25kbHksCiAJICogaWYgYXR0YWNoZWQsIGhvdyBtYW55IHJlYWQgbG9ja3MgYXJlIHRha2VuLCBhbmQgdGhpcmRseSwgaWYgdGhlCkBAIC0xMDQ2LDcgJiM0MzsxMDQ0LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogCXN0cnVjdCBsb2NrZGVwX21hcCB2bWxvY2tfZGVwX21hcDsKICNlbmRpZgotI2VuZGlmCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJLyoKIAkgKiBIaWdoIDMyLWJpdHMgb2YgdmlydHVhbCBwYWdlIG9mZnNldC4KQEAgLTEyNTQsNyAmIzQzOzEyNTEsNiBAQCBzdHJ1Y3QgbW1fc3RydWN0IHsKIAkJCQkJICAqIGluaXRfbW0ubW1saXN0LCBhbmQgYXJlIHByb3RlY3RlZAogCQkJCQkgICogYnkgbW1saXN0X2xvY2sKIAkJCQkJICAqLwotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAkJc3RydWN0IHJjdXdhaXQgdm1hX3dyaXRlcl93YWl0OwogCQkvKgogCQkgKiBUaGlzIGZpZWxkIGhhcyBsb2NrLWxpa2Ugc2VtYW50aWNzLCBtZWFuaW5nIGl0IGlzIHNvbWV0aW1lcwpAQCAtMTI3NCw3ICYjNDM7MTI3MCw3IEBAIHN0cnVjdCBtbV9zdHJ1Y3QgewogCQkgKiBtbWFwX2xvY2suCiAJCSAqLwogCQlzZXFjb3VudF90IG1tX2xvY2tfc2VxOwotI2VuZGlmCiYjNDM7CiAJCXN0cnVjdCBmdXRleF9tbV9kYXRhCWZ1dGV4OwogCiAJCXVuc2lnbmVkIGxvbmcgaGl3YXRlcl9yc3M7IC8qIEhpZ2gtd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggODdmNzdlM2RhNzdmMC4uZmRkOGY1Y2Y1NzIyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCkBAIC03Niw4ICYjNDM7NzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXJ3c2VtX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7bW0tJmd0O21tYXBfbG9jayk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCi0KICNpZmRlZiBDT05GSUdfTE9DS0RFUAogI2RlZmluZSBfX3ZtYV9sb2NrZGVwX21hcCh2bWEpICgmYW1wO3ZtYS0mZ3Q7dm1sb2NrX2RlcF9tYXApCiAjZWxzZQpAQCAtMjMwLDEwICYjNDM7MjI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfcmVmY291bnRfcHV0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogfQogCiAvKgotICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgbG9ja2luZyB3aWxsIG5vdAotICogZmFpbCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGQKJiM0MzsgKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB2bWEgbG9jayBpcyBub3QKJiM0MzsgKiBjb250ZW5kZWQgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkCiAgKiBub3QgYmUgdXNlZCBpbiBzdWNoIGNhc2VzIGJlY2F1c2UgaXQgbWlnaHQgZmFpbCBkdWUgdG8gbW1fbG9ja19zZXEgb3ZlcmZsb3cuCiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCB0byBvYnRhaW4gdm1hIHJlYWQgbG9jayBhbmQgZHJvcCB0aGUgbW1hcCByZWFkIGxvY2suCiYjNDM7ICogVk1BIGNhbiYjMzk7dCBiZSBkZXRhY2hlZCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBtbWFwIGxvY2ssIHRoZXJlZm9yZSBpbiBwcmFjdGljZSB0aGlzCiYjNDM7ICogZnVuY3Rpb24gY2FuIGZhaWwgb25seSB3aGVuIHRoZXJlIGFyZSBzbyBtYW55IHJlYWRlcnMgdGhhdCB2bV9yZWZjbnQgb3ZlcmZsb3dzLgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkX25lc3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50IHN1YmNsYXNzKQogewpAQCAtMjQ5LDE2ICYjNDM7MjQ5LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQKIH0KIAogLyoKLSAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGxvY2tpbmcgd2lsbCBub3QKLSAqIGZhaWwgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkCiYjNDM7ICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdm1hIGxvY2sgaXMgbm90CiYjNDM7ICogY29udGVuZGVkIChub2JvZHkgY2FuIGNvbmN1cnJlbnRseSB3cml0ZS1sb2NrIHRoZSB2bWEpLiB2bWFfc3RhcnRfcmVhZCgpIHNob3VsZAogICogbm90IGJlIHVzZWQgaW4gc3VjaCBjYXNlcyBiZWNhdXNlIGl0IG1pZ2h0IGZhaWwgZHVlIHRvIG1tX2xvY2tfc2VxIG92ZXJmbG93LgogICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgdG8gb2J0YWluIHZtYSByZWFkIGxvY2sgYW5kIGRyb3AgdGhlIG1tYXAgcmVhZCBsb2NrLgomIzQzOyAqIFZNQSBjYW4mIzM5O3QgYmUgZGV0YWNoZWQgd2hpbGUgd2UgYXJlIGhvbGRpbmcgbW1hcCBsb2NrLCB0aGVyZWZvcmUgaW4gcHJhY3RpY2UgdGhpcwomIzQzOyAqIGZ1bmN0aW9uIGNhbiBmYWlsIG9ubHkgd2hlbiB0aGVyZSBhcmUgc28gbWFueSByZWFkZXJzIHRoYXQgdm1fcmVmY250IG92ZXJmbG93cy4KICAqLwogc3RhdGljIGlubGluZSBib29sIHZtYV9zdGFydF9yZWFkX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlyZXR1cm4gdm1hX3N0YXJ0X3JlYWRfbG9ja2VkX25lc3RlZCh2bWEsIDApOwogfQogCiYjNDM7c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHZtYV9lbmRfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2bWFfcmVmY291bnRfcHV0KHZtYSk7CkBAIC00ODQsNTQgJiM0Mzs0ODksNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfbmV4dF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICAgICBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICppdGVyLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAotI2Vsc2UgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fQotc3RhdGljIGlubGluZSB2b2lkIG1tX2xvY2tfc2VxY291bnRfYmVnaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9lbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBtbWFwX2xvY2tfc3BlY3VsYXRlX3RyeV9iZWdpbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50ICpzZXEpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgbW1hcF9sb2NrX3NwZWN1bGF0ZV9yZXRyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHNlcSkKLXsKLQlyZXR1cm4gdHJ1ZTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbG9ja19pbml0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHJlc2V0X3JlZmNudCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZW5kX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX3N0YXJ0X3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fQotc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sKLWludCB2bWFfc3RhcnRfd3JpdGVfa2lsbGFibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLQkJeyBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLSZndDt2bV9tbSk7IH0KLXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYXR0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi0JCXsgcmV0dXJuIHRydWU7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2F0dGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fQotc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfZGV0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX21hcmtfYXR0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX21hcmtfZGV0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCW1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtJmd0O3ZtX21tKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfc3RhYmlsaXNlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQkvKiBJZiBubyBWTUEgbG9ja3MsIHRoZW4gZWl0aGVyIG1tYXAgbG9jayBzdWZmaWNlcyB0byBzdGFiaWxpc2UuICovCi0JbW1hcF9hc3NlcnRfbG9ja2VkKHZtYS0mZ3Q7dm1fbW0pOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqLwotCiBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9jYW5fbW9kaWZ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCWlmICh2bWFfaXNfYXR0YWNoZWQodm1hKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuYwppbmRleCA0MWZlODdkNzMwMmYyLi44ODQ4ZTI2ZWY1ODEzIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N0YWNrbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGFja21hcC5jCkBAIC0yNzIsMTMgJiM0MzsyNzIsOCBAQCBzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrIHsKIC8qCiAgKiBBY3F1aXJlIGEgc3RhYmxlIHJlYWQtc2lkZSByZWZlcmVuY2Ugb24gdGhlIFZNQSBjb3ZlcmluZyBAaXAuCiAgKgotICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPXkgdGhpcyByZXR1cm5zIGEgVk1BIHdpdGggaXRzIHBlci1WTUEgcmVhZAotICogbG9jayBoZWxkIGFuZCBtbWFwX2xvY2sgZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuCi0gKgotICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPW4gaXQgcmV0dXJucyBhIFZNQSB3aXRoIG1tYXBfbG9jayBzdGlsbAotICogaGVsZDsgdGhlIGNhbGxlciBtdXN0IHNuYXBzaG90IGFueSBmaWVsZHMgaXQgbmVlZHMgYW5kIHBpbiB2bV9maWxlCi0gKiB3aXRoIGdldF9maWxlKCkgYmVmb3JlIHN0YWNrX21hcF91bmxvY2tfdm1hKCkgZHJvcHMgbW1hcF9sb2NrLCBhcwotICogdGhlIFZNQSBtYXkgYmUgc3BsaXQsIG1lcmdlZCwgb3IgZnJlZWQgYWZ0ZXIgdGhhdC4KJiM0MzsgKiBUaGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkIGxvY2sgaGVsZCBhbmQgbW1hcF9sb2NrCiYjNDM7ICogZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuCiAgKgogICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2Ugbm8gbG9jayBpcyBoZWxkLgogICovCkBAIC0yODgsNyAmIzQzOzI4Myw2IEBAIHN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKQogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gbG9jay0mZ3Q7bW07CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKLQkvKiBub29wIHVuZGVyICFDT05GSUdfUEVSX1ZNQV9MT0NLICovCiAJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7CiAJaWYgKHZtYSkgewogCQlsb2NrLSZndDt2bWEgPSB2bWE7CkBAIC0zMDgsMTMgJiM0MzszMDIsMTEgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCiAJCXJldHVybiBOVUxMOwogCX0KIAotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAlpZiAoIXZtYV9zdGFydF9yZWFkX2xvY2tlZCh2bWEpKSB7CiAJCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0jZW5kaWYKIAogCWxvY2stJmd0O3ZtYSA9IHZtYTsKIAlyZXR1cm4gdm1hOwpAQCAtMzIyLDExICYjNDM7MzE0LDcgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCiAKIHN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spCiB7Ci0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogCXZtYV9lbmRfcmVhZChsb2NrLSZndDt2bWEpOwotI2Vsc2UKLQltbWFwX3JlYWRfdW5sb2NrKGxvY2stJmd0O21tKTsKLSNlbmRpZgogCWxvY2stJmd0O3ZtYSA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jCmluZGV4IGU3OTFhZTA2NWMzOWIuLjZjZjgxNWJjODRiZWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90YXNrX2l0ZXIuYwpAQCAtODM1LDExICYjNDM7ODM1LDYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0LAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hX2tlcm4pICE9IHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEpKTsKIAlCVUlMRF9CVUdfT04oX19hbGlnbm9mX18oc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hX2tlcm4pICE9IF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSkpOwogCi0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19QRVJfVk1BX0xPQ0spKSB7Ci0JCWtpdC0mZ3Q7ZGF0YSA9IE5VTEw7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KIAkvKgogCSAqIFJlamVjdCBpcnFzLWRpc2FibGVkIGNvbnRleHRzIGluY2x1ZGluZyBOTUkuIE9wZXJhdGlvbnMgdXNlZAogCSAqIGJ5IF9uZXh0KCkgYW5kIF9kZXN0cm95KCkgKHZtYV9lbmRfcmVhZCwgZnB1dCwgYnBmX2l0ZXJfbW1wdXRfYXN5bmMpCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBmMGUyZTEzMWE5YTVhLi5mZjkxZjVmNjZjODBkIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mb3JrLmMKQEAgLTEwNzcsOSAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBtbWFwX2luaXRfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlpbml0X3J3c2VtKCZhbXA7bW0tJmd0O21tYXBfbG9jayk7CiAJbW1fbG9ja19zZXFjb3VudF9pbml0KG1tKTsKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJcmN1d2FpdF9pbml0KCZhbXA7bW0tJmd0O3ZtYV93cml0ZXJfd2FpdCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDA2MDE5MGUxMmJjZWQuLjc3MTAzYjQ2YjY3OTIgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtMTQyNSwxOSAmIzQzOzE0MjUsNiBAQCBjb25maWcgTFJVX0dFTl9TVEFUUwogY29uZmlnIExSVV9HRU5fV0FMS1NfTU1VCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gTFJVX0dFTiAmYW1wOyZhbXA7IEFSQ0hfSEFTX0hXX1BURV9ZT1VORwotIyB9Ci0KLWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSwotICAgICAgIGRlZl9ib29sIG4KLQotY29uZmlnIFBFUl9WTUFfTE9DSwotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLICZhbXA7JmFtcDsgTU1VICZhbXA7JmFtcDsgU01QCi0JaGVscAotCSAgQWxsb3cgcGVyLXZtYSBsb2NraW5nIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLgotCi0JICBUaGlzIGZlYXR1cmUgYWxsb3dzIGxvY2tpbmcgZWFjaCB2aXJ0dWFsIG1lbW9yeSBhcmVhIHNlcGFyYXRlbHkgd2hlbgotCSAgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW5zdGVhZCBvZiB0YWtpbmcgbW1hcF9sb2NrLgogCiBjb25maWcgTE9DS19NTV9BTkRfRklORF9WTUEKIAlib29sCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnLmRlYnVnIGIvbW0vS2NvbmZpZy5kZWJ1ZwppbmRleCA1NzM3YTUwNGVmYmJlLi4xZGQxNTBlZGZlNzFjIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnLmRlYnVnCiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWcuZGVidWcKQEAgLTMxMCw3ICYjNDM7MzEwLDYgQEAgY29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0UKIAogY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUUwogCWJvb2wgJiMzNDtTdGF0aXN0aWNzIGZvciBwZXItdm1hIGxvY2tzJiMzNDsKLQlkZXBlbmRzIG9uIFBFUl9WTUFfTE9DSwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1Y2Nlc3MsIHJldHJ5IGFuZCBmYWlsdXJlIGNvdW50ZXJzIG9mIHBhZ2UKIAkgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGUKZGlmZiAtLWdpdCBhL21tL2RlYnVnLmMgYi9tbS9kZWJ1Zy5jCmluZGV4IDlhMDI5N2IzOTg4ZDguLjY1NWU2YmNjMGU4ZDkgMTAwNjQ0Ci0tLSBhL21tL2RlYnVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWcuYwpAQCAtMTU3LDE3ICYjNDM7MTU3LDEzIEBAIHZvaWQgZHVtcF92bWEoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJcHJfZW1lcmcoJiMzNDt2bWEgJXB4IHN0YXJ0ICVweCBlbmQgJXB4IG1tICVweFxuJiMzNDsKIAkJJiMzNDtwcm90ICVseCBhbm9uX3ZtYSAlcHggdm1fb3BzICVweFxuJiMzNDsKIAkJJiMzNDtwZ29mZiAlbHggZmlsZSAlcHggcHJpdmF0ZV9kYXRhICVweFxuJiMzNDsKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJCSYjMzQ7cmVmY250ICV4XG4mIzM0OwotI2VuZGlmCiAJCSYjMzQ7ZmxhZ3M6ICUjbHgoJXBHdilcbiYjMzQ7LAogCQl2bWEsICh2b2lkICopdm1hLSZndDt2bV9zdGFydCwgKHZvaWQgKil2bWEtJmd0O3ZtX2VuZCwgdm1hLSZndDt2bV9tbSwKIAkJKHVuc2lnbmVkIGxvbmcpcGdwcm90X3ZhbCh2bWEtJmd0O3ZtX3BhZ2VfcHJvdCksCiAJCXZtYS0mZ3Q7YW5vbl92bWEsIHZtYS0mZ3Q7dm1fb3BzLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwKIAkJdm1hLSZndDt2bV9maWxlLCB2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSwKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJCXJlZmNvdW50X3JlYWQoJmFtcDt2bWEtJmd0O3ZtX3JlZmNudCksCi0jZW5kaWYKIAkJdm1hLSZndDt2bV9mbGFncywgJmFtcDt2bWEtJmd0O3ZtX2ZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZHVtcF92bWEpOwpkaWZmIC0tZ2l0IGEvbW0vaW5pdC1tbS5jIGIvbW0vaW5pdC1tbS5jCmluZGV4IDNlNzkyYWFkNzYyNjEuLmExYmIyYzJkMDI4NGEgMTAwNjQ0Ci0tLSBhL21tL2luaXQtbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbml0LW1tLmMKQEAgLTM5LDEwICYjNDM7MzksOCBAQCBzdHJ1Y3QgbW1fc3RydWN0IGluaXRfbW0gPSB7CiAJLnBhZ2VfdGFibGVfbG9jayA9ICBfX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X21tLnBhZ2VfdGFibGVfbG9jayksCiAJLmFyZ19sb2NrCT0gIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluaXRfbW0uYXJnX2xvY2spLAogCS5tbWxpc3QJCT0gTElTVF9IRUFEX0lOSVQoaW5pdF9tbS5tbWxpc3QpLAotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAkudm1hX3dyaXRlcl93YWl0ID0gX19SQ1VXQUlUX0lOSVRJQUxJWkVSKGluaXRfbW0udm1hX3dyaXRlcl93YWl0KSwKIAkubW1fbG9ja19zZXEJPSBTRVFDTlRfWkVSTyhpbml0X21tLm1tX2xvY2tfc2VxKSwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19TQ0hFRF9NTV9DSUQKIAkubW1fY2lkLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5tbV9jaWQubG9jayksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggYTYyMGQ0MjVlYzk1ZS4uZjEwOWY2Yzg3YjI4YyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTY4MTMsNyAmIzQzOzY4MTMsNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBzYW5pdGl6ZV9mYXVsdF9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgIWlzX2Nvd19tYXBwaW5nKHZtYS0mZ3Q7dm1fZmxhZ3MpKSkKIAkJCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwogCX0KLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJLyoKIAkgKiBQZXItVk1BIGxvY2tzIGNhbiYjMzk7dCBiZSB1c2VkIHdpdGggRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgYmVjYXVzZSBvZgogCSAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgbG9jayBpcyBkcm9wcGVkIG9uIFZNX0ZBVUxUX1JFVFJZLgpAQCAtNjgyMiw3ICYjNDM7NjgyMSw2IEBAIHN0YXRpYyB2bV9mYXVsdF90IHNhbml0aXplX2ZhdWx0X2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJKEZBVUxUX0ZMQUdfVk1BX0xPQ0sgfCBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCkpID09CiAJCQkoRkFVTFRfRkxBR19WTUFfTE9DSyB8IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSkpCiAJCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwotI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL21tYXBfbG9jay5jIGIvbW0vbW1hcF9sb2NrLmMKaW5kZXggODk4YzJlZjFlOTU4MC4uNmZmMDVlNjhlNjFiZSAxMDA2NDQKLS0tIGEvbW0vbW1hcF9sb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1hcF9sb2NrLmMKQEAgLTQzLDkgJiM0Mzs0Myw2IEBAIHZvaWQgX19tbWFwX2xvY2tfZG9fdHJhY2VfcmVsZWFzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGJvb2wgd3JpdGUpCiBFWFBPUlRfU1lNQk9MKF9fbW1hcF9sb2NrX2RvX3RyYWNlX3JlbGVhc2VkKTsKICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqLwogCi0jaWZkZWYgQ09ORklHX01NVQotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKLQogLyogU3RhdGUgc2hhcmVkIGFjcm9zcyBfX3ZtYV9bc3RhcnQsIGVuZF1fZXhjbHVkZV9yZWFkZXJzLiAqLwogc3RydWN0IHZtYV9leGNsdWRlX3JlYWRlcnNfc3RhdGUgewogCS8qIElucHV0IHBhcmFtZXRlcnMuICovCkBAIC0zNDEsNiAmIzQzOzMzOCwzNSBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzOy8qCiYjNDM7ICogRmluZCB0aGUgVk1BIGNvdmVyaW5nICYjMzk7YWRkcmVzcyYjMzk7IGFuZCBsb2NrIGl0IGZvciByZWFkaW5nLiBXYWl0cyBmb3Igd3JpdGVycyB0bwomIzQzOyAqIGZpbmlzaCBpZiB0aGUgVk1BIGlzIGJlaW5nIG1vZGlmaWVkLiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm8gVk1BIGNvdmVyaW5nCiYjNDM7ICogJiMzOTthZGRyZXNzJiMzOTsuCiYjNDM7ICoKJiM0MzsgKiBVc2Ugb25seSBpbiBjb2RlIHBhdGhzIHdoZXJlIG5vIG1tYXBfbG9jayBhbmQgbm8gVk1BIGxvY2sgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIFRoZSBmYXN0IHBhdGggZG9lcyBub3QgdGFrZSBtbWFwX2xvY2suCiYjNDM7ICovCiYjNDM7c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsKJiM0MzsJLyogRmFzdCBwYXRoOiByZXR1cm4gc3RhYmxlIFZNQSBjb3ZlcmluZyAmIzM5O2FkZHJlc3MmIzM5OzogKi8KJiM0MzsJdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTsKJiM0MzsJaWYgKHZtYSkKJiM0MzsJCXJldHVybiB2bWE7CiYjNDM7CiYjNDM7CS8qIFNsb3cgcGF0aDogcHJlY2x1ZGUgVk1BIHdyaXRlcnMgYnkgdGVtcG9yYXJpbHkgZ2V0dGluZyBtbWFwIHJlYWQgbG9jay4gKi8KJiM0MzsJbW1hcF9yZWFkX2xvY2sobW0pOwomIzQzOwl2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTsKJiM0MzsJaWYgKHZtYSAmYW1wOyZhbXA7ICF2bWFfc3RhcnRfcmVhZF9sb2NrZWQodm1hKSkKJiM0MzsJCXZtYSA9IE5VTEw7CiYjNDM7CW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gdm1hOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfbmV4dF92bWFfdW5kZXJfbW1hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkJCSAgICBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksCiAJCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZnJvbV9hZGRyKQpAQCAtNDMxLDcgJiM0Mzs0NTcsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfbmV4dF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAKIAlyZXR1cm4gdm1hOwogfQotI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi8KIAogI2lmZGVmIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQQogI2luY2x1ZGUgJmx0O2xpbnV4L2V4dGFibGUuaCZndDsKQEAgLTU0OCwyMyAmIzQzOzU3MywzIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJcmV0dXJuIE5VTEw7CiB9CiAjZW5kaWYgLyogQ09ORklHX0xPQ0tfTU1fQU5EX0ZJTkRfVk1BICovCi0KLSNlbHNlIC8qIENPTkZJR19NTVUgKi8KLQotLyoKLSAqIEF0IGxlYXN0IHh0ZW5zYSBlbmRzIHVwIGhhdmluZyBwcm90ZWN0aW9uIGZhdWx0cyBldmVuIHdpdGggbm8KLSAqIE1NVS4uIE5vIHN0YWNrIGV4cGFuc2lvbiwgYXQgbGVhc3QuCi0gKi8KLXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQl1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCi0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwotCWlmICghdm1hKQotCQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKLQlyZXR1cm4gdm1hOwotfQotCi0jZW5kaWYgLyogQ09ORklHX01NVSAqLwpkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggZWQ0ODYwYzAxOTM2Yy4uZmJjZjY0YzU5YTk3MyAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC00NDYsNyAmIzQzOzQ0Niw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX21tX3dhbGtfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCSBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jaykKIHsKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiAJc3dpdGNoICh3YWxrX2xvY2spIHsKIAljYXNlIFBHV0FMS19XUkxPQ0s6CiAJCXZtYV9zdGFydF93cml0ZSh2bWEpOwpAQCAtNDYxLDcgJiM0Mzs0NjAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkvKiBQR1dBTEtfUkRMT0NLIGlzIGhhbmRsZWQgYnkgcHJvY2Vzc19tbV93YWxrX2xvY2sgKi8KIAkJYnJlYWs7CiAJfQotI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggYjkxNzQzMTc1OWVlMC4uNGU0YTRiNzQ3OTc3MiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMjYwLDExICYjNDM7MjYwLDkgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsCiAJLyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi8KIAlWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uID09IFZNQV9PUF9NRVJHRV9VTkZBVUxURUQgJmFtcDsmYW1wOwogCQkJIWxpc3RfaXNfc2luZ3VsYXIoJmFtcDtzcmMtJmd0O2Fub25fdm1hX2NoYWluKSk7Ci0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogCS8qIE9ubHkgbWVyZ2luZyBhbiB1bmZhdWx0ZWQgVk1BIGxlYXZlcyB0aGUgZGVzdGluYXRpb24gYXR0YWNoZWQuICovCiAJVk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEICZhbXA7JmFtcDsKIAkJCXZtYV9pc19hdHRhY2hlZChkc3QpKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBtYXliZV9yZXVzZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IDI1OGIwMzE4MmE3ODAuLmMzYTBjMzhhM2RjM2IgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMTIyLDcgJiM0MzsxMjIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJcmV0dXJuIHZtYTsKIH0KIAotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIC8qCiAgKiB1ZmZkX2xvY2tfdm1hKCkgLSBMb29rdXAgYW5kIGxvY2sgdm1hIGNvcnJlc3BvbmRpbmcgdG8gQGFkZHJlc3MuCiAgKiBAbW06IG1tIHRvIHNlYXJjaCB2bWEgaW4uCkBAIC0xMzAsOCAmIzQzOzEyOSwxMCBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAgKgogICogU2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbW1hcF9sb2NrLgogICoKLSAqIFJldHVybjogQSBsb2NrZWQgdm1hIGNvbnRhaW5pbmcgQGFkZHJlc3MsIC1FTk9FTlQgaWYgbm8gdm1hIGlzIGZvdW5kLCBvcgotICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4mIzM5O3QgYmUgYWxsb2NhdGVkLgomIzQzOyAqIFJldHVybjogQSBsb2NrZWQgdm1hIGNvbnRhaW5pbmcgQGFkZHJlc3MsIC1FTk9FTlQgaWYgbm8gdm1hIGlzIGZvdW5kLAomIzQzOyAqIC1FTk9NRU0gaWYgYW5vbl92bWEgY291bGRuJiMzOTt0IGJlIGFsbG9jYXRlZCwgb3IgLUVBR0FJTiBpZiB2bWEgcmVmY291bnQKJiM0MzsgKiBvdmVyZmxvdyBoYXBwZW5lZCBkdWUgdG8gaGlnaCBudW1iZXIgb2YgcmVhZGVycyBhbmQgdGhlIGNhbGxlciBzaG91bGQKJiM0MzsgKiByZXRyeSBsYXRlci4KICAqLwogc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdWZmZF9sb2NrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQpAQCAtMTgyLDM0ICYjNDM7MTgzLDYgQEAgc3RhdGljIHZvaWQgdWZmZF9tZmlsbF91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJdm1hX2VuZF9yZWFkKHZtYSk7CiB9CiAKLSNlbHNlCi0KLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVmZmRfbWZpbGxfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWE7Ci0KLQltbWFwX3JlYWRfbG9jayhkc3RfbW0pOwotCWRzdF92bWEgPSBmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKGRzdF9tbSwgZHN0X3N0YXJ0KTsKLQlpZiAoSVNfRVJSKGRzdF92bWEpKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlpZiAodmFsaWRhdGVfZHN0X3ZtYShkc3Rfdm1hLCBkc3Rfc3RhcnQgJiM0MzsgbGVuKSkKLQkJcmV0dXJuIGRzdF92bWE7Ci0KLQlkc3Rfdm1hID0gRVJSX1BUUigtRU5PRU5UKTsKLW91dF91bmxvY2s6Ci0JbW1hcF9yZWFkX3VubG9jayhkc3RfbW0pOwotCXJldHVybiBkc3Rfdm1hOwotfQotCi1zdGF0aWMgdm9pZCB1ZmZkX21maWxsX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQltbWFwX3JlYWRfdW5sb2NrKHZtYS0mZ3Q7dm1fbW0pOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIG1maWxsX3B1dF92bWEoc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSkKIHsKIAlpZiAoIXN0YXRlLSZndDt2bWEpCkBAIC0xODUyLDcgJiM0MzsxODI1LDYgQEAgaW50IGZpbmRfdm1hc19tbV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLCiBzdGF0aWMgaW50IHVmZmRfbW92ZV9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCwKIAkJCSAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsCkBAIC0xOTI3LDMxICYjNDM7MTg5OSw2IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLAogCQl2bWFfZW5kX3JlYWQoZHN0X3ZtYSk7CiB9CiAKLSNlbHNlCi0KLXN0YXRpYyBpbnQgdWZmZF9tb3ZlX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LAotCQkJICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwKLQkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqZHN0X3ZtYXAsCi0JCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnNyY192bWFwKQotewotCWludCBlcnI7Ci0KLQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JZXJyID0gZmluZF92bWFzX21tX2xvY2tlZChtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIGRzdF92bWFwLCBzcmNfdm1hcCk7Ci0JaWYgKGVycikKLQkJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsCi0JCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSkKLXsKLQltbWFwX2Fzc2VydF9sb2NrZWQoc3JjX3ZtYS0mZ3Q7dm1fbW0pOwotCW1tYXBfcmVhZF91bmxvY2soZHN0X3ZtYS0mZ3Q7dm1fbW0pOwotfQotI2VuZGlmCi0KIC8qKgogICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWEKICAqIEBjdHg6IHBvaW50ZXIgdG8gdGhlIHVzZXJmYXVsdGZkIGNvbnRleHQKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNDU1NDQxZjFiNjk0OS4uNjJkZWZlNzBmM2NlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTIxNjcsMjcgJiM0MzsyMTY3LDE4IEBAIHN0YXRpYyB2b2lkIHRjcF96Y19maW5hbGl6ZV9yeF90c3RhbXAoc3RydWN0IHNvY2sgKnNrLAogfQogCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCQkJICAgYm9vbCAqbW1hcF9sb2NrZWQpCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpOwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyZXNzKTsKIAotCWlmICh2bWEpIHsKLQkJaWYgKHZtYS0mZ3Q7dm1fb3BzICE9ICZhbXA7dGNwX3ZtX29wcykgewotCQkJdm1hX2VuZF9yZWFkKHZtYSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQkqbW1hcF9sb2NrZWQgPSBmYWxzZTsKLQkJcmV0dXJuIHZtYTsKLQl9CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAKLQltbWFwX3JlYWRfbG9jayhtbSk7Ci0Jdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcmVzcyk7Ci0JaWYgKCF2bWEgfHwgdm1hLSZndDt2bV9vcHMgIT0gJmFtcDt0Y3Bfdm1fb3BzKSB7Ci0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwlpZiAodm1hLSZndDt2bV9vcHMgIT0gJmFtcDt0Y3Bfdm1fb3BzKSB7CiYjNDM7CQl2bWFfZW5kX3JlYWQodm1hKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCSptbWFwX2xvY2tlZCA9IHRydWU7CiYjNDM7CiAJcmV0dXJuIHZtYTsKIH0KIApAQCAtMjIwOCw3ICYjNDM7MjE5OSw2IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLAogCXUzMiBzZXEgPSB0cC0mZ3Q7Y29waWVkX3NlcTsKIAl1MzIgdG90YWxfYnl0ZXNfdG9fbWFwOwogCWludCBpbnEgPSB0Y3BfaW5xKHNrKTsKLQlib29sIG1tYXBfbG9ja2VkOwogCWludCByZXQ7CiAKIAl6Yy0mZ3Q7Y29weWJ1Zl9sZW4gPSAwOwpAQCAtMjIzMyw3ICYjNDM7MjIyMyw3IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLAogCQlyZXR1cm4gMDsKIAl9CiAKLQl2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC0mZ3Q7bW0sIGFkZHJlc3MsICZhbXA7bW1hcF9sb2NrZWQpOwomIzQzOwl2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC0mZ3Q7bW0sIGFkZHJlc3MpOwogCWlmICghdm1hKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjMxNSwxMCAmIzQzOzIzMDUsNyBAQCBzdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCSAgIHpjLCB0b3RhbF9ieXRlc190b19tYXApOwogCX0KIG91dDoKLQlpZiAobW1hcF9sb2NrZWQpCi0JCW1tYXBfcmVhZF91bmxvY2soY3VycmVudC0mZ3Q7bW0pOwotCWVsc2UKLQkJdm1hX2VuZF9yZWFkKHZtYSk7CiYjNDM7CXZtYV9lbmRfcmVhZCh2bWEpOwogCS8qIFRyeSB0byBjb3B5IHN0cmFnZ2xlciBkYXRhLiAqLwogCWlmICghcmV0KQogCQljb3B5bGVuID0gdGNwX3pjX2hhbmRsZV9sZWZ0b3Zlcih6Yywgc2ssIHNrYiwgJmFtcDtzZXEsIGNvcHlidWZfbGVuLCB0c3MpOwpkaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvbW0ucnMgYi9ydXN0L2tlcm5lbC9tbS5ycwppbmRleCA0NzY0ZDdiNjhmMmE3Li44NzdmYWQ2OGJlOWMzIDEwMDY0NAotLS0gYS9ydXN0L2tlcm5lbC9tbS5ycwomIzQzOyYjNDM7JiM0MzsgYi9ydXN0L2tlcm5lbC9tbS5ycwpAQCAtMTc0LDI2ICYjNDM7MTc0LDM4IEBAIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXcmbHQ7JiMzOTthJmd0OyhwdHI6ICpjb25zdCBiaW5kaW5nczo6bW1fc3RydWN0KSAtJmd0OyAmYW1wOyYjMzk7YSBNbVdpdGhVc2VyIHsKICAgICAvLy8gV2hlbiBwZXItdm1hIGxvY2tzIGFyZSBkaXNhYmxlZCwgdGhpcyBhbHdheXMgcmV0dXJucyBgTm9uZWAuCiAgICAgI1tpbmxpbmVdCiAgICAgcHViIGZuIGxvY2tfdm1hX3VuZGVyX3JjdSgmYW1wO3NlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLSZndDsgT3B0aW9uJmx0O1ZtYVJlYWRHdWFyZCZsdDsmIzM5O18mZ3Q7Jmd0OyB7Ci0gICAgICAgICNbY2ZnKENPTkZJR19QRVJfVk1BX0xPQ0spXQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBTQUZFVFk6IENhbGxpbmcgYGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3VgIGlzIGFsd2F5cyBva2F5IGdpdmVuIGFuIG1tIHdoZXJlCiAgICAgICAgICAgICAvLyBgbW1fdXNlcnNgIGlzIG5vbi16ZXJvLgogICAgICAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3Uoc2VsZi5hc19yYXcoKSwgdm1hX2FkZHIpIH07Ci0gICAgICAgICAgICBpZiAhdm1hLmlzX251bGwoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNvbWUoVm1hUmVhZEd1YXJkIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgbG9ja192bWFfdW5kZXJfcmN1YCByZXR1cm5zIGEgbm9uLW51bGwgcHRyLCB0aGVuIGl0IHBvaW50cyBhdCBhCi0gICAgICAgICAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC4KLSAgICAgICAgICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSwKLSAgICAgICAgICAgICAgICAgICAgX250czogTm90VGhyZWFkU2FmZSwKLSAgICAgICAgICAgICAgICB9KTsKJiM0MzsgICAgICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHsKJiM0MzsgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmU7CiAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgU29tZShWbWFSZWFkR3VhcmQgewomIzQzOyAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGEKJiM0MzsgICAgICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLgomIzQzOyAgICAgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LAomIzQzOyAgICAgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLAomIzQzOyAgICAgICAgICAgIH0pCiAgICAgICAgIH0KJiM0MzsgICAgfQogCi0gICAgICAgIC8vIFNpbGVuY2Ugd2FybmluZ3MgYWJvdXQgdW51c2VkIHZhcmlhYmxlcy4KLSAgICAgICAgI1tjZmcobm90KENPTkZJR19QRVJfVk1BX0xPQ0spKV0KLSAgICAgICAgbGV0IF8gPSB2bWFfYWRkcjsKLQotICAgICAgICBOb25lCiYjNDM7ICAgIC8vLyBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTsgYW5kIGxvY2sgaXQgZm9yIHJlYWRpbmcuIFdhaXRzIGZvciB3cml0ZXJzIHRvIGZpbmlzaCBpZiB0aGUKJiM0MzsgICAgLy8vIFZNQSBpcyBiZWluZyBtb2RpZmllZC4KJiM0MzsgICAgI1tpbmxpbmVdCiYjNDM7ICAgIHB1YiBmbiB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCgmYW1wO3NlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLSZndDsgT3B0aW9uJmx0O1ZtYVJlYWRHdWFyZCZsdDsmIzM5O18mZ3Q7Jmd0OyB7CiYjNDM7ICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVybwomIzQzOyAgICAgICAgLy8gYG1tX3VzZXJzYC4KJiM0MzsgICAgICAgIGxldCB2bWEgPSB1bnNhZmUgeyBiaW5kaW5nczo6dm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc2VsZi5hc19yYXcoKSwgdm1hX2FkZHIpIH07CiYjNDM7ICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHsKJiM0MzsgICAgICAgICAgICByZXR1cm4gTm9uZTsKJiM0MzsgICAgICAgIH0KJiM0MzsgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHsKJiM0MzsgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgcmV0dXJucyBhIG5vbi1udWxsIHB0ciwgdGhlbiBpdCBwb2ludHMgYXQgYQomIzQzOyAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC4KJiM0MzsgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LAomIzQzOyAgICAgICAgICAgIF9udHM6IE5vdFRocmVhZFNhZmUsCiYjNDM7ICAgICAgICB9KQogICAgIH0KIAogICAgIC8vLyBMb2NrIHRoZSBtbWFwIHJlYWQgbG9jay4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IDgwMGU1ZmEwMmQ3OGYuLjM2MmZlZGEyODUyNjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaApAQCAtNTgyLDcgJiM0Mzs1ODIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgewogCQl2bWFfZmxhZ3NfdCBmbGFnczsKIAl9OwogCi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DSwogCS8qCiAJICogQ2FuIG9ubHkgYmUgd3JpdHRlbiAodXNpbmcgV1JJVEVfT05DRSgpKSB3aGlsZSBob2xkaW5nIGJvdGg6CiAJICogIC0gbW1hcF9sb2NrIChpbiB3cml0ZSBtb2RlKQpAQCAtNTk4LDcgJiM0Mzs1OTcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgewogCSAqIHNsb3dwYXRoLgogCSAqLwogCXVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTsKLSNlbmRpZgomIzQzOwogCXVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfbG87CiAKIAkvKgpAQCAtNjMyLDEwICYjNDM7NjMxLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKIAlzdHJ1Y3Qgdm1hX251bWFiX3N0YXRlICpudW1hYl9zdGF0ZTsJLyogTlVNQSBCYWxhbmNpbmcgc3RhdGUgKi8KICNlbmRpZgotI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0sKIAkvKiBVbnN0YWJsZSBSQ1UgcmVhZGVycyBhcmUgYWxsb3dlZCB0byByZWFkIHRoaXMuICovCiAJcmVmY291bnRfdCB2bV9yZWZjbnQ7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl1bnNpZ25lZCBpbnQgX192bV92aXJ0X3Bnb2ZmX2hpOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oCmluZGV4IDhhNDhiMjMxYWE3YWIuLjU0ZDVjMzM2MGFhMjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oCkBAIC0xNSw3ICYjNDM7MTUsNiBAQAogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogCiAjZGVmaW5lIENPTkZJR19NTVUJCTEKLSNkZWZpbmUgQ09ORklHX1BFUl9WTUFfTE9DSwkxCiAKICNpZmRlZiBfX0NPTkNBVAogI3VuZGVmIF9fQ09OQ0FUCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDg4CgkJCQkJCQlvdXRwdXQ6IDIzNgoJCQkJCQkJdGhvdWdodHM6IDE5ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFVuY29uZGl0aW9uYWwgUGVyLVZNQSBMb2NraW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaWcgb25lLiBJdCYjMzk7cyBlc3NlbnRpYWxseSByaXBwaW5nIG91dCB0aGUgY29uZGl0aW9uYWwgYENPTkZJR19QRVJfVk1BX0xPQ0tgIGFuZCBmb3JjaW5nIHBlci1WTUEgbG9ja2luZyB0byBiZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZCBhY3Jvc3MgdGhlIGJvYXJkLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCwgYW5kIGl0JiMzOTtzIGdvaW5nIHRvIHJpcHBsZSBvdXQgdG8gYSAqbG90KiBvZiBzdWJzeXN0ZW1zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzICphYnNvbHV0ZWx5KiB3YXJyYW50cyBzZXJpb3VzIGZ1enppbmcgZWZmb3J0LgoKVGhlIGtleSB0aGluZyBJJiMzOTttIHNlZWluZyBpcyB0aGlzIG5ldyBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGZ1bmN0aW9uIGluIGBtbS9tbWFwX2xvY2suY2AuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIHByb3ZpZGUgYSByZWFkLXNpZGUgbG9jayBvbiBhIFZNQSB3aXRob3V0IHJlbHlpbmcgb24gUkNVIGluIHRoZSBmYXN0IHBhdGgsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGlzIGlzIGEgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbiBhbmQsIGdpdmVuIGl0cyBwZXJ2YXNpdmUgdXNlIGluIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBhIHByaW1lIHRhcmdldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIGRldGFpbC4gVGhlIHNsb3cgcGF0aCBhY3F1aXJpbmcgdGhlIGBtbWFwX3JlYWRfbG9ja2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLgoKQmV5b25kIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAsIEkmIzM5O20gc2VlaW5nIG1vZGlmaWNhdGlvbnMgaW4gc29tZSBjcml0aWNhbCBhcmVhcy4gYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuY2AgYW5kIGBkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNgIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBCaW5kZXIsIGEgY3JpdGljYWwgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIG1lY2hhbmlzbSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGlzc3VlcyBoZXJlLCB0aGV5IGNvdWxkIG1hbmlmZXN0IGFzIHZlcnkgaGFyZC10by1kZWJ1ZyBjcmFzaGVzIG9yIHZ1bG5lcmFiaWxpdGllcy4gYGJpbmRlcl9wYWdlX2luc2VydGAgYW5kIGBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlYCBhcmUgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBoZXJlLgoKYG5ldC9pcHY0L3RjcC5jYCBpcyBhbHNvIGdldHRpbmcgdG91Y2hlZC4gU3BlY2lmaWNhbGx5LCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSBsb2NraW5nIGZvciBhIHplcm8tY29weSByZWNlaXZlIHBhdGggaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhhdCYjMzk7cyBhbiBhcmVhIHdpdGggdmVyeSB0aWdodCB0aW1pbmcgY29uc3RyYWludHMgYW5kIGhpZ2ggcGVyZm9ybWFuY2UgZXhwZWN0YXRpb25zLiBDb25jdXJyZW50IGFjY2VzcyB0byB0aGUgVk1BcyBkdXJpbmcgdGhpcyBmdW5jdGlvbiBpcyB3b3J0aCBzY3J1dGluaXppbmcuCgpVc2VyZmF1bHRmZCAoYG1tL3VzZXJmYXVsdGZkLmNgKSBpcyBhbm90aGVyIGNydWNpYWwgYXJlYS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIGZhdWx0IGhhbmRsaW5nLCBhbmQgYW55IGxvY2tpbmcgZXJyb3JzIGhlcmUgY291bGQgZWFzaWx5IGxlYWQgdG8gcHJpdmlsZWdlIGVzY2FsYXRpb24uIGB1ZmZkX2xvY2tfdm1hYCBhbmQgYHVmZmRfbW92ZV9sb2NrYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuCgpBbmQgZmluYWxseSBCUEYgc3RhY2ttYXBzLiBJIHNlZSBjaGFuZ2VzIGluIGBrZXJuZWwvYnBmL3N0YWNrbWFwLmNgLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHN0YWNrX21hcF9sb2NrX3ZtYWAgZnVuY3Rpb24uIEJQRiBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkgcG93ZXJmdWwsIHNvIGFueXRoaW5nIHRoYXQgYWZmZWN0cyBpdHMgbWVtb3J5IHNhZmV0eSBpcyBjcml0aWNhbC4gQWxzbyBgYnBmX2l0ZXJfdGFza192bWFfbmV3YCBpcyBhIEJQRiBrZnVuYywgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQuCgpGdXJ0aGVybW9yZSwgY2hhbmdlcyB0byBwcm9jZnMgKGBmcy9wcm9jL3Rhc2tfbW11LmNgKSB0aGF0IGFyZSBub3cgdW5jb25kaXRpb25hbGx5IHVzaW5nIHBlci1WTUEgbG9ja2luZyBuZWVkcyB0byBiZSBjaGVja2VkLiBJJiMzOTttIHNlZWluZyBgbG9ja19jdHhfbW1gIGlzIG5vdyBhbHdheXMgdXNpbmcgdGhlIHNhbWUgY29kZSBwYXRoLCBpdCBtYXkgbmVlZCB0byBiZSBjaGVja2VkLgoKU2luY2Ugd2UgYXJlIG1ha2luZyBhbGwgcGVyLVZNQSBsb2NraW5nIHVuY29uZGl0aW9uYWxseSBlbmFibGVkLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBVU0VSRkFVTFRGRGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQU5EUk9JRF9CSU5ERVJfSVBDYCB0byBmdWxseSBleGVyY2lzZSB0aGVzZSBjb2RlIHBhdGhzLgoKVG8gc3VtbWFyaXplLCB0aGlzIGlzIHdoYXQgSSYjMzk7bSBzZWVpbmcgYXMgdGhlIGtleSBmb2N1cyBhcmVhcyBmb3IgdGhpcyBwYXRjaDoKCiogICAqKldvcnRoRnV6emluZyoqOiBZZXMKKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCAobmV3IGZ1bmN0aW9uLCBjZW50cmFsIHRvIHRoZSBwYXRjaCkKICAgICogICBgYmluZGVyX3BhZ2VfaW5zZXJ0YAogICAgKiAgIGBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlYAogICAgKiAgIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAKICAgICogICBgdWZmZF9sb2NrX3ZtYWAKICAgICogICBgdWZmZF9tb3ZlX2xvY2tgCiAgICAqICAgYHN0YWNrX21hcF9sb2NrX3ZtYWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOgogICAgKiAgIGBVU0VSRkFVTFRGRGAKICAgICogICBgQlBGX1NZU0NBTExgCiAgICAqICAgYEFORFJPSURfQklOREVSX0lQQ2AKCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlLCBhbmQgdGhlbiBnZXQgdG8gZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QU5EUk9JRF9CSU5ERVJfSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7YmluZGVyX3BhZ2VfaW5zZXJ0JiMzNDssCiAgICAmIzM0O2JpbmRlcl9hbGxvY19mcmVlX3BhZ2UmIzM0OywKICAgICYjMzQ7dGNwX3plcm9jb3B5X3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dWZmZF9sb2NrX3ZtYSYjMzQ7LAogICAgJiMzNDt1ZmZkX21vdmVfbG9jayYjMzQ7LAogICAgJiMzNDtzdGFja19tYXBfbG9ja192bWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYENPTkZJR19QRVJfVk1BX0xPQ0tgIG9wdGlvbiBhbmQgbWFrZXMgcGVyLVZNQSBsb2NraW5nIHVuY29uZGl0aW9uYWwgYWNyb3NzIHRoZSBrZXJuZWwuIEl0IGludHJvZHVjZXMgYSBuZXcgQVBJIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgYW5kIG1vZGlmaWVzIHNldmVyYWwgc3Vic3lzdGVtcyAoQmluZGVyLCBUQ1AgemVyb2NvcHksIFVzZXJmYXVsdGZkLCBCUEYgc3RhY2ttYXAsIHByb2NmcykgdG8gdXNlIGl0IG9yIHJlbHkgb24gdW5jb25kaXRpb25hbCBwZXItVk1BIGxvY2tpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIHN1YnN5c3RlbXMgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0FORFJPSURfQklOREVSX0lQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYV9zdGFydF9yZWFkX3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2JpbmRlcl9wYWdlX2luc2VydCYjMzQ7LAogICAgJiMzNDtiaW5kZXJfYWxsb2NfZnJlZV9wYWdlJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3VmZmRfbG9ja192bWEmIzM0OywKICAgICYjMzQ7dWZmZF9tb3ZlX2xvY2smIzM0OywKICAgICYjMzQ7c3RhY2tfbWFwX2xvY2tfdm1hJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDE6MTc6MjEuMTg1MzU0OTM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3Njc4NzkxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFfc3RhcnRfcmVhZF91bmxvY2tlZFwiLFxuICAgIFwiYmluZGVyX3BhZ2VfaW5zZXJ0XCIsXG4gICAgXCJiaW5kZXJfYWxsb2NfZnJlZV9wYWdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiLFxuICAgIFwidWZmZF9sb2NrX3ZtYVwiLFxuICAgIFwidWZmZF9tb3ZlX2xvY2tcIixcbiAgICBcInN0YWNrX21hcF9sb2NrX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAxOjE3OjIxLjE4NTM2MDQzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3MDE5NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWNjOTk4NDg1ODcwMTE2MDQ1ZjdlMjNjOWNlMzg3Zjg4ZDkzY2UzY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDAxOjE3OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnXFxuaW5kZXggOTE4NzI0MGEwMmRiNS4uZjgxNTIwOTE2N2NkOCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybS9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm0vS2NvbmZpZ1xcbkBAIC00MSw3ICs0MSw2IEBAIGNvbmZpZyBBUk1cXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNV1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DRklcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTIGlmIEFSTV9MUEFFXFxuLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFxcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbmluZGV4IDExYTljNTM0YjdiNDguLjIxZWI2NGIyNGEyYzcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTgxLDcgKzgxLDYgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBBUkNIX0hBU19QVEVfUFJPVE5PTkVcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1xcbi1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfU01UXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuaW5kZXggZTIwYWNiZTVmZTdiNS4uNzc0MWUzOWVjYTJiNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xcbkBAIC02OSw3ICs2OSw2IEBAIGNvbmZpZyBMT09OR0FSQ0hcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19QVEVfUFJPVE5PTkUgaWYgNjRCSVRcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkcgaWYgTlVNQVxcbi1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfU01UIGlmIFNNUFxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQyAgaWYgU01QXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcXG5pbmRleCBiNWFkN2MxNzNlZjBjLi5kZDhmNjA2MGZiN2EyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnXFxuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcXG5AQCAtMTcsNyArMTcsNiBAQCBjb25maWcgUFBDX1BPV0VSTlZcXG4gXFx0c2VsZWN0IFBQQ19ET09SQkVMTFxcbiBcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuIFxcdHNlbGVjdCBGT1JDRV9TTVBcXG4tXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuIFxcdHNlbGVjdCBQUENfUkFESVhfQlJPQURDQVNUX1RMQklFIGlmIFBQQ19SQURJWF9NTVVcXG4gXFx0ZGVmYXVsdCB5XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXFxuaW5kZXggNzQ5MTBjZTNhNTQxYy4uN2QxMjVlMjg4ZjZlZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZ1xcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXFxuQEAgLTIzLDcgKzIzLDYgQEAgY29uZmlnIFBQQ19QU0VSSUVTXFxuIFxcdHNlbGVjdCBIT1RQTFVHX0NQVVxcbiBcXHRzZWxlY3QgRk9SQ0VfU01QXFxuIFxcdHNlbGVjdCBTV0lPVExCXFxuLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbiBcXHRzZWxlY3QgUFBDX1JBRElYX0JST0FEQ0FTVF9UTEJJRSBpZiBQUENfUkFESVhfTU1VXFxuIFxcdGRlZmF1bHQgeVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXFxuaW5kZXggN2I5YzM3M2Q4MmZhYy4uZmFhODVhMDMxZmU1NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L0tjb25maWdcXG4rKysgYi9hcmNoL3Jpc2N2L0tjb25maWdcXG5AQCAtNzAsNyArNzAsNiBAQCBjb25maWcgUklTQ1ZcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HX1RISU5cXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTIGlmIDY0QklUIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLIGlmIE1NVVxcbi1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgaWYgTU1VXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19QVEVfUFJPVE5PTkUgaWYgTU1VXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1JUXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1NIQURPV19DQUxMX1NUQUNLIGlmIEhBVkVfU0hBRE9XX0NBTExfU1RBQ0tcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xcbmluZGV4IGFiOGZjY2MyY2M0ZTIuLmQxMjc0YmNhOGMzOWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xcbkBAIC0xNTEsNyArMTUxLDYgQEAgY29uZmlnIFMzOTBcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORVxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXFxuLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXFxuIFxcdHNlbGVjdCBBUkNIX1VTRV9TWU1fQU5OT1RBVElPTlNcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcXG5pbmRleCBmYjI5OGUyMTkxNzkyLi43OTQ3OWQyOTU3NmZmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXFxuQEAgLTI3LDcgKzI3LDYgQEAgY29uZmlnIFg4Nl82NFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSU5UMTI4IGlmIENDX0hBU19JTlQxMjhcXG4tXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfU09GVF9ESVJUWVxcbiBcXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcXG5AQCAtMTg0Niw3ICsxODQ1LDYgQEAgY29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbiBcXHRib29sIFxcXCJYODYgdXNlcnNwYWNlIHNoYWRvdyBzdGFja1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBBU19XUlVTU1xcbiBcXHRkZXBlbmRzIG9uIFg4Nl82NFxcbi1cXHRkZXBlbmRzIG9uIFBFUl9WTUFfTE9DS1xcbiBcXHRzZWxlY3QgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19VU0VSX1NIQURPV19TVEFDS1xcbiBcXHRzZWxlY3QgWDg2X0NFVFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNcXG5pbmRleCBlODJhNTUyMzgwNGY0Li5mN2FkODhhMGQ4MDY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yc1xcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yc1xcbkBAIC00MzksMjIgKzQzOSw5IEBAIHVuc2FmZSBmbiB1c2VfcGFnZV9zbG93KFxcdTAwMjZzZWxmLCBpOiB1c2l6ZSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzYygpXFx1MDAzZSB7XFxuICAgICAgICAgLy8gd29ya3F1ZXVlLlxcbiAgICAgICAgIGxldCBtbSA9IE1tV2l0aFVzZXI6OmludG9fbW1wdXRfYXN5bmMoc2VsZi5tbS5tbWdldF9ub3RfemVybygpLm9rX29yKEVTUkNIKT8pO1xcbiAgICAgICAgIHtcXG4tICAgICAgICAgICAgbGV0IHZtYV9yZWFkO1xcbi0gICAgICAgICAgICBsZXQgbW1hcF9yZWFkO1xcbi0gICAgICAgICAgICBsZXQgdm1hID0gaWYgbGV0IFNvbWUocmV0KSA9IG1tLmxvY2tfdm1hX3VuZGVyX3JjdSh2bWFfYWRkcikge1xcbi0gICAgICAgICAgICAgICAgdm1hX3JlYWQgPSByZXQ7XFxuLSAgICAgICAgICAgICAgICBjaGVja192bWEoXFx1MDAyNnZtYV9yZWFkLCBzZWxmKVxcbi0gICAgICAgICAgICB9IGVsc2Uge1xcbi0gICAgICAgICAgICAgICAgbW1hcF9yZWFkID0gbW0ubW1hcF9yZWFkX2xvY2soKTtcXG4tICAgICAgICAgICAgICAgIG1tYXBfcmVhZFxcbi0gICAgICAgICAgICAgICAgICAgIC52bWFfbG9va3VwKHZtYV9hZGRyKVxcbi0gICAgICAgICAgICAgICAgICAgIC5hbmRfdGhlbih8dm1hfCBjaGVja192bWEodm1hLCBzZWxmKSlcXG4tICAgICAgICAgICAgfTtcXG4tXFxuLSAgICAgICAgICAgIG1hdGNoIHZtYSB7XFxuLSAgICAgICAgICAgICAgICBTb21lKHZtYSkgPVxcdTAwM2Ugdm1hLnZtX2luc2VydF9wYWdlKHVzZXJfcGFnZV9hZGRyLCBcXHUwMDI2bmV3X3BhZ2UpPyxcXG4tICAgICAgICAgICAgICAgIE5vbmUgPVxcdTAwM2UgcmV0dXJuIEVycihFU1JDSCksXFxuLSAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgbGV0IHZtYV9yZWFkX2d1YXJkID0gbW0udm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQodm1hX2FkZHIpLm9rX29yKEVTUkNIKT87XFxuKyAgICAgICAgICAgIGxldCB2bWEgPSBjaGVja192bWEoXFx1MDAyNnZtYV9yZWFkX2d1YXJkLCBzZWxmKS5va19vcihFU1JDSCk/O1xcbisgICAgICAgICAgICB2bWEudm1faW5zZXJ0X3BhZ2UodXNlcl9wYWdlX2FkZHIsIFxcdTAwMjZuZXdfcGFnZSk/O1xcbiAgICAgICAgIH1cXG4gXFxuICAgICAgICAgbGV0IGlubmVyID0gc2VsZi5sb2NrLmxvY2soKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jIGIvZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jXFxuaW5kZXggZTQ0ODhhZDg2YTY1NS4uNTE5ZGNkZWQxOWIyNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmNcXG4rKysgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmNcXG5AQCAtMjU5LDIxICsyNTksMTQgQEAgc3RhdGljIGludCBiaW5kZXJfcGFnZV9pbnNlcnQoc3RydWN0IGJpbmRlcl9hbGxvYyAqYWxsb2MsXFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRpbnQgcmV0ID0gLUVTUkNIO1xcbiBcXG4tXFx0LyogYXR0ZW1wdCBwZXItdm1hIGxvY2sgZmlyc3QgKi9cXG4tXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyKTtcXG4tXFx0aWYgKHZtYSkge1xcbi1cXHRcXHRpZiAoYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpXFxuLVxcdFxcdFxcdHJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgYWRkciwgcGFnZSk7XFxuLVxcdFxcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbitcXHR2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcik7XFxuK1xcdGlmICghdm1hKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuIFxcbi1cXHQvKiBmYWxsIGJhY2sgdG8gbW1hcF9sb2NrICovXFxuLVxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuLVxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpXFxuK1xcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcXG4gXFx0XFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuK1xcbitcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMTE0Miw3ICsxMTM1LDYgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlX3RvX2ZyZWU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyO1xcbi1cXHRpbnQgbW1fbG9ja2VkID0gMDtcXG4gXFx0c2l6ZV90IGluZGV4O1xcbiBcXG4gXFx0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXFxuQEAgLTExNTEsMTQgKzExNDMsMjAgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gXFx0aW5kZXggPSBtZGF0YS1cXHUwMDNlcGFnZV9pbmRleDtcXG4gXFx0cGFnZV9hZGRyID0gYWxsb2MtXFx1MDAzZXZtX3N0YXJ0ICsgaW5kZXggKiBQQUdFX1NJWkU7XFxuIFxcbi1cXHQvKiBhdHRlbXB0IHBlci12bWEgbG9jayBmaXJzdCAqL1xcbitcXHQvKlxcbitcXHQgKiBBdHRlbXB0IHBlci12bWEgbG9jay4gVGhpcyBpcyBlc3NlbnRpYWxseSBhXFxuK1xcdCAqIFxcXCJ0cnlsb2NrXFxcIi4gSXQgY2FuIGZhaWwgZXZlbiBpZiB0aGUgVk1BIGV4aXN0c1xcbitcXHQgKiBmb3IgJ3BhZ2VfYWRkcicuXFxuK1xcdCAqL1xcbiBcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIHBhZ2VfYWRkcik7XFxuIFxcdGlmICghdm1hKSB7XFxuLVxcdFxcdC8qIGZhbGwgYmFjayB0byBtbWFwX2xvY2sgKi9cXG4tXFx0XFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayhtbSkpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX21tYXBfcmVhZF9sb2NrX2ZhaWxlZDtcXG4tXFx0XFx0bW1fbG9ja2VkID0gMTtcXG4tXFx0XFx0dm1hID0gdm1hX2xvb2t1cChtbSwgcGFnZV9hZGRyKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIHZtYSBleGlzdHMsIHdlIGNhbid0IGNvbnRpbnVlIGJlY2F1c2Ugd2UgY2Fubm90XFxuK1xcdFxcdCAqIHJlbW92ZSB0aGUgcGFnZSBmcm9tIHRoZSB2bWEuIEhvd2V2ZXIsIGlmIHRoZSB2bWEgd2FzXFxuK1xcdFxcdCAqIHVubWFwcGVkLCBpdCdzIG9rYXkgdG8gY29udGludWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoYmluZGVyX2FsbG9jX2lzX21hcHBlZChhbGxvYykpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3ZtYV9sb2NrX2ZhaWxlZDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZhbGxvYy1cXHUwMDNlbXV0ZXgpKVxcbkBAIC0xMTkxLDkgKzExODksNyBAQCBlbnVtIGxydV9zdGF0dXMgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbiBcXHR9XFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmFsbG9jLVxcdTAwM2VtdXRleCk7XFxuLVxcdGlmIChtbV9sb2NrZWQpXFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRlbHNlXFxuK1xcdGlmICh2bWEpXFxuIFxcdFxcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbiBcXHRtbXB1dF9hc3luYyhtbSk7XFxuIFxcdGJpbmRlcl9mcmVlX3BhZ2UocGFnZV90b19mcmVlKTtcXG5AQCAtMTIwMywxMSArMTE5OSw5IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuIGVycl9pbnZhbGlkX3ZtYTpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhbGxvYy1cXHUwMDNlbXV0ZXgpO1xcbiBlcnJfZ2V0X2FsbG9jX211dGV4X2ZhaWxlZDpcXG4tXFx0aWYgKG1tX2xvY2tlZClcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKHZtYSlcXG4gXFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuLWVycl9tbWFwX3JlYWRfbG9ja19mYWlsZWQ6XFxuK2Vycl92bWFfbG9ja19mYWlsZWQ6XFxuIFxcdG1tcHV0X2FzeW5jKG1tKTtcXG4gZXJyX21tZ2V0OlxcbiBcXHRyZXR1cm4gTFJVX1NLSVA7XFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaFxcbmluZGV4IGIyMzJlMTA5ODExN2IuLjY3MTM3NTdkYTA5OTIgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvcHJvYy9pbnRlcm5hbC5oXFxuQEAgLTM4NSwxMCArMzg1LDggQEAgc3RydWN0IG1lbV9zaXplX3N0YXRzO1xcbiBcXG4gc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCB7XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBcXHRib29sIG1tYXBfbG9ja2VkO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tlZF92bWE7XFxuLSNlbmRpZlxcbiB9O1xcbiBcXG4gc3RydWN0IHByb2NfbWFwc19wcml2YXRlIHtcXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuaW5kZXggODE3ZTNlMGY5MTk0My4uMDk2YmYwYjBiOWUwZSAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcXG5AQCAtMTMwLDggKzEzMCw2IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19tZW1wb2xpY3koc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IGxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbiB7XFxuIFxcdGludCByZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbkBAIC0yMzMsNDYgKzIzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcXG4gXFx0dm1hX2l0ZXJfc2V0KFxcdTAwMjZwcml2LVxcdTAwM2VpdGVyLCBwcml2LVxcdTAwM2Vsb2NrX2N0eC5sb2NrZWRfdm1hLVxcdTAwM2V2bV9lbmQpO1xcbiB9XFxuIFxcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXFxuLVxcbi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4te1xcbi1cXHRyZXR1cm4gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobG9ja19jdHgtXFx1MDAzZW1tKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbi17XFxuLVxcdHJldHVybiBsb2NrX2N0eF9tbShsb2NrX2N0eCkgPT0gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja192bWFfcmFuZ2Uoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGxvZmZfdCBsYXN0X3BvcylcXG4te1xcbi1cXHRyZXR1cm4gdm1hX25leHQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4tXFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBwb3MpXFxuLXtcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KSB7fVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpIHt9XFxuLVxcbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xcbi1cXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxcbiB7XFxuIFxcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuQEAgLTU2MCw4ICs1MTgsNiBAQCBzdGF0aWMgaW50IHBpZF9tYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdFxcdFBST0NNQVBfUVVFUllfVk1BX0ZMQUdTXFx0XFx0XFx0XFx0XFxcXFxcbiApXFxuIFxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbi1cXG4gc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuIHtcXG4gXFx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xcbkBAIC02MTIsMjYgKzU2OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0XFxuIFxcdHJldHVybiB2bWE7XFxuIH1cXG4gXFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4tXFxuLXN0YXRpYyBpbnQgcXVlcnlfdm1hX3NldHVwKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbi17XFxuLVxcdHJldHVybiBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBxdWVyeV92bWFfdGVhcmRvd24oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4te1xcbi1cXHRyZXR1cm4gZmluZF92bWEobG9ja19jdHgtXFx1MDAzZW1tLCBhZGRyKTtcXG4tfVxcbi1cXG4tI2VuZGlmICAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXFxuLVxcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV9tYXRjaGluZ192bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHUzMiBmbGFncylcXG4ge1xcbkBAIC0xMzE0LDggKzEyNTAsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfb3BzID0ge1xcbiBcXHQud2Fsa19sb2NrXFx0XFx0PSBQR1dBTEtfUkRMT0NLLFxcbiB9O1xcbiBcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfd2Fsa192bWFfbG9ja19vcHMgPSB7XFxuIFxcdC5wbWRfZW50cnlcXHRcXHQ9IHNtYXBzX3B0ZV9yYW5nZSxcXG4gXFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHNtYXBzX2h1Z2V0bGJfcmFuZ2UsXFxuQEAgLTEzNDUsMjIgKzEyNzksNiBAQCBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gXFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzO1xcbiB9XFxuIFxcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXFxuLVxcbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXFxuLWdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuLXtcXG4tXFx0cmV0dXJuIFxcdTAwMjZzbWFwc193YWxrX29wcztcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxcbi1nZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbi17XFxuLVxcdHJldHVybiBcXHUwMDI2c21hcHNfc2htZW1fd2Fsa19vcHM7XFxuLX1cXG4tXFxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXFxuLVxcbiAvKlxcbiAgKiBHYXRoZXIgbWVtIHN0YXRzIGZyb20gQHZtYSB3aXRoIHRoZSBpbmRpY2F0ZWQgYmVnaW5uaW5nXFxuICAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuXFxuQEAgLTM0OTcsNyArMzQxNSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX29wcyA9IHtcXG4gXFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuIH07XFxuIFxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNob3dfbnVtYV92bWFfbG9ja19vcHMgPSB7XFxuIFxcdC5odWdldGxiX2VudHJ5ID0gZ2F0aGVyX2h1Z2V0bGJfc3RhdHMsXFxuIFxcdC5wbWRfZW50cnkgPSBnYXRoZXJfcHRlX3N0YXRzLFxcbkBAIC0zNTEyLDE2ICszNDI5LDYgQEAgZ2V0X3Nob3dfbnVtYV9vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gXFx1MDAyNnNob3dfbnVtYV92bWFfbG9ja19vcHM7XFxuIH1cXG4gXFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4tXFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcXG4tZ2V0X3Nob3dfbnVtYV9vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbi17XFxuLVxcdHJldHVybiBcXHUwMDI2c2hvd19udW1hX29wcztcXG4tfVxcbi1cXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4tXFxuIC8qXFxuICAqIERpc3BsYXkgcGFnZXMgYWxsb2NhdGVkIHBlciBub2RlIGFuZCBtZW1vcnkgcG9saWN5IHZpYSAvcHJvYy5cXG4gICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxcbmluZGV4IDdmYWJlNmM2NmI0YjcuLmQ5ODUwZjg0NjI0MjcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTkzMSw3ICs5MzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX251bWFiX3N0YXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XFxuICAqIFRoZXNlIG11c3QgYmUgaGVyZSByYXRoZXIgdGhhbiBtbWFwX2xvY2suaCBhcyBkZXBlbmRlbnQgb24gdm1fZmF1bHQgdHlwZSxcXG4gICogZGVjbGFyZWQgaW4gdGhpcyBoZWFkZXIuXFxuICAqL1xcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiB7XFxuIFxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSylcXG5AQCAtOTQ3LDE3ICs5NDYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2ZhdWx0X2xvY2tlZChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0ZWxzZVxcbiBcXHRcXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4gfVxcbi0jZWxzZVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi17XFxuLVxcdG1tYXBfcmVhZF91bmxvY2sodm1mLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tKTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9mYXVsdF9sb2NrZWQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLXtcXG4tXFx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSk7XFxuLX1cXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9mbGFnc190ZXN0KGludCBmbGFnLCBjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcXG5pbmRleCBiNWQ0Y2QzYjA2N2JmLi5kOGUyNDZmZDA5ZDMxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbkBAIC05NTAsNyArOTUwLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcXG4gXFx0XFx0dm1hX2ZsYWdzX3QgZmxhZ3M7XFxuIFxcdH07XFxuIFxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBcXHQvKlxcbiBcXHQgKiBDYW4gb25seSBiZSB3cml0dGVuICh1c2luZyBXUklURV9PTkNFKCkpIHdoaWxlIGhvbGRpbmcgYm90aDpcXG4gXFx0ICogIC0gbW1hcF9sb2NrIChpbiB3cml0ZSBtb2RlKVxcbkBAIC05NjYsNyArOTY1LDcgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcXG4gXFx0ICogc2xvd3BhdGguXFxuIFxcdCAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdm1fbG9ja19zZXE7XFxuLSNlbmRpZlxcbitcXG4gXFx0LypcXG4gXFx0ICogTG93IDMyLWJpdHMgb2YgdmlydHVhbCBwYWdlIG9mZnNldC5cXG4gXFx0ICogU2VlIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgY29tbWVudCBmb3IgZGV0YWlscy5cXG5AQCAtMTAwMyw3ICsxMDAyLDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcXG4gI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbiBcXHRzdHJ1Y3Qgdm1hX251bWFiX3N0YXRlICpudW1hYl9zdGF0ZTtcXHQvKiBOVU1BIEJhbGFuY2luZyBzdGF0ZSAqL1xcbiAjZW5kaWZcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0LypcXG4gXFx0ICogVXNlZCB0byBrZWVwIHRyYWNrIG9mIGZpcnN0bHksIHdoZXRoZXIgdGhlIFZNQSBpcyBhdHRhY2hlZCwgc2Vjb25kbHksXFxuIFxcdCAqIGlmIGF0dGFjaGVkLCBob3cgbWFueSByZWFkIGxvY2tzIGFyZSB0YWtlbiwgYW5kIHRoaXJkbHksIGlmIHRoZVxcbkBAIC0xMDQ2LDcgKzEwNDQsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcXG4gXFx0c3RydWN0IGxvY2tkZXBfbWFwIHZtbG9ja19kZXBfbWFwO1xcbiAjZW5kaWZcXG4tI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfNjRCSVRcXG4gXFx0LypcXG4gXFx0ICogSGlnaCAzMi1iaXRzIG9mIHZpcnR1YWwgcGFnZSBvZmZzZXQuXFxuQEAgLTEyNTQsNyArMTI1MSw2IEBAIHN0cnVjdCBtbV9zdHJ1Y3Qge1xcbiBcXHRcXHRcXHRcXHRcXHQgICogaW5pdF9tbS5tbWxpc3QsIGFuZCBhcmUgcHJvdGVjdGVkXFxuIFxcdFxcdFxcdFxcdFxcdCAgKiBieSBtbWxpc3RfbG9ja1xcbiBcXHRcXHRcXHRcXHRcXHQgICovXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdFxcdHN0cnVjdCByY3V3YWl0IHZtYV93cml0ZXJfd2FpdDtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhpcyBmaWVsZCBoYXMgbG9jay1saWtlIHNlbWFudGljcywgbWVhbmluZyBpdCBpcyBzb21ldGltZXNcXG5AQCAtMTI3NCw3ICsxMjcwLDcgQEAgc3RydWN0IG1tX3N0cnVjdCB7XFxuIFxcdFxcdCAqIG1tYXBfbG9jay5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHNlcWNvdW50X3QgbW1fbG9ja19zZXE7XFxuLSNlbmRpZlxcbitcXG4gXFx0XFx0c3RydWN0IGZ1dGV4X21tX2RhdGFcXHRmdXRleDtcXG4gXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgaGl3YXRlcl9yc3M7IC8qIEhpZ2gtd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbmluZGV4IDg3Zjc3ZTNkYTc3ZjAuLmZkZDhmNWNmNTcyMjIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG5AQCAtNzYsOCArNzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRyd3NlbV9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2bW0tXFx1MDAzZW1tYXBfbG9jayk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuLVxcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gI2RlZmluZSBfX3ZtYV9sb2NrZGVwX21hcCh2bWEpIChcXHUwMDI2dm1hLVxcdTAwM2V2bWxvY2tfZGVwX21hcClcXG4gI2Vsc2VcXG5AQCAtMjMwLDEwICsyMjgsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9yZWZjb3VudF9wdXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGxvY2tpbmcgd2lsbCBub3RcXG4tICogZmFpbCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcXG4rICogVXNlIG9ubHkgd2hpbGUgaG9sZGluZyBtbWFwIHJlYWQgbG9jayB3aGljaCBndWFyYW50ZWVzIHRoYXQgdm1hIGxvY2sgaXMgbm90XFxuKyAqIGNvbnRlbmRlZCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcXG4gICogbm90IGJlIHVzZWQgaW4gc3VjaCBjYXNlcyBiZWNhdXNlIGl0IG1pZ2h0IGZhaWwgZHVlIHRvIG1tX2xvY2tfc2VxIG92ZXJmbG93LlxcbiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCB0byBvYnRhaW4gdm1hIHJlYWQgbG9jayBhbmQgZHJvcCB0aGUgbW1hcCByZWFkIGxvY2suXFxuKyAqIFZNQSBjYW4ndCBiZSBkZXRhY2hlZCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBtbWFwIGxvY2ssIHRoZXJlZm9yZSBpbiBwcmFjdGljZSB0aGlzXFxuKyAqIGZ1bmN0aW9uIGNhbiBmYWlsIG9ubHkgd2hlbiB0aGVyZSBhcmUgc28gbWFueSByZWFkZXJzIHRoYXQgdm1fcmVmY250IG92ZXJmbG93cy5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgc3ViY2xhc3MpXFxuIHtcXG5AQCAtMjQ5LDE2ICsyNDksMjEgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV9zdGFydF9yZWFkX2xvY2tlZF9uZXN0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGludFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBsb2NraW5nIHdpbGwgbm90XFxuLSAqIGZhaWwgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXFxuKyAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHZtYSBsb2NrIGlzIG5vdFxcbisgKiBjb250ZW5kZWQgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXFxuICAqIG5vdCBiZSB1c2VkIGluIHN1Y2ggY2FzZXMgYmVjYXVzZSBpdCBtaWdodCBmYWlsIGR1ZSB0byBtbV9sb2NrX3NlcSBvdmVyZmxvdy5cXG4gICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgdG8gb2J0YWluIHZtYSByZWFkIGxvY2sgYW5kIGRyb3AgdGhlIG1tYXAgcmVhZCBsb2NrLlxcbisgKiBWTUEgY2FuJ3QgYmUgZGV0YWNoZWQgd2hpbGUgd2UgYXJlIGhvbGRpbmcgbW1hcCBsb2NrLCB0aGVyZWZvcmUgaW4gcHJhY3RpY2UgdGhpc1xcbisgKiBmdW5jdGlvbiBjYW4gZmFpbCBvbmx5IHdoZW4gdGhlcmUgYXJlIHNvIG1hbnkgcmVhZGVycyB0aGF0IHZtX3JlZmNudCBvdmVyZmxvd3MuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHJldHVybiB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHZtYSwgMCk7XFxuIH1cXG4gXFxuK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9lbmRfcmVhZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHR2bWFfcmVmY291bnRfcHV0KHZtYSk7XFxuQEAgLTQ4NCw1NCArNDg5LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB2bWFfaXRlcmF0b3IgKml0ZXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcXG4gXFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9sb2NrX3NlcWNvdW50X2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9sb2NrX3NlcWNvdW50X2JlZ2luKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9lbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHt9XFxuLVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW1hcF9sb2NrX3NwZWN1bGF0ZV90cnlfYmVnaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCAqc2VxKVxcbi17XFxuLVxcdHJldHVybiBmYWxzZTtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSBib29sIG1tYXBfbG9ja19zcGVjdWxhdGVfcmV0cnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBzZXEpXFxuLXtcXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9sb2NrX2luaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgcmVzZXRfcmVmY250KSB7fVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2VuZF9yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX3N0YXJ0X3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxcbi1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVja1xcbi1pbnQgdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7IHJldHVybiAwOyB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tXFx0XFx0eyBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQodm1hLVxcdTAwM2V2bV9tbSk7IH1cXG4tc3RhdGljIGlubGluZSBib29sIHZtYV9pc19hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tXFx0XFx0eyByZXR1cm4gdHJ1ZTsgfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfZGV0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbWFya19hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9tYXJrX2RldGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxcbi1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi17XFxuLVxcdHJldHVybiBOVUxMO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLXtcXG4tXFx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cXHUwMDNldm1fbW0pO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9zdGFiaWxpc2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi17XFxuLVxcdC8qIElmIG5vIFZNQSBsb2NrcywgdGhlbiBlaXRoZXIgbW1hcCBsb2NrIHN1ZmZpY2VzIHRvIHN0YWJpbGlzZS4gKi9cXG4tXFx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cXHUwMDNldm1fbW0pO1xcbi19XFxuLVxcbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfY2FuX21vZGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhY2ttYXAuYyBiL2tlcm5lbC9icGYvc3RhY2ttYXAuY1xcbmluZGV4IDQxZmU4N2Q3MzAyZjIuLjg4NDhlMjZlZjU4MTMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXFxuKysrIGIva2VybmVsL2JwZi9zdGFja21hcC5jXFxuQEAgLTI3MiwxMyArMjcyLDggQEAgc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayB7XFxuIC8qXFxuICAqIEFjcXVpcmUgYSBzdGFibGUgcmVhZC1zaWRlIHJlZmVyZW5jZSBvbiB0aGUgVk1BIGNvdmVyaW5nIEBpcC5cXG4gICpcXG4tICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPXkgdGhpcyByZXR1cm5zIGEgVk1BIHdpdGggaXRzIHBlci1WTUEgcmVhZFxcbi0gKiBsb2NrIGhlbGQgYW5kIG1tYXBfbG9jayBkcm9wcGVkLCBzbyB0aGUgY2FsbGVyIG1heSBzbGVlcC5cXG4tICpcXG4tICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPW4gaXQgcmV0dXJucyBhIFZNQSB3aXRoIG1tYXBfbG9jayBzdGlsbFxcbi0gKiBoZWxkOyB0aGUgY2FsbGVyIG11c3Qgc25hcHNob3QgYW55IGZpZWxkcyBpdCBuZWVkcyBhbmQgcGluIHZtX2ZpbGVcXG4tICogd2l0aCBnZXRfZmlsZSgpIGJlZm9yZSBzdGFja19tYXBfdW5sb2NrX3ZtYSgpIGRyb3BzIG1tYXBfbG9jaywgYXNcXG4tICogdGhlIFZNQSBtYXkgYmUgc3BsaXQsIG1lcmdlZCwgb3IgZnJlZWQgYWZ0ZXIgdGhhdC5cXG4rICogVGhpcyByZXR1cm5zIGEgVk1BIHdpdGggaXRzIHBlci1WTUEgcmVhZCBsb2NrIGhlbGQgYW5kIG1tYXBfbG9ja1xcbisgKiBkcm9wcGVkLCBzbyB0aGUgY2FsbGVyIG1heSBzbGVlcC5cXG4gICpcXG4gICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2Ugbm8gbG9jayBpcyBoZWxkLlxcbiAgKi9cXG5AQCAtMjg4LDcgKzI4Myw2IEBAIHN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKVxcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2stXFx1MDAzZW1tO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFxuLVxcdC8qIG5vb3AgdW5kZXIgIUNPTkZJR19QRVJfVk1BX0xPQ0sgKi9cXG4gXFx0dm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBpcCk7XFxuIFxcdGlmICh2bWEpIHtcXG4gXFx0XFx0bG9jay1cXHUwMDNldm1hID0gdm1hO1xcbkBAIC0zMDgsMTMgKzMwMiwxMSBAQCBzdGFja19tYXBfbG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBpcClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdGlmICghdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHZtYSkpIHtcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi0jZW5kaWZcXG4gXFxuIFxcdGxvY2stXFx1MDAzZXZtYSA9IHZtYTtcXG4gXFx0cmV0dXJuIHZtYTtcXG5AQCAtMzIyLDExICszMTQsNyBAQCBzdGFja19tYXBfbG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBpcClcXG4gXFxuIHN0YXRpYyB2b2lkIHN0YWNrX21hcF91bmxvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2spXFxuIHtcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0dm1hX2VuZF9yZWFkKGxvY2stXFx1MDAzZXZtYSk7XFxuLSNlbHNlXFxuLVxcdG1tYXBfcmVhZF91bmxvY2sobG9jay1cXHUwMDNlbW0pO1xcbi0jZW5kaWZcXG4gXFx0bG9jay1cXHUwMDNldm1hID0gTlVMTDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90YXNrX2l0ZXIuYyBiL2tlcm5lbC9icGYvdGFza19pdGVyLmNcXG5pbmRleCBlNzkxYWUwNjVjMzliLi42Y2Y4MTViYzg0YmVmIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdGFza19pdGVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jXFxuQEAgLTgzNSwxMSArODM1LDYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0LFxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYV9rZXJuKSAhPSBzaXplb2Yoc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hKSk7XFxuIFxcdEJVSUxEX0JVR19PTihfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWFfa2VybikgIT0gX19hbGlnbm9mX18oc3RydWN0IGJwZl9pdGVyX3Rhc2tfdm1hKSk7XFxuIFxcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BFUl9WTUFfTE9DSykpIHtcXG4tXFx0XFx0a2l0LVxcdTAwM2VkYXRhID0gTlVMTDtcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHR9XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBSZWplY3QgaXJxcy1kaXNhYmxlZCBjb250ZXh0cyBpbmNsdWRpbmcgTk1JLiBPcGVyYXRpb25zIHVzZWRcXG4gXFx0ICogYnkgX25leHQoKSBhbmQgX2Rlc3Ryb3koKSAodm1hX2VuZF9yZWFkLCBmcHV0LCBicGZfaXRlcl9tbXB1dF9hc3luYylcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcXG5pbmRleCBmMGUyZTEzMWE5YTVhLi5mZjkxZjVmNjZjODBkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mb3JrLmNcXG4rKysgYi9rZXJuZWwvZm9yay5jXFxuQEAgLTEwNzcsOSArMTA3Nyw3IEBAIHN0YXRpYyB2b2lkIG1tYXBfaW5pdF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuIFxcdGluaXRfcndzZW0oXFx1MDAyNm1tLVxcdTAwM2VtbWFwX2xvY2spO1xcbiBcXHRtbV9sb2NrX3NlcWNvdW50X2luaXQobW0pO1xcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBcXHRyY3V3YWl0X2luaXQoXFx1MDAyNm1tLVxcdTAwM2V2bWFfd3JpdGVyX3dhaXQpO1xcbi0jZW5kaWZcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcXG5pbmRleCAwNjAxOTBlMTJiY2VkLi43NzEwM2I0NmI2NzkyIDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWdcXG4rKysgYi9tbS9LY29uZmlnXFxuQEAgLTE0MjUsMTkgKzE0MjUsNiBAQCBjb25maWcgTFJVX0dFTl9TVEFUU1xcbiBjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4gXFx0ZGVmX2Jvb2wgeVxcbiBcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuLSMgfVxcbi1cXG4tY29uZmlnIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuLSAgICAgICBkZWZfYm9vbCBuXFxuLVxcbi1jb25maWcgUEVSX1ZNQV9MT0NLXFxuLVxcdGRlZl9ib29sIHlcXG4tXFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcXHUwMDI2XFx1MDAyNiBNTVUgXFx1MDAyNlxcdTAwMjYgU01QXFxuLVxcdGhlbHBcXG4tXFx0ICBBbGxvdyBwZXItdm1hIGxvY2tpbmcgZHVyaW5nIHBhZ2UgZmF1bHQgaGFuZGxpbmcuXFxuLVxcbi1cXHQgIFRoaXMgZmVhdHVyZSBhbGxvd3MgbG9ja2luZyBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEgc2VwYXJhdGVseSB3aGVuXFxuLVxcdCAgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW5zdGVhZCBvZiB0YWtpbmcgbW1hcF9sb2NrLlxcbiBcXG4gY29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuIFxcdGJvb2xcXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWdcXG5pbmRleCA1NzM3YTUwNGVmYmJlLi4xZGQxNTBlZGZlNzFjIDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWcuZGVidWdcXG4rKysgYi9tbS9LY29uZmlnLmRlYnVnXFxuQEAgLTMxMCw3ICszMTAsNiBAQCBjb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbiBcXG4gY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbiBcXHRib29sIFxcXCJTdGF0aXN0aWNzIGZvciBwZXItdm1hIGxvY2tzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIFBFUl9WTUFfTE9DS1xcbiBcXHRoZWxwXFxuIFxcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VjY2VzcywgcmV0cnkgYW5kIGZhaWx1cmUgY291bnRlcnMgb2YgcGFnZVxcbiBcXHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWcuYyBiL21tL2RlYnVnLmNcXG5pbmRleCA5YTAyOTdiMzk4OGQ4Li42NTVlNmJjYzBlOGQ5IDEwMDY0NFxcbi0tLSBhL21tL2RlYnVnLmNcXG4rKysgYi9tbS9kZWJ1Zy5jXFxuQEAgLTE1NywxNyArMTU3LDEzIEBAIHZvaWQgZHVtcF92bWEoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdHByX2VtZXJnKFxcXCJ2bWEgJXB4IHN0YXJ0ICVweCBlbmQgJXB4IG1tICVweFxcXFxuXFxcIlxcbiBcXHRcXHRcXFwicHJvdCAlbHggYW5vbl92bWEgJXB4IHZtX29wcyAlcHhcXFxcblxcXCJcXG4gXFx0XFx0XFxcInBnb2ZmICVseCBmaWxlICVweCBwcml2YXRlX2RhdGEgJXB4XFxcXG5cXFwiXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdFxcdFxcXCJyZWZjbnQgJXhcXFxcblxcXCJcXG4tI2VuZGlmXFxuIFxcdFxcdFxcXCJmbGFnczogJSNseCglcEd2KVxcXFxuXFxcIixcXG4gXFx0XFx0dm1hLCAodm9pZCAqKXZtYS1cXHUwMDNldm1fc3RhcnQsICh2b2lkICopdm1hLVxcdTAwM2V2bV9lbmQsIHZtYS1cXHUwMDNldm1fbW0sXFxuIFxcdFxcdCh1bnNpZ25lZCBsb25nKXBncHJvdF92YWwodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpLFxcbiBcXHRcXHR2bWEtXFx1MDAzZWFub25fdm1hLCB2bWEtXFx1MDAzZXZtX29wcywgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksXFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fZmlsZSwgdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEsXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdFxcdHJlZmNvdW50X3JlYWQoXFx1MDAyNnZtYS1cXHUwMDNldm1fcmVmY250KSxcXG4tI2VuZGlmXFxuIFxcdFxcdHZtYS1cXHUwMDNldm1fZmxhZ3MsIFxcdTAwMjZ2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGR1bXBfdm1hKTtcXG5kaWZmIC0tZ2l0IGEvbW0vaW5pdC1tbS5jIGIvbW0vaW5pdC1tbS5jXFxuaW5kZXggM2U3OTJhYWQ3NjI2MS4uYTFiYjJjMmQwMjg0YSAxMDA2NDRcXG4tLS0gYS9tbS9pbml0LW1tLmNcXG4rKysgYi9tbS9pbml0LW1tLmNcXG5AQCAtMzksMTAgKzM5LDggQEAgc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0ge1xcbiBcXHQucGFnZV90YWJsZV9sb2NrID0gIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluaXRfbW0ucGFnZV90YWJsZV9sb2NrKSxcXG4gXFx0LmFyZ19sb2NrXFx0PSAgX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5hcmdfbG9jayksXFxuIFxcdC5tbWxpc3RcXHRcXHQ9IExJU1RfSEVBRF9JTklUKGluaXRfbW0ubW1saXN0KSxcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0LnZtYV93cml0ZXJfd2FpdCA9IF9fUkNVV0FJVF9JTklUSUFMSVpFUihpbml0X21tLnZtYV93cml0ZXJfd2FpdCksXFxuIFxcdC5tbV9sb2NrX3NlcVxcdD0gU0VRQ05UX1pFUk8oaW5pdF9tbS5tbV9sb2NrX3NlcSksXFxuLSNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX1NDSEVEX01NX0NJRFxcbiBcXHQubW1fY2lkLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5tbV9jaWQubG9jayksXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggYTYyMGQ0MjVlYzk1ZS4uZjEwOWY2Yzg3YjI4YyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTY4MTMsNyArNjgxMyw2IEBAIHN0YXRpYyB2bV9mYXVsdF90IHNhbml0aXplX2ZhdWx0X2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHQgIWlzX2Nvd19tYXBwaW5nKHZtYS1cXHUwMDNldm1fZmxhZ3MpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XFxuIFxcdH1cXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0LypcXG4gXFx0ICogUGVyLVZNQSBsb2NrcyBjYW4ndCBiZSB1c2VkIHdpdGggRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgYmVjYXVzZSBvZlxcbiBcXHQgKiB0aGUgYXNzdW1wdGlvbiB0aGF0IGxvY2sgaXMgZHJvcHBlZCBvbiBWTV9GQVVMVF9SRVRSWS5cXG5AQCAtNjgyMiw3ICs2ODIxLDYgQEAgc3RhdGljIHZtX2ZhdWx0X3Qgc2FuaXRpemVfZmF1bHRfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdChGQVVMVF9GTEFHX1ZNQV9MT0NLIHwgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpKSA9PVxcbiBcXHRcXHRcXHQoRkFVTFRfRkxBR19WTUFfTE9DSyB8IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUKSkpXFxuIFxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xcbi0jZW5kaWZcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL21tYXBfbG9jay5jIGIvbW0vbW1hcF9sb2NrLmNcXG5pbmRleCA4OThjMmVmMWU5NTgwLi42ZmYwNWU2OGU2MWJlIDEwMDY0NFxcbi0tLSBhL21tL21tYXBfbG9jay5jXFxuKysrIGIvbW0vbW1hcF9sb2NrLmNcXG5AQCAtNDMsOSArNDMsNiBAQCB2b2lkIF9fbW1hcF9sb2NrX2RvX3RyYWNlX3JlbGVhc2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBib29sIHdyaXRlKVxcbiBFWFBPUlRfU1lNQk9MKF9fbW1hcF9sb2NrX2RvX3RyYWNlX3JlbGVhc2VkKTtcXG4gI2VuZGlmIC8qIENPTkZJR19UUkFDSU5HICovXFxuIFxcbi0jaWZkZWYgQ09ORklHX01NVVxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbi1cXG4gLyogU3RhdGUgc2hhcmVkIGFjcm9zcyBfX3ZtYV9bc3RhcnQsIGVuZF1fZXhjbHVkZV9yZWFkZXJzLiAqL1xcbiBzdHJ1Y3Qgdm1hX2V4Y2x1ZGVfcmVhZGVyc19zdGF0ZSB7XFxuIFxcdC8qIElucHV0IHBhcmFtZXRlcnMuICovXFxuQEAgLTM0MSw2ICszMzgsMzUgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbisvKlxcbisgKiBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJ2FkZHJlc3MnIGFuZCBsb2NrIGl0IGZvciByZWFkaW5nLiBXYWl0cyBmb3Igd3JpdGVycyB0b1xcbisgKiBmaW5pc2ggaWYgdGhlIFZNQSBpcyBiZWluZyBtb2RpZmllZC4gUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzIG5vIFZNQSBjb3ZlcmluZ1xcbisgKiAnYWRkcmVzcycuXFxuKyAqXFxuKyAqIFVzZSBvbmx5IGluIGNvZGUgcGF0aHMgd2hlcmUgbm8gbW1hcF9sb2NrIGFuZCBubyBWTUEgbG9jayBpcyBoZWxkLlxcbisgKlxcbisgKiBUaGUgZmFzdCBwYXRoIGRvZXMgbm90IHRha2UgbW1hcF9sb2NrLlxcbisgKi9cXG4rc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4re1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4rXFxuK1xcdC8qIEZhc3QgcGF0aDogcmV0dXJuIHN0YWJsZSBWTUEgY292ZXJpbmcgJ2FkZHJlc3MnOiAqL1xcbitcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xcbitcXHRpZiAodm1hKVxcbitcXHRcXHRyZXR1cm4gdm1hO1xcbitcXG4rXFx0LyogU2xvdyBwYXRoOiBwcmVjbHVkZSBWTUEgd3JpdGVycyBieSB0ZW1wb3JhcmlseSBnZXR0aW5nIG1tYXAgcmVhZCBsb2NrLiAqL1xcbitcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuK1xcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpO1xcbitcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2ICF2bWFfc3RhcnRfcmVhZF9sb2NrZWQodm1hKSlcXG4rXFx0XFx0dm1hID0gTlVMTDtcXG4rXFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuK1xcbitcXHRyZXR1cm4gdm1hO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hX3VuZGVyX21tYXBfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZnJvbV9hZGRyKVxcbkBAIC00MzEsNyArNDU3LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXG4gXFx0cmV0dXJuIHZtYTtcXG4gfVxcbi0jZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXh0YWJsZS5oXFx1MDAzZVxcbkBAIC01NDgsMjMgKzU3MywzIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuICNlbmRpZiAvKiBDT05GSUdfTE9DS19NTV9BTkRfRklORF9WTUEgKi9cXG4tXFxuLSNlbHNlIC8qIENPTkZJR19NTVUgKi9cXG4tXFxuLS8qXFxuLSAqIEF0IGxlYXN0IHh0ZW5zYSBlbmRzIHVwIGhhdmluZyBwcm90ZWN0aW9uIGZhdWx0cyBldmVuIHdpdGggbm9cXG4tICogTU1VLi4gTm8gc3RhY2sgZXhwYW5zaW9uLCBhdCBsZWFzdC5cXG4tICovXFxuLXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19tbV9hbmRfZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLXtcXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcbi1cXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuLVxcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xcbi1cXHRpZiAoIXZtYSlcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLVxcdHJldHVybiB2bWE7XFxuLX1cXG4tXFxuLSNlbmRpZiAvKiBDT05GSUdfTU1VICovXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggZWQ0ODYwYzAxOTM2Yy4uZmJjZjY0YzU5YTk3MyAxMDA2NDRcXG4tLS0gYS9tbS9wYWdld2Fsay5jXFxuKysrIGIvbW0vcGFnZXdhbGsuY1xcbkBAIC00NDYsNyArNDQ2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NfbW1fd2Fsa19sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRcXHQgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2spXFxuIHtcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0c3dpdGNoICh3YWxrX2xvY2spIHtcXG4gXFx0Y2FzZSBQR1dBTEtfV1JMT0NLOlxcbiBcXHRcXHR2bWFfc3RhcnRfd3JpdGUodm1hKTtcXG5AQCAtNDYxLDcgKzQ2MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdC8qIFBHV0FMS19SRExPQ0sgaXMgaGFuZGxlZCBieSBwcm9jZXNzX21tX3dhbGtfbG9jayAqL1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbi0jZW5kaWZcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggYjkxNzQzMTc1OWVlMC4uNGU0YTRiNzQ3OTc3MiAxMDA2NDRcXG4tLS0gYS9tbS9ybWFwLmNcXG4rKysgYi9tbS9ybWFwLmNcXG5AQCAtMjYwLDExICsyNjAsOSBAQCBzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4gXFx0LyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi9cXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiA9PSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCFsaXN0X2lzX3Npbmd1bGFyKFxcdTAwMjZzcmMtXFx1MDAzZWFub25fdm1hX2NoYWluKSk7XFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdC8qIE9ubHkgbWVyZ2luZyBhbiB1bmZhdWx0ZWQgVk1BIGxlYXZlcyB0aGUgZGVzdGluYXRpb24gYXR0YWNoZWQuICovXFxuIFxcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHR2bWFfaXNfYXR0YWNoZWQoZHN0KSk7XFxuLSNlbmRpZlxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBtYXliZV9yZXVzZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcXG5pbmRleCAyNThiMDMxODJhNzgwLi5jM2EwYzM4YTNkYzNiIDEwMDY0NFxcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXFxuQEAgLTEyMiw3ICsxMjIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiB2bWE7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIC8qXFxuICAqIHVmZmRfbG9ja192bWEoKSAtIExvb2t1cCBhbmQgbG9jayB2bWEgY29ycmVzcG9uZGluZyB0byBAYWRkcmVzcy5cXG4gICogQG1tOiBtbSB0byBzZWFyY2ggdm1hIGluLlxcbkBAIC0xMzAsOCArMTI5LDEwIEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF92bWFfYW5kX3ByZXBhcmVfYW5vbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gICpcXG4gICogU2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbW1hcF9sb2NrLlxcbiAgKlxcbi0gKiBSZXR1cm46IEEgbG9ja2VkIHZtYSBjb250YWluaW5nIEBhZGRyZXNzLCAtRU5PRU5UIGlmIG5vIHZtYSBpcyBmb3VuZCwgb3JcXG4tICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQuXFxuKyAqIFJldHVybjogQSBsb2NrZWQgdm1hIGNvbnRhaW5pbmcgQGFkZHJlc3MsIC1FTk9FTlQgaWYgbm8gdm1hIGlzIGZvdW5kLFxcbisgKiAtRU5PTUVNIGlmIGFub25fdm1hIGNvdWxkbid0IGJlIGFsbG9jYXRlZCwgb3IgLUVBR0FJTiBpZiB2bWEgcmVmY291bnRcXG4rICogb3ZlcmZsb3cgaGFwcGVuZWQgZHVlIHRvIGhpZ2ggbnVtYmVyIG9mIHJlYWRlcnMgYW5kIHRoZSBjYWxsZXIgc2hvdWxkXFxuKyAqIHJldHJ5IGxhdGVyLlxcbiAgKi9cXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdWZmZF9sb2NrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG5AQCAtMTgyLDM0ICsxODMsNiBAQCBzdGF0aWMgdm9pZCB1ZmZkX21maWxsX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIH1cXG4gXFxuLSNlbHNlXFxuLVxcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp1ZmZkX21maWxsX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXFxuLXtcXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hO1xcbi1cXG4tXFx0bW1hcF9yZWFkX2xvY2soZHN0X21tKTtcXG4tXFx0ZHN0X3ZtYSA9IGZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oZHN0X21tLCBkc3Rfc3RhcnQpO1xcbi1cXHRpZiAoSVNfRVJSKGRzdF92bWEpKVxcbi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuLVxcbi1cXHRpZiAodmFsaWRhdGVfZHN0X3ZtYShkc3Rfdm1hLCBkc3Rfc3RhcnQgKyBsZW4pKVxcbi1cXHRcXHRyZXR1cm4gZHN0X3ZtYTtcXG4tXFxuLVxcdGRzdF92bWEgPSBFUlJfUFRSKC1FTk9FTlQpO1xcbi1vdXRfdW5sb2NrOlxcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKGRzdF9tbSk7XFxuLVxcdHJldHVybiBkc3Rfdm1hO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCB1ZmZkX21maWxsX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4te1xcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKHZtYS1cXHUwMDNldm1fbW0pO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4gc3RhdGljIHZvaWQgbWZpbGxfcHV0X3ZtYShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbiB7XFxuIFxcdGlmICghc3RhdGUtXFx1MDAzZXZtYSlcXG5AQCAtMTg1Miw3ICsxODI1LDYgQEAgaW50IGZpbmRfdm1hc19tbV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xcbiBzdGF0aWMgaW50IHVmZmRfbW92ZV9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LFxcbkBAIC0xOTI3LDMxICsxODk5LDYgQEAgc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuIFxcdFxcdHZtYV9lbmRfcmVhZChkc3Rfdm1hKTtcXG4gfVxcbiBcXG4tI2Vsc2VcXG4tXFxuLXN0YXRpYyBpbnQgdWZmZF9tb3ZlX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsXFxuLVxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqZHN0X3ZtYXAsXFxuLVxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqc3JjX3ZtYXApXFxuLXtcXG4tXFx0aW50IGVycjtcXG4tXFxuLVxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0ZXJyID0gZmluZF92bWFzX21tX2xvY2tlZChtbSwgZHN0X3N0YXJ0LCBzcmNfc3RhcnQsIGRzdF92bWFwLCBzcmNfdm1hcCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpXFxuLXtcXG4tXFx0bW1hcF9hc3NlcnRfbG9ja2VkKHNyY192bWEtXFx1MDAzZXZtX21tKTtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhkc3Rfdm1hLVxcdTAwM2V2bV9tbSk7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbiAvKipcXG4gICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG4gICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXFxuaW5kZXggNDU1NDQxZjFiNjk0OS4uNjJkZWZlNzBmM2NlYiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xcbisrKyBiL25ldC9pcHY0L3RjcC5jXFxuQEAgLTIxNjcsMjcgKzIxNjcsMTggQEAgc3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBib29sICptbWFwX2xvY2tlZClcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiB7XFxuLVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7XFxuIFxcbi1cXHRpZiAodm1hKSB7XFxuLVxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX29wcyAhPSBcXHUwMDI2dGNwX3ZtX29wcykge1xcbi1cXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4tXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdFxcdH1cXG4tXFx0XFx0Km1tYXBfbG9ja2VkID0gZmFsc2U7XFxuLVxcdFxcdHJldHVybiB2bWE7XFxuLVxcdH1cXG4rXFx0aWYgKCF2bWEpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcXG4tXFx0aWYgKCF2bWEgfHwgdm1hLVxcdTAwM2V2bV9vcHMgIT0gXFx1MDAyNnRjcF92bV9vcHMpIHtcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuK1xcdGlmICh2bWEtXFx1MDAzZXZtX29wcyAhPSBcXHUwMDI2dGNwX3ZtX29wcykge1xcbitcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4tXFx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcXG4rXFxuIFxcdHJldHVybiB2bWE7XFxuIH1cXG4gXFxuQEAgLTIyMDgsNyArMjE5OSw2IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHR1MzIgc2VxID0gdHAtXFx1MDAzZWNvcGllZF9zZXE7XFxuIFxcdHUzMiB0b3RhbF9ieXRlc190b19tYXA7XFxuIFxcdGludCBpbnEgPSB0Y3BfaW5xKHNrKTtcXG4tXFx0Ym9vbCBtbWFwX2xvY2tlZDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHpjLVxcdTAwM2Vjb3B5YnVmX2xlbiA9IDA7XFxuQEAgLTIyMzMsNyArMjIyMyw3IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXFx1MDAzZW1tLCBhZGRyZXNzLCBcXHUwMDI2bW1hcF9sb2NrZWQpO1xcbitcXHR2bWEgPSBmaW5kX3RjcF92bWEoY3VycmVudC1cXHUwMDNlbW0sIGFkZHJlc3MpO1xcbiBcXHRpZiAoIXZtYSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC0yMzE1LDEwICsyMzA1LDcgQEAgc3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHpjLCB0b3RhbF9ieXRlc190b19tYXApO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0aWYgKG1tYXBfbG9ja2VkKVxcbi1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4rXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIFxcdC8qIFRyeSB0byBjb3B5IHN0cmFnZ2xlciBkYXRhLiAqL1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0Y29weWxlbiA9IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoemMsIHNrLCBza2IsIFxcdTAwMjZzZXEsIGNvcHlidWZfbGVuLCB0c3MpO1xcbmRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9tbS5ycyBiL3J1c3Qva2VybmVsL21tLnJzXFxuaW5kZXggNDc2NGQ3YjY4ZjJhNy4uODc3ZmFkNjhiZTljMyAxMDA2NDRcXG4tLS0gYS9ydXN0L2tlcm5lbC9tbS5yc1xcbisrKyBiL3J1c3Qva2VybmVsL21tLnJzXFxuQEAgLTE3NCwyNiArMTc0LDM4IEBAIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcXHUwMDNjJ2FcXHUwMDNlKHB0cjogKmNvbnN0IGJpbmRpbmdzOjptbV9zdHJ1Y3QpIC1cXHUwMDNlIFxcdTAwMjYnYSBNbVdpdGhVc2VyIHtcXG4gICAgIC8vLyBXaGVuIHBlci12bWEgbG9ja3MgYXJlIGRpc2FibGVkLCB0aGlzIGFsd2F5cyByZXR1cm5zIGBOb25lYC5cXG4gICAgICNbaW5saW5lXVxcbiAgICAgcHViIGZuIGxvY2tfdm1hX3VuZGVyX3JjdShcXHUwMDI2c2VsZiwgdm1hX2FkZHI6IHVzaXplKSAtXFx1MDAzZSBPcHRpb25cXHUwMDNjVm1hUmVhZEd1YXJkXFx1MDAzYydfXFx1MDAzZVxcdTAwM2Uge1xcbi0gICAgICAgICNbY2ZnKENPTkZJR19QRVJfVk1BX0xPQ0spXVxcbiAgICAgICAgIHtcXG4gICAgICAgICAgICAgLy8gU0FGRVRZOiBDYWxsaW5nIGBiaW5kaW5nczo6bG9ja192bWFfdW5kZXJfcmN1YCBpcyBhbHdheXMgb2theSBnaXZlbiBhbiBtbSB3aGVyZVxcbiAgICAgICAgICAgICAvLyBgbW1fdXNlcnNgIGlzIG5vbi16ZXJvLlxcbiAgICAgICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdShzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcXG4tICAgICAgICAgICAgaWYgIXZtYS5pc19udWxsKCkge1xcbi0gICAgICAgICAgICAgICAgcmV0dXJuIFNvbWUoVm1hUmVhZEd1YXJkIHtcXG4tICAgICAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcXG4tICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXFxuLSAgICAgICAgICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSxcXG4tICAgICAgICAgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxcbi0gICAgICAgICAgICAgICAgfSk7XFxuKyAgICAgICAgICAgIGlmIHZtYS5pc19udWxsKCkge1xcbisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmU7XFxuICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgU29tZShWbWFSZWFkR3VhcmQge1xcbisgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgbG9ja192bWFfdW5kZXJfcmN1YCByZXR1cm5zIGEgbm9uLW51bGwgcHRyLCB0aGVuIGl0IHBvaW50cyBhdCBhXFxuKyAgICAgICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXFxuKyAgICAgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LFxcbisgICAgICAgICAgICAgICAgX250czogTm90VGhyZWFkU2FmZSxcXG4rICAgICAgICAgICAgfSlcXG4gICAgICAgICB9XFxuKyAgICB9XFxuIFxcbi0gICAgICAgIC8vIFNpbGVuY2Ugd2FybmluZ3MgYWJvdXQgdW51c2VkIHZhcmlhYmxlcy5cXG4tICAgICAgICAjW2NmZyhub3QoQ09ORklHX1BFUl9WTUFfTE9DSykpXVxcbi0gICAgICAgIGxldCBfID0gdm1hX2FkZHI7XFxuLVxcbi0gICAgICAgIE5vbmVcXG4rICAgIC8vLyBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJ2FkZHJlc3MnIGFuZCBsb2NrIGl0IGZvciByZWFkaW5nLiBXYWl0cyBmb3Igd3JpdGVycyB0byBmaW5pc2ggaWYgdGhlXFxuKyAgICAvLy8gVk1BIGlzIGJlaW5nIG1vZGlmaWVkLlxcbisgICAgI1tpbmxpbmVdXFxuKyAgICBwdWIgZm4gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoXFx1MDAyNnNlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLVxcdTAwM2UgT3B0aW9uXFx1MDAzY1ZtYVJlYWRHdWFyZFxcdTAwM2MnX1xcdTAwM2VcXHUwMDNlIHtcXG4rICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVyb1xcbisgICAgICAgIC8vIGBtbV91c2Vyc2AuXFxuKyAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcXG4rICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcXG4rICAgICAgICAgICAgcmV0dXJuIE5vbmU7XFxuKyAgICAgICAgfVxcbisgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcXG4rICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcXG4rICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLlxcbisgICAgICAgICAgICB2bWE6IHVuc2FmZSB7IFZtYVJlZjo6ZnJvbV9yYXcodm1hKSB9LFxcbisgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxcbisgICAgICAgIH0pXFxuICAgICB9XFxuIFxcbiAgICAgLy8vIExvY2sgdGhlIG1tYXAgcmVhZCBsb2NrLlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbmluZGV4IDgwMGU1ZmEwMmQ3OGYuLjM2MmZlZGEyODUyNjQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG5AQCAtNTgyLDcgKzU4Miw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuIFxcdFxcdHZtYV9mbGFnc190IGZsYWdzO1xcbiBcXHR9O1xcbiBcXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gXFx0LypcXG4gXFx0ICogQ2FuIG9ubHkgYmUgd3JpdHRlbiAodXNpbmcgV1JJVEVfT05DRSgpKSB3aGlsZSBob2xkaW5nIGJvdGg6XFxuIFxcdCAqICAtIG1tYXBfbG9jayAoaW4gd3JpdGUgbW9kZSlcXG5AQCAtNTk4LDcgKzU5Nyw3IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuIFxcdCAqIHNsb3dwYXRoLlxcbiBcXHQgKi9cXG4gXFx0dW5zaWduZWQgaW50IHZtX2xvY2tfc2VxO1xcbi0jZW5kaWZcXG4rXFxuIFxcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfbG87XFxuIFxcbiBcXHQvKlxcbkBAIC02MzIsMTAgKzYzMSw4IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG4gXFx0c3RydWN0IHZtYV9udW1hYl9zdGF0ZSAqbnVtYWJfc3RhdGU7XFx0LyogTlVNQSBCYWxhbmNpbmcgc3RhdGUgKi9cXG4gI2VuZGlmXFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXFxuIFxcdC8qIFVuc3RhYmxlIFJDVSByZWFkZXJzIGFyZSBhbGxvd2VkIHRvIHJlYWQgdGhpcy4gKi9cXG4gXFx0cmVmY291bnRfdCB2bV9yZWZjbnQ7XFxuLSNlbmRpZlxcbiAjaWZkZWYgQ09ORklHXzY0QklUXFxuIFxcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfaGk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXFxuaW5kZXggOGE0OGIyMzFhYTdhYi4uNTRkNWMzMzYwYWEyNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXFxuQEAgLTE1LDcgKzE1LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBDT05GSUdfTU1VXFx0XFx0MVxcbi0jZGVmaW5lIENPTkZJR19QRVJfVk1BX0xPQ0tcXHQxXFxuIFxcbiAjaWZkZWYgX19DT05DQVRcXG4gI3VuZGVmIF9fQ09OQ0FUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAxOjE3OjIxLjU4MzA1NDExMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzcwMTcxNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQU5EUk9JRF9CSU5ERVJfSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRcIixcbiAgICBcImJpbmRlcl9wYWdlX2luc2VydFwiLFxuICAgIFwiYmluZGVyX2FsbG9jX2ZyZWVfcGFnZVwiLFxuICAgIFwidGNwX3plcm9jb3B5X3JlY2VpdmVcIixcbiAgICBcInVmZmRfbG9ja192bWFcIixcbiAgICBcInVmZmRfbW92ZV9sb2NrXCIsXG4gICAgXCJzdGFja19tYXBfbG9ja192bWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgQ09ORklHX1BFUl9WTUFfTE9DS2Agb3B0aW9uIGFuZCBtYWtlcyBwZXItVk1BIGxvY2tpbmcgdW5jb25kaXRpb25hbCBhY3Jvc3MgdGhlIGtlcm5lbC4gSXQgaW50cm9kdWNlcyBhIG5ldyBBUEkgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBhbmQgbW9kaWZpZXMgc2V2ZXJhbCBzdWJzeXN0ZW1zIChCaW5kZXIsIFRDUCB6ZXJvY29weSwgVXNlcmZhdWx0ZmQsIEJQRiBzdGFja21hcCwgcHJvY2ZzKSB0byB1c2UgaXQgb3IgcmVseSBvbiB1bmNvbmRpdGlvbmFsIHBlci1WTUEgbG9ja2luZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgc3Vic3lzdGVtcyB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhY2M5OTg0ODU4NzAxMTYwNDVmN2UyM2M5Y2UzODdmODhkOTNjZTNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwMToxNzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnXG5pbmRleCA5MTg3MjQwYTAyZGI1Li5mODE1MjA5MTY3Y2Q4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm0vS2NvbmZpZ1xuQEAgLTQxLDcgKzQxLDYgQEAgY29uZmlnIEFSTVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNV1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFVExCRlMgaWYgQVJNX0xQQUVcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUlRcbiBcdHNlbGVjdCBBUkNIX1VTRV9CVUlMVElOX0JTV0FQXG4gXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCAxMWE5YzUzNGI3YjQ4Li4yMWViNjRiMjRhMmM3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC04MSw3ICs4MSw2IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1JUXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9TTVRcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuaW5kZXggZTIwYWNiZTVmZTdiNS4uNzc0MWUzOWVjYTJiNyAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbisrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbkBAIC02OSw3ICs2OSw2IEBAIGNvbmZpZyBMT09OR0FSQ0hcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HU1xuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBpZiA2NEJJVFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkcgaWYgTlVNQVxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19SVFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfU01UIGlmIFNNUFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfTUMgIGlmIFNNUFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcbmluZGV4IGI1YWQ3YzE3M2VmMGMuLmRkOGY2MDYwZmI3YTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZ1xuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWdcbkBAIC0xNyw3ICsxNyw2IEBAIGNvbmZpZyBQUENfUE9XRVJOVlxuIFx0c2VsZWN0IFBQQ19ET09SQkVMTFxuIFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuIFx0c2VsZWN0IEZPUkNFX1NNUFxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4gXHRzZWxlY3QgUFBDX1JBRElYX0JST0FEQ0FTVF9UTEJJRSBpZiBQUENfUkFESVhfTU1VXG4gXHRkZWZhdWx0IHlcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXG5pbmRleCA3NDkxMGNlM2E1NDFjLi43ZDEyNWUyODhmNmVmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnXG5AQCAtMjMsNyArMjMsNiBAQCBjb25maWcgUFBDX1BTRVJJRVNcbiBcdHNlbGVjdCBIT1RQTFVHX0NQVVxuIFx0c2VsZWN0IEZPUkNFX1NNUFxuIFx0c2VsZWN0IFNXSU9UTEJcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IFBQQ19SQURJWF9CUk9BRENBU1RfVExCSUUgaWYgUFBDX1JBRElYX01NVVxuIFx0ZGVmYXVsdCB5XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXG5pbmRleCA3YjljMzczZDgyZmFjLi5mYWE4NWEwMzFmZTU3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L0tjb25maWdcbkBAIC03MCw3ICs3MCw2IEBAIGNvbmZpZyBSSVNDVlxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HX1RISU5cbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HUyBpZiA2NEJJVCBcdTAwMjZcdTAwMjYgTU1VXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLIGlmIE1NVVxuLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIGlmIE1NVVxuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBpZiBNTVVcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1JUXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TSEFET1dfQ0FMTF9TVEFDSyBpZiBIQVZFX1NIQURPV19DQUxMX1NUQUNLXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggYWI4ZmNjYzJjYzRlMi4uZDEyNzRiY2E4YzM5YyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTE1MSw3ICsxNTEsNiBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9QUk9UTk9ORVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuIFx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcbiBcdHNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUZcbiBcdHNlbGVjdCBBUkNIX1VTRV9TWU1fQU5OT1RBVElPTlNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggZmIyOThlMjE5MTc5Mi4uNzk0NzlkMjk1NzZmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbisrKyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yNyw3ICsyNyw2IEBAIGNvbmZpZyBYODZfNjRcbiBcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4XG4tXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NPRlRfRElSVFlcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQVxuQEAgLTE4NDYsNyArMTg0NSw2IEBAIGNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbiBcdGJvb2wgXCJYODYgdXNlcnNwYWNlIHNoYWRvdyBzdGFja1wiXG4gXHRkZXBlbmRzIG9uIEFTX1dSVVNTXG4gXHRkZXBlbmRzIG9uIFg4Nl82NFxuLVx0ZGVwZW5kcyBvbiBQRVJfVk1BX0xPQ0tcbiBcdHNlbGVjdCBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcbiBcdHNlbGVjdCBBUkNIX0hBU19VU0VSX1NIQURPV19TVEFDS1xuIFx0c2VsZWN0IFg4Nl9DRVRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNcbmluZGV4IGU4MmE1NTIzODA0ZjQuLmY3YWQ4OGEwZDgwNjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnNcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yc1xuQEAgLTQzOSwyMiArNDM5LDkgQEAgdW5zYWZlIGZuIHVzZV9wYWdlX3Nsb3coXHUwMDI2c2VsZiwgaTogdXNpemUpIC1cdTAwM2UgUmVzdWx0XHUwMDNjKClcdTAwM2Uge1xuICAgICAgICAgLy8gd29ya3F1ZXVlLlxuICAgICAgICAgbGV0IG1tID0gTW1XaXRoVXNlcjo6aW50b19tbXB1dF9hc3luYyhzZWxmLm1tLm1tZ2V0X25vdF96ZXJvKCkub2tfb3IoRVNSQ0gpPyk7XG4gICAgICAgICB7XG4tICAgICAgICAgICAgbGV0IHZtYV9yZWFkO1xuLSAgICAgICAgICAgIGxldCBtbWFwX3JlYWQ7XG4tICAgICAgICAgICAgbGV0IHZtYSA9IGlmIGxldCBTb21lKHJldCkgPSBtbS5sb2NrX3ZtYV91bmRlcl9yY3Uodm1hX2FkZHIpIHtcbi0gICAgICAgICAgICAgICAgdm1hX3JlYWQgPSByZXQ7XG4tICAgICAgICAgICAgICAgIGNoZWNrX3ZtYShcdTAwMjZ2bWFfcmVhZCwgc2VsZilcbi0gICAgICAgICAgICB9IGVsc2Uge1xuLSAgICAgICAgICAgICAgICBtbWFwX3JlYWQgPSBtbS5tbWFwX3JlYWRfbG9jaygpO1xuLSAgICAgICAgICAgICAgICBtbWFwX3JlYWRcbi0gICAgICAgICAgICAgICAgICAgIC52bWFfbG9va3VwKHZtYV9hZGRyKVxuLSAgICAgICAgICAgICAgICAgICAgLmFuZF90aGVuKHx2bWF8IGNoZWNrX3ZtYSh2bWEsIHNlbGYpKVxuLSAgICAgICAgICAgIH07XG4tXG4tICAgICAgICAgICAgbWF0Y2ggdm1hIHtcbi0gICAgICAgICAgICAgICAgU29tZSh2bWEpID1cdTAwM2Ugdm1hLnZtX2luc2VydF9wYWdlKHVzZXJfcGFnZV9hZGRyLCBcdTAwMjZuZXdfcGFnZSk/LFxuLSAgICAgICAgICAgICAgICBOb25lID1cdTAwM2UgcmV0dXJuIEVycihFU1JDSCksXG4tICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIGxldCB2bWFfcmVhZF9ndWFyZCA9IG1tLnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHZtYV9hZGRyKS5va19vcihFU1JDSCk/O1xuKyAgICAgICAgICAgIGxldCB2bWEgPSBjaGVja192bWEoXHUwMDI2dm1hX3JlYWRfZ3VhcmQsIHNlbGYpLm9rX29yKEVTUkNIKT87XG4rICAgICAgICAgICAgdm1hLnZtX2luc2VydF9wYWdlKHVzZXJfcGFnZV9hZGRyLCBcdTAwMjZuZXdfcGFnZSk/O1xuICAgICAgICAgfVxuIFxuICAgICAgICAgbGV0IGlubmVyID0gc2VsZi5sb2NrLmxvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMgYi9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmNcbmluZGV4IGU0NDg4YWQ4NmE2NTUuLjUxOWRjZGVkMTliMjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmNcbisrKyBiL2RyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuY1xuQEAgLTI1OSwyMSArMjU5LDE0IEBAIHN0YXRpYyBpbnQgYmluZGVyX3BhZ2VfaW5zZXJ0KHN0cnVjdCBiaW5kZXJfYWxsb2MgKmFsbG9jLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgcmV0ID0gLUVTUkNIO1xuIFxuLVx0LyogYXR0ZW1wdCBwZXItdm1hIGxvY2sgZmlyc3QgKi9cbi1cdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4tXHRpZiAodm1hKSB7XG4tXHRcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbi1cdFx0XHRyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpO1xuLVx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbitcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyKTtcbitcdGlmICghdm1hKVxuIFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuIFxuLVx0LyogZmFsbCBiYWNrIHRvIG1tYXBfbG9jayAqL1xuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4tXHRpZiAodm1hIFx1MDAyNlx1MDAyNiBiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbitcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbiBcdFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1xuK1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xMTQyLDcgKzExMzUsNiBAQCBlbnVtIGxydV9zdGF0dXMgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZV90b19mcmVlO1xuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2FkZHI7XG4tXHRpbnQgbW1fbG9ja2VkID0gMDtcbiBcdHNpemVfdCBpbmRleDtcbiBcbiBcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxuQEAgLTExNTEsMTQgKzExNDMsMjAgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiBcdGluZGV4ID0gbWRhdGEtXHUwMDNlcGFnZV9pbmRleDtcbiBcdHBhZ2VfYWRkciA9IGFsbG9jLVx1MDAzZXZtX3N0YXJ0ICsgaW5kZXggKiBQQUdFX1NJWkU7XG4gXG4tXHQvKiBhdHRlbXB0IHBlci12bWEgbG9jayBmaXJzdCAqL1xuK1x0LypcbitcdCAqIEF0dGVtcHQgcGVyLXZtYSBsb2NrLiBUaGlzIGlzIGVzc2VudGlhbGx5IGFcbitcdCAqIFwidHJ5bG9ja1wiLiBJdCBjYW4gZmFpbCBldmVuIGlmIHRoZSBWTUEgZXhpc3RzXG4rXHQgKiBmb3IgJ3BhZ2VfYWRkcicuXG4rXHQgKi9cbiBcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgcGFnZV9hZGRyKTtcbiBcdGlmICghdm1hKSB7XG4tXHRcdC8qIGZhbGwgYmFjayB0byBtbWFwX2xvY2sgKi9cbi1cdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayhtbSkpXG4tXHRcdFx0Z290byBlcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkO1xuLVx0XHRtbV9sb2NrZWQgPSAxO1xuLVx0XHR2bWEgPSB2bWFfbG9va3VwKG1tLCBwYWdlX2FkZHIpO1xuK1x0XHQvKlxuK1x0XHQgKiBJZiB0aGUgdm1hIGV4aXN0cywgd2UgY2FuJ3QgY29udGludWUgYmVjYXVzZSB3ZSBjYW5ub3RcbitcdFx0ICogcmVtb3ZlIHRoZSBwYWdlIGZyb20gdGhlIHZtYS4gSG93ZXZlciwgaWYgdGhlIHZtYSB3YXNcbitcdFx0ICogdW5tYXBwZWQsIGl0J3Mgb2theSB0byBjb250aW51ZS5cbitcdFx0ICovXG4rXHRcdGlmIChiaW5kZXJfYWxsb2NfaXNfbWFwcGVkKGFsbG9jKSlcbitcdFx0XHRnb3RvIGVycl92bWFfbG9ja19mYWlsZWQ7XG4gXHR9XG4gXG4gXHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2YWxsb2MtXHUwMDNlbXV0ZXgpKVxuQEAgLTExOTEsOSArMTE4OSw3IEBAIGVudW0gbHJ1X3N0YXR1cyBiaW5kZXJfYWxsb2NfZnJlZV9wYWdlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWxsb2MtXHUwMDNlbXV0ZXgpO1xuLVx0aWYgKG1tX2xvY2tlZClcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRlbHNlXG4rXHRpZiAodm1hKVxuIFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdG1tcHV0X2FzeW5jKG1tKTtcbiBcdGJpbmRlcl9mcmVlX3BhZ2UocGFnZV90b19mcmVlKTtcbkBAIC0xMjAzLDExICsxMTk5LDkgQEAgZW51bSBscnVfc3RhdHVzIGJpbmRlcl9hbGxvY19mcmVlX3BhZ2Uoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiBlcnJfaW52YWxpZF92bWE6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2YWxsb2MtXHUwMDNlbXV0ZXgpO1xuIGVycl9nZXRfYWxsb2NfbXV0ZXhfZmFpbGVkOlxuLVx0aWYgKG1tX2xvY2tlZClcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRlbHNlXG4rXHRpZiAodm1hKVxuIFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbi1lcnJfbW1hcF9yZWFkX2xvY2tfZmFpbGVkOlxuK2Vycl92bWFfbG9ja19mYWlsZWQ6XG4gXHRtbXB1dF9hc3luYyhtbSk7XG4gZXJyX21tZ2V0OlxuIFx0cmV0dXJuIExSVV9TS0lQO1xuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaFxuaW5kZXggYjIzMmUxMDk4MTE3Yi4uNjcxMzc1N2RhMDk5MiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvaW50ZXJuYWwuaFxuKysrIGIvZnMvcHJvYy9pbnRlcm5hbC5oXG5AQCAtMzg1LDEwICszODUsOCBAQCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHM7XG4gXG4gc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0Ym9vbCBtbWFwX2xvY2tlZDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja2VkX3ZtYTtcbi0jZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSB7XG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXG5pbmRleCA4MTdlM2UwZjkxOTQzLi4wOTZiZjBiMGI5ZTBlIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0xMzAsOCArMTMwLDYgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV90YXNrX21lbXBvbGljeShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gfVxuICNlbmRpZlxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4tXG4gc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0aW50IHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbkBAIC0yMzMsNDYgKzIzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHZtYV9pdGVyX3NldChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIHByaXYtXHUwMDNlbG9ja19jdHgubG9ja2VkX3ZtYS1cdTAwM2V2bV9lbmQpO1xuIH1cbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0cmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cdTAwM2VtbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrX3ZtYV9yYW5nZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4tXHRcdFx0XHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJldHVybiBsb2NrX2N0eF9tbShsb2NrX2N0eCkgPT0gMDtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja192bWFfcmFuZ2Uoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4tXHRcdFx0XHRcdCAgIGxvZmZfdCBsYXN0X3Bvcylcbi17XG4tXHRyZXR1cm4gdm1hX25leHQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4tXHRcdFx0XHRcdCBsb2ZmX3QgcG9zKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGRyb3BfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpIHt9XG4tXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcm9jX2dldF92bWEoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0c3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuQEAgLTU2MCw4ICs1MTgsNiBAQCBzdGF0aWMgaW50IHBpZF9tYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFBST0NNQVBfUVVFUllfVk1BX0ZMQUdTXHRcdFx0XHRcXFxuIClcbiBcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuLVxuIHN0YXRpYyBpbnQgcXVlcnlfdm1hX3NldHVwKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuIHtcbiBcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbkBAIC02MTIsMjYgKzU2OCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0XG4gXHRyZXR1cm4gdm1hO1xuIH1cbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0cmV0dXJuIG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXHUwMDNlbW0pO1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LFxuLVx0XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdHJldHVybiBmaW5kX3ZtYShsb2NrX2N0eC1cdTAwM2VtbSwgYWRkcik7XG4tfVxuLVxuLSNlbmRpZiAgLyogQ09ORklHX1BFUl9WTUFfTE9DSyAqL1xuLVxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X21hdGNoaW5nX3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCxcbiBcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgZmxhZ3MpXG4ge1xuQEAgLTEzMTQsOCArMTI1MCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfc2htZW1fd2Fsa19vcHMgPSB7XG4gXHQud2Fsa19sb2NrXHRcdD0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzbWFwc193YWxrX3ZtYV9sb2NrX29wcyA9IHtcbiBcdC5wbWRfZW50cnlcdFx0PSBzbWFwc19wdGVfcmFuZ2UsXG4gXHQuaHVnZXRsYl9lbnRyeVx0XHQ9IHNtYXBzX2h1Z2V0bGJfcmFuZ2UsXG5AQCAtMTM0NSwyMiArMTI3OSw2IEBAIGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gXHUwMDI2c21hcHNfc2htZW1fd2Fsa192bWFfbG9ja19vcHM7XG4gfVxuIFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4tZ2V0X3NtYXBzX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbi17XG4tXHRyZXR1cm4gXHUwMDI2c21hcHNfd2Fsa19vcHM7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbi1nZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuLXtcbi1cdHJldHVybiBcdTAwMjZzbWFwc19zaG1lbV93YWxrX29wcztcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbiAvKlxuICAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmdcbiAgKiBhZGRyZXNzIEBzdGFydCwgYW5kIGtlZXAgdGhlbSBpbiBAbXNzLlxuQEAgLTM0OTcsNyArMzQxNSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX29wcyA9IHtcbiBcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuIH07XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNob3dfbnVtYV92bWFfbG9ja19vcHMgPSB7XG4gXHQuaHVnZXRsYl9lbnRyeSA9IGdhdGhlcl9odWdldGxiX3N0YXRzLFxuIFx0LnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHMsXG5AQCAtMzUxMiwxNiArMzQyOSw2IEBAIGdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiBcdTAwMjZzaG93X251bWFfdm1hX2xvY2tfb3BzO1xuIH1cbiBcbi0jZWxzZSAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuLWdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbi17XG4tXHRyZXR1cm4gXHUwMDI2c2hvd19udW1hX29wcztcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbiAvKlxuICAqIERpc3BsYXkgcGFnZXMgYWxsb2NhdGVkIHBlciBub2RlIGFuZCBtZW1vcnkgcG9saWN5IHZpYSAvcHJvYy5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDdmYWJlNmM2NmI0YjcuLmQ5ODUwZjg0NjI0MjcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTkzMSw3ICs5MzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX251bWFiX3N0YXRlX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XG4gICogVGhlc2UgbXVzdCBiZSBoZXJlIHJhdGhlciB0aGFuIG1tYXBfbG9jay5oIGFzIGRlcGVuZGVudCBvbiB2bV9mYXVsdCB0eXBlLFxuICAqIGRlY2xhcmVkIGluIHRoaXMgaGVhZGVyLlxuICAqL1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfZmF1bHRfbG9jayhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiB7XG4gXHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKVxuQEAgLTk0NywxNyArOTQ2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9mYXVsdF9sb2NrZWQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRlbHNlXG4gXHRcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mYXVsdF9sb2NrKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sodm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfZmF1bHRfbG9ja2VkKGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLXtcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tKTtcbi19XG4tI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fZmxhZ3NfdGVzdChpbnQgZmxhZywgY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggYjVkNGNkM2IwNjdiZi4uZDhlMjQ2ZmQwOWQzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5AQCAtOTUwLDcgKzk1MCw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XG4gXHRcdHZtYV9mbGFnc190IGZsYWdzO1xuIFx0fTtcbiBcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LypcbiBcdCAqIENhbiBvbmx5IGJlIHdyaXR0ZW4gKHVzaW5nIFdSSVRFX09OQ0UoKSkgd2hpbGUgaG9sZGluZyBib3RoOlxuIFx0ICogIC0gbW1hcF9sb2NrIChpbiB3cml0ZSBtb2RlKVxuQEAgLTk2Niw3ICs5NjUsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0ICogc2xvd3BhdGguXG4gXHQgKi9cbiBcdHVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTtcbi0jZW5kaWZcbitcbiBcdC8qXG4gXHQgKiBMb3cgMzItYml0cyBvZiB2aXJ0dWFsIHBhZ2Ugb2Zmc2V0LlxuIFx0ICogU2VlIHZtYV9zdGFydF92aXJ0X3Bnb2ZmKCkgY29tbWVudCBmb3IgZGV0YWlscy5cbkBAIC0xMDAzLDcgKzEwMDIsNiBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiBcdHN0cnVjdCB2bWFfbnVtYWJfc3RhdGUgKm51bWFiX3N0YXRlO1x0LyogTlVNQSBCYWxhbmNpbmcgc3RhdGUgKi9cbiAjZW5kaWZcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LypcbiBcdCAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBmaXJzdGx5LCB3aGV0aGVyIHRoZSBWTUEgaXMgYXR0YWNoZWQsIHNlY29uZGx5LFxuIFx0ICogaWYgYXR0YWNoZWQsIGhvdyBtYW55IHJlYWQgbG9ja3MgYXJlIHRha2VuLCBhbmQgdGhpcmRseSwgaWYgdGhlXG5AQCAtMTA0Niw3ICsxMDQ0LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0NcbiBcdHN0cnVjdCBsb2NrZGVwX21hcCB2bWxvY2tfZGVwX21hcDtcbiAjZW5kaWZcbi0jZW5kaWZcbiAjaWZkZWYgQ09ORklHXzY0QklUXG4gXHQvKlxuIFx0ICogSGlnaCAzMi1iaXRzIG9mIHZpcnR1YWwgcGFnZSBvZmZzZXQuXG5AQCAtMTI1NCw3ICsxMjUxLDYgQEAgc3RydWN0IG1tX3N0cnVjdCB7XG4gXHRcdFx0XHRcdCAgKiBpbml0X21tLm1tbGlzdCwgYW5kIGFyZSBwcm90ZWN0ZWRcbiBcdFx0XHRcdFx0ICAqIGJ5IG1tbGlzdF9sb2NrXG4gXHRcdFx0XHRcdCAgKi9cbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRzdHJ1Y3QgcmN1d2FpdCB2bWFfd3JpdGVyX3dhaXQ7XG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgZmllbGQgaGFzIGxvY2stbGlrZSBzZW1hbnRpY3MsIG1lYW5pbmcgaXQgaXMgc29tZXRpbWVzXG5AQCAtMTI3NCw3ICsxMjcwLDcgQEAgc3RydWN0IG1tX3N0cnVjdCB7XG4gXHRcdCAqIG1tYXBfbG9jay5cbiBcdFx0ICovXG4gXHRcdHNlcWNvdW50X3QgbW1fbG9ja19zZXE7XG4tI2VuZGlmXG4rXG4gXHRcdHN0cnVjdCBmdXRleF9tbV9kYXRhXHRmdXRleDtcbiBcbiBcdFx0dW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzczsgLyogSGlnaC13YXRlcm1hcmsgb2YgUlNTIHVzYWdlICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDg3Zjc3ZTNkYTc3ZjAuLmZkZDhmNWNmNTcyMjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5AQCAtNzYsOCArNzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0cndzZW1fYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2bW0tXHUwMDNlbW1hcF9sb2NrKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAjZGVmaW5lIF9fdm1hX2xvY2tkZXBfbWFwKHZtYSkgKFx1MDAyNnZtYS1cdTAwM2V2bWxvY2tfZGVwX21hcClcbiAjZWxzZVxuQEAgLTIzMCwxMCArMjI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfcmVmY291bnRfcHV0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIH1cbiBcbiAvKlxuLSAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGxvY2tpbmcgd2lsbCBub3Rcbi0gKiBmYWlsIChub2JvZHkgY2FuIGNvbmN1cnJlbnRseSB3cml0ZS1sb2NrIHRoZSB2bWEpLiB2bWFfc3RhcnRfcmVhZCgpIHNob3VsZFxuKyAqIFVzZSBvbmx5IHdoaWxlIGhvbGRpbmcgbW1hcCByZWFkIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHZtYSBsb2NrIGlzIG5vdFxuKyAqIGNvbnRlbmRlZCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcbiAgKiBub3QgYmUgdXNlZCBpbiBzdWNoIGNhc2VzIGJlY2F1c2UgaXQgbWlnaHQgZmFpbCBkdWUgdG8gbW1fbG9ja19zZXEgb3ZlcmZsb3cuXG4gICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVzZWQgdG8gb2J0YWluIHZtYSByZWFkIGxvY2sgYW5kIGRyb3AgdGhlIG1tYXAgcmVhZCBsb2NrLlxuKyAqIFZNQSBjYW4ndCBiZSBkZXRhY2hlZCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBtbWFwIGxvY2ssIHRoZXJlZm9yZSBpbiBwcmFjdGljZSB0aGlzXG4rICogZnVuY3Rpb24gY2FuIGZhaWwgb25seSB3aGVuIHRoZXJlIGFyZSBzbyBtYW55IHJlYWRlcnMgdGhhdCB2bV9yZWZjbnQgb3ZlcmZsb3dzLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgc3ViY2xhc3MpXG4ge1xuQEAgLTI0OSwxNiArMjQ5LDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnRcbiB9XG4gXG4gLypcbi0gKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBsb2NraW5nIHdpbGwgbm90XG4tICogZmFpbCAobm9ib2R5IGNhbiBjb25jdXJyZW50bHkgd3JpdGUtbG9jayB0aGUgdm1hKS4gdm1hX3N0YXJ0X3JlYWQoKSBzaG91bGRcbisgKiBVc2Ugb25seSB3aGlsZSBob2xkaW5nIG1tYXAgcmVhZCBsb2NrIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCB2bWEgbG9jayBpcyBub3RcbisgKiBjb250ZW5kZWQgKG5vYm9keSBjYW4gY29uY3VycmVudGx5IHdyaXRlLWxvY2sgdGhlIHZtYSkuIHZtYV9zdGFydF9yZWFkKCkgc2hvdWxkXG4gICogbm90IGJlIHVzZWQgaW4gc3VjaCBjYXNlcyBiZWNhdXNlIGl0IG1pZ2h0IGZhaWwgZHVlIHRvIG1tX2xvY2tfc2VxIG92ZXJmbG93LlxuICAqIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1c2VkIHRvIG9idGFpbiB2bWEgcmVhZCBsb2NrIGFuZCBkcm9wIHRoZSBtbWFwIHJlYWQgbG9jay5cbisgKiBWTUEgY2FuJ3QgYmUgZGV0YWNoZWQgd2hpbGUgd2UgYXJlIGhvbGRpbmcgbW1hcCBsb2NrLCB0aGVyZWZvcmUgaW4gcHJhY3RpY2UgdGhpc1xuKyAqIGZ1bmN0aW9uIGNhbiBmYWlsIG9ubHkgd2hlbiB0aGVyZSBhcmUgc28gbWFueSByZWFkZXJzIHRoYXQgdm1fcmVmY250IG92ZXJmbG93cy5cbiAgKi9cbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiB2bWFfc3RhcnRfcmVhZF9sb2NrZWRfbmVzdGVkKHZtYSwgMCk7XG4gfVxuIFxuK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZW5kX3JlYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0dm1hX3JlZmNvdW50X3B1dCh2bWEpO1xuQEAgLTQ4NCw1NCArNDg5LDYgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICppdGVyLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIFxuLSNlbHNlIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgKi9cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgbW1fbG9ja19zZXFjb3VudF9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9sb2NrX3NlcWNvdW50X2JlZ2luKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9sb2NrX3NlcWNvdW50X2VuZChzdHJ1Y3QgbW1fc3RydWN0ICptbSkge31cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgbW1hcF9sb2NrX3NwZWN1bGF0ZV90cnlfYmVnaW4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCAqc2VxKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIG1tYXBfbG9ja19zcGVjdWxhdGVfcmV0cnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBzZXEpXG4te1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbG9ja19pbml0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHJlc2V0X3JlZmNudCkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2VuZF9yZWFkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc3RhcnRfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XG4tc3RhdGljIGlubGluZSBfX211c3RfY2hlY2tcbi1pbnQgdm1hX3N0YXJ0X3dyaXRlX2tpbGxhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7IHJldHVybiAwOyB9XG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfd3JpdGVfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLVx0XHR7IG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pOyB9XG4tc3RhdGljIGlubGluZSBib29sIHZtYV9pc19hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi1cdFx0eyByZXR1cm4gdHJ1ZTsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2F0dGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X2RldGFjaGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbWFya19hdHRhY2hlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX21hcmtfZGV0YWNoZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpIHt9XG4tXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLXtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Fzc2VydF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4te1xuLVx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYXNzZXJ0X3N0YWJpbGlzZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4te1xuLVx0LyogSWYgbm8gVk1BIGxvY2tzLCB0aGVuIGVpdGhlciBtbWFwIGxvY2sgc3VmZmljZXMgdG8gc3RhYmlsaXNlLiAqL1xuLVx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cdTAwM2V2bV9tbSk7XG4tfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4tXG4gc3RhdGljIGlubGluZSB2b2lkIHZtYV9hc3NlcnRfY2FuX21vZGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRpZiAodm1hX2lzX2F0dGFjaGVkKHZtYSkpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGFja21hcC5jIGIva2VybmVsL2JwZi9zdGFja21hcC5jXG5pbmRleCA0MWZlODdkNzMwMmYyLi44ODQ4ZTI2ZWY1ODEzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zdGFja21hcC5jXG4rKysgYi9rZXJuZWwvYnBmL3N0YWNrbWFwLmNcbkBAIC0yNzIsMTMgKzI3Miw4IEBAIHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sge1xuIC8qXG4gICogQWNxdWlyZSBhIHN0YWJsZSByZWFkLXNpZGUgcmVmZXJlbmNlIG9uIHRoZSBWTUEgY292ZXJpbmcgQGlwLlxuICAqXG4tICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPXkgdGhpcyByZXR1cm5zIGEgVk1BIHdpdGggaXRzIHBlci1WTUEgcmVhZFxuLSAqIGxvY2sgaGVsZCBhbmQgbW1hcF9sb2NrIGRyb3BwZWQsIHNvIHRoZSBjYWxsZXIgbWF5IHNsZWVwLlxuLSAqXG4tICogV2l0aCBDT05GSUdfUEVSX1ZNQV9MT0NLPW4gaXQgcmV0dXJucyBhIFZNQSB3aXRoIG1tYXBfbG9jayBzdGlsbFxuLSAqIGhlbGQ7IHRoZSBjYWxsZXIgbXVzdCBzbmFwc2hvdCBhbnkgZmllbGRzIGl0IG5lZWRzIGFuZCBwaW4gdm1fZmlsZVxuLSAqIHdpdGggZ2V0X2ZpbGUoKSBiZWZvcmUgc3RhY2tfbWFwX3VubG9ja192bWEoKSBkcm9wcyBtbWFwX2xvY2ssIGFzXG4tICogdGhlIFZNQSBtYXkgYmUgc3BsaXQsIG1lcmdlZCwgb3IgZnJlZWQgYWZ0ZXIgdGhhdC5cbisgKiBUaGlzIHJldHVybnMgYSBWTUEgd2l0aCBpdHMgcGVyLVZNQSByZWFkIGxvY2sgaGVsZCBhbmQgbW1hcF9sb2NrXG4rICogZHJvcHBlZCwgc28gdGhlIGNhbGxlciBtYXkgc2xlZXAuXG4gICpcbiAgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBubyBsb2NrIGlzIGhlbGQuXG4gICovXG5AQCAtMjg4LDcgKzI4Myw2IEBAIHN0YWNrX21hcF9sb2NrX3ZtYShzdHJ1Y3Qgc3RhY2tfbWFwX3ZtYV9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGlwKVxuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBsb2NrLVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXG4tXHQvKiBub29wIHVuZGVyICFDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4gXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGlwKTtcbiBcdGlmICh2bWEpIHtcbiBcdFx0bG9jay1cdTAwM2V2bWEgPSB2bWE7XG5AQCAtMzA4LDEzICszMDIsMTEgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHRpZiAoIXZtYV9zdGFydF9yZWFkX2xvY2tlZCh2bWEpKSB7XG4gXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLSNlbmRpZlxuIFxuIFx0bG9jay1cdTAwM2V2bWEgPSB2bWE7XG4gXHRyZXR1cm4gdm1hO1xuQEAgLTMyMiwxMSArMzE0LDcgQEAgc3RhY2tfbWFwX2xvY2tfdm1hKHN0cnVjdCBzdGFja19tYXBfdm1hX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApXG4gXG4gc3RhdGljIHZvaWQgc3RhY2tfbWFwX3VubG9ja192bWEoc3RydWN0IHN0YWNrX21hcF92bWFfbG9jayAqbG9jaylcbiB7XG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdHZtYV9lbmRfcmVhZChsb2NrLVx1MDAzZXZtYSk7XG4tI2Vsc2Vcbi1cdG1tYXBfcmVhZF91bmxvY2sobG9jay1cdTAwM2VtbSk7XG4tI2VuZGlmXG4gXHRsb2NrLVx1MDAzZXZtYSA9IE5VTEw7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdGFza19pdGVyLmMgYi9rZXJuZWwvYnBmL3Rhc2tfaXRlci5jXG5pbmRleCBlNzkxYWUwNjVjMzliLi42Y2Y4MTViYzg0YmVmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuKysrIGIva2VybmVsL2JwZi90YXNrX2l0ZXIuY1xuQEAgLTgzNSwxMSArODM1LDYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfdm1hX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEgKml0LFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWFfa2VybikgIT0gc2l6ZW9mKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYSkpO1xuIFx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBicGZfaXRlcl90YXNrX3ZtYV9rZXJuKSAhPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgYnBmX2l0ZXJfdGFza192bWEpKTtcbiBcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfUEVSX1ZNQV9MT0NLKSkge1xuLVx0XHRraXQtXHUwMDNlZGF0YSA9IE5VTEw7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdH1cbi1cbiBcdC8qXG4gXHQgKiBSZWplY3QgaXJxcy1kaXNhYmxlZCBjb250ZXh0cyBpbmNsdWRpbmcgTk1JLiBPcGVyYXRpb25zIHVzZWRcbiBcdCAqIGJ5IF9uZXh0KCkgYW5kIF9kZXN0cm95KCkgKHZtYV9lbmRfcmVhZCwgZnB1dCwgYnBmX2l0ZXJfbW1wdXRfYXN5bmMpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IGYwZTJlMTMxYTlhNWEuLmZmOTFmNWY2NmM4MGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZm9yay5jXG4rKysgYi9rZXJuZWwvZm9yay5jXG5AQCAtMTA3Nyw5ICsxMDc3LDcgQEAgc3RhdGljIHZvaWQgbW1hcF9pbml0X2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0aW5pdF9yd3NlbShcdTAwMjZtbS1cdTAwM2VtbWFwX2xvY2spO1xuIFx0bW1fbG9ja19zZXFjb3VudF9pbml0KG1tKTtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0cmN1d2FpdF9pbml0KFx1MDAyNm1tLVx1MDAzZXZtYV93cml0ZXJfd2FpdCk7XG4tI2VuZGlmXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICptbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDA2MDE5MGUxMmJjZWQuLjc3MTAzYjQ2YjY3OTIgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4rKysgYi9tbS9LY29uZmlnXG5AQCAtMTQyNSwxOSArMTQyNSw2IEBAIGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4gY29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4gXHRkZWZfYm9vbCB5XG4gXHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuLSMgfVxuLVxuLWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuLSAgICAgICBkZWZfYm9vbCBuXG4tXG4tY29uZmlnIFBFUl9WTUFfTE9DS1xuLVx0ZGVmX2Jvb2wgeVxuLVx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBTTVBcbi1cdGhlbHBcbi1cdCAgQWxsb3cgcGVyLXZtYSBsb2NraW5nIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLlxuLVxuLVx0ICBUaGlzIGZlYXR1cmUgYWxsb3dzIGxvY2tpbmcgZWFjaCB2aXJ0dWFsIG1lbW9yeSBhcmVhIHNlcGFyYXRlbHkgd2hlblxuLVx0ICBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbnN0ZWFkIG9mIHRha2luZyBtbWFwX2xvY2suXG4gXG4gY29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4gXHRib29sXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWdcbmluZGV4IDU3MzdhNTA0ZWZiYmUuLjFkZDE1MGVkZmU3MWMgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnLmRlYnVnXG4rKysgYi9tbS9LY29uZmlnLmRlYnVnXG5AQCAtMzEwLDcgKzMxMCw2IEBAIGNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXG4gXG4gY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuIFx0Ym9vbCBcIlN0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcIlxuLVx0ZGVwZW5kcyBvbiBQRVJfVk1BX0xPQ0tcbiBcdGhlbHBcbiBcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VjY2VzcywgcmV0cnkgYW5kIGZhaWx1cmUgY291bnRlcnMgb2YgcGFnZVxuIFx0ICBmYXVsdHMgaGFuZGxlZCB1bmRlciBwcm90ZWN0aW9uIG9mIHBlci12bWEgbG9ja3MuIFdoZW4gZW5hYmxlZCwgdGhlXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWcuYyBiL21tL2RlYnVnLmNcbmluZGV4IDlhMDI5N2IzOTg4ZDguLjY1NWU2YmNjMGU4ZDkgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Zy5jXG4rKysgYi9tbS9kZWJ1Zy5jXG5AQCAtMTU3LDE3ICsxNTcsMTMgQEAgdm9pZCBkdW1wX3ZtYShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHByX2VtZXJnKFwidm1hICVweCBzdGFydCAlcHggZW5kICVweCBtbSAlcHhcXG5cIlxuIFx0XHRcInByb3QgJWx4IGFub25fdm1hICVweCB2bV9vcHMgJXB4XFxuXCJcbiBcdFx0XCJwZ29mZiAlbHggZmlsZSAlcHggcHJpdmF0ZV9kYXRhICVweFxcblwiXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdFx0XCJyZWZjbnQgJXhcXG5cIlxuLSNlbmRpZlxuIFx0XHRcImZsYWdzOiAlI2x4KCVwR3YpXFxuXCIsXG4gXHRcdHZtYSwgKHZvaWQgKil2bWEtXHUwMDNldm1fc3RhcnQsICh2b2lkICopdm1hLVx1MDAzZXZtX2VuZCwgdm1hLVx1MDAzZXZtX21tLFxuIFx0XHQodW5zaWduZWQgbG9uZylwZ3Byb3RfdmFsKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpLFxuIFx0XHR2bWEtXHUwMDNlYW5vbl92bWEsIHZtYS1cdTAwM2V2bV9vcHMsIHZtYV9zdGFydF9wZ29mZih2bWEpLFxuIFx0XHR2bWEtXHUwMDNldm1fZmlsZSwgdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0XHRyZWZjb3VudF9yZWFkKFx1MDAyNnZtYS1cdTAwM2V2bV9yZWZjbnQpLFxuLSNlbmRpZlxuIFx0XHR2bWEtXHUwMDNldm1fZmxhZ3MsIFx1MDAyNnZtYS1cdTAwM2V2bV9mbGFncyk7XG4gfVxuIEVYUE9SVF9TWU1CT0woZHVtcF92bWEpO1xuZGlmZiAtLWdpdCBhL21tL2luaXQtbW0uYyBiL21tL2luaXQtbW0uY1xuaW5kZXggM2U3OTJhYWQ3NjI2MS4uYTFiYjJjMmQwMjg0YSAxMDA2NDRcbi0tLSBhL21tL2luaXQtbW0uY1xuKysrIGIvbW0vaW5pdC1tbS5jXG5AQCAtMzksMTAgKzM5LDggQEAgc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0ge1xuIFx0LnBhZ2VfdGFibGVfbG9jayA9ICBfX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X21tLnBhZ2VfdGFibGVfbG9jayksXG4gXHQuYXJnX2xvY2tcdD0gIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluaXRfbW0uYXJnX2xvY2spLFxuIFx0Lm1tbGlzdFx0XHQ9IExJU1RfSEVBRF9JTklUKGluaXRfbW0ubW1saXN0KSxcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LnZtYV93cml0ZXJfd2FpdCA9IF9fUkNVV0FJVF9JTklUSUFMSVpFUihpbml0X21tLnZtYV93cml0ZXJfd2FpdCksXG4gXHQubW1fbG9ja19zZXFcdD0gU0VRQ05UX1pFUk8oaW5pdF9tbS5tbV9sb2NrX3NlcSksXG4tI2VuZGlmXG4gI2lmZGVmIENPTkZJR19TQ0hFRF9NTV9DSURcbiBcdC5tbV9jaWQubG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X21tLm1tX2NpZC5sb2NrKSxcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBhNjIwZDQyNWVjOTVlLi5mMTA5ZjZjODdiMjhjIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNjgxMyw3ICs2ODEzLDYgQEAgc3RhdGljIHZtX2ZhdWx0X3Qgc2FuaXRpemVfZmF1bHRfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHQgIWlzX2Nvd19tYXBwaW5nKHZtYS1cdTAwM2V2bV9mbGFncykpKVxuIFx0XHRcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuIFx0fVxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHQvKlxuIFx0ICogUGVyLVZNQSBsb2NrcyBjYW4ndCBiZSB1c2VkIHdpdGggRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgYmVjYXVzZSBvZlxuIFx0ICogdGhlIGFzc3VtcHRpb24gdGhhdCBsb2NrIGlzIGRyb3BwZWQgb24gVk1fRkFVTFRfUkVUUlkuXG5AQCAtNjgyMiw3ICs2ODIxLDYgQEAgc3RhdGljIHZtX2ZhdWx0X3Qgc2FuaXRpemVfZmF1bHRfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0KEZBVUxUX0ZMQUdfVk1BX0xPQ0sgfCBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCkpID09XG4gXHRcdFx0KEZBVUxUX0ZMQUdfVk1BX0xPQ0sgfCBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCkpKVxuIFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcbi0jZW5kaWZcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tbWFwX2xvY2suYyBiL21tL21tYXBfbG9jay5jXG5pbmRleCA4OThjMmVmMWU5NTgwLi42ZmYwNWU2OGU2MWJlIDEwMDY0NFxuLS0tIGEvbW0vbW1hcF9sb2NrLmNcbisrKyBiL21tL21tYXBfbG9jay5jXG5AQCAtNDMsOSArNDMsNiBAQCB2b2lkIF9fbW1hcF9sb2NrX2RvX3RyYWNlX3JlbGVhc2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBib29sIHdyaXRlKVxuIEVYUE9SVF9TWU1CT0woX19tbWFwX2xvY2tfZG9fdHJhY2VfcmVsZWFzZWQpO1xuICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbi1cbiAvKiBTdGF0ZSBzaGFyZWQgYWNyb3NzIF9fdm1hX1tzdGFydCwgZW5kXV9leGNsdWRlX3JlYWRlcnMuICovXG4gc3RydWN0IHZtYV9leGNsdWRlX3JlYWRlcnNfc3RhdGUge1xuIFx0LyogSW5wdXQgcGFyYW1ldGVycy4gKi9cbkBAIC0zNDEsNiArMzM4LDM1IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja192bWFfdW5kZXJfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuKy8qXG4rICogRmluZCB0aGUgVk1BIGNvdmVyaW5nICdhZGRyZXNzJyBhbmQgbG9jayBpdCBmb3IgcmVhZGluZy4gV2FpdHMgZm9yIHdyaXRlcnMgdG9cbisgKiBmaW5pc2ggaWYgdGhlIFZNQSBpcyBiZWluZyBtb2RpZmllZC4gUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzIG5vIFZNQSBjb3ZlcmluZ1xuKyAqICdhZGRyZXNzJy5cbisgKlxuKyAqIFVzZSBvbmx5IGluIGNvZGUgcGF0aHMgd2hlcmUgbm8gbW1hcF9sb2NrIGFuZCBubyBWTUEgbG9jayBpcyBoZWxkLlxuKyAqXG4rICogVGhlIGZhc3QgcGF0aCBkb2VzIG5vdCB0YWtlIG1tYXBfbG9jay5cbisgKi9cbitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuK3tcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1xuK1x0LyogRmFzdCBwYXRoOiByZXR1cm4gc3RhYmxlIFZNQSBjb3ZlcmluZyAnYWRkcmVzcyc6ICovXG4rXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHJlc3MpO1xuK1x0aWYgKHZtYSlcbitcdFx0cmV0dXJuIHZtYTtcbitcbitcdC8qIFNsb3cgcGF0aDogcHJlY2x1ZGUgVk1BIHdyaXRlcnMgYnkgdGVtcG9yYXJpbHkgZ2V0dGluZyBtbWFwIHJlYWQgbG9jay4gKi9cbitcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbitcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHJlc3MpO1xuK1x0aWYgKHZtYSBcdTAwMjZcdTAwMjYgIXZtYV9zdGFydF9yZWFkX2xvY2tlZCh2bWEpKVxuK1x0XHR2bWEgPSBOVUxMO1xuK1x0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXG4rXHRyZXR1cm4gdm1hO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX25leHRfdm1hX3VuZGVyX21tYXBfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXG4gXHRcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmcm9tX2FkZHIpXG5AQCAtNDMxLDcgKzQ1Nyw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbG9ja19uZXh0X3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcbiBcdHJldHVybiB2bWE7XG4gfVxuLSNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLICovXG4gXG4gI2lmZGVmIENPTkZJR19MT0NLX01NX0FORF9GSU5EX1ZNQVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4dGFibGUuaFx1MDAzZVxuQEAgLTU0OCwyMyArNTczLDMgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX21tX2FuZF9maW5kX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBOVUxMO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xPQ0tfTU1fQU5EX0ZJTkRfVk1BICovXG4tXG4tI2Vsc2UgLyogQ09ORklHX01NVSAqL1xuLVxuLS8qXG4tICogQXQgbGVhc3QgeHRlbnNhIGVuZHMgdXAgaGF2aW5nIHByb3RlY3Rpb24gZmF1bHRzIGV2ZW4gd2l0aCBub1xuLSAqIE1NVS4uIE5vIHN0YWNrIGV4cGFuc2lvbiwgYXQgbGVhc3QuXG4tICovXG4tc3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX21tX2FuZF9maW5kX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLXtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVxuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4tXHRpZiAoIXZtYSlcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRyZXR1cm4gdm1hO1xuLX1cbi1cbi0jZW5kaWYgLyogQ09ORklHX01NVSAqL1xuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCBlZDQ4NjBjMDE5MzZjLi5mYmNmNjRjNTlhOTczIDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuKysrIGIvbW0vcGFnZXdhbGsuY1xuQEAgLTQ0Niw3ICs0NDYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc19tbV93YWxrX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3Nfdm1hX3dhbGtfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdFx0IGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKVxuIHtcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0c3dpdGNoICh3YWxrX2xvY2spIHtcbiBcdGNhc2UgUEdXQUxLX1dSTE9DSzpcbiBcdFx0dm1hX3N0YXJ0X3dyaXRlKHZtYSk7XG5AQCAtNDYxLDcgKzQ2MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFBHV0FMS19SRExPQ0sgaXMgaGFuZGxlZCBieSBwcm9jZXNzX21tX3dhbGtfbG9jayAqL1xuIFx0XHRicmVhaztcbiBcdH1cbi0jZW5kaWZcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IGI5MTc0MzE3NTllZTAuLjRlNGE0Yjc0Nzk3NzIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTI2MCwxMSArMjYwLDkgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gXHQvKiBGb3IgdGhlIGFub25fdm1hIHRvIGJlIGNvbXBhdGlibGUsIGl0IGNhbiBvbmx5IGJlIHNpbmd1bGFyLiAqL1xuIFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiA9PSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCFsaXN0X2lzX3Npbmd1bGFyKFx1MDAyNnNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpO1xuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gXHQvKiBPbmx5IG1lcmdpbmcgYW4gdW5mYXVsdGVkIFZNQSBsZWF2ZXMgdGhlIGRlc3RpbmF0aW9uIGF0dGFjaGVkLiAqL1xuIFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFx1MDAyNlx1MDAyNlxuIFx0XHRcdHZtYV9pc19hdHRhY2hlZChkc3QpKTtcbi0jZW5kaWZcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWF5YmVfcmV1c2VfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDI1OGIwMzE4MmE3ODAuLmMzYTBjMzhhM2RjM2IgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTIyLDcgKzEyMiw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF92bWFfYW5kX3ByZXBhcmVfYW5vbihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gLypcbiAgKiB1ZmZkX2xvY2tfdm1hKCkgLSBMb29rdXAgYW5kIGxvY2sgdm1hIGNvcnJlc3BvbmRpbmcgdG8gQGFkZHJlc3MuXG4gICogQG1tOiBtbSB0byBzZWFyY2ggdm1hIGluLlxuQEAgLTEzMCw4ICsxMjksMTAgQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3ZtYV9hbmRfcHJlcGFyZV9hbm9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuICAqXG4gICogU2hvdWxkIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbW1hcF9sb2NrLlxuICAqXG4tICogUmV0dXJuOiBBIGxvY2tlZCB2bWEgY29udGFpbmluZyBAYWRkcmVzcywgLUVOT0VOVCBpZiBubyB2bWEgaXMgZm91bmQsIG9yXG4tICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQuXG4rICogUmV0dXJuOiBBIGxvY2tlZCB2bWEgY29udGFpbmluZyBAYWRkcmVzcywgLUVOT0VOVCBpZiBubyB2bWEgaXMgZm91bmQsXG4rICogLUVOT01FTSBpZiBhbm9uX3ZtYSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQsIG9yIC1FQUdBSU4gaWYgdm1hIHJlZmNvdW50XG4rICogb3ZlcmZsb3cgaGFwcGVuZWQgZHVlIHRvIGhpZ2ggbnVtYmVyIG9mIHJlYWRlcnMgYW5kIHRoZSBjYWxsZXIgc2hvdWxkXG4rICogcmV0cnkgbGF0ZXIuXG4gICovXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdWZmZF9sb2NrX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG5AQCAtMTgyLDM0ICsxODMsNiBAQCBzdGF0aWMgdm9pZCB1ZmZkX21maWxsX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIH1cbiBcbi0jZWxzZVxuLVxuLXN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnVmZmRfbWZpbGxfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sXG4tXHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuLVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGxlbilcbi17XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWE7XG4tXG4tXHRtbWFwX3JlYWRfbG9jayhkc3RfbW0pO1xuLVx0ZHN0X3ZtYSA9IGZpbmRfdm1hX2FuZF9wcmVwYXJlX2Fub24oZHN0X21tLCBkc3Rfc3RhcnQpO1xuLVx0aWYgKElTX0VSUihkc3Rfdm1hKSlcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuLVxuLVx0aWYgKHZhbGlkYXRlX2RzdF92bWEoZHN0X3ZtYSwgZHN0X3N0YXJ0ICsgbGVuKSlcbi1cdFx0cmV0dXJuIGRzdF92bWE7XG4tXG4tXHRkc3Rfdm1hID0gRVJSX1BUUigtRU5PRU5UKTtcbi1vdXRfdW5sb2NrOlxuLVx0bW1hcF9yZWFkX3VubG9jayhkc3RfbW0pO1xuLVx0cmV0dXJuIGRzdF92bWE7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHVmZmRfbWZpbGxfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdG1tYXBfcmVhZF91bmxvY2sodm1hLVx1MDAzZXZtX21tKTtcbi19XG4tI2VuZGlmXG4tXG4gc3RhdGljIHZvaWQgbWZpbGxfcHV0X3ZtYShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdGlmICghc3RhdGUtXHUwMDNldm1hKVxuQEAgLTE4NTIsNyArMTgyNSw2IEBAIGludCBmaW5kX3ZtYXNfbW1fbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfUEVSX1ZNQV9MT0NLXG4gc3RhdGljIGludCB1ZmZkX21vdmVfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsXG5AQCAtMTkyNywzMSArMTg5OSw2IEBAIHN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuIFx0XHR2bWFfZW5kX3JlYWQoZHN0X3ZtYSk7XG4gfVxuIFxuLSNlbHNlXG4tXG4tc3RhdGljIGludCB1ZmZkX21vdmVfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsXG4tXHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipkc3Rfdm1hcCxcbi1cdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnNyY192bWFwKVxuLXtcbi1cdGludCBlcnI7XG4tXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRlcnIgPSBmaW5kX3ZtYXNfbW1fbG9ja2VkKG1tLCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgZHN0X3ZtYXAsIHNyY192bWFwKTtcbi1cdGlmIChlcnIpXG4tXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tXHRcdFx0ICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEpXG4te1xuLVx0bW1hcF9hc3NlcnRfbG9ja2VkKHNyY192bWEtXHUwMDNldm1fbW0pO1xuLVx0bW1hcF9yZWFkX3VubG9jayhkc3Rfdm1hLVx1MDAzZXZtX21tKTtcbi19XG4tI2VuZGlmXG4tXG4gLyoqXG4gICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcbiAgKiBAY3R4OiBwb2ludGVyIHRvIHRoZSB1c2VyZmF1bHRmZCBjb250ZXh0XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggNDU1NDQxZjFiNjk0OS4uNjJkZWZlNzBmM2NlYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTIxNjcsMjcgKzIxNjcsMTggQEAgc3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdGNwX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICBib29sICptbWFwX2xvY2tlZClcbitcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbG9ja192bWFfdW5kZXJfcmN1KG1tLCBhZGRyZXNzKTtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHJlc3MpO1xuIFxuLVx0aWYgKHZtYSkge1xuLVx0XHRpZiAodm1hLVx1MDAzZXZtX29wcyAhPSBcdTAwMjZ0Y3Bfdm1fb3BzKSB7XG4tXHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdH1cbi1cdFx0Km1tYXBfbG9ja2VkID0gZmFsc2U7XG4tXHRcdHJldHVybiB2bWE7XG4tXHR9XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyZXNzKTtcbi1cdGlmICghdm1hIHx8IHZtYS1cdTAwM2V2bV9vcHMgIT0gXHUwMDI2dGNwX3ZtX29wcykge1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbitcdGlmICh2bWEtXHUwMDNldm1fb3BzICE9IFx1MDAyNnRjcF92bV9vcHMpIHtcbitcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0Km1tYXBfbG9ja2VkID0gdHJ1ZTtcbitcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuQEAgLTIyMDgsNyArMjE5OSw2IEBAIHN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxuIFx0dTMyIHNlcSA9IHRwLVx1MDAzZWNvcGllZF9zZXE7XG4gXHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwO1xuIFx0aW50IGlucSA9IHRjcF9pbnEoc2spO1xuLVx0Ym9vbCBtbWFwX2xvY2tlZDtcbiBcdGludCByZXQ7XG4gXG4gXHR6Yy1cdTAwM2Vjb3B5YnVmX2xlbiA9IDA7XG5AQCAtMjIzMyw3ICsyMjIzLDcgQEAgc3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0dm1hID0gZmluZF90Y3Bfdm1hKGN1cnJlbnQtXHUwMDNlbW0sIGFkZHJlc3MsIFx1MDAyNm1tYXBfbG9ja2VkKTtcbitcdHZtYSA9IGZpbmRfdGNwX3ZtYShjdXJyZW50LVx1MDAzZW1tLCBhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0yMzE1LDEwICsyMzA1LDcgQEAgc3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdFx0ICAgemMsIHRvdGFsX2J5dGVzX3RvX21hcCk7XG4gXHR9XG4gb3V0OlxuLVx0aWYgKG1tYXBfbG9ja2VkKVxuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuLVx0ZWxzZVxuLVx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbitcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIFx0LyogVHJ5IHRvIGNvcHkgc3RyYWdnbGVyIGRhdGEuICovXG4gXHRpZiAoIXJldClcbiBcdFx0Y29weWxlbiA9IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoemMsIHNrLCBza2IsIFx1MDAyNnNlcSwgY29weWJ1Zl9sZW4sIHRzcyk7XG5kaWZmIC0tZ2l0IGEvcnVzdC9rZXJuZWwvbW0ucnMgYi9ydXN0L2tlcm5lbC9tbS5yc1xuaW5kZXggNDc2NGQ3YjY4ZjJhNy4uODc3ZmFkNjhiZTljMyAxMDA2NDRcbi0tLSBhL3J1c3Qva2VybmVsL21tLnJzXG4rKysgYi9ydXN0L2tlcm5lbC9tbS5yc1xuQEAgLTE3NCwyNiArMTc0LDM4IEBAIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXdcdTAwM2MnYVx1MDAzZShwdHI6ICpjb25zdCBiaW5kaW5nczo6bW1fc3RydWN0KSAtXHUwMDNlIFx1MDAyNidhIE1tV2l0aFVzZXIge1xuICAgICAvLy8gV2hlbiBwZXItdm1hIGxvY2tzIGFyZSBkaXNhYmxlZCwgdGhpcyBhbHdheXMgcmV0dXJucyBgTm9uZWAuXG4gICAgICNbaW5saW5lXVxuICAgICBwdWIgZm4gbG9ja192bWFfdW5kZXJfcmN1KFx1MDAyNnNlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLVx1MDAzZSBPcHRpb25cdTAwM2NWbWFSZWFkR3VhcmRcdTAwM2MnX1x1MDAzZVx1MDAzZSB7XG4tICAgICAgICAjW2NmZyhDT05GSUdfUEVSX1ZNQV9MT0NLKV1cbiAgICAgICAgIHtcbiAgICAgICAgICAgICAvLyBTQUZFVFk6IENhbGxpbmcgYGJpbmRpbmdzOjpsb2NrX3ZtYV91bmRlcl9yY3VgIGlzIGFsd2F5cyBva2F5IGdpdmVuIGFuIG1tIHdoZXJlXG4gICAgICAgICAgICAgLy8gYG1tX3VzZXJzYCBpcyBub24temVyby5cbiAgICAgICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OmxvY2tfdm1hX3VuZGVyX3JjdShzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcbi0gICAgICAgICAgICBpZiAhdm1hLmlzX251bGwoKSB7XG4tICAgICAgICAgICAgICAgIHJldHVybiBTb21lKFZtYVJlYWRHdWFyZCB7XG4tICAgICAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IElmIGBsb2NrX3ZtYV91bmRlcl9yY3VgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbi0gICAgICAgICAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC5cbi0gICAgICAgICAgICAgICAgICAgIHZtYTogdW5zYWZlIHsgVm1hUmVmOjpmcm9tX3Jhdyh2bWEpIH0sXG4tICAgICAgICAgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxuLSAgICAgICAgICAgICAgICB9KTtcbisgICAgICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcbisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmU7XG4gICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcbisgICAgICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgbG9ja192bWFfdW5kZXJfcmN1YCByZXR1cm5zIGEgbm9uLW51bGwgcHRyLCB0aGVuIGl0IHBvaW50cyBhdCBhXG4rICAgICAgICAgICAgICAgIC8vIHZhbGlkIHZtYS4gVGhlIHZtYSBpcyBzdGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIHZtYSByZWFkIGxvY2sgaXMgaGVsZC5cbisgICAgICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSxcbisgICAgICAgICAgICAgICAgX250czogTm90VGhyZWFkU2FmZSxcbisgICAgICAgICAgICB9KVxuICAgICAgICAgfVxuKyAgICB9XG4gXG4tICAgICAgICAvLyBTaWxlbmNlIHdhcm5pbmdzIGFib3V0IHVudXNlZCB2YXJpYWJsZXMuXG4tICAgICAgICAjW2NmZyhub3QoQ09ORklHX1BFUl9WTUFfTE9DSykpXVxuLSAgICAgICAgbGV0IF8gPSB2bWFfYWRkcjtcbi1cbi0gICAgICAgIE5vbmVcbisgICAgLy8vIEZpbmQgdGhlIFZNQSBjb3ZlcmluZyAnYWRkcmVzcycgYW5kIGxvY2sgaXQgZm9yIHJlYWRpbmcuIFdhaXRzIGZvciB3cml0ZXJzIHRvIGZpbmlzaCBpZiB0aGVcbisgICAgLy8vIFZNQSBpcyBiZWluZyBtb2RpZmllZC5cbisgICAgI1tpbmxpbmVdXG4rICAgIHB1YiBmbiB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjVm1hUmVhZEd1YXJkXHUwMDNjJ19cdTAwM2VcdTAwM2Uge1xuKyAgICAgICAgLy8gU0FGRVRZOiBXZSBtYXkgaW52b2tlIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgYmVjYXVzZSB3ZSBrbm93IHRoaXMgYG1tYCBoYXMgbm9uLXplcm9cbisgICAgICAgIC8vIGBtbV91c2Vyc2AuXG4rICAgICAgICBsZXQgdm1hID0gdW5zYWZlIHsgYmluZGluZ3M6OnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHNlbGYuYXNfcmF3KCksIHZtYV9hZGRyKSB9O1xuKyAgICAgICAgaWYgdm1hLmlzX251bGwoKSB7XG4rICAgICAgICAgICAgcmV0dXJuIE5vbmU7XG4rICAgICAgICB9XG4rICAgICAgICBTb21lKFZtYVJlYWRHdWFyZCB7XG4rICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbisgICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXG4rICAgICAgICAgICAgdm1hOiB1bnNhZmUgeyBWbWFSZWY6OmZyb21fcmF3KHZtYSkgfSxcbisgICAgICAgICAgICBfbnRzOiBOb3RUaHJlYWRTYWZlLFxuKyAgICAgICAgfSlcbiAgICAgfVxuIFxuICAgICAvLy8gTG9jayB0aGUgbW1hcCByZWFkIGxvY2suXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbmluZGV4IDgwMGU1ZmEwMmQ3OGYuLjM2MmZlZGEyODUyNjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5AQCAtNTgyLDcgKzU4Miw2IEBAIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XG4gXHRcdHZtYV9mbGFnc190IGZsYWdzO1xuIFx0fTtcbiBcbi0jaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIFx0LypcbiBcdCAqIENhbiBvbmx5IGJlIHdyaXR0ZW4gKHVzaW5nIFdSSVRFX09OQ0UoKSkgd2hpbGUgaG9sZGluZyBib3RoOlxuIFx0ICogIC0gbW1hcF9sb2NrIChpbiB3cml0ZSBtb2RlKVxuQEAgLTU5OCw3ICs1OTcsNyBAQCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qge1xuIFx0ICogc2xvd3BhdGguXG4gXHQgKi9cbiBcdHVuc2lnbmVkIGludCB2bV9sb2NrX3NlcTtcbi0jZW5kaWZcbitcbiBcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfbG87XG4gXG4gXHQvKlxuQEAgLTYzMiwxMCArNjMxLDggQEAgc3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4gXHRzdHJ1Y3Qgdm1hX251bWFiX3N0YXRlICpudW1hYl9zdGF0ZTtcdC8qIE5VTUEgQmFsYW5jaW5nIHN0YXRlICovXG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcbiBcdC8qIFVuc3RhYmxlIFJDVSByZWFkZXJzIGFyZSBhbGxvd2VkIHRvIHJlYWQgdGhpcy4gKi9cbiBcdHJlZmNvdW50X3Qgdm1fcmVmY250O1xuLSNlbmRpZlxuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdHVuc2lnbmVkIGludCBfX3ZtX3ZpcnRfcGdvZmZfaGk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdm1hX2ludGVybmFsLmggYi90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxuaW5kZXggOGE0OGIyMzFhYTdhYi4uNTRkNWMzMzYwYWEyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3ZtYV9pbnRlcm5hbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS92bWFfaW50ZXJuYWwuaFxuQEAgLTE1LDcgKzE1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ09ORklHX01NVVx0XHQxXG4tI2RlZmluZSBDT05GSUdfUEVSX1ZNQV9MT0NLXHQxXG4gXG4gI2lmZGVmIF9fQ09OQ0FUXG4gI3VuZGVmIF9fQ09OQ0FUXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMToxNzoyMS41ODMwNTU1MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDI5MDk5Nzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgVW5jb25kaXRpb25hbCBQZXItVk1BIExvY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYmlnIG9uZS4gSXQncyBlc3NlbnRpYWxseSByaXBwaW5nIG91dCB0aGUgY29uZGl0aW9uYWwgYENPTkZJR19QRVJfVk1BX0xPQ0tgIGFuZCBmb3JjaW5nIHBlci1WTUEgbG9ja2luZyB0byBiZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZCBhY3Jvc3MgdGhlIGJvYXJkLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBhcmUgaGFuZGxlZCBpbiB0aGUga2VybmVsLCBhbmQgaXQncyBnb2luZyB0byByaXBwbGUgb3V0IHRvIGEgKmxvdCogb2Ygc3Vic3lzdGVtcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyAqYWJzb2x1dGVseSogd2FycmFudHMgc2VyaW91cyBmdXp6aW5nIGVmZm9ydC5cblxuVGhlIGtleSB0aGluZyBJJ20gc2VlaW5nIGlzIHRoaXMgbmV3IGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgZnVuY3Rpb24gaW4gYG1tL21tYXBfbG9jay5jYC4gSXQncyBkZXNpZ25lZCB0byBwcm92aWRlIGEgcmVhZC1zaWRlIGxvY2sgb24gYSBWTUEgd2l0aG91dCByZWx5aW5nIG9uIFJDVSBpbiB0aGUgZmFzdCBwYXRoLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhpcyBpcyBhIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb24gYW5kLCBnaXZlbiBpdHMgcGVydmFzaXZlIHVzZSBpbiB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiBkZXRhaWwuIFRoZSBzbG93IHBhdGggYWNxdWlyaW5nIHRoZSBgbW1hcF9yZWFkX2xvY2tgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy5cblxuQmV5b25kIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAsIEknbSBzZWVpbmcgbW9kaWZpY2F0aW9ucyBpbiBzb21lIGNyaXRpY2FsIGFyZWFzLiBgZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jYCBhbmQgYGRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yc2AgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGF0J3MgQmluZGVyLCBhIGNyaXRpY2FsIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBtZWNoYW5pc20sIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpc3N1ZXMgaGVyZSwgdGhleSBjb3VsZCBtYW5pZmVzdCBhcyB2ZXJ5IGhhcmQtdG8tZGVidWcgY3Jhc2hlcyBvciB2dWxuZXJhYmlsaXRpZXMuIGBiaW5kZXJfcGFnZV9pbnNlcnRgIGFuZCBgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZWAgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaGVyZS5cblxuYG5ldC9pcHY0L3RjcC5jYCBpcyBhbHNvIGdldHRpbmcgdG91Y2hlZC4gU3BlY2lmaWNhbGx5LCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLiBUaGUgZmFjdCB0aGF0IHRoZXkncmUgY2hhbmdpbmcgdGhlIGxvY2tpbmcgZm9yIGEgemVyby1jb3B5IHJlY2VpdmUgcGF0aCBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGF0J3MgYW4gYXJlYSB3aXRoIHZlcnkgdGlnaHQgdGltaW5nIGNvbnN0cmFpbnRzIGFuZCBoaWdoIHBlcmZvcm1hbmNlIGV4cGVjdGF0aW9ucy4gQ29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIFZNQXMgZHVyaW5nIHRoaXMgZnVuY3Rpb24gaXMgd29ydGggc2NydXRpbml6aW5nLlxuXG5Vc2VyZmF1bHRmZCAoYG1tL3VzZXJmYXVsdGZkLmNgKSBpcyBhbm90aGVyIGNydWNpYWwgYXJlYS4gV2UncmUgZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgZmF1bHQgaGFuZGxpbmcsIGFuZCBhbnkgbG9ja2luZyBlcnJvcnMgaGVyZSBjb3VsZCBlYXNpbHkgbGVhZCB0byBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gYHVmZmRfbG9ja192bWFgIGFuZCBgdWZmZF9tb3ZlX2xvY2tgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy5cblxuQW5kIGZpbmFsbHkgQlBGIHN0YWNrbWFwcy4gSSBzZWUgY2hhbmdlcyBpbiBga2VybmVsL2JwZi9zdGFja21hcC5jYCwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGBzdGFja19tYXBfbG9ja192bWFgIGZ1bmN0aW9uLiBCUEYgaXMgYmVjb21pbmcgaW5jcmVhc2luZ2x5IHBvd2VyZnVsLCBzbyBhbnl0aGluZyB0aGF0IGFmZmVjdHMgaXRzIG1lbW9yeSBzYWZldHkgaXMgY3JpdGljYWwuIEFsc28gYGJwZl9pdGVyX3Rhc2tfdm1hX25ld2AgaXMgYSBCUEYga2Z1bmMsIHdoaWNoIGlzIGFsc28gaW1wb3J0YW50LlxuXG5GdXJ0aGVybW9yZSwgY2hhbmdlcyB0byBwcm9jZnMgKGBmcy9wcm9jL3Rhc2tfbW11LmNgKSB0aGF0IGFyZSBub3cgdW5jb25kaXRpb25hbGx5IHVzaW5nIHBlci1WTUEgbG9ja2luZyBuZWVkcyB0byBiZSBjaGVja2VkLiBJJ20gc2VlaW5nIGBsb2NrX2N0eF9tbWAgaXMgbm93IGFsd2F5cyB1c2luZyB0aGUgc2FtZSBjb2RlIHBhdGgsIGl0IG1heSBuZWVkIHRvIGJlIGNoZWNrZWQuXG5cblNpbmNlIHdlIGFyZSBtYWtpbmcgYWxsIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZCwgSSdsbCBuZWVkIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBVU0VSRkFVTFRGRGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQU5EUk9JRF9CSU5ERVJfSVBDYCB0byBmdWxseSBleGVyY2lzZSB0aGVzZSBjb2RlIHBhdGhzLlxuXG5UbyBzdW1tYXJpemUsIHRoaXMgaXMgd2hhdCBJJ20gc2VlaW5nIGFzIHRoZSBrZXkgZm9jdXMgYXJlYXMgZm9yIHRoaXMgcGF0Y2g6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBZZXNcbiogICAqKkZvY3VzU3ltYm9scyoqOlxuICAgICogICBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIChuZXcgZnVuY3Rpb24sIGNlbnRyYWwgdG8gdGhlIHBhdGNoKVxuICAgICogICBgYmluZGVyX3BhZ2VfaW5zZXJ0YFxuICAgICogICBgYmluZGVyX2FsbG9jX2ZyZWVfcGFnZWBcbiAgICAqICAgYHRjcF96ZXJvY29weV9yZWNlaXZlYFxuICAgICogICBgdWZmZF9sb2NrX3ZtYWBcbiAgICAqICAgYHVmZmRfbW92ZV9sb2NrYFxuICAgICogICBgc3RhY2tfbWFwX2xvY2tfdm1hYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOlxuICAgICogICBgVVNFUkZBVUxURkRgXG4gICAgKiAgIGBCUEZfU1lTQ0FMTGBcbiAgICAqICAgYEFORFJPSURfQklOREVSX0lQQ2BcblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUsIGFuZCB0aGVuIGdldCB0byBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4OCwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTg1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDE6MTc6NDEuODc0MDU2MjcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE2NjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFfc3RhcnRfcmVhZF91bmxvY2tlZFwiLFxuICAgIFwiYmluZGVyX3BhZ2VfaW5zZXJ0XCIsXG4gICAgXCJiaW5kZXJfYWxsb2NfZnJlZV9wYWdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiLFxuICAgIFwidWZmZF9sb2NrX3ZtYVwiLFxuICAgIFwidWZmZF9tb3ZlX2xvY2tcIixcbiAgICBcInN0YWNrX21hcF9sb2NrX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJBTkRST0lEX0JJTkRFUl9JUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFfc3RhcnRfcmVhZF91bmxvY2tlZFwiLFxuICAgIFwiYmluZGVyX3BhZ2VfaW5zZXJ0XCIsXG4gICAgXCJiaW5kZXJfYWxsb2NfZnJlZV9wYWdlXCIsXG4gICAgXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiLFxuICAgIFwidWZmZF9sb2NrX3ZtYVwiLFxuICAgIFwidWZmZF9tb3ZlX2xvY2tcIixcbiAgICBcInN0YWNrX21hcF9sb2NrX3ZtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBvcHRpb24gYW5kIG1ha2VzIHBlci1WTUEgbG9ja2luZyB1bmNvbmRpdGlvbmFsIGFjcm9zcyB0aGUga2VybmVsLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEFQSSBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIGFuZCBtb2RpZmllcyBzZXZlcmFsIHN1YnN5c3RlbXMgKEJpbmRlciwgVENQIHplcm9jb3B5LCBVc2VyZmF1bHRmZCwgQlBGIHN0YWNrbWFwLCBwcm9jZnMpIHRvIHVzZSBpdCBvciByZWx5IG9uIHVuY29uZGl0aW9uYWwgcGVyLVZNQSBsb2NraW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBzdWJzeXN0ZW1zIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbG9naWMgZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowj72ht[1] Phase: Succeeded StartedAt: 2026-08-03 01:17:53 +0000 UTC FinishedAt: 2026-08-03 01:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 01:17:53 +0000 UTC FinishedAt: 2026-08-03 01:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2] Phase: Succeeded StartedAt: 2026-08-03 01:17:53 +0000 UTC FinishedAt: 2026-08-03 04:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 01:17:53 +0000 UTC FinishedAt: 2026-08-03 04:56:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 01:17:53 +0000 UTC FinishedAt: 2026-08-03 01:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 01:17:53 +0000 UTC FinishedAt: 2026-08-03 01:17:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj72ht/series-workflowj72ht-convert-artifact-3047733752/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 01:18:03 +0000 UTC FinishedAt: 2026-08-03 01:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 01:18:03 +0000 UTC FinishedAt: 2026-08-03 01:33:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*218a11d8-0eea-48ad-815f-ff47749e03a3,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-workflowj72ht/series-workflowj72ht-convert-artifact-3047733752/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": "1b11d03e-6c2f-47f6-88f4-6c2555ecab73", "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-workflowj72ht/series-workflowj72ht-build-action-2384363182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 01:18:03 +0000 UTC FinishedAt: 2026-08-03 01:33:38 +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:*218a11d8-0eea-48ad-815f-ff47749e03a3,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-workflowj72ht/series-workflowj72ht-convert-artifact-3047733752/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": "1b11d03e-6c2f-47f6-88f4-6c2555ecab73", "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-workflowj72ht/series-workflowj72ht-build-action-2384363182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 01:33:48 +0000 UTC FinishedAt: 2026-08-03 01:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 01:33:48 +0000 UTC FinishedAt: 2026-08-03 01:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 01:33:48 +0000 UTC FinishedAt: 2026-08-03 01:33:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 01:33:48 +0000 UTC FinishedAt: 2026-08-03 01:33:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj72ht/series-workflowj72ht-convert-artifact-4272088159/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 01:33:58 +0000 UTC FinishedAt: 2026-08-03 01:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 01:33:58 +0000 UTC FinishedAt: 2026-08-03 01:35:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1b11d03e-6c2f-47f6-88f4-6c2555ecab73,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-workflowj72ht/series-workflowj72ht-build-action-2384363182/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-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 01:35:59 +0000 UTC FinishedAt: 2026-08-03 01:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 01:35:59 +0000 UTC FinishedAt: 2026-08-03 01:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 01:35:59 +0000 UTC FinishedAt: 2026-08-03 01:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 01:35:59 +0000 UTC FinishedAt: 2026-08-03 01:51:50 +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:*218a11d8-0eea-48ad-815f-ff47749e03a3,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-workflowj72ht/series-workflowj72ht-convert-artifact-4272088159/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": "13fc98b9-9db2-4778-987b-001b397a21de", "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-workflowj72ht/series-workflowj72ht-build-action-1316188659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 01:35:59 +0000 UTC FinishedAt: 2026-08-03 01:51:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*218a11d8-0eea-48ad-815f-ff47749e03a3,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-workflowj72ht/series-workflowj72ht-convert-artifact-4272088159/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": "13fc98b9-9db2-4778-987b-001b397a21de", "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-workflowj72ht/series-workflowj72ht-build-action-1316188659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 01:51:50 +0000 UTC FinishedAt: 2026-08-03 01:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 01:51:50 +0000 UTC FinishedAt: 2026-08-03 01:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 01:51:50 +0000 UTC FinishedAt: 2026-08-03 01:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 01:51:50 +0000 UTC FinishedAt: 2026-08-03 01:53: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:*13fc98b9-9db2-4778-987b-001b397a21de,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-workflowj72ht/series-workflowj72ht-build-action-1316188659/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-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 04:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 04:56:34 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"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:*1b11d03e-6c2f-47f6-88f4-6c2555ecab73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*13fc98b9-9db2-4778-987b-001b397a21de,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-workflowj72ht/series-workflowj72ht-build-action-2384363182/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-workflowj72ht/series-workflowj72ht-build-action-1316188659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 01:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 01:53:51 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"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-workflowj72ht/series-workflowj72ht-convert-artifact-2355425400/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 02:10:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1b11d03e-6c2f-47f6-88f4-6c2555ecab73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*13fc98b9-9db2-4778-987b-001b397a21de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowj72ht/series-workflowj72ht-build-action-2384363182/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-workflowj72ht/series-workflowj72ht-build-action-1316188659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 01:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 01:53:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},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-workflowj72ht/series-workflowj72ht-convert-artifact-2787817011/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 01:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 01:53:47 +0000 UTC FinishedAt: 2026-08-03 01:53:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 01:53:57 +0000 UTC FinishedAt: 2026-08-03 04:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 01:53:57 +0000 UTC FinishedAt: 2026-08-03 04:56:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1b11d03e-6c2f-47f6-88f4-6c2555ecab73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*13fc98b9-9db2-4778-987b-001b397a21de,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-workflowj72ht/series-workflowj72ht-build-action-2384363182/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-workflowj72ht/series-workflowj72ht-build-action-1316188659/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-workflowj72ht/series-workflowj72ht-convert-artifact-2355425400/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,} --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-08-03 01:53:57 +0000 UTC FinishedAt: 2026-08-03 02:10:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj72ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vma_start_read_unlocked","binder_page_insert","binder_alloc_free_page","tcp_zerocopy_receive","uffd_lock_vma","uffd_move_lock","stack_map_lock_vma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94f9b3980dd446b56acf1dfed649e9b32a9f3813","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","BPF_SYSCALL","ANDROID_BINDER_IPC"],"series_id":"6dbf5a04-692d-4119-a85f-65d0e30124fc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["59d09544-f280-48fe-8ca9-a2fd8225e9df"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-08-03 01:53:57 +0000 UTC FinishedAt: 2026-08-03 02:10:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1b11d03e-6c2f-47f6-88f4-6c2555ecab73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*13fc98b9-9db2-4778-987b-001b397a21de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowj72ht/series-workflowj72ht-build-action-2384363182/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-workflowj72ht/series-workflowj72ht-build-action-1316188659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowj72ht/series-workflowj72ht-convert-artifact-2787817011/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,}