Name: series-workflowg7762 Phase: Succeeded StartedAt: 2026-08-04 21:07:34 +0000 UTC FinishedAt: 2026-08-05 01:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[0] Phase: Succeeded StartedAt: 2026-08-04 21:07:34 +0000 UTC FinishedAt: 2026-08-04 22:04:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 21:07:34 +0000 UTC FinishedAt: 2026-08-04 22:04:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG" ], "series_id": "00c20264-1aea-4c75-9f9f-4d909dcdd4a3" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xas_split_alloc", "folio_split", "__split_huge_page_to_list_to_order" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGFzX3NwbGl0X2FsbG9jJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBhbGxvY2F0ZSB4YXJyYXkgbm9kZXMsIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgeGFycmF5IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ODY5NTcwZDZmMWI1YjI3NzAxNmI3NzY5NTczZDc2YzcxMTg5ZjI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMTo1NzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLmJmZTdiZWY4MGYzNGUgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuY1xuQEAgLTEwNTMsNiAmIzQzOzEwNTMsOSBAQCB2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdGlmICh4YXMtXHUwMDNleGFfc2hpZnQgJiM0MzsgWEFfQ0hVTktfU0hJRlQgXHUwMDNlIG9yZGVyKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aWYgKHhhcy1cdTAwM2V4YS1cdTAwM2V4YV9mbGFncyBcdTAwMjYgWEFfRkxBR1NfQUNDT1VOVClcbiYjNDM7XHRcdGdmcCB8PSBfX0dGUF9BQ0NPVU5UO1xuJiM0MztcbiBcdGRvIHtcbiBcdFx0c3RydWN0IHhhX25vZGUgKm5vZGU7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDAzMjcwMmE0NjM3YmEuLmU5MDM0NmZkZTU1MWEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzk4NCwzNCAmIzQzOzM5ODQsNDIgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRYQV9TVEFURSh4YXMsIFx1MDAyNmZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaV9wYWdlcywgZm9saW8tXHUwMDNlaW5kZXgpO1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdGJvb2wgaXNfYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBOVUxMO1xuIFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IE5VTEw7XG4gXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xuIFx0aW50IG5yX3NobWVtX2Ryb3BwZWQgPSAwO1xuIFx0ZW51bSB0dHVfZmxhZ3MgdHR1X2ZsYWdzID0gMDtcbi1cdGludCByZXQ7XG4gXHRwZ29mZl90IGVuZCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pLCBmb2xpbyk7XG4gXG4gXHRpZiAoZm9saW8gIT0gcGFnZV9mb2xpbyhzcGxpdF9hdCkgfHwgZm9saW8gIT0gcGFnZV9mb2xpbyhsb2NrX2F0KSkge1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGdvdG8gb3V0X25vX21lbWNnO1xuIFx0fVxuIFxuIFx0aWYgKG5ld19vcmRlciBcdTAwM2U9IG9sZF9vcmRlcikge1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGdvdG8gb3V0X25vX21lbWNnO1xuIFx0fVxuIFxuIFx0cmV0ID0gZm9saW9fY2hlY2tfc3BsaXR0YWJsZShmb2xpbywgbmV3X29yZGVyLCBzcGxpdF90eXBlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0Vk1fV0FSTl9PTkNFKHJldCA9PSAtRUlOVkFMLCBcJiMzNDtUcmllZCB0byBzcGxpdCBhbiB1bnNwbGl0dGFibGUgZm9saW9cJiMzNDspO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGdvdG8gb3V0X25vX21lbWNnO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogc3dpdGNoIHRvIGZvbGlvJiMzOTtzIG1lbWNnIGFzIHhhcnJheSBub2RlIGFsbG9jYXRpb24gY2FuIGhhcHBlbiBhbmRcbiYjNDM7XHQgKiBuZWVkcyB0byBjaGFyZ2UgdG8gaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcbiYjNDM7XG4gXHRpZiAoaXNfYW5vbikge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgY2FsbGVyIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhvbGQgYW4gbW1hcF9sb2NrIHRoYXQgd291bGRcbkBAIC00MTQwLDYgJiM0Mzs0MTQ4LDEwIEBAIHN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuIFx0aWYgKG1hcHBpbmcpXG4gXHRcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcbiBvdXQ6XG4mIzQzO1x0LyogcmVzdG9yZSB0byBjYWxsZXImIzM5O3Mgb2xkX21lbWNnICovXG4mIzQzO1x0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7b3V0X25vX21lbWNnOlxuIFx0eGFzX2Rlc3Ryb3koXHUwMDI2eGFzKTtcbiBcdGlmIChpc19wbWRfb3JkZXIob2xkX29yZGVyKSlcbiBcdFx0Y291bnRfdm1fZXZlbnQoIXJldCA/IFRIUF9TUExJVF9QQUdFIDogVEhQX1NQTElUX1BBR0VfRkFJTEVEKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4YXNfc3BsaXRfYWxsb2MmIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAgICYjMzQ7X19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeGFzX3NwbGl0X2FsbG9jYCB0byBhY2NvdW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbnMgaWYgdGhlIHhhcnJheSBoYXMgYFhBX0ZMQUdTX0FDQ09VTlRgIHNldC4gSXQgYWxzbyBtb2RpZmllcyBgX19mb2xpb19zcGxpdGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHRvIHN3aXRjaCB0byB0aGUgZm9saW8mIzM5O3MgbWVtY2cgYmVmb3JlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFsbG9jYXRlIHhhcnJheSBub2RlcywgZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB4YXJyYXkgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4Njk1NzBkNmYxYjViMjc3MDE2Yjc3Njk1NzNkNzZjNzExODlmMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDIxOjU3OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jCmluZGV4IDlhOGI0OTE2NTQwY2YuLmJmZTdiZWY4MGYzNGUgMTAwNjQ0Ci0tLSBhL2xpYi94YXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmMKQEAgLTEwNTMsNiAmIzQzOzEwNTMsOSBAQCB2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlciwKIAlpZiAoeGFzLSZndDt4YV9zaGlmdCAmIzQzOyBYQV9DSFVOS19TSElGVCAmZ3Q7IG9yZGVyKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKHhhcy0mZ3Q7eGEtJmd0O3hhX2ZsYWdzICZhbXA7IFhBX0ZMQUdTX0FDQ09VTlQpCiYjNDM7CQlnZnAgfD0gX19HRlBfQUNDT1VOVDsKJiM0MzsKIAlkbyB7CiAJCXN0cnVjdCB4YV9ub2RlICpub2RlOwogCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAwMzI3MDJhNDYzN2JhLi5lOTAzNDZmZGU1NTFhIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTM5ODQsMzQgJiM0MzszOTg0LDQyIEBAIHN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogCVhBX1NUQVRFKHhhcywgJmFtcDtmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aV9wYWdlcywgZm9saW8tJmd0O2luZGV4KTsKIAlzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOwogCWJvb2wgaXNfYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZzsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IE5VTEw7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IE5VTEw7CiAJaW50IG9sZF9vcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAlzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7CiAJaW50IG5yX3NobWVtX2Ryb3BwZWQgPSAwOwogCWVudW0gdHR1X2ZsYWdzIHR0dV9mbGFncyA9IDA7Ci0JaW50IHJldDsKIAlwZ29mZl90IGVuZCA9IDA7CiYjNDM7CWludCByZXQ7CiAKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sYXJnZShmb2xpbyksIGZvbGlvKTsKIAogCWlmIChmb2xpbyAhPSBwYWdlX2ZvbGlvKHNwbGl0X2F0KSB8fCBmb2xpbyAhPSBwYWdlX2ZvbGlvKGxvY2tfYXQpKSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfbm9fbWVtY2c7CiAJfQogCiAJaWYgKG5ld19vcmRlciAmZ3Q7PSBvbGRfb3JkZXIpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CiYjNDM7CQlnb3RvIG91dF9ub19tZW1jZzsKIAl9CiAKIAlyZXQgPSBmb2xpb19jaGVja19zcGxpdHRhYmxlKGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X3R5cGUpOwogCWlmIChyZXQpIHsKIAkJVk1fV0FSTl9PTkNFKHJldCA9PSAtRUlOVkFMLCAmIzM0O1RyaWVkIHRvIHNwbGl0IGFuIHVuc3BsaXR0YWJsZSBmb2xpbyYjMzQ7KTsKLQkJZ290byBvdXQ7CiYjNDM7CQlnb3RvIG91dF9ub19tZW1jZzsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogc3dpdGNoIHRvIGZvbGlvJiMzOTtzIG1lbWNnIGFzIHhhcnJheSBub2RlIGFsbG9jYXRpb24gY2FuIGhhcHBlbiBhbmQKJiM0MzsJICogbmVlZHMgdG8gY2hhcmdlIHRvIGl0LgomIzQzOwkgKi8KJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKJiM0MzsJb2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7CiYjNDM7CiAJaWYgKGlzX2Fub24pIHsKIAkJLyoKIAkJICogVGhlIGNhbGxlciBkb2VzIG5vdCBuZWNlc3NhcmlseSBob2xkIGFuIG1tYXBfbG9jayB0aGF0IHdvdWxkCkBAIC00MTQwLDYgJiM0Mzs0MTQ4LDEwIEBAIHN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogCWlmIChtYXBwaW5nKQogCQlpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7CiBvdXQ6CiYjNDM7CS8qIHJlc3RvcmUgdG8gY2FsbGVyJiMzOTtzIG9sZF9tZW1jZyAqLwomIzQzOwlzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MztvdXRfbm9fbWVtY2c6CiAJeGFzX2Rlc3Ryb3koJmFtcDt4YXMpOwogCWlmIChpc19wbWRfb3JkZXIob2xkX29yZGVyKSkKIAkJY291bnRfdm1fZXZlbnQoIXJldCA/IFRIUF9TUExJVF9QQUdFIDogVEhQX1NQTElUX1BBR0VfRkFJTEVEKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkgY29yZSBhcmVhcyDigJMgYGxpYi94YXJyYXkuY2AgYW5kIGBtbS9odWdlX21lbW9yeS5jYC4gSSBzZWUgdGhhdCBpbiBgbGliL3hhcnJheS5jYCwgdGhlIGB4YXNfc3BsaXRfYWxsb2NgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBgX19HRlBfQUNDT1VOVGAgdG8gdGhlIGBnZnBgIGZsYWcgdW5kZXIgYSBjZXJ0YWluIGNvbmRpdGlvbjogaWYgYHhhcy0mZ3Q7eGEtJmd0O3hhX2ZsYWdzICZhbXA7IFhBX0ZMQUdTX0FDQ09VTlRgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gbWVtb3J5IGFjY291bnRpbmcgcmVsYXRlZCB0byBYQXJyYXkgYWxsb2NhdGlvbnMsIGxpa2VseSBmb3IgbWVtY2cgaW50ZWdyYXRpb24uIE92ZXIgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIHRvIHN3aXRjaCB0aGUgb3BlcmF0aW9uIHRvIHRoZSBmb2xpbyYjMzk7cyBtZW1jZyAqYmVmb3JlKiBhbnkgeGFycmF5IG5vZGUgYWxsb2NhdGlvbnMuIFRoaXMgcmVpbmZvcmNlcyB0aGUgbWVtY2cgYWNjb3VudGluZyBhbmdsZTsgdGhlIGFpbSBzZWVtcyB0byBiZSBlbnN1cmluZyBhbGxvY2F0aW9ucyB3aXRoaW4gZm9saW8gc3BsaXR0aW5nIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLCBpbnN0ZWFkIG9mIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgdGFzayYjMzk7cyBvciBwYXJlbnQgbWVtY2cuCgpHaXZlbiB0aGUgc2NvcGXigJRjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMgb2YgaHVnZSBwYWdlcyBhbmQgZm9saW8gc3BsaXR0aW5nLCBpbiBjb25qdW5jdGlvbiB3aXRoIGNoYW5nZXMgdG8geGFycmF54oCUdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gSSBuZWVkIHRvIGdldCB0aGlzIHByb3Blcmx5IHRlc3RlZCwgYW5kIGZhc3QuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIGB4YXNfc3BsaXRfYWxsb2NgIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gaW4gYGxpYi94YXJyYXkuY2AuIEJ1dCBgX19mb2xpb19zcGxpdGDigKYgd2FpdCwgaXQmIzM5O3MgYSAqc3RhdGljKiBmdW5jdGlvbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuICpTdGF0aWMqLCBva2F5LiBEb2VzIHRoYXQgaW5mbHVlbmNlIHRoZSBmdXp6aW5nIHN0cmF0ZWd5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IHRvIGl0LiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBtbS9odWdlX21lbW9yeS5jYCwgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM4MDQ9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXG5tbS9odWdlX21lbW9yeS5jOjM5NjA6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTM5NjEtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk3OS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk4MDpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQyNTE9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjU1LVxubW0vaHVnZV9tZW1vcnkuYzo0MjU2Olx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Ny1cdFx0XHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00Mjg0PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG5tbS9odWdlX21lbW9yeS5jOjQyODc6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkV4YW1pbmluZyBIdWdlIFBhZ2UgU3BsaXR0aW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIHNwbGl0dGluZyBwcm9jZXNzLiBJIHNlZSB0aGF0IGJvdGggYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGFuZCBgZm9saW9fc3BsaXRgIHVsdGltYXRlbHkgY2FsbCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYF9fZm9saW9fc3BsaXRgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBzcGxpdCBvcGVyYXRpb24sIGl0IHNlZW1zLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYDogSXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSB1c2VkIG91dHNpZGUgb2YgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZT8gSXMgaXQgZXhwb3J0ZWQgZm9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIGxldmVyYWdlLCBvciBpcyBpdCBwdXJlbHkgYW4gaW50ZXJuYWwgZGV0YWlsPyBJIG5lZWQgdG8ga25vdyBpZiBpdCYjMzk7cyB2aXNpYmxlIG9yIGlmIGl0JiMzOTtzIGp1c3QgY2FsbGVkIHdpdGhpbiB0aGlzIGNvZGUgcGF0aC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIGV4cG9ydCB0YWJsZSwgY3Jvc3MtcmVmZXJlbmNlcywgYW5kIHBvc3NpYmx5IGEgbW9yZSB0YXJnZXRlZCBjb2RlIHNlYXJjaCB0byBhc2NlcnRhaW4gaXRzIHNjb3BlLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZSBpcyBjcml0aWNhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlIGluIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTM5Nz1lbnVtIHNwbGl0X3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwMS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwMjppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwMy1cdFx0dW5zaWduZWQgaW50IG5ld19vcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDEyPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNC17XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTU6XHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE2LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQxODQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjUwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MjUxOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjUyLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1ODEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXNzZXNzaW5nIFBvdGVudGlhbCBTdHJhdGVnaWVzIGZvciBEYXRhIFBhcnRpdGlvbmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoaXMgZGF0YSBzcGxpdHRpbmcuICYjMzQ7Zm9saW9fc3BsaXQmIzM0OyBhbmQgdGhhdCBoZWxwZXIgZnVuY3Rpb24sIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYm90aCBpbW1lZGlhdGVseSBzcHJpbmcgdG8gbWluZCBhcyBwcm9taXNpbmcgY2FuZGlkYXRlcy4gVGhleSBzZWVtIGxpa2UgdGhleSYjMzk7ZCBvZmZlciBhIGdvb2QgYXBwcm9hY2gsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkYXRhIGFuZCBjb25zdHJhaW50cy4gT2YgY291cnNlLCB0aGF0JiMzOTtzIGp1c3QgYSBxdWljayBndXQgY2hlY2suIEkgbmVlZCB0byBkaWcgaW4gYSBiaXQgZGVlcGVyLiBMZXQmIzM5O3Mgc2VlIGhvdyBgeGFzX3NwbGl0X2FsbG9jYCBzdGFja3MgdXAgYWdhaW5zdCB0aGVtLiBJdCBtaWdodCBiZSB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhc19zcGxpdF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDkwPWVudHJ5IGNhbiBiZSBzcGxpdCBpbnRvIGVudHJpZXMgb2NjdXB5aW5nIHNtYWxsZXIgcmFuZ2VzIGJ5IGNhbGxpbmdcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTE6eGFzX3NwbGl0X2FsbG9jKCkgd2l0aG91dCB0aGUgeGFfbG9jayBoZWxkLCBmb2xsb3dlZCBieSB0YWtpbmcgdGhlIGxvY2tcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00OTItYW5kIGNhbGxpbmcgeGFzX3NwbGl0KCkgb3IgY2FsbGluZyB4YXNfdHJ5X3NwbGl0KCkgd2l0aCB4YV9sb2NrLiBUaGVcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTM6ZGlmZmVyZW5jZSBiZXR3ZWVuIHhhc19zcGxpdF9hbGxvYygpJiM0Mzt4YXNfc3BsaXQoKSBhbmQgeGFzX3RyeV9hbGxvYygpIGlzXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDk0OnRoYXQgeGFzX3NwbGl0X2FsbG9jKCkgJiM0MzsgeGFzX3NwbGl0KCkgc3BsaXQgdGhlIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDk1LW9yZGVyIHRvIHRoZSBuZXcgb3JkZXIgaW4gb25lIHNob3QgdW5pZm9ybWx5LCB3aGVyZWFzIHhhc190cnlfc3BsaXQoKVxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdD00OTc9Rm9yIGV4YW1wbGUsIHRvIHNwbGl0IGFuIG9yZGVyLTkgZW50cnksIHdoaWNoIHRha2VzIDJeKDktNik9OCBzbG90cyxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTg6YXNzdW1pbmcgYGBYQV9DSFVOS19TSElGVGBgIGlzIDYsIHhhc19zcGxpdF9hbGxvYygpICYjNDM7IHhhc19zcGxpdCgpIG5lZWRcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00OTktOCB4YV9ub2RlLiB4YXNfdHJ5X3NwbGl0KCkgc3BsaXRzIHRoZSBvcmRlci05IGVudHJ5IGludG9cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0PTM0NT1YQXJyYXnmnInog73lipvlsIblpJrkuKrntKLlvJXogZTns7vlnKjkuIDotbfvvIzlm6DmraTlr7nkuIDkuKrntKLlvJXnmoTmk43kvZzkvJrlvbHlk43liLDmiYDmnInnmoTntKLlvJXjgILkvovlpoLvvIzlrZjlgqjliLDku7vkvZXntKLlvJXlsIZcdWZmZmRcdWZmZmQuLi5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTM2Mi3lnKjkuIDkuKrlpJrntKLlvJXmnaHnm67nmoTku7vkvZXkuIDkuKrntKLlvJXkuK3lrZjlgqggYGBOVUxMYGAg77yM5bCG5oqK5q+P5Liq57Si5byV55qE5p2h55uu6K6+572u5Li6IGBgTlVMTGBgIO+8jOW5tuino+mZpOe7keWumuOAgumAmui/h+iwg1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozNjM655SoeGFzX3NwbGl0X2FsbG9jKCnvvIzlnKjmsqHmnIl4YV9sb2Nr55qE5oOF5Ya15LiL77yM5Y+v5Lul5bCG5LiA5Liq5aSa57Si5byV5p2h55uu5YiG5Ymy5oiQ5Y2g5o2u6L6D5bCP6IyD5Zu055qE5p2h55uu77yM54S25ZCO5YaN5Y+W6ZSB5bm2XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTM2NC3osIPnlKh4YXNfc3BsaXQoKeOAglxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMzgyLS8qXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDozODM6ICogeGFzX3NwbGl0X2FsbG9jKCkgZG9lcyBub3Qgc3VwcG9ydCBhcmJpdHJhcnkgb3JkZXJzLiBUaGlzIGltcGxpZXMgbm9cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTM4NC0gKiA1MTJNQiBUSFAgb24gQVJNNjQgd2l0aCA2NEtCIGJhc2UgcGFnZSBzaXplLlxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU2Mj12b2lkIHhhc19zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKiwgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE1NjM6dm9pZCB4YXNfc3BsaXRfYWxsb2Moc3RydWN0IHhhX3N0YXRlICosIHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTU2NC12b2lkIHhhc190cnlfc3BsaXQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU3Nz1zdGF0aWMgaW5saW5lIHZvaWQgeGFzX3NwbGl0KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1ODItXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE1ODM6c3RhdGljIGlubGluZSB2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1ODQtXHRcdHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTE4MzY9c3RhdGljIHZvaWQgY2hlY2tfc3BsaXRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xODQ1LVxubGliL3Rlc3RfeGFycmF5LmM6MTg0NjpcdHhhc19zcGxpdF9hbGxvYyhcdTAwMjZ4YXMsIHhhLCBvcmRlciwgR0ZQX0tFUk5FTCk7XG5saWIvdGVzdF94YXJyYXkuYy0xODQ3LVx0eGFzX2xvY2soXHUwMDI2eGFzKTtcbi0tXG5saWIveGFycmF5LmM9MTAxMT1zdGF0aWMgdm9pZCBfX3hhc19pbml0X25vZGVfZm9yX3NwbGl0KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbmxpYi94YXJyYXkuYy0xMDMxLS8qKlxubGliL3hhcnJheS5jOjEwMzI6ICogeGFzX3NwbGl0X2FsbG9jKCkgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIHNwbGl0dGluZyBhbiBlbnRyeS5cbmxpYi94YXJyYXkuYy0xMDMzLSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTEwNDQtICovXG5saWIveGFycmF5LmM6MTA0NTp2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcixcbmxpYi94YXJyYXkuYy0xMDQ2LVx0XHRnZnBfdCBnZnApXG4tLVxubGliL3hhcnJheS5jLTEwNzUtfVxubGliL3hhcnJheS5jOjEwNzY6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX3NwbGl0X2FsbG9jKTtcbmxpYi94YXJyYXkuYy0xMDc3LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY3Nz1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3MDEtXHRcdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6MzcwMjpcdFx0XHQgKiB1bmlmb3JtIHNwbGl0IGhhcyB4YXNfc3BsaXRfYWxsb2MoKSBjYWxsZWQgYmVmb3JlXG5tbS9odWdlX21lbW9yeS5jLTM3MDMtXHRcdFx0ICogaXJxIGlzIGRpc2FibGVkIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnksIHdoZXJlYXNcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5ODA9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MDU5LVx0XHRcdHhhc19zZXRfb3JkZXIoXHUwMDI2eGFzLCBmb2xpby1cdTAwM2VpbmRleCwgbmV3X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDA2MDpcdFx0XHR4YXNfc3BsaXRfYWxsb2MoXHUwMDI2eGFzLCBmb2xpbywgb2xkX29yZGVyLCBnZnApO1xubW0vaHVnZV9tZW1vcnkuYy00MDYxLVx0XHRcdGlmICh4YXNfZXJyb3IoXHUwMDI2eGFzKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgeGFzX3NwbGl0X2FsbG9jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgc3BlY2lmaWMgY2hhbmdlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYHhhc19zcGxpdF9hbGxvY2AgaXMgY2FsbGVkIGJ5IGBfX2ZvbGlvX3NwbGl0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fR0ZQX0FDQ09VTlRgIHdpdGhpbiBgeGFzX3NwbGl0X2FsbG9jYCBiYXNlZCBvbiB0aGUgYFhBX0ZMQUdTX0FDQ09VTlRgIGZsYWcgaW4gYHhhcy0mZ3Q7eGEtJmd0O3hhX2ZsYWdzYC4gVGhpcyBpcyBnb29kOyB0aGF0JiMzOTtzIHRoZSBraW5kIG9mIHN1YnRsZSBjaGFuZ2UgdGhhdCBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGluIGFjY291bnRpbmcuCgpUaGUgb3RoZXIgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBtZW1jZyBzd2l0Y2hpbmcgdGhhdCBoYXBwZW5zIGluIGBfX2ZvbGlvX3NwbGl0YCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgeGFzX3NwbGl0X2FsbG9jYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBhbGxvY2F0aW9uIHdpbGwgbm93IGJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2csIGEgY3JpdGljYWwgYXNwZWN0IG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGlzb2xhdGlvbi4gRGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBleHBlY3RlZC4KClNpbmNlIHRoaXMgdG91Y2hlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWVtY2cgYWNjb3VudGluZywgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGRlc2lnbmF0aW9uIGlzIHNwb3Qgb24uIEkmIzM5O2xsIG1ha2UgYSBub3RlIHRvIHJlbWVtYmVyIHRoYXQgd2hlbiBJJiMzOTttIGFzc2Vzc2luZyB0aGUgcGF0Y2ggZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYHhhc19zcGxpdF9hbGxvY2AsIGBmb2xpb19zcGxpdGAgKGFuZCBpbXBvcnRhbnRseSwgYF9fZm9saW9fc3BsaXRgKSwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBhbmQgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCAodGhlIGlubGluZSB2ZXJzaW9uKS4KCkhvbGQgb24sIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGBmb2xpb19zcGxpdF91bm1hcHBlZGAuIERvZXMgdGhhdCBjYWxsIGBfX2ZvbGlvX3NwbGl0YD8gVGhhdCYjMzk7cyB0aGUgaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBjb21wbGV0ZSBjYWxsIGNoYWluIGFuZCBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgaG9saXN0aWMgdmlldyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDAyPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAzLVx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDUtdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTgwPXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE2Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5tbS9odWdlX21lbW9yeS5jLTQxODUte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTAyPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTE2LVx0c3BsaXRfaHVnZV9wbWRfYWRkcmVzcyhtaWdyYXRlLVx1MDAzZXZtYSwgYWRkciwgdHJ1ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jOjkxNzpcdHJldCA9IGZvbGlvX3NwbGl0X3VubWFwcGVkKGZvbGlvLCAwKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTE4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBhIFBvdGVudGlhbCBJc3N1ZSBpbiBGb2xpbyBTcGxpdHRpbmcqKgoKT2theSwgc28gYGZvbGlvX3NwbGl0X3VubWFwcGVkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBnaXZpbmcgbWUgcGF1c2UuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fc3BsaXRfdW5tYXBwZWRgIGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCBJIHN1c3BlY3QgaXQgY2FsbHMgYF9fZm9saW9fc3BsaXRgLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgcmVsYXRpb25zaGlwIGF0IHBsYXkuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGNhbGwgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGludm9sdmVkIGluIHRoYXQgYF9fZm9saW9fc3BsaXRgIGZ1bmN0aW9uLiBUaGlzIGlzIGFsbCBhYm91dCBjb25maXJtaW5nIHRoZSBkYXRhIGZsb3csIHRoZSBpbnRlcmFjdGlvbnMgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzcGxpdHRpbmcgb3BlcmF0aW9uIGlzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCBpcyAqcmVhbGx5KiBkb2luZy4gSSB3YW50IHRvIHNlZSBob3cgYF9fZm9saW9fc3BsaXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQxODQ6XHRpbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbjQxODU6XHR7XG40MTg2Olx0XHRpbnQgcmV0ID0gMDtcbjQxODc6XHRcbjQxODg6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19tYXBwZWQoZm9saW8pLCBmb2xpbyk7XG40MTg5Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuNDE5MDpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xuNDE5MTpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XG40MTkyOlx0XG40MTkzOlx0XHRpZiAoZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAhPSBmb2xpb19yZWZfY291bnQoZm9saW8pIC0gMSlcbjQxOTQ6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG40MTk1Olx0XG40MTk2Olx0XHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xuNDE5NzpcdFx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsXG40MTk4Olx0XHRcdFx0XHRcdFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcbjQxOTk6XHRcdFx0XHRcdFx0XHQwLCBOVUxMKTtcbjQyMDA6XHRcdGxvY2FsX2lycV9lbmFibGUoKTtcbjQyMDE6XHRcdHJldHVybiByZXQ7XG40MjAyOlx0fVxuNDIwMzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2xpbyBTcGxpdHRpbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW5pdGlhbGx5IHRob3VnaHQgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCB3YXMgY2FsbGluZyBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYC4gQnV0IGhhbmcgb24sIHRoZSBwYXRjaCBhY3R1YWxseSBjaGFuZ2VkIGBfX2ZvbGlvX3NwbGl0YCwgbm90IHRoZSBmdW5jdGlvbiBJIHdhcyBqdXN0IGZvY3VzaW5nIG9uLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgX19mb2xpb19zcGxpdGAgaXMgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBzZWUgd2hhdCBpbXBhY3QgdGhlIG1vZGlmaWNhdGlvbnMgaGF2ZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHByb3Blcmx5IGV2YWx1YXRlIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQyODQ9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYGZvbGlvX3NwbGl0YCBib3RoIHVsdGltYXRlbHkgY2FsbCBgX19mb2xpb19zcGxpdGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHNwbGl0IGxvZ2ljLiBJIHF1aWNrbHkgY2hlY2tlZCBmb3Igb3RoZXIgY2FsbGVycyBvZiBgX19mb2xpb19zcGxpdGAsIGp1c3QgdG8gbWFrZSBzdXJlIEkgd2FzbiYjMzk7dCBtaXNzaW5nIGFueSBvdGhlciBpbnRlcmFjdGlvbnMsIGJ1dCBpdCBsb29rcyBsaWtlIHRob3NlIHR3bywgYW5kIG9ubHkgdGhvc2UgdHdvLCBhcmUgZGlyZWN0bHkgY2FsbGluZyBpdC4gVGhlcmVmb3JlLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIGBmb2xpb19zcGxpdGAgYmVjb21lIG15IHByaW1hcnkgcG9pbnRzIG9mIGZvY3VzLCBpbiBjb25qdW5jdGlvbiB3aXRoIGB4YXNfc3BsaXRfYWxsb2NgLiBOb3csIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlaXIgZXhwb3J0cyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlaXIgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFuZCBpbnRlbmRlZCB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBGb2xpbyBTcGxpdCBFeHBvcnRzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgb3V0cHV0IG9mIHRoZSBgZm9saW9fc3BsaXRgIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBnZW5lcmF0ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIFttZW50aW9uIHNwZWNpZmljIGZpbGUgZm9ybWF0cyBvciBkYXRhIHN0cnVjdHVyZXMgcmVsZXZhbnQgdG8geW91ciBmaWVsZF0uIEFyZSB0aGUgZXhwZWN0ZWQgZmlsZXMgYmVpbmcgY3JlYXRlZD8gQXJlIHRoZXkgcG9wdWxhdGVkIGNvcnJlY3RseSwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9ucz8gSSBuZWVkIHRvIHZlcmlmeSBkYXRhIGludGVncml0eSBhbmQgZm9ybWF0IGNvbnNpc3RlbmN5LiBBbnkgZXJyb3JzIG9yIGFub21hbGllcyBoZXJlIGNvdWxkIGluZGljYXRlIGRlZXBlciBpc3N1ZXMgZnVydGhlciBkb3duIHRoZSBwaXBlbGluZSwgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgZXhwb3J0aW5nIGFzIGV4cGVjdGVkIGJlZm9yZSB3ZSBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkEgUXVpY2sgSm9sdCBvZiBTdXJwcmlzZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc2F3IHRoYXQgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGZ1bmN0aW9uLiBXYWl0IGEgbWludXRlLi4uIHRoYXQgdGhpbmcmIzM5O3MgKmV4cG9ydGVkKj8gVGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcgYXQgYWxsLiBHaXZlbiB0aGUgbmFtZSwgSSBhc3N1bWVkIGl0IHdhcyBhIGRlZXBseSBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9uLCBzb21ldGhpbmcgbWVhbnQgdG8gYmUgaGlkZGVuIGJlaGluZCBhIGNhcmVmdWxseSBjcmFmdGVkIEFQSS4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBzb21lb25lIHRob3VnaHQgZXhwb3NpbmcgdGhhdCBtYWRlIHNlbnNlLiBXYXMgaXQgZm9yIGEgc3BlY2lmaWMgZGVidWdnaW5nIHNjZW5hcmlvPyBPciBwZXJoYXBzIHRoZXkgZGlkbiYjMzk7dCBmdWxseSBncmFzcCB0aGUgcG90ZW50aWFsIGZvciBtaXN1c2UgYW5kIHVuaW50ZW5kZWQgZGVwZW5kZW5jaWVzPyBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGFib3V0IHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgaXRzIHZpc2liaWxpdHkuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24g4oCTIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDE4ND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTAtICovXG5tbS9odWdlX21lbW9yeS5jOjQyNTE6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyNTItXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zOTc9ZW51bSBzcGxpdF90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDEtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDI6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDMtXHRcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwOT1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDExLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDEyOnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDEzLVx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE0LXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQxNTpcdHJldHVybiBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTYtfVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDE3PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxOC17XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTk6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyMC19XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDIyPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyMy17XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MjQ6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgMCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MjUtfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTYyOT1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjMwOnNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjMxLVx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgwMD1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODAyLXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgwMzpcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODA0LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQxODQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjUwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MjUxOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjUyLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI2OC0gKiBJdCBoYXMgdGhlIHNhbWUgcHJlcmVxdWlzaXRlcyBhbmQgcmV0dXJucyBhc1xubW0vaHVnZV9tZW1vcnkuYzo0MjY5OiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXG5tbS9odWdlX21lbW9yeS5jLTQyNzAtICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQzMTg9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDMxOS17XG5tbS9odWdlX21lbW9yeS5jOjQzMjA6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCwgMCk7XG5tbS9odWdlX21lbW9yeS5jLTQzMjEtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjczLVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0Njc0Olx0XHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxubW0vaHVnZV9tZW1vcnkuYy00Njc1LVx0XHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBUaGlzIGZ1bmN0aW9uLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGl0JiMzOTtzIG5vdCBhY3R1YWxseSBleHBvcnRlZCBhcyBhIHN5bWJvbC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IGl0ICppcyogYW4gZW50cnkgcG9pbnQsIGFsYmVpdCBub24tc3RhdGljLCB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBTbyBpdCYjMzk7cyBjYWxsYWJsZSBmcm9tIHdpdGhpbiB0aGUga2VybmVsLiBJIHdvbmRlciB3aHkgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBNYXliZSBpdCYjMzk7cyBpbnRlbmRlZCBhcyBhbiBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgdGhleSBqdXN0IGRpZG4mIzM5O3QgbWFyayBzdGF0aWMgZm9yIHNvbWUgc3BlY2lmaWMgcmVhc29uLi4uIHBlcmhhcHMgaXQmIzM5O3MgdXNlZCBpbiBkZWJ1Z2dpbmcgb3IgYnkgb3RoZXIgaW50ZXJuYWwgbW9kdWxlcy4gT3IgbWF5YmUgaXQmIzM5O3MganVzdCBhIGhpc3RvcmljYWwgYXJ0aWZhY3QuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHNpbmNlIHdlJiMzOTtyZSBsb29raW5nIGF0IHNwbGl0dGluZyBodWdlIHBhZ2VzLCB3aGVyZSBkb2VzIGBmb2xpb19zcGxpdGAgZmFjdG9yIGludG8gdGhpcz8gVGhhdCYjMzk7cyB0aGUgY29yZSBpbnRlcmZhY2UsIGlzbiYjMzk7dCBpdD8gSXMgdGhpcyBmdW5jdGlvbiwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBhIGxvd2VyLWxldmVsIGJ1aWxkaW5nIGJsb2NrICpmb3IqIGBmb2xpb19zcGxpdGA/IE9yIGlzIGl0IHVzZWQgaW4gc29tZSBvdGhlciBzcGVjaWZpYyBzcGxpdC1yZWxhdGVkIGNvbnRleHQ/IExldCBtZSBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbmFsaXR5IGNvbm5lY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBBUElzIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MzY3Nz1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXG5tbS9odWdlX21lbW9yeS5jOjM3MjA6XHRcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzIxLVx0XHRzcGxpdF9wYWdlX293bmVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE2Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5tbS9odWdlX21lbW9yeS5jLTQxODUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNjE6ICogZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG5tbS9odWdlX21lbW9yeS5jOjQyODc6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVx0XHRcdFx0XHRcdFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcdFx0XHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0NzczOlx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk5NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgdGhlIGBmb2xpb19zcGxpdGAgRXhwb3J0KioKCk9rYXksIHNvIHRoZSBjb2RlJiMzOTtzIHJlZmVyZW5jaW5nIGBmb2xpb19zcGxpdGAuIEZpcnN0IGluc3RpbmN0PyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSYjMzk7bSB0aGlua2luZywgaXMgaXQgYXZhaWxhYmxlIGluIHRoZSBzY29wZSB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQ/IElzIGl0IGEgcHVibGljbHkgYWNjZXNzaWJsZSBmdW5jdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIGluIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBkZWZpbml0aW9uIHRvIGNvbmZpcm0gdGhlIGV4cG9ydCBzdGF0dXMuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgaWYgaXQmIzM5O3MgYSBzaW1wbGUgc2NvcGluZyBpc3N1ZS4gR290dGEgY29uZmlybSBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGV4dGVybmFsbHksIHlvdSBrbm93PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGltcG9ydCBzdHJ1Y3R1cmUgb3IgdGhlIEFQSSBkb2N1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNwbGl0X2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzk3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19waWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00NTkwPXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfbm90X3N1aXRhYmxlX2Zvcl90aHBfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjAzLVxubW0vaHVnZV9tZW1vcnkuYzo0NjA0OnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYwNS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDc5MT1zdGF0aWMgc3NpemVfdCBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg1Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6NDg1ODpcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKHBpZCwgdmFkZHJfc3RhcnQsIHZhZGRyX2VuZCwgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy00ODU5LVx0XHRcdGluX2ZvbGlvX29mZnNldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjczCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlc193cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3OTAtXG5tbS9odWdlX21lbW9yeS5jOjQ3OTE6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5Mi1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xubW0vaHVnZV9tZW1vcnkuYy00ODY5LVx0Lm93bmVyXHQgPSBUSElTX01PRFVMRSxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg3MDpcdC53cml0ZVx0ID0gc3BsaXRfaHVnZV9wYWdlc193cml0ZSxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGl0X2h1Z2VfcGFnZXNfZm9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQ3OTE9c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXG5tbS9odWdlX21lbW9yeS5jOjQ4Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xubW0vaHVnZV9tZW1vcnkuYy00ODY5LVx0Lm93bmVyXHQgPSBUSElTX01PRFVMRSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4NzM9c3RhdGljIGludCBfX2luaXQgc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODc1LVx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzcGxpdF9odWdlX3BhZ2VzXCYjMzQ7LCAwMjAwLCBOVUxMLCBOVUxMLFxubW0vaHVnZV9tZW1vcnkuYzo0ODc2Olx0XHRcdCAgICBcdTAwMjZzcGxpdF9odWdlX3BhZ2VzX2ZvcHMpO1xubW0vaHVnZV9tZW1vcnkuYy00ODc3LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19pbl9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NzIwLVxubW0vaHVnZV9tZW1vcnkuYzo0NzIxOnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXG5tbS9odWdlX21lbW9yeS5jLTQ3MjItXHRcdFx0XHRwZ29mZl90IG9mZl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NzkxPXN0YXRpYyBzc2l6ZV90IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODM4LVx0XHR9XG5tbS9odWdlX21lbW9yeS5jOjQ4Mzk6XHRcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShmaWxlX3BhdGgsIG9mZl9zdGFydCwgb2ZmX2VuZCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg0MC1cdFx0XHRcdG5ld19vcmRlciwgaW5fZm9saW9fb2Zmc2V0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jPTQ2Nj1zdGF0aWMgdm9pZCBzcGxpdF9maWxlX2JhY2tlZF90aHAoaW50IG9yZGVyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtNDc5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYzo0ODA6XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtQbGVhc2UgZW5hYmxlIHByX2RlYnVnIGluIHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZSgpIGZvciBtb3JlIGluZm8uXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtNDgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgYGZvbGlvX3NwbGl0YCBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBmb2xpb19zcGxpdGAuIFNlZW1zIGxpa2UgaXQmIzM5O3MgcHJpbWFyaWx5IHRyaWdnZXJlZCBieSBgc3BsaXRfaHVnZV9wYWdlc19waWRgIGFuZCBgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlYC4gVGhvc2UgYXJlIGJvdGggaW52b2tlZCBmcm9tIGBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlYCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYSBkZWJ1Z2ZzIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHBhdGgsIGRlYnVnZ2luZyBpbmZyYXN0cnVjdHVyZSBpbnRlcmFjdGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LgoKSG1tLCBidXQgd2FpdCBhIG1pbnV0ZS4gU29tZXRoaW5nJiMzOTtzIG5hZ2dpbmcgYXQgbWUuIEl0IGZlZWxzIGxpa2UgYGZvbGlvX3NwbGl0YCAqY291bGQqIGJlIGNhbGxlZCBmcm9tIHNvbWVwbGFjZSBlbHNlLCBvdXRzaWRlIG9mIHRoaXMgZGlyZWN0IGRlYnVnZnMgc2VxdWVuY2UuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQmIzM5O3MgYSBwb3NzaWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGZvbGlvX3NwbGl0YCB0byBjb25maXJtLiBJdCYjMzk7cyB0aW1lIHRvIGZvbGxvdyB0aGUgY2FsbCBzdGFjayBtb3JlIGNsb3NlbHkgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuZXhwZWN0ZWQgcGF0aHMuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMzQ4PXN0YXRpYyB2bV9mYXVsdF90IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNTktXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzYwOnN0YXRpYyB2b2lkIGRybV9wYWdlbWFwX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqb3JpZ19mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8pXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzYxLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMzcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNzQtXHQubWlncmF0ZV90b19yYW0gPSBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzNzU6XHQuZm9saW9fc3BsaXQgPSBkcm1fcGFnZW1hcF9mb2xpb19zcGxpdCxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNzYtfTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI3OS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjI4MDpzdGF0aWMgdm9pZCBub3V2ZWF1X2RtZW1fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpoZWFkLCBzdHJ1Y3QgZm9saW8gKnRhaWwpXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yODEte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI4OT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBub3V2ZWF1X2RtZW1fcGFnZW1hcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjkxLVx0Lm1pZ3JhdGVfdG9fcmFtXHRcdD0gbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtLFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjkyOlx0LmZvbGlvX3NwbGl0XHRcdD0gbm91dmVhdV9kbWVtX2ZvbGlvX3NwbGl0LFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjkzLX07XG4tLVxuZnMvZXJvZnMvZGF0YS5jPTI1OT12b2lkIGVyb2ZzX29ubGluZWZvbGlvX2luaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9lcm9mcy9kYXRhLmMtMjY4LVxuZnMvZXJvZnMvZGF0YS5jOjI2OTp2b2lkIGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9lcm9mcy9kYXRhLmMtMjcwLXtcbi0tXG5mcy9lcm9mcy9maWxlaW8uYz04OT1zdGF0aWMgaW50IGVyb2ZzX2ZpbGVpb19zY2FuX2ZvbGlvKHN0cnVjdCBlcm9mc19maWxlaW8gKmlvLFxuLS1cbmZzL2Vyb2ZzL2ZpbGVpby5jLTE0Ny1cdFx0XHRpZiAoIWF0dGFjaGVkJiM0MzsmIzQzOylcbmZzL2Vyb2ZzL2ZpbGVpby5jOjE0ODpcdFx0XHRcdGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KGZvbGlvKTtcbmZzL2Vyb2ZzL2ZpbGVpby5jLTE0OS1cdFx0XHRpby1cdTAwM2VkZXYubV9wYSAmIzQzOz0gbGVuO1xuLS1cbmZzL2Vyb2ZzL2ludGVybmFsLmg9NDE1PXZvaWQgZXJvZnNfb25saW5lZm9saW9faW5pdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDE2OnZvaWQgZXJvZnNfb25saW5lZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQxNy12b2lkIGVyb2ZzX29ubGluZWZvbGlvX2VuZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZXJyLCBib29sIGRpcnR5KTtcbi0tXG5mcy9lcm9mcy96ZGF0YS5jPTEwMDU9c3RhdGljIGludCB6X2Vyb2ZzX3NjYW5fZm9saW8oc3RydWN0IHpfZXJvZnNfZnJvbnRlbmQgKmYsXG4tLVxuZnMvZXJvZnMvemRhdGEuYy0xMDc1LVxuZnMvZXJvZnMvemRhdGEuYzoxMDc2Olx0XHRcdGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KGZvbGlvKTtcbmZzL2Vyb2ZzL3pkYXRhLmMtMTA3Ny1cdFx0XHRpZiAoZi1cdTAwM2VwY2wtXHUwMDNlbGVuZ3RoIFx1MDAzYyBvZmZzZXQgJiM0MzsgZW5kIC0gbWFwLVx1MDAzZW1fbGEpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDI9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDMtXHRcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA0OmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNS11bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDc9aW50IGZvbGlvX2NoZWNrX3NwbGl0dGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwOC1cdFx0XHQgICBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDk6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsIHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDEwLVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NTM9c3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY1OC1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY1OTpzdGF0aWMgaW5saW5lIGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjYwLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMDIwPXZvaWQgc3BsaXRfcGFnZV9tZW1jZyhzdHJ1Y3QgcGFnZSAqZmlyc3QsIHVuc2lnbmVkIG9yZGVyKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwMjE6dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjItXHRcdHVuc2lnbmVkIG5ld19vcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ0NT1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9tZW1jZyhzdHJ1Y3QgcGFnZSAqZmlyc3QsIHVuc2lnbmVkIG9yZGVyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NDgtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDQ5OnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNDUwLVx0XHR1bnNpZ25lZCBvbGRfb3JkZXIsIHVuc2lnbmVkIG5ld19vcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Nzc9c3RydWN0IGRldl9wYWdlbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTEwNy1cdCAqL1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjEwODpcdHZvaWQgKCpmb2xpb19zcGxpdCkoc3RydWN0IGZvbGlvICpoZWFkLCBzdHJ1Y3QgZm9saW8gKnRhaWwpO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTEwOS19O1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjUwLVx0aWYgKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKG9yaWdpbmFsX2ZvbGlvKSkge1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI1MTpcdFx0aWYgKCFvcmlnaW5hbF9mb2xpby1cdTAwM2VwZ21hcC1cdTAwM2VvcHMtXHUwMDNlZm9saW9fc3BsaXQpIHtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTItXHRcdFx0aWYgKG5ld19mb2xpbykge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTctXHRcdH0gZWxzZSB7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjU4Olx0XHRcdG9yaWdpbmFsX2ZvbGlvLVx1MDAzZXBnbWFwLVx1MDAzZW9wcy1cdTAwM2Vmb2xpb19zcGxpdChvcmlnaW5hbF9mb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTktXHRcdFx0XHRcdFx0XHRcdCBuZXdfZm9saW8pO1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaD00OT1UUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC01Mi1cdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjUzOlx0XHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtNTQtXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtNTYtXHRUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjU3Olx0XHR0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTU4LVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC02NC1cdFx0X19maWVsZChcdHVuc2lnbmVkIGxvbmcsXHRcdHRocF9zcGxpdClcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo2NTpcdFx0X19maWVsZChcdHVuc2lnbmVkIGxvbmcsXHRcdGxhcmdlX2ZvbGlvX3NwbGl0KVxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTY2LVx0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX21vZGUsXHRtb2RlKVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC03NS1cdFx0X19lbnRyeS1cdTAwM2V0aHBfc3BsaXRcdFx0XHQ9IHRocF9zcGxpdDtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo3NjpcdFx0X19lbnRyeS1cdTAwM2VsYXJnZV9mb2xpb19zcGxpdFx0PSBsYXJnZV9mb2xpb19zcGxpdDtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC03Ny1cdFx0X19lbnRyeS1cdTAwM2Vtb2RlXHRcdFx0XHQ9IG1vZGU7XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTg2LVx0XHRfX2VudHJ5LVx1MDAzZXRocF9zcGxpdCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo4NzpcdFx0X19lbnRyeS1cdTAwM2VsYXJnZV9mb2xpb19zcGxpdCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC04OC1cdFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVx1MDAzZW1vZGUsIE1JR1JBVEVfTU9ERSksXG4tLVxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzMxLVxubGliL3Rlc3RfaG1tLmM6MTczMjpzdGF0aWMgdm9pZCBkbWlycm9yX2Rldm1lbV9mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmhlYWQsIHN0cnVjdCBmb2xpbyAqdGFpbClcbmxpYi90ZXN0X2htbS5jLTE3MzMte1xuLS1cbmxpYi90ZXN0X2htbS5jPTE3NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzID0ge1xuLS1cbmxpYi90ZXN0X2htbS5jLTE3NjgtXHQubWlncmF0ZV90b19yYW1cdD0gZG1pcnJvcl9kZXZtZW1fZmF1bHQsXG5saWIvdGVzdF9obW0uYzoxNzY5Olx0LmZvbGlvX3NwbGl0XHQ9IGRtaXJyb3JfZGV2bWVtX2ZvbGlvX3NwbGl0LFxubGliL3Rlc3RfaG1tLmMtMTc3MC19O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY3Nz1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXG5tbS9odWdlX21lbW9yeS5jOjM3MjA6XHRcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzIxLVx0XHRzcGxpdF9wYWdlX293bmVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE2Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5tbS9odWdlX21lbW9yeS5jLTQxODUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNjE6ICogZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG5tbS9odWdlX21lbW9yeS5jOjQyODc6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVx0XHRcdFx0XHRcdFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcdFx0XHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0NzczOlx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zNjYyPXZvaWQgc3BsaXRfcGFnZV9tZW1jZyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTM2NzUtXG5tbS9tZW1jb250cm9sLmM6MzY3Njp2b2lkIGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgb2xkX29yZGVyLFxubW0vbWVtY29udHJvbC5jLTM2NzctXHRcdHVuc2lnbmVkIG5ld19vcmRlcilcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTkwMj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTkxNi1cdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cdTAwM2V2bWEsIGFkZHIsIHRydWUpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzo5MTc6XHRyZXQgPSBmb2xpb19zcGxpdF91bm1hcHBlZChmb2xpbywgMCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTkxOC1cdGlmIChyZXQpXG4tLVxubW0vdHJ1bmNhdGUuYz0xNzA9aW50IHRydW5jYXRlX2lub2RlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3RydW5jYXRlLmMtMTc5LVxubW0vdHJ1bmNhdGUuYzoxODA6c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXG5tbS90cnVuY2F0ZS5jLTE4MS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG1pbl9vcmRlcilcbi0tXG5tbS90cnVuY2F0ZS5jLTE4OC1cbm1tL3RydW5jYXRlLmM6MTg5Olx0cmV0ID0gZm9saW9fc3BsaXQoZm9saW8sIG1pbl9vcmRlciwgc3BsaXRfYXQsIE5VTEwpO1xubW0vdHJ1bmNhdGUuYy0xOTAtXG4tLVxubW0vdHJ1bmNhdGUuYz0yMTc9Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbi0tXG5tbS90cnVuY2F0ZS5jLTI1NC1cdHNwbGl0X2F0ID0gZm9saW9fcGFnZShmb2xpbywgUEFHRV9BTElHTl9ET1dOKG9mZnNldCkgLyBQQUdFX1NJWkUpO1xubW0vdHJ1bmNhdGUuYzoyNTU6XHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xubW0vdHJ1bmNhdGUuYy0yNTYtXHRcdC8qXG4tLVxubW0vdHJ1bmNhdGUuYy0yODEtXHRcdCAgICBmb2xpbzItXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cdTAwM2VtYXBwaW5nKVxubW0vdHJ1bmNhdGUuYzoyODI6XHRcdFx0Zm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7XG5tbS90cnVuY2F0ZS5jLTI4My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlPTY3PXJtYXBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmU6Njg6Zm9saW9fc3BsaXRfcmFjZV90ZXN0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTA2PVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZToxMDc6VEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUtMTA4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jLTYtICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jOjc6ICogSXQgdGVzdHMgdGhlIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gZm9saW9fc3BsaXQoKSBhbmQgZmlsZW1hcF9nZXRfZW50cnkoKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jOjg6ICogd2hlcmUgdGhlIGhvbGUgcHVuY2hlcyBvbiBzaG1lbSBsZWFkIHRvIGZvbGlvX3NwbGl0KCkgYW5kIHJlYWRpbmcgdGhlIHNobWVtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYy05LSAqIGxlYWQgdG8gZmlsZW1hcF9nZXRfZW50cnkoKS5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD00NDQ9Q0FURUdPUlk9XCYjMzQ7dGhwXCYjMzQ7IHJ1bl90ZXN0IC4vdHJhbnNodWdlLXN0cmVzcyAtZCAyMFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtNDQ1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6NDQ2OkNBVEVHT1JZPVwmIzM0O3RocFwmIzM0OyBydW5fdGVzdCAuL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtNDQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMzMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTU5LS8qKlxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy0zOTYxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXG5tbS9odWdlX21lbW9yeS5jOjM5ODA6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTM5ODEtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MjUxPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NjpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyNTctXHRcdFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI4ND1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODYte1xubW0vaHVnZV9tZW1vcnkuYzo0Mjg3Olx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyODgtXHRcdFx0ICAgICBTUExJVF9UWVBFX05PTl9VTklGT1JNKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3OTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zNjc3PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzcxOS1cbm1tL2h1Z2VfbWVtb3J5LmM6MzcyMDpcdFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jLTM3MjEtXHRcdHNwbGl0X3BhZ2Vfb3duZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTU5LS8qKlxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy0zOTYxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXG5tbS9odWdlX21lbW9yeS5jOjM5ODA6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTM5ODEtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MTYyLS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0MTYzOiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXG5tbS9odWdlX21lbW9yeS5jLTQxNjQtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE4My0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDE4NDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4NS17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MjUxPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NjpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyNTctXHRcdFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI2MC0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDI2MTogKiBmb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTQyNjItICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4My0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NDppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NS1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NjA0PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2OTYtXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0Njk3Olx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00Njk4LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDcyMT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDc3Mi1cdFx0XHRcdFx0XHRcdCAgIGluX2ZvbGlvX29mZnNldCk7XG5tbS9odWdlX21lbW9yeS5jOjQ3NzM6XHRcdFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXG5tbS9odWdlX21lbW9yeS5jLTQ3NzQtXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzcwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEh1Z2UgUGFnZSBTcGxpdHRpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgcmVhY2hhYmlsaXR5IGFuZCByZWxldmFudCBzeW1ib2xzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIHNwbGl0dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gRmlyc3QsIEkgc2VlIHRoYXQgYGZvbGlvX3NwbGl0YCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIGFzIGFuIGV4dGVybmFsIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgdHJhY2UgaXRzIHVzYWdlLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtbS90cnVuY2F0ZS5jYC4gU3BlY2lmaWNhbGx5LCBgdHJ1bmNhdGVfaW5vZGVfZm9saW9gIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYm90aCBjYWxsIGBmb2xpb19zcGxpdF9vcl91bm1hcGAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgZm9saW9fc3BsaXRgLiBTbywgbm8gZG91YnQgdGhhdCBgZm9saW9fc3BsaXRgICppcyogcmVhY2hhYmxlLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYXNjYWRlIGNhbGxzIHRoYXQgY2FuIHVzZSBgZm9saW9fc3BsaXRgLiBMZXQgbWUgZGVsdmUgaW50byBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIEFoLCB0aGF0IG9uZSBpcyBjYWxsZWQgZnJvbSBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgICh3aGljaCBpcyBpbmxpbmUpLiBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGlzIHRoZW4gY2FsbGVkIGZyb20gYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAgKGFsc28gaW5saW5lKS4gVGhpcywgaW4gdHVybiwgaXMgY2FsbGVkIGZyb20gYHNwbGl0X2h1Z2VfcGFnZWAgKGlubGluZSBhZ2FpbikuIEFuZCBgc3BsaXRfaHVnZV9wYWdlYCBpcyBjYWxsZWQgZnJvbSAqbWFueSogcGxhY2VzLCBsaWtlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGFuZCBraHVnZXBhZ2VkLCBhbmQgcHJvYmFibHkgb3RoZXIgcGxhY2VzLCB0b28uIFRoaXMgcmVpbmZvcmNlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IGBmb2xpb19zcGxpdGAgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudC4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGB4YXNfc3BsaXRfYWxsb2NgLCBgZm9saW9fc3BsaXRgLCBhbmQgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLiBBbmQsIHNpbmNlIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYGZvbGlvX3NwbGl0YCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZXkgaGF2ZSBkaXN0aW5jdCwgZXhwb3J0YWJsZSBzeW1ib2xzLiBgeGFzX3NwbGl0X2FsbG9jYCBpcyBhbHNvIGV4cGxpY2l0bHkgZXhwb3J0ZWQuCgpGaW5hbGx5LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBtb2R1bGVzIGFyZSBidWlsdC4gQW5kIHllcywgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gR29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc1MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnM6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb25maWcgZGVwZW5kZW5jaWVzIGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYSBoYXJkIHJlcXVpcmVtZW50LCBubyBxdWVzdGlvbiBhYm91dCB0aGF0LiBXZSBjYW4mIzM5O3QgcHJvY2VlZCB3aXRob3V0IGl0LgoKTm93LCByZWdhcmRpbmcgYENPTkZJR19NRU1DR2AsIEkgc3VzcGVjdCBpdCYjMzk7cyBhbHNvIGdvaW5nIHRvIGJlIGVzc2VudGlhbCwgYWx0aG91Z2ggaXQmIzM5O3MgYSBsaXR0bGUgbGVzcyBvYnZpb3VzIG9uIHRoZSBzdXJmYWNlLiBNeSBpbnR1aXRpb24gaXMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpb2AgYW5kIGBzZXRfYWN0aXZlX21lbWNnYCBwcm9iYWJseSBoYXZlIGR1bW15IGltcGxlbWVudGF0aW9ucyBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZC4gVGhhdCYjMzk7cyBhIGNvbW1vbiBzdHJhdGVneSB0byBhdm9pZCBidWlsZCBmYWlsdXJlcy4gQnV0LCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB0aGVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFjdHVhbGx5IGRvIHNvbWV0aGluZyBtZWFuaW5nZnVsLgoKSSB0aGluayBpdCYjMzk7cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBhc3N1bXB0aW9uIGFib3V0IGBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvYCwgc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IG9uZSBpcyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTc1OT1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2FsbG9jX2J1ZmZlcnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmZzL2J1ZmZlci5jLTc2NS1cbmZzL2J1ZmZlci5jOjc2NjpcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5mcy9idWZmZXIuYy03NjctXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD03NTM9c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjc1NTpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjEzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mzk4MD1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMTktXHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDAyMDpcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTQwMjEtXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcbi0tXG5tbS9saXN0X2xydS5jPTYzMT1pbnQgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxubW0vbGlzdF9scnUuYy02NDgtXHQvKiBBbGxvY2F0aW9uIG1heSBibG9jaywgcGluIHRoZSBtZW1jZyAqL1xubW0vbGlzdF9scnUuYzo2NDk6XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xubW0vbGlzdF9scnUuYy02NTAtXHRyZXMgPSBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTMyOD1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzM0LVxubW0vbWVtY29udHJvbC5jOjMzNTpcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS9tZW1jb250cm9sLmMtMzM2LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTU0PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTE3Mi0vKipcbm1tL21lbWNvbnRyb2wuYzoxMTczOiAqIGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8gLSBPYnRhaW4gYSByZWZlcmVuY2Ugb24gYSBnaXZlbiBmb2xpbyYjMzk7cyBtZW1jZy5cbm1tL21lbWNvbnRyb2wuYy0xMTc0LSAqIEBmb2xpbzogZm9saW8gZnJvbSB3aGljaCBtZW1jZyBzaG91bGQgYmUgZXh0cmFjdGVkLlxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTc3LSAqL1xubW0vbWVtY29udHJvbC5jOjExNzg6c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbWNvbnRyb2wuYy0xMTc5LXtcbi0tXG5tbS9taWdyYXRlLmM9Mjc0ND1pbnQgbWlncmF0ZV9taXNwbGFjZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5vZGUpXG4tLVxubW0vbWlncmF0ZS5jLTI3NDktXHRMSVNUX0hFQUQobWlncmF0ZXBhZ2VzKTtcbm1tL21pZ3JhdGUuYzoyNzUwOlx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS9taWdyYXRlLmMtMjc1MS1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tLVxubW0vdm1zY2FuLmM9NDE4MD1ib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vdm1zY2FuLmMtNDIzMi1cbm1tL3Ztc2Nhbi5jOjQyMzM6XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xubW0vdm1zY2FuLmMtNDIzNC1cdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tLVxubW0vd29ya2luZ3NldC5jPTU0OD12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTU3Mi1cdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xubW0vd29ya2luZ3NldC5jOjU3MzpcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS93b3JraW5nc2V0LmMtNTc0LVx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIGZvbGlvX3BnZGF0KGZvbGlvKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTE0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X2FjdGl2ZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM9MTA2Mz1pbnQgc2d4X2VuY2xfYWxsb2NfYmFja2luZyhzdHJ1Y3Qgc2d4X2VuY2wgKmVuY2wsIHVuc2lnbmVkIGxvbmcgcGFnZV9pbmRleCxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA2Ni1cdHN0cnVjdCBtZW1fY2dyb3VwICplbmNsX21lbWNnID0gc2d4X2VuY2xfZ2V0X21lbV9jZ3JvdXAoZW5jbCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTA2NzpcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZW5jbF9tZW1jZyk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA2OC1cdGludCByZXQ7XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNzEtXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTA3MjpcdHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNzMtXHRtZW1fY2dyb3VwX3B1dChlbmNsX21lbWNnKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODg2PXN0YXRpYyB2b2lkIGxvb3BfaGFuZGxlX2NtZChzdHJ1Y3QgbG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTA3LVx0aWYgKGNtZF9tZW1jZ19jc3MpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxOTA4Olx0XHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTkwOS1cdFx0XHRtZW1fY2dyb3VwX2Zyb21fY3NzKGNtZF9tZW1jZ19jc3MpKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTIyLVx0aWYgKGNtZF9tZW1jZ19jc3MpIHtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE5MjM6XHRcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MjQtXHRcdGNzc19wdXQoY21kX21lbWNnX2Nzcyk7XG4tLVxuZnMvYnVmZmVyLmM9NzU5PXN0cnVjdCBidWZmZXJfaGVhZCAqZm9saW9fYWxsb2NfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxuZnMvYnVmZmVyLmMtNzY2LVx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbmZzL2J1ZmZlci5jOjc2NzpcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xuZnMvYnVmZmVyLmMtNzY4LVxuLS1cbmZzL2J1ZmZlci5jLTc4NS1vdXQ6XG5mcy9idWZmZXIuYzo3ODY6XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG5mcy9idWZmZXIuYy03ODctXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM9NzQ0PXN0YXRpYyBzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmZhbm90aWZ5X2FsbG9jX2V2ZW50KFxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTg0MC1cdC8qIFdob2V2ZXIgaXMgaW50ZXJlc3RlZCBpbiB0aGUgZXZlbnQsIHBheXMgZm9yIHRoZSBhbGxvY2F0aW9uLiAqL1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6ODQxOlx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhncm91cC1cdTAwM2VtZW1jZyk7XG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NDItXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtODc4LW91dDpcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjg3OTpcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTg4MC1cdHJldHVybiBldmVudDtcbi0tXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmM9NTk9aW50IGlub3RpZnlfaGFuZGxlX2lub2RlX2V2ZW50KHN0cnVjdCBmc25vdGlmeV9tYXJrICppbm9kZV9tYXJrLCB1MzIgbWFzayxcbi0tXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMtOTQtXHQgKi9cbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYzo5NTpcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZ3JvdXAtXHUwMDNlbWVtY2cpO1xuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jLTk2LVx0ZXZlbnQgPSBrbWFsbG9jKGFsbG9jX2xlbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmM6OTc6XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMtOTgtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyOD12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MzMtICogdGhlIGN1cnJlbnQgdGFzayAoc2ltaWxhciB0byB0aGUgXCYjMzQ7Y3VycmVudFwmIzM0OyBnbG9iYWwgdmFyaWFibGUpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzM0OiAqIG9yIGJ5IHNldF9hY3RpdmVfbWVtY2coKSBwYWlyLlxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTczNS0gKiBQbGVhc2UsIHVzZSBvYmpfY2dyb3VwX2dldCgpIHRvIGdldCBhIHJlZmVyZW5jZSBpZiB0aGUgcG9pbnRlclxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00NzU9REVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtZW1fY2dyb3VwICosIGludF9hY3RpdmVfbWVtY2cpO1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ3Ni0vKipcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0Nzc6ICogc2V0X2FjdGl2ZV9tZW1jZyAtIFN0YXJ0cyB0aGUgcmVtb3RlIG1lbWNnIGNoYXJnaW5nIHNjb3BlLlxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ3OC0gKiBAbWVtY2c6IG1lbWNnIHRvIGNoYXJnZS5cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDg1LSAqIHNvIGl0cyBsaWZldGltZSBpcyBndWFyYW50ZWVkIHRvIGV4Y2VlZCB0aGUgc2NvcGUgYmV0d2VlbiB0d29cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0ODY6ICogc2V0X2FjdGl2ZV9tZW1jZygpIGNhbGxzLlxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ4Ny0gKlxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00OTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDkyOnNldF9hY3RpdmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ5My17XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTUwNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo1MDg6c2V0X2FjdGl2ZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNTA5LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MjA3PXN0YXRpYyB2b2lkIGFsbG9jX2J1bGsoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIGludCBjbnQsIGludCBub2RlLCBib29sIGF0b21pYylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjQwLVx0bWVtY2cgPSBnZXRfbWVtY2coYyk7XG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MjQxOlx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjQyLVx0Zm9yICg7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjUyLVx0fVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjI1MzpcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0yNTQtXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk3OT12b2lkIG5vdHJhY2UgKmJwZl9tZW1fY2FjaGVfYWxsb2NfZmxhZ3Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBnZnBfdCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTkwLVx0XHRtZW1jZyA9IGdldF9tZW1jZyhjKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5OTE6XHRcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk5Mi1cdFx0cmV0ID0gX19hbGxvYyhjLCBOVU1BX05PX05PREUsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9BQ0NPVU5UKTtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTk0LVx0XHRcdCooc3RydWN0IGJwZl9tZW1fY2FjaGUgKiopcmV0ID0gYztcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5OTU6XHRcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05OTYtXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01MTI9dm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxNS1cdCpuZXdfbWVtY2cgPSBicGZfbWFwX2dldF9tZW1jZyhtYXApO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTE2Olx0Km9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coKm5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTctfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUxOT12b2lkIGJwZl9tYXBfbWVtY2dfZXhpdChzdHJ1Y3QgbWVtX2Nncm91cCAqb2xkX21lbWNnLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUyMS17XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MjI6XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MjMtXHRtZW1fY2dyb3VwX3B1dChuZXdfbWVtY2cpO1xuLS1cbm1tL2ZpbGVtYXAuYz05NDk9aW50IGZpbGVtYXBfYWRkX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2ZpbGVtYXAuYy05NTctXHRpZiAoa2VybmVsX2ZpbGUpXG5tbS9maWxlbWFwLmM6OTU4Olx0XHR0bXAgPSBzZXRfYWN0aXZlX21lbWNnKHJvb3RfbWVtX2Nncm91cCk7XG5tbS9maWxlbWFwLmMtOTU5LVx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIE5VTEwsIGdmcCk7XG5tbS9maWxlbWFwLmMtOTYwLVx0aWYgKGtlcm5lbF9maWxlKVxubW0vZmlsZW1hcC5jOjk2MTpcdFx0c2V0X2FjdGl2ZV9tZW1jZyh0bXApO1xubW0vZmlsZW1hcC5jLTk2Mi1cdGlmIChyZXQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTgwPXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDAyMC1cdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjQwMjE6XHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAyMi1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxNTEtXHQvKiByZXN0b3JlIHRvIGNhbGxlciYjMzk7cyBvbGRfbWVtY2cgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDE1MjpcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDE1My1cdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjk4Nj1fX2Fsd2F5c19pbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmN1cnJlbnRfb2JqX2Nncm91cCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDE4LVx0XHQvKlxubW0vbWVtY29udHJvbC5jOjMwMTk6XHRcdCAqIE1lbWNnIHBvaW50ZXIgaXMgcHJvdGVjdGVkIGJ5IHNjb3BlIChzZWUgc2V0X2FjdGl2ZV9tZW1jZygpKVxubW0vbWVtY29udHJvbC5jLTMwMjAtXHRcdCAqIGFuZCBpcyBwaW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIG9iamNnLCBzbyBvYmpjZyBjYW4mIzM5O3QgZ29cbi0tXG5tbS9tZW1jb250cm9sLmM9MzUzNz1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTQ4LVx0ICogVGhlIG9idGFpbmVkIG9iamNnIHBvaW50ZXIgaXMgc2FmZSB0byB1c2Ugd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLFxubW0vbWVtY29udHJvbC5jOjM1NDk6XHQgKiBkZWZpbmVkIGJ5IGN1cnJlbnQgdGFzayBvciBzZXRfYWN0aXZlX21lbWNnKCkgcGFpci5cbm1tL21lbWNvbnRyb2wuYy0zNTUwLVx0ICogb2JqX2Nncm91cF9nZXQoKSBpcyB1c2VkIHRvIGdldCBhIHBlcm1hbmVudCByZWZlcmVuY2UuXG4tLVxubW0vbWVtY29udHJvbC5jPTQxNTc9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxNjItXG5tbS9tZW1jb250cm9sLmM6NDE2MzpcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYy00MTY0LVx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmM6NDE2NTpcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00MTY2LVx0aWYgKElTX0VSUihtZW1jZykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODg0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MzY3Nz1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXG5tbS9odWdlX21lbW9yeS5jOjM3MjA6XHRcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzIxLVx0XHRzcGxpdF9wYWdlX293bmVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE2Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5tbS9odWdlX21lbW9yeS5jLTQxODUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNjE6ICogZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG5tbS9odWdlX21lbW9yeS5jOjQyODc6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVx0XHRcdFx0XHRcdFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcdFx0XHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0NzczOlx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdHJ1bmNhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS90cnVuY2F0ZS5jPTE3MD1pbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdHJ1bmNhdGUuYy0xNzktXG5tbS90cnVuY2F0ZS5jOjE4MDpzdGF0aWMgaW50IGZvbGlvX3NwbGl0X29yX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzcGxpdF9hdCxcbm1tL3RydW5jYXRlLmMtMTgxLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbWluX29yZGVyKVxuLS1cbm1tL3RydW5jYXRlLmMtMTg4LVxubW0vdHJ1bmNhdGUuYzoxODk6XHRyZXQgPSBmb2xpb19zcGxpdChmb2xpbywgbWluX29yZGVyLCBzcGxpdF9hdCwgTlVMTCk7XG5tbS90cnVuY2F0ZS5jLTE5MC1cbi0tXG5tbS90cnVuY2F0ZS5jPTIxNz1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuLS1cbm1tL3RydW5jYXRlLmMtMjU0LVx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XG5tbS90cnVuY2F0ZS5jOjI1NTpcdGlmICghZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8sIHNwbGl0X2F0LCBtaW5fb3JkZXIpKSB7XG5tbS90cnVuY2F0ZS5jLTI1Ni1cdFx0Lypcbi0tXG5tbS90cnVuY2F0ZS5jLTI4MS1cdFx0ICAgIGZvbGlvMi1cdTAwM2VtYXBwaW5nID09IGZvbGlvLVx1MDAzZW1hcHBpbmcpXG5tbS90cnVuY2F0ZS5jOjI4MjpcdFx0XHRmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKTtcbm1tL3RydW5jYXRlLmMtMjgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcwNQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA1MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEh1Z2UgUGFnZSBTcGxpdHRpbmcgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBmb2xpb19zcGxpdGAgaXMgaW5kZWVkIGEga2V5IGZ1bmN0aW9uIGluIGBtbS90cnVuY2F0ZS5jYCwgYSBjcml0aWNhbCBhcmVhIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUbyBwcm9wZXJseSBhbmFseXplIHRoaXMsIEkgbmVlZGVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uczsgSSBjb25maXJtZWQgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgIChvciByYXRoZXIgYENPTkZJR19NRU1DR2AsIHRvIGJlIHByZWNpc2UpIGFyZSB0aGUgbmVjZXNzYXJ5IHRvZ2dsZXMuCgpJIHRoZW4gZGlkIGEgZGVlcCBkaXZlIGludG8gdGhlIGZ1bmN0aW9uIG5hbWVzLCBtYWtpbmcgc3VyZSB0byBmaWx0ZXIgc3RhdGljIGZ1bmN0aW9ucyBhbmQgdGhvc2UgdGhhdCBhcmVuJiMzOTt0IGV4cG9ydGVkLiBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgaW50ZXJuYWwsIHNvIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgYW5kIHRoZSBzYW1lIGdvZXMgZm9yIGBmb2xpb19zcGxpdGAuIEJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIGFuZCBmb3VuZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEJ1dCBJIGNvbmZpcm1lZCB0aGF0IGB4YXNfc3BsaXRfYWxsb2NgICppcyogZXhwb3J0ZWQsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4KClRoaXMgaGFzIG5hcnJvd2VkIGRvd24gdGhlIGVzc2VudGlhbCBzeW1ib2xzLiBTbyB0aGUga2V5IGZvY3VzIG9mIHRoaXMgcGF0Y2ggYXJlOgotICAgYHhhc19zcGxpdF9hbGxvY2AKLSAgIGBmb2xpb19zcGxpdGAKLSAgIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYAoKSSBkaWQgYSBmaW5hbCBjaGVjayB0byBjb25maXJtIHRoYXQgbm8gb3RoZXIgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQgb3V0c2lkZSBvZiBgeGFzX3NwbGl0X2FsbG9jYCBhbmQgYF9fZm9saW9fc3BsaXRgLCBzbyBJJiMzOTtsbCBiZSB1c2luZyBgZm9saW9fc3BsaXRgIGFuZCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYXMgd2VsbCB0byBjb3ZlciBhbGwgdGhlIGNhbGwgcGF0aHMsIHNpbmNlIGBfX2ZvbGlvX3NwbGl0YCBpcyBzdGF0aWMuCgpSZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIGtleSBvcHRpb25zIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgLgoKTm93LCBmb3IgdGhlIGNvcmUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBlbmFibGVkLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2ZvbGlvX3NwbGl0YCAoYW5kIGJ5IGV4dGVuc2lvbiwgaXRzIGNhbGxlciwgYGZvbGlvX3NwbGl0YCkgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGlzIG1vZGlmaWNhdGlvbiBpcyB2aXRhbDogaXQgc3dpdGNoZXMgdG8gdGhlIGZvbGlvJiMzOTtzIG1lbWNnICpiZWZvcmUqIGNhcnJ5aW5nIG91dCBvcGVyYXRpb25zIHRoYXQgbWlnaHQgcmVxdWlyZSB0aGUgYWxsb2NhdGlvbiBvZiB4YXJyYXkgbm9kZXMuIFRoaXMgZW5zdXJlcyB0aGF0IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGNvcnJlY3RseSBjaGFyZ2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBtZW1jZywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGFjY3VyYXRlIHJlc291cmNlIGFjY291bnRpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaXMgcmVhY2hlZCB0aHJvdWdoIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuCgpHaXZlbiB0aGlzLCB0aGUgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgaGF2ZSBiZWVuIGlkZW50aWZpZWQsIGFuZCBJJiMzOTtsbCBub3cgbWFyayB0aGUgd29yayBhcyBkb25lIGJ5IGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGFzX3NwbGl0X2FsbG9jJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBhbGxvY2F0ZSB4YXJyYXkgbm9kZXMsIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgeGFycmF5IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGFzX3NwbGl0X2FsbG9jJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBhbGxvY2F0ZSB4YXJyYXkgbm9kZXMsIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgeGFycmF5IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1NzoyOS4wMzIzNjMzMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwMTU4MDA2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGFzX3NwbGl0X2FsbG9jXCIsXG4gICAgXCJmb2xpb19zcGxpdFwiLFxuICAgIFwiX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB4YXNfc3BsaXRfYWxsb2NgIHRvIGFjY291bnQgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpZiB0aGUgeGFycmF5IGhhcyBgWEFfRkxBR1NfQUNDT1VOVGAgc2V0LiBJdCBhbHNvIG1vZGlmaWVzIGBfX2ZvbGlvX3NwbGl0YCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgdG8gc3dpdGNoIHRvIHRoZSBmb2xpbydzIG1lbWNnIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBhbGxvY2F0ZSB4YXJyYXkgbm9kZXMsIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgeGFycmF5IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjI5LjAzMjM2ODY0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MDAxNTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU4Njk1NzBkNmYxYjViMjc3MDE2Yjc3Njk1NzNkNzZjNzExODlmMjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMTo1NzoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcXG5pbmRleCA5YThiNDkxNjU0MGNmLi5iZmU3YmVmODBmMzRlIDEwMDY0NFxcbi0tLSBhL2xpYi94YXJyYXkuY1xcbisrKyBiL2xpYi94YXJyYXkuY1xcbkBAIC0xMDUzLDYgKzEwNTMsOSBAQCB2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0aWYgKHhhcy1cXHUwMDNleGFfc2hpZnQgKyBYQV9DSFVOS19TSElGVCBcXHUwMDNlIG9yZGVyKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAoeGFzLVxcdTAwM2V4YS1cXHUwMDNleGFfZmxhZ3MgXFx1MDAyNiBYQV9GTEFHU19BQ0NPVU5UKVxcbitcXHRcXHRnZnAgfD0gX19HRlBfQUNDT1VOVDtcXG4rXFxuIFxcdGRvIHtcXG4gXFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGU7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDAzMjcwMmE0NjM3YmEuLmU5MDM0NmZkZTU1MWEgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMzk4NCwzNCArMzk4NCw0MiBAQCBzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4gXFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2Zm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWlfcGFnZXMsIGZvbGlvLVxcdTAwM2VpbmRleCk7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XFxuIFxcdGJvb2wgaXNfYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZztcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDtcXG4gXFx0aW50IG9sZF9vcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG4gXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xcbiBcXHRpbnQgbnJfc2htZW1fZHJvcHBlZCA9IDA7XFxuIFxcdGVudW0gdHR1X2ZsYWdzIHR0dV9mbGFncyA9IDA7XFxuLVxcdGludCByZXQ7XFxuIFxcdHBnb2ZmX3QgZW5kID0gMDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sYXJnZShmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdGlmIChmb2xpbyAhPSBwYWdlX2ZvbGlvKHNwbGl0X2F0KSB8fCBmb2xpbyAhPSBwYWdlX2ZvbGlvKGxvY2tfYXQpKSB7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRnb3RvIG91dF9ub19tZW1jZztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG5ld19vcmRlciBcXHUwMDNlPSBvbGRfb3JkZXIpIHtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdGdvdG8gb3V0X25vX21lbWNnO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXQgPSBmb2xpb19jaGVja19zcGxpdHRhYmxlKGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X3R5cGUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFZNX1dBUk5fT05DRShyZXQgPT0gLUVJTlZBTCwgXFxcIlRyaWVkIHRvIHNwbGl0IGFuIHVuc3BsaXR0YWJsZSBmb2xpb1xcXCIpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBvdXRfbm9fbWVtY2c7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIHN3aXRjaCB0byBmb2xpbydzIG1lbWNnIGFzIHhhcnJheSBub2RlIGFsbG9jYXRpb24gY2FuIGhhcHBlbiBhbmRcXG4rXFx0ICogbmVlZHMgdG8gY2hhcmdlIHRvIGl0LlxcbitcXHQgKi9cXG4rXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4rXFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxuK1xcbiBcXHRpZiAoaXNfYW5vbikge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgY2FsbGVyIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhvbGQgYW4gbW1hcF9sb2NrIHRoYXQgd291bGRcXG5AQCAtNDE0MCw2ICs0MTQ4LDEwIEBAIHN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbiBcXHRpZiAobWFwcGluZylcXG4gXFx0XFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xcbiBvdXQ6XFxuK1xcdC8qIHJlc3RvcmUgdG8gY2FsbGVyJ3Mgb2xkX21lbWNnICovXFxuK1xcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitvdXRfbm9fbWVtY2c6XFxuIFxcdHhhc19kZXN0cm95KFxcdTAwMjZ4YXMpO1xcbiBcXHRpZiAoaXNfcG1kX29yZGVyKG9sZF9vcmRlcikpXFxuIFxcdFxcdGNvdW50X3ZtX2V2ZW50KCFyZXQgPyBUSFBfU1BMSVRfUEFHRSA6IFRIUF9TUExJVF9QQUdFX0ZBSUxFRCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjMwLjIyMzA1MjMxNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNzgyNTEwNDU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4YXNfc3BsaXRfYWxsb2NcIixcbiAgICBcImZvbGlvX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJ3MgbWVtY2cgYmVmb3JlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFsbG9jYXRlIHhhcnJheSBub2RlcywgZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB4YXJyYXkgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTg2OTU3MGQ2ZjFiNWIyNzcwMTZiNzc2OTU3M2Q3NmM3MTE4OWYyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjE6NTc6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLmJmZTdiZWY4MGYzNGUgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbisrKyBiL2xpYi94YXJyYXkuY1xuQEAgLTEwNTMsNiArMTA1Myw5IEBAIHZvaWQgeGFzX3NwbGl0X2FsbG9jKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0aWYgKHhhcy1cdTAwM2V4YV9zaGlmdCArIFhBX0NIVU5LX1NISUZUIFx1MDAzZSBvcmRlcilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKHhhcy1cdTAwM2V4YS1cdTAwM2V4YV9mbGFncyBcdTAwMjYgWEFfRkxBR1NfQUNDT1VOVClcbitcdFx0Z2ZwIHw9IF9fR0ZQX0FDQ09VTlQ7XG4rXG4gXHRkbyB7XG4gXHRcdHN0cnVjdCB4YV9ub2RlICpub2RlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAwMzI3MDJhNDYzN2JhLi5lOTAzNDZmZGU1NTFhIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTM5ODQsMzQgKzM5ODQsNDIgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRYQV9TVEFURSh4YXMsIFx1MDAyNmZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaV9wYWdlcywgZm9saW8tXHUwMDNlaW5kZXgpO1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdGJvb2wgaXNfYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IE5VTEw7XG4gXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDtcbiBcdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4gXHRpbnQgbnJfc2htZW1fZHJvcHBlZCA9IDA7XG4gXHRlbnVtIHR0dV9mbGFncyB0dHVfZmxhZ3MgPSAwO1xuLVx0aW50IHJldDtcbiBcdHBnb2ZmX3QgZW5kID0gMDtcbitcdGludCByZXQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0aWYgKGZvbGlvICE9IHBhZ2VfZm9saW8oc3BsaXRfYXQpIHx8IGZvbGlvICE9IHBhZ2VfZm9saW8obG9ja19hdCkpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gb3V0X25vX21lbWNnO1xuIFx0fVxuIFxuIFx0aWYgKG5ld19vcmRlciBcdTAwM2U9IG9sZF9vcmRlcikge1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfbm9fbWVtY2c7XG4gXHR9XG4gXG4gXHRyZXQgPSBmb2xpb19jaGVja19zcGxpdHRhYmxlKGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X3R5cGUpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRWTV9XQVJOX09OQ0UocmV0ID09IC1FSU5WQUwsIFwiVHJpZWQgdG8gc3BsaXQgYW4gdW5zcGxpdHRhYmxlIGZvbGlvXCIpO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfbm9fbWVtY2c7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogc3dpdGNoIHRvIGZvbGlvJ3MgbWVtY2cgYXMgeGFycmF5IG5vZGUgYWxsb2NhdGlvbiBjYW4gaGFwcGVuIGFuZFxuK1x0ICogbmVlZHMgdG8gY2hhcmdlIHRvIGl0LlxuK1x0ICovXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XG4rXG4gXHRpZiAoaXNfYW5vbikge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgY2FsbGVyIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhvbGQgYW4gbW1hcF9sb2NrIHRoYXQgd291bGRcbkBAIC00MTQwLDYgKzQxNDgsMTAgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRpZiAobWFwcGluZylcbiBcdFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xuIG91dDpcbitcdC8qIHJlc3RvcmUgdG8gY2FsbGVyJ3Mgb2xkX21lbWNnICovXG4rXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rb3V0X25vX21lbWNnOlxuIFx0eGFzX2Rlc3Ryb3koXHUwMDI2eGFzKTtcbiBcdGlmIChpc19wbWRfb3JkZXIob2xkX29yZGVyKSlcbiBcdFx0Y291bnRfdm1fZXZlbnQoIXJldCA/IFRIUF9TUExJVF9QQUdFIDogVEhQX1NQTElUX1BBR0VfRkFJTEVEKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjMwLjIyMzA1MzgwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MTk5NzY3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkgY29yZSBhcmVhcyDigJMgYGxpYi94YXJyYXkuY2AgYW5kIGBtbS9odWdlX21lbW9yeS5jYC4gSSBzZWUgdGhhdCBpbiBgbGliL3hhcnJheS5jYCwgdGhlIGB4YXNfc3BsaXRfYWxsb2NgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGBfX0dGUF9BQ0NPVU5UYCB0byB0aGUgYGdmcGAgZmxhZyB1bmRlciBhIGNlcnRhaW4gY29uZGl0aW9uOiBpZiBgeGFzLVx1MDAzZXhhLVx1MDAzZXhhX2ZsYWdzIFx1MDAyNiBYQV9GTEFHU19BQ0NPVU5UYCBpcyB0cnVlLiBUaGF0IGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBwb3RlbnRpYWwgY2hhbmdlIGluIG1lbW9yeSBhY2NvdW50aW5nIHJlbGF0ZWQgdG8gWEFycmF5IGFsbG9jYXRpb25zLCBsaWtlbHkgZm9yIG1lbWNnIGludGVncmF0aW9uLiBPdmVyIGluIGBtbS9odWdlX21lbW9yeS5jYCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBfX2ZvbGlvX3NwbGl0YCB0byBzd2l0Y2ggdGhlIG9wZXJhdGlvbiB0byB0aGUgZm9saW8ncyBtZW1jZyAqYmVmb3JlKiBhbnkgeGFycmF5IG5vZGUgYWxsb2NhdGlvbnMuIFRoaXMgcmVpbmZvcmNlcyB0aGUgbWVtY2cgYWNjb3VudGluZyBhbmdsZTsgdGhlIGFpbSBzZWVtcyB0byBiZSBlbnN1cmluZyBhbGxvY2F0aW9ucyB3aXRoaW4gZm9saW8gc3BsaXR0aW5nIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLCBpbnN0ZWFkIG9mIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgdGFzaydzIG9yIHBhcmVudCBtZW1jZy5cblxuR2l2ZW4gdGhlIHNjb3Bl4oCUY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIG9mIGh1Z2UgcGFnZXMgYW5kIGZvbGlvIHNwbGl0dGluZywgaW4gY29uanVuY3Rpb24gd2l0aCBjaGFuZ2VzIHRvIHhhcnJheeKAlHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIEkgbmVlZCB0byBnZXQgdGhpcyBwcm9wZXJseSB0ZXN0ZWQsIGFuZCBmYXN0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gYHhhc19zcGxpdF9hbGxvY2Agc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIGluIGBsaWIveGFycmF5LmNgLiBCdXQgYF9fZm9saW9fc3BsaXRg4oCmIHdhaXQsIGl0J3MgYSAqc3RhdGljKiBmdW5jdGlvbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuICpTdGF0aWMqLCBva2F5LiBEb2VzIHRoYXQgaW5mbHVlbmNlIHRoZSBmdXp6aW5nIHN0cmF0ZWd5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IHRvIGl0LiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBtbS9odWdlX21lbW9yeS5jYCwgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjM1Ljc0MzAzMzI2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ2OTMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXFxubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MjUxPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjU1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NjpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI4ND1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg3OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjM1Ljc4NjUwNjYyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NDMwNDUyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRXhhbWluaW5nIEh1Z2UgUGFnZSBTcGxpdHRpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIHNwbGl0dGluZyBwcm9jZXNzLiBJIHNlZSB0aGF0IGJvdGggYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGFuZCBgZm9saW9fc3BsaXRgIHVsdGltYXRlbHkgY2FsbCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYF9fZm9saW9fc3BsaXRgLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHNwbGl0IG9wZXJhdGlvbiwgaXQgc2VlbXMuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmA6IElzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgdXNlZCBvdXRzaWRlIG9mIHRoaXMgcGFydGljdWxhciBtb2R1bGU/IElzIGl0IGV4cG9ydGVkIGZvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyB0byBsZXZlcmFnZSwgb3IgaXMgaXQgcHVyZWx5IGFuIGludGVybmFsIGRldGFpbD8gSSBuZWVkIHRvIGtub3cgaWYgaXQncyB2aXNpYmxlIG9yIGlmIGl0J3MganVzdCBjYWxsZWQgd2l0aGluIHRoaXMgY29kZSBwYXRoLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCBleHBvcnQgdGFibGUsIGNyb3NzLXJlZmVyZW5jZXMsIGFuZCBwb3NzaWJseSBhIG1vcmUgdGFyZ2V0ZWQgY29kZSBzZWFyY2ggdG8gYXNjZXJ0YWluIGl0cyBzY29wZS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGhlcmUgaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWlnaHQgbWFrZSBpbiB0aGlzIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1Nzo0NS42Mjk1NTQ0NjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1Mzg0NDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zOTc9ZW51bSBzcGxpdF90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwMS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDI6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAzLVxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDEyPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE0LXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTU6XFx0cmV0dXJuIF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgbGlzdCwgbmV3X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTYtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MTg0PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjUwLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1MTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTItXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1Nzo0Ny4xODM0MDM2MzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTQ4NTMxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBc3Nlc3NpbmcgUG90ZW50aWFsIFN0cmF0ZWdpZXMgZm9yIERhdGEgUGFydGl0aW9uaW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBoYW5kbGUgdGhpcyBkYXRhIHNwbGl0dGluZy4gXCJmb2xpb19zcGxpdFwiIGFuZCB0aGF0IGhlbHBlciBmdW5jdGlvbiwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBib3RoIGltbWVkaWF0ZWx5IHNwcmluZyB0byBtaW5kIGFzIHByb21pc2luZyBjYW5kaWRhdGVzLiBUaGV5IHNlZW0gbGlrZSB0aGV5J2Qgb2ZmZXIgYSBnb29kIGFwcHJvYWNoLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgZGF0YSBhbmQgY29uc3RyYWludHMuIE9mIGNvdXJzZSwgdGhhdCdzIGp1c3QgYSBxdWljayBndXQgY2hlY2suIEkgbmVlZCB0byBkaWcgaW4gYSBiaXQgZGVlcGVyLiBMZXQncyBzZWUgaG93IGB4YXNfc3BsaXRfYWxsb2NgIHN0YWNrcyB1cCBhZ2FpbnN0IHRoZW0uIEl0IG1pZ2h0IGJlIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1ODEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1Nzo1Ni43MzE5Mzc1NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2Mjc1NTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXNfc3BsaXRfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdD00OTA9ZW50cnkgY2FuIGJlIHNwbGl0IGludG8gZW50cmllcyBvY2N1cHlpbmcgc21hbGxlciByYW5nZXMgYnkgY2FsbGluZ1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTE6eGFzX3NwbGl0X2FsbG9jKCkgd2l0aG91dCB0aGUgeGFfbG9jayBoZWxkLCBmb2xsb3dlZCBieSB0YWtpbmcgdGhlIGxvY2tcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDkyLWFuZCBjYWxsaW5nIHhhc19zcGxpdCgpIG9yIGNhbGxpbmcgeGFzX3RyeV9zcGxpdCgpIHdpdGggeGFfbG9jay4gVGhlXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQ5MzpkaWZmZXJlbmNlIGJldHdlZW4geGFzX3NwbGl0X2FsbG9jKCkreGFzX3NwbGl0KCkgYW5kIHhhc190cnlfYWxsb2MoKSBpc1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTQ6dGhhdCB4YXNfc3BsaXRfYWxsb2MoKSArIHhhc19zcGxpdCgpIHNwbGl0IHRoZSBlbnRyeSBmcm9tIHRoZSBvcmlnaW5hbFxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00OTUtb3JkZXIgdG8gdGhlIG5ldyBvcmRlciBpbiBvbmUgc2hvdCB1bmlmb3JtbHksIHdoZXJlYXMgeGFzX3RyeV9zcGxpdCgpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDk3PUZvciBleGFtcGxlLCB0byBzcGxpdCBhbiBvcmRlci05IGVudHJ5LCB3aGljaCB0YWtlcyAyXig5LTYpPTggc2xvdHMsXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQ5ODphc3N1bWluZyBgYFhBX0NIVU5LX1NISUZUYGAgaXMgNiwgeGFzX3NwbGl0X2FsbG9jKCkgKyB4YXNfc3BsaXQoKSBuZWVkXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQ5OS04IHhhX25vZGUuIHhhc190cnlfc3BsaXQoKSBzcGxpdHMgdGhlIG9yZGVyLTkgZW50cnkgaW50b1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0zNDU9WEFycmF55pyJ6IO95Yqb5bCG5aSa5Liq57Si5byV6IGU57O75Zyo5LiA6LW377yM5Zug5q2k5a+55LiA5Liq57Si5byV55qE5pON5L2c5Lya5b2x5ZON5Yiw5omA5pyJ55qE57Si5byV44CC5L6L5aaC77yM5a2Y5YKo5Yiw5Lu75L2V57Si5byV5bCGXFx1ZmZmZFxcdWZmZmQuLi5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzYyLeWcqOS4gOS4quWkmue0ouW8leadoeebrueahOS7u+S9leS4gOS4que0ouW8leS4reWtmOWCqCBgYE5VTExgYCDvvIzlsIbmiormr4/kuKrntKLlvJXnmoTmnaHnm67orr7nva7kuLogYGBOVUxMYGAg77yM5bm26Kej6Zmk57uR5a6a44CC6YCa6L+H6LCDXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozNjM655SoeGFzX3NwbGl0X2FsbG9jKCnvvIzlnKjmsqHmnIl4YV9sb2Nr55qE5oOF5Ya15LiL77yM5Y+v5Lul5bCG5LiA5Liq5aSa57Si5byV5p2h55uu5YiG5Ymy5oiQ5Y2g5o2u6L6D5bCP6IyD5Zu055qE5p2h55uu77yM54S25ZCO5YaN5Y+W6ZSB5bm2XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zNjQt6LCD55SoeGFzX3NwbGl0KCnjgIJcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0zODItLypcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDozODM6ICogeGFzX3NwbGl0X2FsbG9jKCkgZG9lcyBub3Qgc3VwcG9ydCBhcmJpdHJhcnkgb3JkZXJzLiBUaGlzIGltcGxpZXMgbm9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0zODQtICogNTEyTUIgVEhQIG9uIEFSTTY0IHdpdGggNjRLQiBiYXNlIHBhZ2Ugc2l6ZS5cXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU2Mj12b2lkIHhhc19zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKiwgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTYzOnZvaWQgeGFzX3NwbGl0X2FsbG9jKHN0cnVjdCB4YV9zdGF0ZSAqLCB2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNTY0LXZvaWQgeGFzX3RyeV9zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE1Nzc9c3RhdGljIGlubGluZSB2b2lkIHhhc19zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1ODItXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTgzOnN0YXRpYyBpbmxpbmUgdm9pZCB4YXNfc3BsaXRfYWxsb2Moc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5LFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTU4NC1cXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcClcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTE4MzY9c3RhdGljIHZvaWQgY2hlY2tfc3BsaXRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTE4NDUtXFxubGliL3Rlc3RfeGFycmF5LmM6MTg0NjpcXHR4YXNfc3BsaXRfYWxsb2MoXFx1MDAyNnhhcywgeGEsIG9yZGVyLCBHRlBfS0VSTkVMKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xODQ3LVxcdHhhc19sb2NrKFxcdTAwMjZ4YXMpO1xcbi0tXFxubGliL3hhcnJheS5jPTEwMTE9c3RhdGljIHZvaWQgX194YXNfaW5pdF9ub2RlX2Zvcl9zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4tLVxcbmxpYi94YXJyYXkuYy0xMDMxLS8qKlxcbmxpYi94YXJyYXkuYzoxMDMyOiAqIHhhc19zcGxpdF9hbGxvYygpIC0gQWxsb2NhdGUgbWVtb3J5IGZvciBzcGxpdHRpbmcgYW4gZW50cnkuXFxubGliL3hhcnJheS5jLTEwMzMtICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cXG4tLVxcbmxpYi94YXJyYXkuYy0xMDQ0LSAqL1xcbmxpYi94YXJyYXkuYzoxMDQ1OnZvaWQgeGFzX3NwbGl0X2FsbG9jKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbmxpYi94YXJyYXkuYy0xMDQ2LVxcdFxcdGdmcF90IGdmcClcXG4tLVxcbmxpYi94YXJyYXkuYy0xMDc1LX1cXG5saWIveGFycmF5LmM6MTA3NjpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfc3BsaXRfYWxsb2MpO1xcbmxpYi94YXJyYXkuYy0xMDc3LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjc3PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzAxLVxcdFxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzozNzAyOlxcdFxcdFxcdCAqIHVuaWZvcm0gc3BsaXQgaGFzIHhhc19zcGxpdF9hbGxvYygpIGNhbGxlZCBiZWZvcmVcXG5tbS9odWdlX21lbW9yeS5jLTM3MDMtXFx0XFx0XFx0ICogaXJxIGlzIGRpc2FibGVkIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnksIHdoZXJlYXNcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk4MD1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA1OS1cXHRcXHRcXHR4YXNfc2V0X29yZGVyKFxcdTAwMjZ4YXMsIGZvbGlvLVxcdTAwM2VpbmRleCwgbmV3X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jOjQwNjA6XFx0XFx0XFx0eGFzX3NwbGl0X2FsbG9jKFxcdTAwMjZ4YXMsIGZvbGlvLCBvbGRfb3JkZXIsIGdmcCk7XFxubW0vaHVnZV9tZW1vcnkuYy00MDYxLVxcdFxcdFxcdGlmICh4YXNfZXJyb3IoXFx1MDAyNnhhcykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTc6NTguMzk0Njk3OTA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ5NjQwNDUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB4YXNfc3BsaXRfYWxsb2NgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgYSBzcGVjaWZpYyBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgeGFzX3NwbGl0X2FsbG9jYCBpcyBjYWxsZWQgYnkgYF9fZm9saW9fc3BsaXRgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIGtleSBkaWZmZXJlbmNlIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgX19HRlBfQUNDT1VOVGAgd2l0aGluIGB4YXNfc3BsaXRfYWxsb2NgIGJhc2VkIG9uIHRoZSBgWEFfRkxBR1NfQUNDT1VOVGAgZmxhZyBpbiBgeGFzLVx1MDAzZXhhLVx1MDAzZXhhX2ZsYWdzYC4gVGhpcyBpcyBnb29kOyB0aGF0J3MgdGhlIGtpbmQgb2Ygc3VidGxlIGNoYW5nZSB0aGF0IGNhbiBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgaW4gYWNjb3VudGluZy5cblxuVGhlIG90aGVyIGNydWNpYWwgcGFydCBpcyB0aGUgbWVtY2cgc3dpdGNoaW5nIHRoYXQgaGFwcGVucyBpbiBgX19mb2xpb19zcGxpdGAgKmJlZm9yZSogdGhlIGNhbGwgdG8gYHhhc19zcGxpdF9hbGxvY2AuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdyBiZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLCBhIGNyaXRpY2FsIGFzcGVjdCBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBpc29sYXRpb24uIERlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgZXhwZWN0ZWQuXG5cblNpbmNlIHRoaXMgdG91Y2hlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWVtY2cgYWNjb3VudGluZywgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGRlc2lnbmF0aW9uIGlzIHNwb3Qgb24uIEknbGwgbWFrZSBhIG5vdGUgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIEknbSBhc3Nlc3NpbmcgdGhlIHBhdGNoIGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gYSBiaXQgZGVlcGVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgeGFzX3NwbGl0X2FsbG9jYCwgYGZvbGlvX3NwbGl0YCAoYW5kIGltcG9ydGFudGx5LCBgX19mb2xpb19zcGxpdGApLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGFuZCBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgICh0aGUgaW5saW5lIHZlcnNpb24pLlxuXG5Ib2xkIG9uLCBJIGFsc28gbmVlZCB0byBjaGVjayBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLiBEb2VzIHRoYXQgY2FsbCBgX19mb2xpb19zcGxpdGA/IFRoYXQncyB0aGUgaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZSwgYW5kIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGNhbGwgY2hhaW4gYW5kIGVuc3VyZSBJJ20gZ2V0dGluZyBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTg6MDcuODkxMTA3Mjg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg2ODgwMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NwbGl0X3VubWFwcGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDI9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAzLVxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA1LXVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTgwPXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MTYyLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE2NC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MTg0OmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4NS17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTkwMj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTE2LVxcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cXHUwMDNldm1hLCBhZGRyLCB0cnVlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjkxNzpcXHRyZXQgPSBmb2xpb19zcGxpdF91bm1hcHBlZChmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy05MTgtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTg6MDkuMzc3OTkyMzM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTc1MTAyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBQb3RlbnRpYWwgSXNzdWUgaW4gRm9saW8gU3BsaXR0aW5nKipcblxuT2theSwgc28gYGZvbGlvX3NwbGl0X3VubWFwcGVkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGdpdmluZyBtZSBwYXVzZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGBmb2xpb19zcGxpdF91bm1hcHBlZGAgaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgYW5kIEkgc3VzcGVjdCBpdCBjYWxscyBgX19mb2xpb19zcGxpdGAuIFRoYXQncyB0aGUgbGlrZWx5IHJlbGF0aW9uc2hpcCBhdCBwbGF5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjYWxsIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBpbnZvbHZlZCBpbiB0aGF0IGBfX2ZvbGlvX3NwbGl0YCBmdW5jdGlvbi4gVGhpcyBpcyBhbGwgYWJvdXQgY29uZmlybWluZyB0aGUgZGF0YSBmbG93LCB0aGUgaW50ZXJhY3Rpb25zIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3BsaXR0aW5nIG9wZXJhdGlvbiBpcyBhY3R1YWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGBmb2xpb19zcGxpdF91bm1hcHBlZGAgaXMgKnJlYWxseSogZG9pbmcuIEkgd2FudCB0byBzZWUgaG93IGBfX2ZvbGlvX3NwbGl0YCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU4OjE5Ljk1MzA5NzIzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTg0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTg0OlxcdGludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbjQxODU6XFx0e1xcbjQxODY6XFx0XFx0aW50IHJldCA9IDA7XFxuNDE4NzpcXHRcXG40MTg4OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19tYXBwZWQoZm9saW8pLCBmb2xpbyk7XFxuNDE4OTpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbjQxOTA6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xcbjQxOTE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XFxuNDE5MjpcXHRcXG40MTkzOlxcdFxcdGlmIChmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSAxKVxcbjQxOTQ6XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuNDE5NTpcXHRcXG40MTk2OlxcdFxcdGxvY2FsX2lycV9kaXNhYmxlKCk7XFxuNDE5NzpcXHRcXHRyZXQgPSBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBOVUxMLFxcbjQxOTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcXG40MTk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdDAsIE5VTEwpO1xcbjQyMDA6XFx0XFx0bG9jYWxfaXJxX2VuYWJsZSgpO1xcbjQyMDE6XFx0XFx0cmV0dXJuIHJldDtcXG40MjAyOlxcdH1cXG40MjAzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1ODoxOS45NTMyNjIzMTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg5OTkwNDc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIFNwbGl0dGluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW5pdGlhbGx5IHRob3VnaHQgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCB3YXMgY2FsbGluZyBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYC4gQnV0IGhhbmcgb24sIHRoZSBwYXRjaCBhY3R1YWxseSBjaGFuZ2VkIGBfX2ZvbGlvX3NwbGl0YCwgbm90IHRoZSBmdW5jdGlvbiBJIHdhcyBqdXN0IGZvY3VzaW5nIG9uLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgX19mb2xpb19zcGxpdGAgaXMgYmVpbmcgdXNlZC4gTGV0J3MgdHJhY2UgdGhvc2UgY2FsbHMgYW5kIHNlZSB3aGF0IGltcGFjdCB0aGUgbW9kaWZpY2F0aW9ucyBoYXZlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg3NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTg6MjkuODUzMTY5Njk3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjcwMDA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXFxubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MjUxPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjU1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NjpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI4ND1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg3OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU4OjI5Ljg5NTg3MjUyNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTA3MTk2ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgY2xlYXIgdGhhdCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIGBmb2xpb19zcGxpdGAgYm90aCB1bHRpbWF0ZWx5IGNhbGwgYF9fZm9saW9fc3BsaXRgLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHNwbGl0IGxvZ2ljLiBJIHF1aWNrbHkgY2hlY2tlZCBmb3Igb3RoZXIgY2FsbGVycyBvZiBgX19mb2xpb19zcGxpdGAsIGp1c3QgdG8gbWFrZSBzdXJlIEkgd2Fzbid0IG1pc3NpbmcgYW55IG90aGVyIGludGVyYWN0aW9ucywgYnV0IGl0IGxvb2tzIGxpa2UgdGhvc2UgdHdvLCBhbmQgb25seSB0aG9zZSB0d28sIGFyZSBkaXJlY3RseSBjYWxsaW5nIGl0LiBUaGVyZWZvcmUsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYGZvbGlvX3NwbGl0YCBiZWNvbWUgbXkgcHJpbWFyeSBwb2ludHMgb2YgZm9jdXMsIGluIGNvbmp1bmN0aW9uIHdpdGggYHhhc19zcGxpdF9hbGxvY2AuIE5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGVpciBleHBvcnRzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYW5kIGludGVuZGVkIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUzNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1ODozOS4wMDMwNzEzNDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTEzODE4OTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1ODo0MC45NTQ0NjAxOThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNTY0NzE5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIEZvbGlvIFNwbGl0IEV4cG9ydHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIG91dHB1dCBvZiB0aGUgYGZvbGlvX3NwbGl0YCBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGdlbmVyYXRlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBbbWVudGlvbiBzcGVjaWZpYyBmaWxlIGZvcm1hdHMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHJlbGV2YW50IHRvIHlvdXIgZmllbGRdLiBBcmUgdGhlIGV4cGVjdGVkIGZpbGVzIGJlaW5nIGNyZWF0ZWQ/IEFyZSB0aGV5IHBvcHVsYXRlZCBjb3JyZWN0bHksIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbnM/IEkgbmVlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkgYW5kIGZvcm1hdCBjb25zaXN0ZW5jeS4gQW55IGVycm9ycyBvciBhbm9tYWxpZXMgaGVyZSBjb3VsZCBpbmRpY2F0ZSBkZWVwZXIgaXNzdWVzIGZ1cnRoZXIgZG93biB0aGUgcGlwZWxpbmUsIHNvIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTGV0J3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBleHBvcnRpbmcgYXMgZXhwZWN0ZWQgYmVmb3JlIHdlIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1ODo1MS4wMTA5MzQxNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODE3MjAxOTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTg6NTMuMDkyNjYyMjQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNzM3NTU5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkEgUXVpY2sgSm9sdCBvZiBTdXJwcmlzZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkganVzdCBzYXcgdGhhdCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgZnVuY3Rpb24uIFdhaXQgYSBtaW51dGUuLi4gdGhhdCB0aGluZydzICpleHBvcnRlZCo/IFRoYXQncyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcgYXQgYWxsLiBHaXZlbiB0aGUgbmFtZSwgSSBhc3N1bWVkIGl0IHdhcyBhIGRlZXBseSBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9uLCBzb21ldGhpbmcgbWVhbnQgdG8gYmUgaGlkZGVuIGJlaGluZCBhIGNhcmVmdWxseSBjcmFmdGVkIEFQSS4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBzb21lb25lIHRob3VnaHQgZXhwb3NpbmcgdGhhdCBtYWRlIHNlbnNlLiBXYXMgaXQgZm9yIGEgc3BlY2lmaWMgZGVidWdnaW5nIHNjZW5hcmlvPyBPciBwZXJoYXBzIHRoZXkgZGlkbid0IGZ1bGx5IGdyYXNwIHRoZSBwb3RlbnRpYWwgZm9yIG1pc3VzZSBhbmQgdW5pbnRlbmRlZCBkZXBlbmRlbmNpZXM/IEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBhYm91dCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0cyB2aXNpYmlsaXR5LiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIOKAkyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDY1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTk6MDIuNDY2NDIwMjAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc0MjkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MTg0PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjUwLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1MTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTItXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OTowMi41MDkxNjU2NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM4NzMyMzkxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo4NjYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OToyNi4zODI0MDY4ODFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzAyMTYzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTM5Nz1lbnVtIHNwbGl0X3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAxLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwMjppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDMtXFx0XFx0dW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDk9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDExLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQxMjpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTMtXFx0XFx0dW5zaWduZWQgaW50IG5ld19vcmRlcilcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTQte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQxNTpcXHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNi19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDE3PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTgte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQxOTpcXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MjAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDIyPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MjMte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQyNDpcXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgMCk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTYyOT1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjYzMDpzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02MzEtXFx0XFx0dW5zaWduZWQgaW50IG5ld19vcmRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgwMD1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MDIte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgwMzpcXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTgwNC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQxODQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNTAtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MjUxOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Mi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNjgtICogSXQgaGFzIHRoZSBzYW1lIHByZXJlcXVpc2l0ZXMgYW5kIHJldHVybnMgYXNcXG5tbS9odWdlX21lbW9yeS5jOjQyNjk6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cXG5tbS9odWdlX21lbW9yeS5jLTQyNzAtICpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDMxOD1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDMxOS17XFxubW0vaHVnZV9tZW1vcnkuYzo0MzIwOlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDMyMS19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2MDQ9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NjczLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0Njc0OlxcdFxcdCAqIEZvciBmb2xpb3Mgd2l0aCBwcml2YXRlLCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpXFxubW0vaHVnZV9tZW1vcnkuYy00Njc1LVxcdFxcdCAqIHdpbGwgdHJ5IHRvIGRyb3AgaXQgYmVmb3JlIHNwbGl0IGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBmb2xpb1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OToyNy44NTI2MjgyMjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3NzU2MDg2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBUaGlzIGZ1bmN0aW9uLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGl0J3Mgbm90IGFjdHVhbGx5IGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBpdCAqaXMqIGFuIGVudHJ5IHBvaW50LCBhbGJlaXQgbm9uLXN0YXRpYywgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gU28gaXQncyBjYWxsYWJsZSBmcm9tIHdpdGhpbiB0aGUga2VybmVsLiBJIHdvbmRlciB3aHkgaXQncyBub3QgZXhwb3J0ZWQuIE1heWJlIGl0J3MgaW50ZW5kZWQgYXMgYW4gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHRoZXkganVzdCBkaWRuJ3QgbWFyayBzdGF0aWMgZm9yIHNvbWUgc3BlY2lmaWMgcmVhc29uLi4uIHBlcmhhcHMgaXQncyB1c2VkIGluIGRlYnVnZ2luZyBvciBieSBvdGhlciBpbnRlcm5hbCBtb2R1bGVzLiBPciBtYXliZSBpdCdzIGp1c3QgYSBoaXN0b3JpY2FsIGFydGlmYWN0LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIHNpbmNlIHdlJ3JlIGxvb2tpbmcgYXQgc3BsaXR0aW5nIGh1Z2UgcGFnZXMsIHdoZXJlIGRvZXMgYGZvbGlvX3NwbGl0YCBmYWN0b3IgaW50byB0aGlzPyBUaGF0J3MgdGhlIGNvcmUgaW50ZXJmYWNlLCBpc24ndCBpdD8gSXMgdGhpcyBmdW5jdGlvbiwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBhIGxvd2VyLWxldmVsIGJ1aWxkaW5nIGJsb2NrICpmb3IqIGBmb2xpb19zcGxpdGA/IE9yIGlzIGl0IHVzZWQgaW4gc29tZSBvdGhlciBzcGVjaWZpYyBzcGxpdC1yZWxhdGVkIGNvbnRleHQ/IExldCBtZSBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbmFsaXR5IGNvbm5lY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBBUElzIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OTo0My42MjgyMzk3ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTg0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zNjc3PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzE5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzcyMDpcXHRcXHRmb2xpb19zcGxpdF9tZW1jZ19yZWZzKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3MjEtXFx0XFx0c3BsaXRfcGFnZV9vd25lcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXFxubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MTYyLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE2NC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MTg0OmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4NS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyNTE9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXFxubW0vaHVnZV9tZW1vcnkuYzo0MjU2OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTctXFx0XFx0XFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjYwLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI2MTogKiBmb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg1LVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdlX21lbW9yeS5jLTQyODYte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjA0PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbl9mb2xpb19vZmZzZXQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcXHRcXHRcXHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ2OTgtXFx0XFx0XFx0XFx0c3BsaXQrKztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDcyMT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzcyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NzczOlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc3NC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OTo0My42NzM0MjY4NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg1Njc0OTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgYGZvbGlvX3NwbGl0YCBFeHBvcnQqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIHJlZmVyZW5jaW5nIGBmb2xpb19zcGxpdGAuIEZpcnN0IGluc3RpbmN0PyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSdtIHRoaW5raW5nLCBpcyBpdCBhdmFpbGFibGUgaW4gdGhlIHNjb3BlIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkPyBJcyBpdCBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb24/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIGluIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBkZWZpbml0aW9uIHRvIGNvbmZpcm0gdGhlIGV4cG9ydCBzdGF0dXMuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgaWYgaXQncyBhIHNpbXBsZSBzY29waW5nIGlzc3VlLiBHb3R0YSBjb25maXJtIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBleHRlcm5hbGx5LCB5b3Uga25vdz8gTGV0J3MgY2hlY2sgdGhlIGltcG9ydCBzdHJ1Y3R1cmUgb3IgdGhlIEFQSSBkb2N1bWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU5OjUzLjUzMDE3ODM2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODQzMjQzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZm9saW9fc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OTo1NS40Njg2MTg0NTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyNjY1MTE5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTM1NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDA6MjAuNzM1MTMyNzUyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMyODg0NTYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzcGxpdF9odWdlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMDoyMi42NjgwMjMyMzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUxNDg3NTUzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTM5NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDA6NDcuODE2NzgxNDMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg4ODcyNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2h1Z2VfcGFnZXNfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQ1OTA9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYwMy1cXG5tbS9odWdlX21lbW9yeS5jOjQ2MDQ6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYwNS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHZhZGRyX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc5MT1zdGF0aWMgc3NpemVfdCBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODU3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg1ODpcXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VzX3BpZChwaWQsIHZhZGRyX3N0YXJ0LCB2YWRkcl9lbmQsIG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTQ4NTktXFx0XFx0XFx0aW5fZm9saW9fb2Zmc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDA6NDkuMzA1NjU5MzM2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MjcxODU5MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTE2NzMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAxOjEzLjU3NzUyMjU3NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NTQzNjkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VzX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5MC1cXG5tbS9odWdlX21lbW9yeS5jOjQ3OTE6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG5tbS9odWdlX21lbW9yeS5jLTQ3OTItXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3BzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwbGl0X2h1Z2VfcGFnZXNfZm9wcyA9IHtcXG5tbS9odWdlX21lbW9yeS5jLTQ4NjktXFx0Lm93bmVyXFx0ID0gVEhJU19NT0RVTEUsXFxubW0vaHVnZV9tZW1vcnkuYzo0ODcwOlxcdC53cml0ZVxcdCA9IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUsXFxubW0vaHVnZV9tZW1vcnkuYy00ODcxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAxOjE1LjA1Mjk2NTM1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTU2NDgwNzUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjExOTMzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMTo0MC42MTc3NzUyMTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDAxNjc3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3BsaXRfaHVnZV9wYWdlc19mb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQ3OTE9c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2Ny1cXG5tbS9odWdlX21lbW9yeS5jOjQ4Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2OS1cXHQub3duZXJcXHQgPSBUSElTX01PRFVMRSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDg3Mz1zdGF0aWMgaW50IF9faW5pdCBzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnModm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3NS1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzcGxpdF9odWdlX3BhZ2VzXFxcIiwgMDIwMCwgTlVMTCwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jOjQ4NzY6XFx0XFx0XFx0ICAgIFxcdTAwMjZzcGxpdF9odWdlX3BhZ2VzX2ZvcHMpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3Ny1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDE6NDIuMDU3OTUwMzEzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNzYxNzE2Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTIxOTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAyOjA1LjgxOTY2OTMyOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTIyNzE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ3MjAtXFxubW0vaHVnZV9tZW1vcnkuYzo0NzIxOnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXFxubW0vaHVnZV9tZW1vcnkuYy00NzIyLVxcdFxcdFxcdFxcdHBnb2ZmX3Qgb2ZmX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc5MT1zdGF0aWMgc3NpemVfdCBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODM4LVxcdFxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjQ4Mzk6XFx0XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGZpbGVfcGF0aCwgb2ZmX3N0YXJ0LCBvZmZfZW5kLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg0MC1cXHRcXHRcXHRcXHRuZXdfb3JkZXIsIGluX2ZvbGlvX29mZnNldCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jPTQ2Nj1zdGF0aWMgdm9pZCBzcGxpdF9maWxlX2JhY2tlZF90aHAoaW50IG9yZGVyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYy00NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYzo0ODA6XFx0a3NmdF9wcmludF9tc2coXFxcIlBsZWFzZSBlbmFibGUgcHJfZGVidWcgaW4gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKCkgZm9yIG1vcmUgaW5mby5cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtNDgxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMjowNy4yNzg5MDIwOTRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjU1OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZm9saW9fc3BsaXRgIEZ1bmN0aW9uIENhbGxzKipcblxuQWxyaWdodCwgc28gSSdtIHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBmb2xpb19zcGxpdGAuIFNlZW1zIGxpa2UgaXQncyBwcmltYXJpbHkgdHJpZ2dlcmVkIGJ5IGBzcGxpdF9odWdlX3BhZ2VzX3BpZGAgYW5kIGBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGVgLiBUaG9zZSBhcmUgYm90aCBpbnZva2VkIGZyb20gYHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGVgLCB3aGljaCwgb2YgY291cnNlLCBpcyBhIGRlYnVnZnMgZmlsZS4gVGhhdCdzIHRoZSBleHBlY3RlZCBwYXRoLCBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgaW50ZXJhY3Rpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC5cblxuSG1tLCBidXQgd2FpdCBhIG1pbnV0ZS4gU29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZS4gSXQgZmVlbHMgbGlrZSBgZm9saW9fc3BsaXRgICpjb3VsZCogYmUgY2FsbGVkIGZyb20gc29tZXBsYWNlIGVsc2UsIG91dHNpZGUgb2YgdGhpcyBkaXJlY3QgZGVidWdmcyBzZXF1ZW5jZS4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCdzIGEgcG9zc2liaWxpdHkuIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGZvbGlvX3NwbGl0YCB0byBjb25maXJtLiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSBjYWxsIHN0YWNrIG1vcmUgY2xvc2VseSB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSB1bmV4cGVjdGVkIHBhdGhzLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMjoxMC44NjE0NjM0NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDg4MDQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTM0OD1zdGF0aWMgdm1fZmF1bHRfdCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNTktXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM2MDpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKm9yaWdfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNjEte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBkcm1fcGFnZW1hcF9wYWdlbWFwX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNzQtXFx0Lm1pZ3JhdGVfdG9fcmFtID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM3NTpcXHQuZm9saW9fc3BsaXQgPSBkcm1fcGFnZW1hcF9mb2xpb19zcGxpdCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzc2LX07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjc5LVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjI4MDpzdGF0aWMgdm9pZCBub3V2ZWF1X2RtZW1fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpoZWFkLCBzdHJ1Y3QgZm9saW8gKnRhaWwpXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjgxLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI4OT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBub3V2ZWF1X2RtZW1fcGFnZW1hcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yOTEtXFx0Lm1pZ3JhdGVfdG9fcmFtXFx0XFx0PSBub3V2ZWF1X2RtZW1fbWlncmF0ZV90b19yYW0sXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjkyOlxcdC5mb2xpb19zcGxpdFxcdFxcdD0gbm91dmVhdV9kbWVtX2ZvbGlvX3NwbGl0LFxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI5My19O1xcbi0tXFxuZnMvZXJvZnMvZGF0YS5jPTI1OT12b2lkIGVyb2ZzX29ubGluZWZvbGlvX2luaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy0yNjgtXFxuZnMvZXJvZnMvZGF0YS5jOjI2OTp2b2lkIGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZXJvZnMvZGF0YS5jLTI3MC17XFxuLS1cXG5mcy9lcm9mcy9maWxlaW8uYz04OT1zdGF0aWMgaW50IGVyb2ZzX2ZpbGVpb19zY2FuX2ZvbGlvKHN0cnVjdCBlcm9mc19maWxlaW8gKmlvLFxcbi0tXFxuZnMvZXJvZnMvZmlsZWlvLmMtMTQ3LVxcdFxcdFxcdGlmICghYXR0YWNoZWQrKylcXG5mcy9lcm9mcy9maWxlaW8uYzoxNDg6XFx0XFx0XFx0XFx0ZXJvZnNfb25saW5lZm9saW9fc3BsaXQoZm9saW8pO1xcbmZzL2Vyb2ZzL2ZpbGVpby5jLTE0OS1cXHRcXHRcXHRpby1cXHUwMDNlZGV2Lm1fcGEgKz0gbGVuO1xcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaD00MTU9dm9pZCBlcm9mc19vbmxpbmVmb2xpb19pbml0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDE2OnZvaWQgZXJvZnNfb25saW5lZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuZnMvZXJvZnMvaW50ZXJuYWwuaC00MTctdm9pZCBlcm9mc19vbmxpbmVmb2xpb19lbmQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGVyciwgYm9vbCBkaXJ0eSk7XFxuLS1cXG5mcy9lcm9mcy96ZGF0YS5jPTEwMDU9c3RhdGljIGludCB6X2Vyb2ZzX3NjYW5fZm9saW8oc3RydWN0IHpfZXJvZnNfZnJvbnRlbmQgKmYsXFxuLS1cXG5mcy9lcm9mcy96ZGF0YS5jLTEwNzUtXFxuZnMvZXJvZnMvemRhdGEuYzoxMDc2OlxcdFxcdFxcdGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KGZvbGlvKTtcXG5mcy9lcm9mcy96ZGF0YS5jLTEwNzctXFx0XFx0XFx0aWYgKGYtXFx1MDAzZXBjbC1cXHUwMDNlbGVuZ3RoIFxcdTAwM2Mgb2Zmc2V0ICsgZW5kIC0gbWFwLVxcdTAwM2VtX2xhKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDI9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAzLVxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA1LXVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDA3PWludCBmb2xpb19jaGVja19zcGxpdHRhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA4LVxcdFxcdFxcdCAgIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDk6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsIHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxMC1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY1Mz1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTgtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjU5OnN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjYwLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTAyMD12b2lkIHNwbGl0X3BhZ2VfbWVtY2coc3RydWN0IHBhZ2UgKmZpcnN0LCB1bnNpZ25lZCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAyMTp2b2lkIGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgb2xkX29yZGVyLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjItXFx0XFx0dW5zaWduZWQgbmV3X29yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE0NDU9c3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2VfbWVtY2coc3RydWN0IHBhZ2UgKmZpcnN0LCB1bnNpZ25lZCBvcmRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NDgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTQ0OTpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc3BsaXRfbWVtY2dfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NTAtXFx0XFx0dW5zaWduZWQgb2xkX29yZGVyLCB1bnNpZ25lZCBuZXdfb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Nzc9c3RydWN0IGRldl9wYWdlbWFwX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTA3LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxMDg6XFx0dm9pZCAoKmZvbGlvX3NwbGl0KShzdHJ1Y3QgZm9saW8gKmhlYWQsIHN0cnVjdCBmb2xpbyAqdGFpbCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTEwOS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI1MC1cXHRpZiAoZm9saW9faXNfZGV2aWNlX3ByaXZhdGUob3JpZ2luYWxfZm9saW8pKSB7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI1MTpcXHRcXHRpZiAoIW9yaWdpbmFsX2ZvbGlvLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3BzLVxcdTAwM2Vmb2xpb19zcGxpdCkge1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTItXFx0XFx0XFx0aWYgKG5ld19mb2xpbykge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI1Ny1cXHRcXHR9IGVsc2Uge1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNTg6XFx0XFx0XFx0b3JpZ2luYWxfZm9saW8tXFx1MDAzZXBnbWFwLVxcdTAwM2VvcHMtXFx1MDAzZWZvbGlvX3NwbGl0KG9yaWdpbmFsX2ZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTktXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19mb2xpbyk7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmg9NDk9VFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC01Mi1cXHRcXHQgdW5zaWduZWQgbG9uZyB0aHBfc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIHRocF9mYWlsZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjUzOlxcdFxcdCB1bnNpZ25lZCBsb25nIHRocF9zcGxpdCwgdW5zaWduZWQgbG9uZyBsYXJnZV9mb2xpb19zcGxpdCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtNTQtXFx0XFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTU2LVxcdFRQX0FSR1Moc3VjY2VlZGVkLCBmYWlsZWQsIHRocF9zdWNjZWVkZWQsIHRocF9mYWlsZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjU3OlxcdFxcdHRocF9zcGxpdCwgbGFyZ2VfZm9saW9fc3BsaXQsIG1vZGUsIHJlYXNvbiksXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTU4LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTY0LVxcdFxcdF9fZmllbGQoXFx0dW5zaWduZWQgbG9uZyxcXHRcXHR0aHBfc3BsaXQpXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjY1OlxcdFxcdF9fZmllbGQoXFx0dW5zaWduZWQgbG9uZyxcXHRcXHRsYXJnZV9mb2xpb19zcGxpdClcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtNjYtXFx0XFx0X19maWVsZChcXHRlbnVtIG1pZ3JhdGVfbW9kZSxcXHRtb2RlKVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTc1LVxcdFxcdF9fZW50cnktXFx1MDAzZXRocF9zcGxpdFxcdFxcdFxcdD0gdGhwX3NwbGl0O1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo3NjpcXHRcXHRfX2VudHJ5LVxcdTAwM2VsYXJnZV9mb2xpb19zcGxpdFxcdD0gbGFyZ2VfZm9saW9fc3BsaXQ7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTc3LVxcdFxcdF9fZW50cnktXFx1MDAzZW1vZGVcXHRcXHRcXHRcXHQ9IG1vZGU7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtODYtXFx0XFx0X19lbnRyeS1cXHUwMDNldGhwX3NwbGl0LFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo4NzpcXHRcXHRfX2VudHJ5LVxcdTAwM2VsYXJnZV9mb2xpb19zcGxpdCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtODgtXFx0XFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVxcdTAwM2Vtb2RlLCBNSUdSQVRFX01PREUpLFxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3MzEtXFxubGliL3Rlc3RfaG1tLmM6MTczMjpzdGF0aWMgdm9pZCBkbWlycm9yX2Rldm1lbV9mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmhlYWQsIHN0cnVjdCBmb2xpbyAqdGFpbClcXG5saWIvdGVzdF9obW0uYy0xNzMzLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE3NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzID0ge1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTc2OC1cXHQubWlncmF0ZV90b19yYW1cXHQ9IGRtaXJyb3JfZGV2bWVtX2ZhdWx0LFxcbmxpYi90ZXN0X2htbS5jOjE3Njk6XFx0LmZvbGlvX3NwbGl0XFx0PSBkbWlycm9yX2Rldm1lbV9mb2xpb19zcGxpdCxcXG5saWIvdGVzdF9obW0uYy0xNzcwLX07XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2Nzc9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXFxubW0vaHVnZV9tZW1vcnkuYzozNzIwOlxcdFxcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzcyMS1cXHRcXHRzcGxpdF9wYWdlX293bmVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM4MDQ9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcXG5tbS9odWdlX21lbW9yeS5jOjM5NjA6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy0zOTYxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3OS0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjM5ODA6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxNjItLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MTYzOiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxubW0vaHVnZV9tZW1vcnkuYy00MTg1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Ny1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MjYxOiAqIGZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTQyNjItICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjgzLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NDppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg3OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2MDQ9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0Njk3OlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NzIxPXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcXG5tbS9odWdlX21lbW9yeS5jOjQ3NzM6XFx0XFx0XFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXFxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzY2Mj12b2lkIHNwbGl0X3BhZ2VfbWVtY2coc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2NzUtXFxubW0vbWVtY29udHJvbC5jOjM2NzY6dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcXG5tbS9tZW1jb250cm9sLmMtMzY3Ny1cXHRcXHR1bnNpZ25lZCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTkwMj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTE2LVxcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cXHUwMDNldm1hLCBhZGRyLCB0cnVlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjkxNzpcXHRyZXQgPSBmb2xpb19zcGxpdF91bm1hcHBlZChmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy05MTgtXFx0aWYgKHJldClcXG4tLVxcbm1tL3RydW5jYXRlLmM9MTcwPWludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3RydW5jYXRlLmMtMTc5LVxcbm1tL3RydW5jYXRlLmM6MTgwOnN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxcbm1tL3RydW5jYXRlLmMtMTgxLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG1pbl9vcmRlcilcXG4tLVxcbm1tL3RydW5jYXRlLmMtMTg4LVxcbm1tL3RydW5jYXRlLmM6MTg5OlxcdHJldCA9IGZvbGlvX3NwbGl0KGZvbGlvLCBtaW5fb3JkZXIsIHNwbGl0X2F0LCBOVUxMKTtcXG5tbS90cnVuY2F0ZS5jLTE5MC1cXG4tLVxcbm1tL3RydW5jYXRlLmM9MjE3PWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTI1NC1cXHRzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTtcXG5tbS90cnVuY2F0ZS5jOjI1NTpcXHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xcbm1tL3RydW5jYXRlLmMtMjU2LVxcdFxcdC8qXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTI4MS1cXHRcXHQgICAgZm9saW8yLVxcdTAwM2VtYXBwaW5nID09IGZvbGlvLVxcdTAwM2VtYXBwaW5nKVxcbm1tL3RydW5jYXRlLmM6MjgyOlxcdFxcdFxcdGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpO1xcbm1tL3RydW5jYXRlLmMtMjgzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZT02Nz1ybWFwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZTo2ODpmb2xpb19zcGxpdF9yYWNlX3Rlc3RcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlPTEwNj1URVNUX0dFTl9GSUxFUyArPSBybWFwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU6MTA3OlRFU1RfR0VOX0ZJTEVTICs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTEwOC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jLTYtICpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYzo3OiAqIEl0IHRlc3RzIHRoZSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGZvbGlvX3NwbGl0KCkgYW5kIGZpbGVtYXBfZ2V0X2VudHJ5KCksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmM6ODogKiB3aGVyZSB0aGUgaG9sZSBwdW5jaGVzIG9uIHNobWVtIGxlYWQgdG8gZm9saW9fc3BsaXQoKSBhbmQgcmVhZGluZyB0aGUgc2htZW1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYy05LSAqIGxlYWQgdG8gZmlsZW1hcF9nZXRfZW50cnkoKS5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoPTQ0ND1DQVRFR09SWT1cXFwidGhwXFxcIiBydW5fdGVzdCAuL3RyYW5zaHVnZS1zdHJlc3MgLWQgMjBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC00NDUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6NDQ2OkNBVEVHT1JZPVxcXCJ0aHBcXFwiIHJ1bl90ZXN0IC4vZm9saW9fc3BsaXRfcmFjZV90ZXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtNDQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMjoxMi4zNTIzNDk4NjRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5MzAyOTMxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxNzMzMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDI6MzguMjgyNjQ1OTU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0MTIzMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTU5LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTM5NjEtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk4MDpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM5ODEtXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Ny1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyODQ9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODYte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMjozOS43MDY3NzM0NzNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY2ODE1ODE3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxNzc5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6MDYuMzg4MzU3NThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODUyNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zNjc3PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzE5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzcyMDpcXHRcXHRmb2xpb19zcGxpdF9tZW1jZ19yZWZzKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3MjEtXFx0XFx0c3BsaXRfcGFnZV9vd25lcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXFxubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MTYyLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE2NC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MTg0OmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4NS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyNTE9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXFxubW0vaHVnZV9tZW1vcnkuYzo0MjU2OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTctXFx0XFx0XFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjYwLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI2MTogKiBmb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg1LVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdlX21lbW9yeS5jLTQyODYte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjA0PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbl9mb2xpb19vZmZzZXQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcXHRcXHRcXHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ2OTgtXFx0XFx0XFx0XFx0c3BsaXQrKztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDcyMT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzcyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NzczOlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc3NC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMzowNi40MzAyMTMzMzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMTQxOTA2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSHVnZSBQYWdlIFNwbGl0dGluZyBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgcmVhY2hhYmlsaXR5IGFuZCByZWxldmFudCBzeW1ib2xzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIHNwbGl0dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gRmlyc3QsIEkgc2VlIHRoYXQgYGZvbGlvX3NwbGl0YCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIGFzIGFuIGV4dGVybmFsIGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIHRyYWNlIGl0cyB1c2FnZS4gQWgsIHJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIGBtbS90cnVuY2F0ZS5jYC4gU3BlY2lmaWNhbGx5LCBgdHJ1bmNhdGVfaW5vZGVfZm9saW9gIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYm90aCBjYWxsIGBmb2xpb19zcGxpdF9vcl91bm1hcGAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgZm9saW9fc3BsaXRgLiBTbywgbm8gZG91YnQgdGhhdCBgZm9saW9fc3BsaXRgICppcyogcmVhY2hhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhc2NhZGUgY2FsbHMgdGhhdCBjYW4gdXNlIGBmb2xpb19zcGxpdGAuIExldCBtZSBkZWx2ZSBpbnRvIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gQWgsIHRoYXQgb25lIGlzIGNhbGxlZCBmcm9tIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgKHdoaWNoIGlzIGlubGluZSkuIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgdGhlbiBjYWxsZWQgZnJvbSBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYCAoYWxzbyBpbmxpbmUpLiBUaGlzLCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgc3BsaXRfaHVnZV9wYWdlYCAoaW5saW5lIGFnYWluKS4gQW5kIGBzcGxpdF9odWdlX3BhZ2VgIGlzIGNhbGxlZCBmcm9tICptYW55KiBwbGFjZXMsIGxpa2UgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgYW5kIGtodWdlcGFnZWQsIGFuZCBwcm9iYWJseSBvdGhlciBwbGFjZXMsIHRvby4gVGhpcyByZWluZm9yY2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgYGZvbGlvX3NwbGl0YCBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgeGFzX3NwbGl0X2FsbG9jYCwgYGZvbGlvX3NwbGl0YCwgYW5kIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gQW5kLCBzaW5jZSBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIGBmb2xpb19zcGxpdGAgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGV5IGhhdmUgZGlzdGluY3QsIGV4cG9ydGFibGUgc3ltYm9scy4gYHhhc19zcGxpdF9hbGxvY2AgaXMgYWxzbyBleHBsaWNpdGx5IGV4cG9ydGVkLlxuXG5GaW5hbGx5LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBtb2R1bGVzIGFyZSBidWlsdC4gQW5kIHllcywgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gR29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6MTYuNzQ0NDA2MzM2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIyODE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAzOjE2Ljc4NjYzODM5M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg5NjYyNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9uczpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZS4gSXQncyBjbGVhciB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gV2UgY2FuJ3QgcHJvY2VlZCB3aXRob3V0IGl0LlxuXG5Ob3csIHJlZ2FyZGluZyBgQ09ORklHX01FTUNHYCwgSSBzdXNwZWN0IGl0J3MgYWxzbyBnb2luZyB0byBiZSBlc3NlbnRpYWwsIGFsdGhvdWdoIGl0J3MgYSBsaXR0bGUgbGVzcyBvYnZpb3VzIG9uIHRoZSBzdXJmYWNlLiBNeSBpbnR1aXRpb24gaXMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpb2AgYW5kIGBzZXRfYWN0aXZlX21lbWNnYCBwcm9iYWJseSBoYXZlIGR1bW15IGltcGxlbWVudGF0aW9ucyBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZC4gVGhhdCdzIGEgY29tbW9uIHN0cmF0ZWd5IHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmVzLiBCdXQsIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWN0dWFsbHkgZG8gc29tZXRoaW5nIG1lYW5pbmdmdWwuXG5cbkkgdGhpbmsgaXQncyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBhc3N1bXB0aW9uIGFib3V0IGBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvYCwgc3BlY2lmaWNhbGx5LiBMZXQncyBzZWUgaG93IHRoYXQgb25lIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzUyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6MjAuOTc2MzA0MDk2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1MTEzNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTc1OT1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2FsbG9jX2J1ZmZlcnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuZnMvYnVmZmVyLmMtNzY1LVxcbmZzL2J1ZmZlci5jOjc2NjpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbmZzL2J1ZmZlci5jLTc2Ny1cXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTc1Mz1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo3NTU6c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzU2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTIxMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTIxNC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM5ODA9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwMTktXFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MDIwOlxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy00MDIxLVxcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xcbi0tXFxubW0vbGlzdF9scnUuYz02MzE9aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbGlzdF9scnUuYy02NDgtXFx0LyogQWxsb2NhdGlvbiBtYXkgYmxvY2ssIHBpbiB0aGUgbWVtY2cgKi9cXG5tbS9saXN0X2xydS5jOjY0OTpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbm1tL2xpc3RfbHJ1LmMtNjUwLVxcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMjg9c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzM0LVxcbm1tL21lbWNvbnRyb2wuYzozMzU6XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1jb250cm9sLmMtMzM2LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTExNTQ9c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExNzItLyoqXFxubW0vbWVtY29udHJvbC5jOjExNzM6ICogZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyAtIE9idGFpbiBhIHJlZmVyZW5jZSBvbiBhIGdpdmVuIGZvbGlvJ3MgbWVtY2cuXFxubW0vbWVtY29udHJvbC5jLTExNzQtICogQGZvbGlvOiBmb2xpbyBmcm9tIHdoaWNoIG1lbWNnIHNob3VsZCBiZSBleHRyYWN0ZWQuXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE3Ny0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTE3ODpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy0xMTc5LXtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNzQ0PWludCBtaWdyYXRlX21pc3BsYWNlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbm9kZSlcXG4tLVxcbm1tL21pZ3JhdGUuYy0yNzQ5LVxcdExJU1RfSEVBRChtaWdyYXRlcGFnZXMpO1xcbm1tL21pZ3JhdGUuYzoyNzUwOlxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbm1tL21pZ3JhdGUuYy0yNzUxLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuLS1cXG5tbS92bXNjYW4uYz00MTgwPWJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMzItXFxubW0vdm1zY2FuLmM6NDIzMzpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTQyMzQtXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01NDg9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU3Mi1cXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG5tbS93b3JraW5nc2V0LmM6NTczOlxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxubW0vd29ya2luZ3NldC5jLTU3NC1cXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgZm9saW9fcGdkYXQoZm9saW8pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6MjIuNDUxNDIxOTgxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNDg5MTAyODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MjA5MTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAzOjQ1Ljk0MDUyNjkyNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTM1NDc3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfYWN0aXZlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM9MTA2Mz1pbnQgc2d4X2VuY2xfYWxsb2NfYmFja2luZyhzdHJ1Y3Qgc2d4X2VuY2wgKmVuY2wsIHVuc2lnbmVkIGxvbmcgcGFnZV9pbmRleCxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDY2LVxcdHN0cnVjdCBtZW1fY2dyb3VwICplbmNsX21lbWNnID0gc2d4X2VuY2xfZ2V0X21lbV9jZ3JvdXAoZW5jbCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jOjEwNjc6XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhlbmNsX21lbWNnKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA2OC1cXHRpbnQgcmV0O1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNzEtXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jOjEwNzI6XFx0c2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNzMtXFx0bWVtX2Nncm91cF9wdXQoZW5jbF9tZW1jZyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODg2PXN0YXRpYyB2b2lkIGxvb3BfaGFuZGxlX2NtZChzdHJ1Y3QgbG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MDctXFx0aWYgKGNtZF9tZW1jZ19jc3MpXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTkwODpcXHRcXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MDktXFx0XFx0XFx0bWVtX2Nncm91cF9mcm9tX2NzcyhjbWRfbWVtY2dfY3NzKSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTIyLVxcdGlmIChjbWRfbWVtY2dfY3NzKSB7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTkyMzpcXHRcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTkyNC1cXHRcXHRjc3NfcHV0KGNtZF9tZW1jZ19jc3MpO1xcbi0tXFxuZnMvYnVmZmVyLmM9NzU5PXN0cnVjdCBidWZmZXJfaGVhZCAqZm9saW9fYWxsb2NfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5mcy9idWZmZXIuYy03NjYtXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG5mcy9idWZmZXIuYzo3Njc6XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxuZnMvYnVmZmVyLmMtNzY4LVxcbi0tXFxuZnMvYnVmZmVyLmMtNzg1LW91dDpcXG5mcy9idWZmZXIuYzo3ODY6XFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcbmZzL2J1ZmZlci5jLTc4Ny1cXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYz03NDQ9c3RhdGljIHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZmFub3RpZnlfYWxsb2NfZXZlbnQoXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NDAtXFx0LyogV2hvZXZlciBpcyBpbnRlcmVzdGVkIGluIHRoZSBldmVudCwgcGF5cyBmb3IgdGhlIGFsbG9jYXRpb24uICovXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6ODQxOlxcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZ3JvdXAtXFx1MDAzZW1lbWNnKTtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NDItXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04Nzgtb3V0OlxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjg3OTpcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtODgwLVxcdHJldHVybiBldmVudDtcXG4tLVxcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYz01OT1pbnQgaW5vdGlmeV9oYW5kbGVfaW5vZGVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X21hcmsgKmlub2RlX21hcmssIHUzMiBtYXNrLFxcbi0tXFxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jLTk0LVxcdCAqL1xcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYzo5NTpcXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKGdyb3VwLVxcdTAwM2VtZW1jZyk7XFxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jLTk2LVxcdGV2ZW50ID0ga21hbGxvYyhhbGxvY19sZW4sIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYzo5NzpcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jLTk4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyOD12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTczMy0gKiB0aGUgY3VycmVudCB0YXNrIChzaW1pbGFyIHRvIHRoZSBcXFwiY3VycmVudFxcXCIgZ2xvYmFsIHZhcmlhYmxlKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MzQ6ICogb3IgYnkgc2V0X2FjdGl2ZV9tZW1jZygpIHBhaXIuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTczNS0gKiBQbGVhc2UsIHVzZSBvYmpfY2dyb3VwX2dldCgpIHRvIGdldCBhIHJlZmVyZW5jZSBpZiB0aGUgcG9pbnRlclxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ3NT1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1lbV9jZ3JvdXAgKiwgaW50X2FjdGl2ZV9tZW1jZyk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ3Ni0vKipcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDc3OiAqIHNldF9hY3RpdmVfbWVtY2cgLSBTdGFydHMgdGhlIHJlbW90ZSBtZW1jZyBjaGFyZ2luZyBzY29wZS5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDc4LSAqIEBtZW1jZzogbWVtY2cgdG8gY2hhcmdlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ4NS0gKiBzbyBpdHMgbGlmZXRpbWUgaXMgZ3VhcmFudGVlZCB0byBleGNlZWQgdGhlIHNjb3BlIGJldHdlZW4gdHdvXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ4NjogKiBzZXRfYWN0aXZlX21lbWNnKCkgY2FsbHMuXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ4Ny0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ5MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDkyOnNldF9hY3RpdmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00OTMte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTUwNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NTA4OnNldF9hY3RpdmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC01MDkte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTIwNz1zdGF0aWMgdm9pZCBhbGxvY19idWxrKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY250LCBpbnQgbm9kZSwgYm9vbCBhdG9taWMpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjQwLVxcdG1lbWNnID0gZ2V0X21lbWNnKGMpO1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoyNDE6XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTI0Mi1cXHRmb3IgKDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjUyLVxcdH1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MjUzOlxcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjU0LVxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYz05Nzk9dm9pZCBub3RyYWNlICpicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTkwLVxcdFxcdG1lbWNnID0gZ2V0X21lbWNnKGMpO1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5OTE6XFx0XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk5Mi1cXHRcXHRyZXQgPSBfX2FsbG9jKGMsIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX0FDQ09VTlQpO1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk5NC1cXHRcXHRcXHQqKHN0cnVjdCBicGZfbWVtX2NhY2hlICoqKXJldCA9IGM7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk5NTpcXHRcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk5Ni1cXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01MTI9dm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTE1LVxcdCpuZXdfbWVtY2cgPSBicGZfbWFwX2dldF9tZW1jZyhtYXApO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUxNjpcXHQqb2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZygqbmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTctfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTE5PXZvaWQgYnBmX21hcF9tZW1jZ19leGl0KHN0cnVjdCBtZW1fY2dyb3VwICpvbGRfbWVtY2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MjEte1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUyMjpcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTIzLVxcdG1lbV9jZ3JvdXBfcHV0KG5ld19tZW1jZyk7XFxuLS1cXG5tbS9maWxlbWFwLmM9OTQ5PWludCBmaWxlbWFwX2FkZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy05NTctXFx0aWYgKGtlcm5lbF9maWxlKVxcbm1tL2ZpbGVtYXAuYzo5NTg6XFx0XFx0dG1wID0gc2V0X2FjdGl2ZV9tZW1jZyhyb290X21lbV9jZ3JvdXApO1xcbm1tL2ZpbGVtYXAuYy05NTktXFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIE5VTEwsIGdmcCk7XFxubW0vZmlsZW1hcC5jLTk2MC1cXHRpZiAoa2VybmVsX2ZpbGUpXFxubW0vZmlsZW1hcC5jOjk2MTpcXHRcXHRzZXRfYWN0aXZlX21lbWNnKHRtcCk7XFxubW0vZmlsZW1hcC5jLTk2Mi1cXHRpZiAocmV0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTgwPXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDIwLVxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzo0MDIxOlxcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDAyMi1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE1MS1cXHQvKiByZXN0b3JlIHRvIGNhbGxlcidzIG9sZF9tZW1jZyAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDE1MjpcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxubW0vaHVnZV9tZW1vcnkuYy00MTUzLVxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yOTg2PV9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqY3VycmVudF9vYmpfY2dyb3VwKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzAxOC1cXHRcXHQvKlxcbm1tL21lbWNvbnRyb2wuYzozMDE5OlxcdFxcdCAqIE1lbWNnIHBvaW50ZXIgaXMgcHJvdGVjdGVkIGJ5IHNjb3BlIChzZWUgc2V0X2FjdGl2ZV9tZW1jZygpKVxcbm1tL21lbWNvbnRyb2wuYy0zMDIwLVxcdFxcdCAqIGFuZCBpcyBwaW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIG9iamNnLCBzbyBvYmpjZyBjYW4ndCBnb1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM1Mzc9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTQ4LVxcdCAqIFRoZSBvYnRhaW5lZCBvYmpjZyBwb2ludGVyIGlzIHNhZmUgdG8gdXNlIHdpdGhpbiB0aGUgY3VycmVudCBzY29wZSxcXG5tbS9tZW1jb250cm9sLmM6MzU0OTpcXHQgKiBkZWZpbmVkIGJ5IGN1cnJlbnQgdGFzayBvciBzZXRfYWN0aXZlX21lbWNnKCkgcGFpci5cXG5tbS9tZW1jb250cm9sLmMtMzU1MC1cXHQgKiBvYmpfY2dyb3VwX2dldCgpIGlzIHVzZWQgdG8gZ2V0IGEgcGVybWFuZW50IHJlZmVyZW5jZS5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MTU3PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQxNjItXFxubW0vbWVtY29udHJvbC5jOjQxNjM6XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy00MTY0LVxcdG1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYzo0MTY1OlxcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG5tbS9tZW1jb250cm9sLmMtNDE2Ni1cXHRpZiAoSVNfRVJSKG1lbWNnKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6NDcuMzk1ODg2MzcxWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzOTE4NDcxNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MjM4ODQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjA0OjExLjMxNDM2MDQxNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjE0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM2Nzc9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXFxubW0vaHVnZV9tZW1vcnkuYzozNzIwOlxcdFxcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzcyMS1cXHRcXHRzcGxpdF9wYWdlX293bmVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM4MDQ9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcXG5tbS9odWdlX21lbW9yeS5jOjM5NjA6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy0zOTYxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3OS0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjM5ODA6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxNjItLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MTYzOiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxubW0vaHVnZV9tZW1vcnkuYy00MTg1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Ny1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MjYxOiAqIGZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTQyNjItICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjgzLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NDppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg3OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2MDQ9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0Njk3OlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NzIxPXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcXG5tbS9odWdlX21lbW9yeS5jOjQ3NzM6XFx0XFx0XFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXFxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjA0OjExLjM1OTgzNzQ4MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjMxNzEzNzA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjI0OTQ4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowNDozNy42NzY5NzY3MDRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzA3NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3RydW5jYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdHJ1bmNhdGUuYz0xNzA9aW50IHRydW5jYXRlX2lub2RlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy0xNzktXFxubW0vdHJ1bmNhdGUuYzoxODA6c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXFxubW0vdHJ1bmNhdGUuYy0xODEtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbWluX29yZGVyKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy0xODgtXFxubW0vdHJ1bmNhdGUuYzoxODk6XFx0cmV0ID0gZm9saW9fc3BsaXQoZm9saW8sIG1pbl9vcmRlciwgc3BsaXRfYXQsIE5VTEwpO1xcbm1tL3RydW5jYXRlLmMtMTkwLVxcbi0tXFxubW0vdHJ1bmNhdGUuYz0yMTc9Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4tLVxcbm1tL3RydW5jYXRlLmMtMjU0LVxcdHNwbGl0X2F0ID0gZm9saW9fcGFnZShmb2xpbywgUEFHRV9BTElHTl9ET1dOKG9mZnNldCkgLyBQQUdFX1NJWkUpO1xcbm1tL3RydW5jYXRlLmM6MjU1OlxcdGlmICghZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8sIHNwbGl0X2F0LCBtaW5fb3JkZXIpKSB7XFxubW0vdHJ1bmNhdGUuYy0yNTYtXFx0XFx0LypcXG4tLVxcbm1tL3RydW5jYXRlLmMtMjgxLVxcdFxcdCAgICBmb2xpbzItXFx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXFx1MDAzZW1hcHBpbmcpXFxubW0vdHJ1bmNhdGUuYzoyODI6XFx0XFx0XFx0Zm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7XFxubW0vdHJ1bmNhdGUuYy0yODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjA0OjM3LjcyMDI4NjczMVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI1NjIyOTUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSHVnZSBQYWdlIFNwbGl0dGluZyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLCBpdCdzIGNsZWFyIHRoYXQgYGZvbGlvX3NwbGl0YCBpcyBpbmRlZWQgYSBrZXkgZnVuY3Rpb24gaW4gYG1tL3RydW5jYXRlLmNgLCBhIGNyaXRpY2FsIGFyZWEgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIFRvIHByb3Blcmx5IGFuYWx5emUgdGhpcywgSSBuZWVkZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOyBJIGNvbmZpcm1lZCB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AgKG9yIHJhdGhlciBgQ09ORklHX01FTUNHYCwgdG8gYmUgcHJlY2lzZSkgYXJlIHRoZSBuZWNlc3NhcnkgdG9nZ2xlcy5cblxuSSB0aGVuIGRpZCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBmdW5jdGlvbiBuYW1lcywgbWFraW5nIHN1cmUgdG8gZmlsdGVyIHN0YXRpYyBmdW5jdGlvbnMgYW5kIHRob3NlIHRoYXQgYXJlbid0IGV4cG9ydGVkLiBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgaW50ZXJuYWwsIHNvIGl0J3Mgbm90IGV4cG9ydGVkLCBhbmQgdGhlIHNhbWUgZ29lcyBmb3IgYGZvbGlvX3NwbGl0YC4gQm90aCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIGZvdW5kIGluIGBtbS9odWdlX21lbW9yeS5jYC4gQnV0IEkgY29uZmlybWVkIHRoYXQgYHhhc19zcGxpdF9hbGxvY2AgKmlzKiBleHBvcnRlZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLlxuXG5UaGlzIGhhcyBuYXJyb3dlZCBkb3duIHRoZSBlc3NlbnRpYWwgc3ltYm9scy4gU28gdGhlIGtleSBmb2N1cyBvZiB0aGlzIHBhdGNoIGFyZTpcbi0gICBgeGFzX3NwbGl0X2FsbG9jYFxuLSAgIGBmb2xpb19zcGxpdGBcbi0gICBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmBcblxuSSBkaWQgYSBmaW5hbCBjaGVjayB0byBjb25maXJtIHRoYXQgbm8gb3RoZXIgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQgb3V0c2lkZSBvZiBgeGFzX3NwbGl0X2FsbG9jYCBhbmQgYF9fZm9saW9fc3BsaXRgLCBzbyBJJ2xsIGJlIHVzaW5nIGBmb2xpb19zcGxpdGAgYW5kIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhcyB3ZWxsIHRvIGNvdmVyIGFsbCB0aGUgY2FsbCBwYXRocywgc2luY2UgYF9fZm9saW9fc3BsaXRgIGlzIHN0YXRpYy5cblxuUmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucywgSSBjYW4gY29uZmlybSB0aGF0IHRoZSBrZXkgb3B0aW9ucyBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1FTUNHYC5cblxuTm93LCBmb3IgdGhlIGNvcmUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBlbmFibGVkLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2ZvbGlvX3NwbGl0YCAoYW5kIGJ5IGV4dGVuc2lvbiwgaXRzIGNhbGxlciwgYGZvbGlvX3NwbGl0YCkgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGlzIG1vZGlmaWNhdGlvbiBpcyB2aXRhbDogaXQgc3dpdGNoZXMgdG8gdGhlIGZvbGlvJ3MgbWVtY2cgKmJlZm9yZSogY2Fycnlpbmcgb3V0IG9wZXJhdGlvbnMgdGhhdCBtaWdodCByZXF1aXJlIHRoZSBhbGxvY2F0aW9uIG9mIHhhcnJheSBub2Rlcy4gVGhpcyBlbnN1cmVzIHRoYXQgbWVtb3J5IGFsbG9jYXRpb24gaXMgY29ycmVjdGx5IGNoYXJnZWQgdG8gdGhlIGFwcHJvcHJpYXRlIG1lbWNnLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgYWNjdXJhdGUgcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBpcyByZWFjaGVkIHRocm91Z2ggaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy5cblxuR2l2ZW4gdGhpcywgdGhlIHBhdGNoIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIGhhdmUgYmVlbiBpZGVudGlmaWVkLCBhbmQgSSdsbCBub3cgbWFyayB0aGUgd29yayBhcyBkb25lIGJ5IGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MDUsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjA0OjQ3Ljk3NjUxOTQ3M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjM1Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4YXNfc3BsaXRfYWxsb2NcIixcbiAgICBcImZvbGlvX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJ3MgbWVtY2cgYmVmb3JlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFsbG9jYXRlIHhhcnJheSBub2RlcywgZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB4YXJyYXkgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4YXNfc3BsaXRfYWxsb2NcIixcbiAgICBcImZvbGlvX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJ3MgbWVtY2cgYmVmb3JlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFsbG9jYXRlIHhhcnJheSBub2RlcywgZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB4YXJyYXkgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowg7762[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 21:07:34 +0000 UTC FinishedAt: 2026-08-04 22:04:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG" ], "series_id": "00c20264-1aea-4c75-9f9f-4d909dcdd4a3" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xas_split_alloc", "folio_split", "__split_huge_page_to_list_to_order" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGFzX3NwbGl0X2FsbG9jJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBhbGxvY2F0ZSB4YXJyYXkgbm9kZXMsIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgeGFycmF5IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ODY5NTcwZDZmMWI1YjI3NzAxNmI3NzY5NTczZDc2YzcxMTg5ZjI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMTo1NzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLmJmZTdiZWY4MGYzNGUgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuY1xuQEAgLTEwNTMsNiAmIzQzOzEwNTMsOSBAQCB2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdGlmICh4YXMtXHUwMDNleGFfc2hpZnQgJiM0MzsgWEFfQ0hVTktfU0hJRlQgXHUwMDNlIG9yZGVyKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aWYgKHhhcy1cdTAwM2V4YS1cdTAwM2V4YV9mbGFncyBcdTAwMjYgWEFfRkxBR1NfQUNDT1VOVClcbiYjNDM7XHRcdGdmcCB8PSBfX0dGUF9BQ0NPVU5UO1xuJiM0MztcbiBcdGRvIHtcbiBcdFx0c3RydWN0IHhhX25vZGUgKm5vZGU7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDAzMjcwMmE0NjM3YmEuLmU5MDM0NmZkZTU1MWEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzk4NCwzNCAmIzQzOzM5ODQsNDIgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRYQV9TVEFURSh4YXMsIFx1MDAyNmZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaV9wYWdlcywgZm9saW8tXHUwMDNlaW5kZXgpO1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdGJvb2wgaXNfYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBOVUxMO1xuIFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IE5VTEw7XG4gXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xuIFx0aW50IG5yX3NobWVtX2Ryb3BwZWQgPSAwO1xuIFx0ZW51bSB0dHVfZmxhZ3MgdHR1X2ZsYWdzID0gMDtcbi1cdGludCByZXQ7XG4gXHRwZ29mZl90IGVuZCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pLCBmb2xpbyk7XG4gXG4gXHRpZiAoZm9saW8gIT0gcGFnZV9mb2xpbyhzcGxpdF9hdCkgfHwgZm9saW8gIT0gcGFnZV9mb2xpbyhsb2NrX2F0KSkge1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGdvdG8gb3V0X25vX21lbWNnO1xuIFx0fVxuIFxuIFx0aWYgKG5ld19vcmRlciBcdTAwM2U9IG9sZF9vcmRlcikge1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGdvdG8gb3V0X25vX21lbWNnO1xuIFx0fVxuIFxuIFx0cmV0ID0gZm9saW9fY2hlY2tfc3BsaXR0YWJsZShmb2xpbywgbmV3X29yZGVyLCBzcGxpdF90eXBlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0Vk1fV0FSTl9PTkNFKHJldCA9PSAtRUlOVkFMLCBcJiMzNDtUcmllZCB0byBzcGxpdCBhbiB1bnNwbGl0dGFibGUgZm9saW9cJiMzNDspO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGdvdG8gb3V0X25vX21lbWNnO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogc3dpdGNoIHRvIGZvbGlvJiMzOTtzIG1lbWNnIGFzIHhhcnJheSBub2RlIGFsbG9jYXRpb24gY2FuIGhhcHBlbiBhbmRcbiYjNDM7XHQgKiBuZWVkcyB0byBjaGFyZ2UgdG8gaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcbiYjNDM7XG4gXHRpZiAoaXNfYW5vbikge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgY2FsbGVyIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhvbGQgYW4gbW1hcF9sb2NrIHRoYXQgd291bGRcbkBAIC00MTQwLDYgJiM0Mzs0MTQ4LDEwIEBAIHN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuIFx0aWYgKG1hcHBpbmcpXG4gXHRcdGlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTtcbiBvdXQ6XG4mIzQzO1x0LyogcmVzdG9yZSB0byBjYWxsZXImIzM5O3Mgb2xkX21lbWNnICovXG4mIzQzO1x0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7b3V0X25vX21lbWNnOlxuIFx0eGFzX2Rlc3Ryb3koXHUwMDI2eGFzKTtcbiBcdGlmIChpc19wbWRfb3JkZXIob2xkX29yZGVyKSlcbiBcdFx0Y291bnRfdm1fZXZlbnQoIXJldCA/IFRIUF9TUExJVF9QQUdFIDogVEhQX1NQTElUX1BBR0VfRkFJTEVEKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4YXNfc3BsaXRfYWxsb2MmIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAgICYjMzQ7X19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeGFzX3NwbGl0X2FsbG9jYCB0byBhY2NvdW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbnMgaWYgdGhlIHhhcnJheSBoYXMgYFhBX0ZMQUdTX0FDQ09VTlRgIHNldC4gSXQgYWxzbyBtb2RpZmllcyBgX19mb2xpb19zcGxpdGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHRvIHN3aXRjaCB0byB0aGUgZm9saW8mIzM5O3MgbWVtY2cgYmVmb3JlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFsbG9jYXRlIHhhcnJheSBub2RlcywgZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB4YXJyYXkgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4Njk1NzBkNmYxYjViMjc3MDE2Yjc3Njk1NzNkNzZjNzExODlmMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDIxOjU3OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jCmluZGV4IDlhOGI0OTE2NTQwY2YuLmJmZTdiZWY4MGYzNGUgMTAwNjQ0Ci0tLSBhL2xpYi94YXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIveGFycmF5LmMKQEAgLTEwNTMsNiAmIzQzOzEwNTMsOSBAQCB2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlciwKIAlpZiAoeGFzLSZndDt4YV9zaGlmdCAmIzQzOyBYQV9DSFVOS19TSElGVCAmZ3Q7IG9yZGVyKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKHhhcy0mZ3Q7eGEtJmd0O3hhX2ZsYWdzICZhbXA7IFhBX0ZMQUdTX0FDQ09VTlQpCiYjNDM7CQlnZnAgfD0gX19HRlBfQUNDT1VOVDsKJiM0MzsKIAlkbyB7CiAJCXN0cnVjdCB4YV9ub2RlICpub2RlOwogCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAwMzI3MDJhNDYzN2JhLi5lOTAzNDZmZGU1NTFhIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTM5ODQsMzQgJiM0MzszOTg0LDQyIEBAIHN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogCVhBX1NUQVRFKHhhcywgJmFtcDtmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aV9wYWdlcywgZm9saW8tJmd0O2luZGV4KTsKIAlzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOwogCWJvb2wgaXNfYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZzsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IE5VTEw7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IE5VTEw7CiAJaW50IG9sZF9vcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTsKIAlzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7CiAJaW50IG5yX3NobWVtX2Ryb3BwZWQgPSAwOwogCWVudW0gdHR1X2ZsYWdzIHR0dV9mbGFncyA9IDA7Ci0JaW50IHJldDsKIAlwZ29mZl90IGVuZCA9IDA7CiYjNDM7CWludCByZXQ7CiAKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sYXJnZShmb2xpbyksIGZvbGlvKTsKIAogCWlmIChmb2xpbyAhPSBwYWdlX2ZvbGlvKHNwbGl0X2F0KSB8fCBmb2xpbyAhPSBwYWdlX2ZvbGlvKGxvY2tfYXQpKSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfbm9fbWVtY2c7CiAJfQogCiAJaWYgKG5ld19vcmRlciAmZ3Q7PSBvbGRfb3JkZXIpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CiYjNDM7CQlnb3RvIG91dF9ub19tZW1jZzsKIAl9CiAKIAlyZXQgPSBmb2xpb19jaGVja19zcGxpdHRhYmxlKGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X3R5cGUpOwogCWlmIChyZXQpIHsKIAkJVk1fV0FSTl9PTkNFKHJldCA9PSAtRUlOVkFMLCAmIzM0O1RyaWVkIHRvIHNwbGl0IGFuIHVuc3BsaXR0YWJsZSBmb2xpbyYjMzQ7KTsKLQkJZ290byBvdXQ7CiYjNDM7CQlnb3RvIG91dF9ub19tZW1jZzsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogc3dpdGNoIHRvIGZvbGlvJiMzOTtzIG1lbWNnIGFzIHhhcnJheSBub2RlIGFsbG9jYXRpb24gY2FuIGhhcHBlbiBhbmQKJiM0MzsJICogbmVlZHMgdG8gY2hhcmdlIHRvIGl0LgomIzQzOwkgKi8KJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKJiM0MzsJb2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7CiYjNDM7CiAJaWYgKGlzX2Fub24pIHsKIAkJLyoKIAkJICogVGhlIGNhbGxlciBkb2VzIG5vdCBuZWNlc3NhcmlseSBob2xkIGFuIG1tYXBfbG9jayB0aGF0IHdvdWxkCkBAIC00MTQwLDYgJiM0Mzs0MTQ4LDEwIEBAIHN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogCWlmIChtYXBwaW5nKQogCQlpX21tYXBfdW5sb2NrX3JlYWQobWFwcGluZyk7CiBvdXQ6CiYjNDM7CS8qIHJlc3RvcmUgdG8gY2FsbGVyJiMzOTtzIG9sZF9tZW1jZyAqLwomIzQzOwlzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MztvdXRfbm9fbWVtY2c6CiAJeGFzX2Rlc3Ryb3koJmFtcDt4YXMpOwogCWlmIChpc19wbWRfb3JkZXIob2xkX29yZGVyKSkKIAkJY291bnRfdm1fZXZlbnQoIXJldCA/IFRIUF9TUExJVF9QQUdFIDogVEhQX1NQTElUX1BBR0VfRkFJTEVEKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkgY29yZSBhcmVhcyDigJMgYGxpYi94YXJyYXkuY2AgYW5kIGBtbS9odWdlX21lbW9yeS5jYC4gSSBzZWUgdGhhdCBpbiBgbGliL3hhcnJheS5jYCwgdGhlIGB4YXNfc3BsaXRfYWxsb2NgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBgX19HRlBfQUNDT1VOVGAgdG8gdGhlIGBnZnBgIGZsYWcgdW5kZXIgYSBjZXJ0YWluIGNvbmRpdGlvbjogaWYgYHhhcy0mZ3Q7eGEtJmd0O3hhX2ZsYWdzICZhbXA7IFhBX0ZMQUdTX0FDQ09VTlRgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgc2lnbmFscyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gbWVtb3J5IGFjY291bnRpbmcgcmVsYXRlZCB0byBYQXJyYXkgYWxsb2NhdGlvbnMsIGxpa2VseSBmb3IgbWVtY2cgaW50ZWdyYXRpb24uIE92ZXIgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIHRvIHN3aXRjaCB0aGUgb3BlcmF0aW9uIHRvIHRoZSBmb2xpbyYjMzk7cyBtZW1jZyAqYmVmb3JlKiBhbnkgeGFycmF5IG5vZGUgYWxsb2NhdGlvbnMuIFRoaXMgcmVpbmZvcmNlcyB0aGUgbWVtY2cgYWNjb3VudGluZyBhbmdsZTsgdGhlIGFpbSBzZWVtcyB0byBiZSBlbnN1cmluZyBhbGxvY2F0aW9ucyB3aXRoaW4gZm9saW8gc3BsaXR0aW5nIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLCBpbnN0ZWFkIG9mIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgdGFzayYjMzk7cyBvciBwYXJlbnQgbWVtY2cuCgpHaXZlbiB0aGUgc2NvcGXigJRjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMgb2YgaHVnZSBwYWdlcyBhbmQgZm9saW8gc3BsaXR0aW5nLCBpbiBjb25qdW5jdGlvbiB3aXRoIGNoYW5nZXMgdG8geGFycmF54oCUdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gSSBuZWVkIHRvIGdldCB0aGlzIHByb3Blcmx5IHRlc3RlZCwgYW5kIGZhc3QuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIGB4YXNfc3BsaXRfYWxsb2NgIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gaW4gYGxpYi94YXJyYXkuY2AuIEJ1dCBgX19mb2xpb19zcGxpdGDigKYgd2FpdCwgaXQmIzM5O3MgYSAqc3RhdGljKiBmdW5jdGlvbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuICpTdGF0aWMqLCBva2F5LiBEb2VzIHRoYXQgaW5mbHVlbmNlIHRoZSBmdXp6aW5nIHN0cmF0ZWd5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IHRvIGl0LiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBtbS9odWdlX21lbW9yeS5jYCwgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM4MDQ9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXG5tbS9odWdlX21lbW9yeS5jOjM5NjA6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTM5NjEtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk3OS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk4MDpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQyNTE9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjU1LVxubW0vaHVnZV9tZW1vcnkuYzo0MjU2Olx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Ny1cdFx0XHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00Mjg0PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG5tbS9odWdlX21lbW9yeS5jOjQyODc6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkV4YW1pbmluZyBIdWdlIFBhZ2UgU3BsaXR0aW5nIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIHNwbGl0dGluZyBwcm9jZXNzLiBJIHNlZSB0aGF0IGJvdGggYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGFuZCBgZm9saW9fc3BsaXRgIHVsdGltYXRlbHkgY2FsbCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYF9fZm9saW9fc3BsaXRgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBzcGxpdCBvcGVyYXRpb24sIGl0IHNlZW1zLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYDogSXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSB1c2VkIG91dHNpZGUgb2YgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZT8gSXMgaXQgZXhwb3J0ZWQgZm9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIGxldmVyYWdlLCBvciBpcyBpdCBwdXJlbHkgYW4gaW50ZXJuYWwgZGV0YWlsPyBJIG5lZWQgdG8ga25vdyBpZiBpdCYjMzk7cyB2aXNpYmxlIG9yIGlmIGl0JiMzOTtzIGp1c3QgY2FsbGVkIHdpdGhpbiB0aGlzIGNvZGUgcGF0aC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIGV4cG9ydCB0YWJsZSwgY3Jvc3MtcmVmZXJlbmNlcywgYW5kIHBvc3NpYmx5IGEgbW9yZSB0YXJnZXRlZCBjb2RlIHNlYXJjaCB0byBhc2NlcnRhaW4gaXRzIHNjb3BlLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZSBpcyBjcml0aWNhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlIGluIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTM5Nz1lbnVtIHNwbGl0X3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwMS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwMjppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwMy1cdFx0dW5zaWduZWQgaW50IG5ld19vcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDEyPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNC17XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTU6XHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE2LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQxODQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjUwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MjUxOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjUyLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1ODEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXNzZXNzaW5nIFBvdGVudGlhbCBTdHJhdGVnaWVzIGZvciBEYXRhIFBhcnRpdGlvbmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoaXMgZGF0YSBzcGxpdHRpbmcuICYjMzQ7Zm9saW9fc3BsaXQmIzM0OyBhbmQgdGhhdCBoZWxwZXIgZnVuY3Rpb24sIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYm90aCBpbW1lZGlhdGVseSBzcHJpbmcgdG8gbWluZCBhcyBwcm9taXNpbmcgY2FuZGlkYXRlcy4gVGhleSBzZWVtIGxpa2UgdGhleSYjMzk7ZCBvZmZlciBhIGdvb2QgYXBwcm9hY2gsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkYXRhIGFuZCBjb25zdHJhaW50cy4gT2YgY291cnNlLCB0aGF0JiMzOTtzIGp1c3QgYSBxdWljayBndXQgY2hlY2suIEkgbmVlZCB0byBkaWcgaW4gYSBiaXQgZGVlcGVyLiBMZXQmIzM5O3Mgc2VlIGhvdyBgeGFzX3NwbGl0X2FsbG9jYCBzdGFja3MgdXAgYWdhaW5zdCB0aGVtLiBJdCBtaWdodCBiZSB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhc19zcGxpdF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDkwPWVudHJ5IGNhbiBiZSBzcGxpdCBpbnRvIGVudHJpZXMgb2NjdXB5aW5nIHNtYWxsZXIgcmFuZ2VzIGJ5IGNhbGxpbmdcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTE6eGFzX3NwbGl0X2FsbG9jKCkgd2l0aG91dCB0aGUgeGFfbG9jayBoZWxkLCBmb2xsb3dlZCBieSB0YWtpbmcgdGhlIGxvY2tcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00OTItYW5kIGNhbGxpbmcgeGFzX3NwbGl0KCkgb3IgY2FsbGluZyB4YXNfdHJ5X3NwbGl0KCkgd2l0aCB4YV9sb2NrLiBUaGVcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTM6ZGlmZmVyZW5jZSBiZXR3ZWVuIHhhc19zcGxpdF9hbGxvYygpJiM0Mzt4YXNfc3BsaXQoKSBhbmQgeGFzX3RyeV9hbGxvYygpIGlzXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q6NDk0OnRoYXQgeGFzX3NwbGl0X2FsbG9jKCkgJiM0MzsgeGFzX3NwbGl0KCkgc3BsaXQgdGhlIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDk1LW9yZGVyIHRvIHRoZSBuZXcgb3JkZXIgaW4gb25lIHNob3QgdW5pZm9ybWx5LCB3aGVyZWFzIHhhc190cnlfc3BsaXQoKVxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdD00OTc9Rm9yIGV4YW1wbGUsIHRvIHNwbGl0IGFuIG9yZGVyLTkgZW50cnksIHdoaWNoIHRha2VzIDJeKDktNik9OCBzbG90cyxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTg6YXNzdW1pbmcgYGBYQV9DSFVOS19TSElGVGBgIGlzIDYsIHhhc19zcGxpdF9hbGxvYygpICYjNDM7IHhhc19zcGxpdCgpIG5lZWRcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00OTktOCB4YV9ub2RlLiB4YXNfdHJ5X3NwbGl0KCkgc3BsaXRzIHRoZSBvcmRlci05IGVudHJ5IGludG9cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0PTM0NT1YQXJyYXnmnInog73lipvlsIblpJrkuKrntKLlvJXogZTns7vlnKjkuIDotbfvvIzlm6DmraTlr7nkuIDkuKrntKLlvJXnmoTmk43kvZzkvJrlvbHlk43liLDmiYDmnInnmoTntKLlvJXjgILkvovlpoLvvIzlrZjlgqjliLDku7vkvZXntKLlvJXlsIZcdWZmZmRcdWZmZmQuLi5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTM2Mi3lnKjkuIDkuKrlpJrntKLlvJXmnaHnm67nmoTku7vkvZXkuIDkuKrntKLlvJXkuK3lrZjlgqggYGBOVUxMYGAg77yM5bCG5oqK5q+P5Liq57Si5byV55qE5p2h55uu6K6+572u5Li6IGBgTlVMTGBgIO+8jOW5tuino+mZpOe7keWumuOAgumAmui/h+iwg1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozNjM655SoeGFzX3NwbGl0X2FsbG9jKCnvvIzlnKjmsqHmnIl4YV9sb2Nr55qE5oOF5Ya15LiL77yM5Y+v5Lul5bCG5LiA5Liq5aSa57Si5byV5p2h55uu5YiG5Ymy5oiQ5Y2g5o2u6L6D5bCP6IyD5Zu055qE5p2h55uu77yM54S25ZCO5YaN5Y+W6ZSB5bm2XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS94YXJyYXkucnN0LTM2NC3osIPnlKh4YXNfc3BsaXQoKeOAglxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMzgyLS8qXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDozODM6ICogeGFzX3NwbGl0X2FsbG9jKCkgZG9lcyBub3Qgc3VwcG9ydCBhcmJpdHJhcnkgb3JkZXJzLiBUaGlzIGltcGxpZXMgbm9cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTM4NC0gKiA1MTJNQiBUSFAgb24gQVJNNjQgd2l0aCA2NEtCIGJhc2UgcGFnZSBzaXplLlxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU2Mj12b2lkIHhhc19zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKiwgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE1NjM6dm9pZCB4YXNfc3BsaXRfYWxsb2Moc3RydWN0IHhhX3N0YXRlICosIHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTU2NC12b2lkIHhhc190cnlfc3BsaXQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU3Nz1zdGF0aWMgaW5saW5lIHZvaWQgeGFzX3NwbGl0KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1ODItXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE1ODM6c3RhdGljIGlubGluZSB2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1ODQtXHRcdHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwKVxuLS1cbmxpYi90ZXN0X3hhcnJheS5jPTE4MzY9c3RhdGljIHZvaWQgY2hlY2tfc3BsaXRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcbi0tXG5saWIvdGVzdF94YXJyYXkuYy0xODQ1LVxubGliL3Rlc3RfeGFycmF5LmM6MTg0NjpcdHhhc19zcGxpdF9hbGxvYyhcdTAwMjZ4YXMsIHhhLCBvcmRlciwgR0ZQX0tFUk5FTCk7XG5saWIvdGVzdF94YXJyYXkuYy0xODQ3LVx0eGFzX2xvY2soXHUwMDI2eGFzKTtcbi0tXG5saWIveGFycmF5LmM9MTAxMT1zdGF0aWMgdm9pZCBfX3hhc19pbml0X25vZGVfZm9yX3NwbGl0KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbmxpYi94YXJyYXkuYy0xMDMxLS8qKlxubGliL3hhcnJheS5jOjEwMzI6ICogeGFzX3NwbGl0X2FsbG9jKCkgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIHNwbGl0dGluZyBhbiBlbnRyeS5cbmxpYi94YXJyYXkuYy0xMDMzLSAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXG4tLVxubGliL3hhcnJheS5jLTEwNDQtICovXG5saWIveGFycmF5LmM6MTA0NTp2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcixcbmxpYi94YXJyYXkuYy0xMDQ2LVx0XHRnZnBfdCBnZnApXG4tLVxubGliL3hhcnJheS5jLTEwNzUtfVxubGliL3hhcnJheS5jOjEwNzY6RVhQT1JUX1NZTUJPTF9HUEwoeGFzX3NwbGl0X2FsbG9jKTtcbmxpYi94YXJyYXkuYy0xMDc3LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY3Nz1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3MDEtXHRcdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6MzcwMjpcdFx0XHQgKiB1bmlmb3JtIHNwbGl0IGhhcyB4YXNfc3BsaXRfYWxsb2MoKSBjYWxsZWQgYmVmb3JlXG5tbS9odWdlX21lbW9yeS5jLTM3MDMtXHRcdFx0ICogaXJxIGlzIGRpc2FibGVkIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnksIHdoZXJlYXNcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5ODA9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MDU5LVx0XHRcdHhhc19zZXRfb3JkZXIoXHUwMDI2eGFzLCBmb2xpby1cdTAwM2VpbmRleCwgbmV3X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDA2MDpcdFx0XHR4YXNfc3BsaXRfYWxsb2MoXHUwMDI2eGFzLCBmb2xpbywgb2xkX29yZGVyLCBnZnApO1xubW0vaHVnZV9tZW1vcnkuYy00MDYxLVx0XHRcdGlmICh4YXNfZXJyb3IoXHUwMDI2eGFzKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgeGFzX3NwbGl0X2FsbG9jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgc3BlY2lmaWMgY2hhbmdlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgYHhhc19zcGxpdF9hbGxvY2AgaXMgY2FsbGVkIGJ5IGBfX2ZvbGlvX3NwbGl0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fR0ZQX0FDQ09VTlRgIHdpdGhpbiBgeGFzX3NwbGl0X2FsbG9jYCBiYXNlZCBvbiB0aGUgYFhBX0ZMQUdTX0FDQ09VTlRgIGZsYWcgaW4gYHhhcy0mZ3Q7eGEtJmd0O3hhX2ZsYWdzYC4gVGhpcyBpcyBnb29kOyB0aGF0JiMzOTtzIHRoZSBraW5kIG9mIHN1YnRsZSBjaGFuZ2UgdGhhdCBjYW4gbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGluIGFjY291bnRpbmcuCgpUaGUgb3RoZXIgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBtZW1jZyBzd2l0Y2hpbmcgdGhhdCBoYXBwZW5zIGluIGBfX2ZvbGlvX3NwbGl0YCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgeGFzX3NwbGl0X2FsbG9jYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBhbGxvY2F0aW9uIHdpbGwgbm93IGJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2csIGEgY3JpdGljYWwgYXNwZWN0IG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGlzb2xhdGlvbi4gRGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBleHBlY3RlZC4KClNpbmNlIHRoaXMgdG91Y2hlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWVtY2cgYWNjb3VudGluZywgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGRlc2lnbmF0aW9uIGlzIHNwb3Qgb24uIEkmIzM5O2xsIG1ha2UgYSBub3RlIHRvIHJlbWVtYmVyIHRoYXQgd2hlbiBJJiMzOTttIGFzc2Vzc2luZyB0aGUgcGF0Y2ggZm9yIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYHhhc19zcGxpdF9hbGxvY2AsIGBmb2xpb19zcGxpdGAgKGFuZCBpbXBvcnRhbnRseSwgYF9fZm9saW9fc3BsaXRgKSwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBhbmQgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCAodGhlIGlubGluZSB2ZXJzaW9uKS4KCkhvbGQgb24sIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGBmb2xpb19zcGxpdF91bm1hcHBlZGAuIERvZXMgdGhhdCBjYWxsIGBfX2ZvbGlvX3NwbGl0YD8gVGhhdCYjMzk7cyB0aGUgaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBjb21wbGV0ZSBjYWxsIGNoYWluIGFuZCBlbnN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgaG9saXN0aWMgdmlldyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDAyPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAzLVx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDUtdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTgwPXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE2Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5tbS9odWdlX21lbW9yeS5jLTQxODUte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTAyPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTE2LVx0c3BsaXRfaHVnZV9wbWRfYWRkcmVzcyhtaWdyYXRlLVx1MDAzZXZtYSwgYWRkciwgdHJ1ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jOjkxNzpcdHJldCA9IGZvbGlvX3NwbGl0X3VubWFwcGVkKGZvbGlvLCAwKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTE4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBhIFBvdGVudGlhbCBJc3N1ZSBpbiBGb2xpbyBTcGxpdHRpbmcqKgoKT2theSwgc28gYGZvbGlvX3NwbGl0X3VubWFwcGVkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBnaXZpbmcgbWUgcGF1c2UuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fc3BsaXRfdW5tYXBwZWRgIGlzIHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCBJIHN1c3BlY3QgaXQgY2FsbHMgYF9fZm9saW9fc3BsaXRgLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgcmVsYXRpb25zaGlwIGF0IHBsYXkuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGNhbGwgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGludm9sdmVkIGluIHRoYXQgYF9fZm9saW9fc3BsaXRgIGZ1bmN0aW9uLiBUaGlzIGlzIGFsbCBhYm91dCBjb25maXJtaW5nIHRoZSBkYXRhIGZsb3csIHRoZSBpbnRlcmFjdGlvbnMgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzcGxpdHRpbmcgb3BlcmF0aW9uIGlzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCBpcyAqcmVhbGx5KiBkb2luZy4gSSB3YW50IHRvIHNlZSBob3cgYF9fZm9saW9fc3BsaXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQxODQ6XHRpbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbjQxODU6XHR7XG40MTg2Olx0XHRpbnQgcmV0ID0gMDtcbjQxODc6XHRcbjQxODg6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19tYXBwZWQoZm9saW8pLCBmb2xpbyk7XG40MTg5Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuNDE5MDpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xuNDE5MTpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XG40MTkyOlx0XG40MTkzOlx0XHRpZiAoZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGZvbGlvKSAhPSBmb2xpb19yZWZfY291bnQoZm9saW8pIC0gMSlcbjQxOTQ6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG40MTk1Olx0XG40MTk2Olx0XHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xuNDE5NzpcdFx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsXG40MTk4Olx0XHRcdFx0XHRcdFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcbjQxOTk6XHRcdFx0XHRcdFx0XHQwLCBOVUxMKTtcbjQyMDA6XHRcdGxvY2FsX2lycV9lbmFibGUoKTtcbjQyMDE6XHRcdHJldHVybiByZXQ7XG40MjAyOlx0fVxuNDIwMzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2xpbyBTcGxpdHRpbmcgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW5pdGlhbGx5IHRob3VnaHQgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCB3YXMgY2FsbGluZyBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYC4gQnV0IGhhbmcgb24sIHRoZSBwYXRjaCBhY3R1YWxseSBjaGFuZ2VkIGBfX2ZvbGlvX3NwbGl0YCwgbm90IHRoZSBmdW5jdGlvbiBJIHdhcyBqdXN0IGZvY3VzaW5nIG9uLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgX19mb2xpb19zcGxpdGAgaXMgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBzZWUgd2hhdCBpbXBhY3QgdGhlIG1vZGlmaWNhdGlvbnMgaGF2ZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHByb3Blcmx5IGV2YWx1YXRlIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQyODQ9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYGZvbGlvX3NwbGl0YCBib3RoIHVsdGltYXRlbHkgY2FsbCBgX19mb2xpb19zcGxpdGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHNwbGl0IGxvZ2ljLiBJIHF1aWNrbHkgY2hlY2tlZCBmb3Igb3RoZXIgY2FsbGVycyBvZiBgX19mb2xpb19zcGxpdGAsIGp1c3QgdG8gbWFrZSBzdXJlIEkgd2FzbiYjMzk7dCBtaXNzaW5nIGFueSBvdGhlciBpbnRlcmFjdGlvbnMsIGJ1dCBpdCBsb29rcyBsaWtlIHRob3NlIHR3bywgYW5kIG9ubHkgdGhvc2UgdHdvLCBhcmUgZGlyZWN0bHkgY2FsbGluZyBpdC4gVGhlcmVmb3JlLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIGBmb2xpb19zcGxpdGAgYmVjb21lIG15IHByaW1hcnkgcG9pbnRzIG9mIGZvY3VzLCBpbiBjb25qdW5jdGlvbiB3aXRoIGB4YXNfc3BsaXRfYWxsb2NgLiBOb3csIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlaXIgZXhwb3J0cyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlaXIgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGFuZCBpbnRlbmRlZCB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBGb2xpbyBTcGxpdCBFeHBvcnRzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgb3V0cHV0IG9mIHRoZSBgZm9saW9fc3BsaXRgIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBnZW5lcmF0ZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIFttZW50aW9uIHNwZWNpZmljIGZpbGUgZm9ybWF0cyBvciBkYXRhIHN0cnVjdHVyZXMgcmVsZXZhbnQgdG8geW91ciBmaWVsZF0uIEFyZSB0aGUgZXhwZWN0ZWQgZmlsZXMgYmVpbmcgY3JlYXRlZD8gQXJlIHRoZXkgcG9wdWxhdGVkIGNvcnJlY3RseSwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9ucz8gSSBuZWVkIHRvIHZlcmlmeSBkYXRhIGludGVncml0eSBhbmQgZm9ybWF0IGNvbnNpc3RlbmN5LiBBbnkgZXJyb3JzIG9yIGFub21hbGllcyBoZXJlIGNvdWxkIGluZGljYXRlIGRlZXBlciBpc3N1ZXMgZnVydGhlciBkb3duIHRoZSBwaXBlbGluZSwgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgZXhwb3J0aW5nIGFzIGV4cGVjdGVkIGJlZm9yZSB3ZSBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkEgUXVpY2sgSm9sdCBvZiBTdXJwcmlzZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc2F3IHRoYXQgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGZ1bmN0aW9uLiBXYWl0IGEgbWludXRlLi4uIHRoYXQgdGhpbmcmIzM5O3MgKmV4cG9ydGVkKj8gVGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcgYXQgYWxsLiBHaXZlbiB0aGUgbmFtZSwgSSBhc3N1bWVkIGl0IHdhcyBhIGRlZXBseSBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9uLCBzb21ldGhpbmcgbWVhbnQgdG8gYmUgaGlkZGVuIGJlaGluZCBhIGNhcmVmdWxseSBjcmFmdGVkIEFQSS4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBzb21lb25lIHRob3VnaHQgZXhwb3NpbmcgdGhhdCBtYWRlIHNlbnNlLiBXYXMgaXQgZm9yIGEgc3BlY2lmaWMgZGVidWdnaW5nIHNjZW5hcmlvPyBPciBwZXJoYXBzIHRoZXkgZGlkbiYjMzk7dCBmdWxseSBncmFzcCB0aGUgcG90ZW50aWFsIGZvciBtaXN1c2UgYW5kIHVuaW50ZW5kZWQgZGVwZW5kZW5jaWVzPyBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGFib3V0IHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgaXRzIHZpc2liaWxpdHkuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24g4oCTIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDE4ND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTAtICovXG5tbS9odWdlX21lbW9yeS5jOjQyNTE6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyNTItXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIxOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zOTc9ZW51bSBzcGxpdF90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDEtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDI6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDMtXHRcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwOT1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDExLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDEyOnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDEzLVx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE0LXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQxNTpcdHJldHVybiBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTYtfVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDE3PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxOC17XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTk6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyMC19XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDIyPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyMy17XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MjQ6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgMCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MjUtfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTYyOT1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjMwOnNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjMxLVx0XHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgwMD1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODAyLXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgwMzpcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODA0LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQxODQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MjUwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MjUxOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjUyLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI2OC0gKiBJdCBoYXMgdGhlIHNhbWUgcHJlcmVxdWlzaXRlcyBhbmQgcmV0dXJucyBhc1xubW0vaHVnZV9tZW1vcnkuYzo0MjY5OiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXG5tbS9odWdlX21lbW9yeS5jLTQyNzAtICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQzMTg9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDMxOS17XG5tbS9odWdlX21lbW9yeS5jOjQzMjA6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCwgMCk7XG5tbS9odWdlX21lbW9yeS5jLTQzMjEtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjczLVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0Njc0Olx0XHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxubW0vaHVnZV9tZW1vcnkuYy00Njc1LVx0XHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBUaGlzIGZ1bmN0aW9uLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGl0JiMzOTtzIG5vdCBhY3R1YWxseSBleHBvcnRlZCBhcyBhIHN5bWJvbC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IGl0ICppcyogYW4gZW50cnkgcG9pbnQsIGFsYmVpdCBub24tc3RhdGljLCB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBTbyBpdCYjMzk7cyBjYWxsYWJsZSBmcm9tIHdpdGhpbiB0aGUga2VybmVsLiBJIHdvbmRlciB3aHkgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBNYXliZSBpdCYjMzk7cyBpbnRlbmRlZCBhcyBhbiBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgdGhleSBqdXN0IGRpZG4mIzM5O3QgbWFyayBzdGF0aWMgZm9yIHNvbWUgc3BlY2lmaWMgcmVhc29uLi4uIHBlcmhhcHMgaXQmIzM5O3MgdXNlZCBpbiBkZWJ1Z2dpbmcgb3IgYnkgb3RoZXIgaW50ZXJuYWwgbW9kdWxlcy4gT3IgbWF5YmUgaXQmIzM5O3MganVzdCBhIGhpc3RvcmljYWwgYXJ0aWZhY3QuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHNpbmNlIHdlJiMzOTtyZSBsb29raW5nIGF0IHNwbGl0dGluZyBodWdlIHBhZ2VzLCB3aGVyZSBkb2VzIGBmb2xpb19zcGxpdGAgZmFjdG9yIGludG8gdGhpcz8gVGhhdCYjMzk7cyB0aGUgY29yZSBpbnRlcmZhY2UsIGlzbiYjMzk7dCBpdD8gSXMgdGhpcyBmdW5jdGlvbiwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBhIGxvd2VyLWxldmVsIGJ1aWxkaW5nIGJsb2NrICpmb3IqIGBmb2xpb19zcGxpdGA/IE9yIGlzIGl0IHVzZWQgaW4gc29tZSBvdGhlciBzcGVjaWZpYyBzcGxpdC1yZWxhdGVkIGNvbnRleHQ/IExldCBtZSBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbmFsaXR5IGNvbm5lY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBBUElzIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MzY3Nz1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXG5tbS9odWdlX21lbW9yeS5jOjM3MjA6XHRcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzIxLVx0XHRzcGxpdF9wYWdlX293bmVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE2Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5tbS9odWdlX21lbW9yeS5jLTQxODUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNjE6ICogZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG5tbS9odWdlX21lbW9yeS5jOjQyODc6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVx0XHRcdFx0XHRcdFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcdFx0XHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0NzczOlx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk5NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgdGhlIGBmb2xpb19zcGxpdGAgRXhwb3J0KioKCk9rYXksIHNvIHRoZSBjb2RlJiMzOTtzIHJlZmVyZW5jaW5nIGBmb2xpb19zcGxpdGAuIEZpcnN0IGluc3RpbmN0PyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSYjMzk7bSB0aGlua2luZywgaXMgaXQgYXZhaWxhYmxlIGluIHRoZSBzY29wZSB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQ/IElzIGl0IGEgcHVibGljbHkgYWNjZXNzaWJsZSBmdW5jdGlvbj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIGluIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBkZWZpbml0aW9uIHRvIGNvbmZpcm0gdGhlIGV4cG9ydCBzdGF0dXMuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgaWYgaXQmIzM5O3MgYSBzaW1wbGUgc2NvcGluZyBpc3N1ZS4gR290dGEgY29uZmlybSBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGV4dGVybmFsbHksIHlvdSBrbm93PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGltcG9ydCBzdHJ1Y3R1cmUgb3IgdGhlIEFQSSBkb2N1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNwbGl0X2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzk3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19waWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00NTkwPXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfbm90X3N1aXRhYmxlX2Zvcl90aHBfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjAzLVxubW0vaHVnZV9tZW1vcnkuYzo0NjA0OnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYwNS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDc5MT1zdGF0aWMgc3NpemVfdCBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg1Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6NDg1ODpcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKHBpZCwgdmFkZHJfc3RhcnQsIHZhZGRyX2VuZCwgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy00ODU5LVx0XHRcdGluX2ZvbGlvX29mZnNldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjczCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlc193cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3OTAtXG5tbS9odWdlX21lbW9yeS5jOjQ3OTE6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5Mi1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xubW0vaHVnZV9tZW1vcnkuYy00ODY5LVx0Lm93bmVyXHQgPSBUSElTX01PRFVMRSxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg3MDpcdC53cml0ZVx0ID0gc3BsaXRfaHVnZV9wYWdlc193cml0ZSxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGl0X2h1Z2VfcGFnZXNfZm9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQ3OTE9c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXG5tbS9odWdlX21lbW9yeS5jOjQ4Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xubW0vaHVnZV9tZW1vcnkuYy00ODY5LVx0Lm93bmVyXHQgPSBUSElTX01PRFVMRSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4NzM9c3RhdGljIGludCBfX2luaXQgc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODc1LVx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzcGxpdF9odWdlX3BhZ2VzXCYjMzQ7LCAwMjAwLCBOVUxMLCBOVUxMLFxubW0vaHVnZV9tZW1vcnkuYzo0ODc2Olx0XHRcdCAgICBcdTAwMjZzcGxpdF9odWdlX3BhZ2VzX2ZvcHMpO1xubW0vaHVnZV9tZW1vcnkuYy00ODc3LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19pbl9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NzIwLVxubW0vaHVnZV9tZW1vcnkuYzo0NzIxOnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXG5tbS9odWdlX21lbW9yeS5jLTQ3MjItXHRcdFx0XHRwZ29mZl90IG9mZl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NzkxPXN0YXRpYyBzc2l6ZV90IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODM4LVx0XHR9XG5tbS9odWdlX21lbW9yeS5jOjQ4Mzk6XHRcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShmaWxlX3BhdGgsIG9mZl9zdGFydCwgb2ZmX2VuZCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg0MC1cdFx0XHRcdG5ld19vcmRlciwgaW5fZm9saW9fb2Zmc2V0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jPTQ2Nj1zdGF0aWMgdm9pZCBzcGxpdF9maWxlX2JhY2tlZF90aHAoaW50IG9yZGVyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtNDc5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYzo0ODA6XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtQbGVhc2UgZW5hYmxlIHByX2RlYnVnIGluIHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZSgpIGZvciBtb3JlIGluZm8uXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtNDgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgYGZvbGlvX3NwbGl0YCBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBmb2xpb19zcGxpdGAuIFNlZW1zIGxpa2UgaXQmIzM5O3MgcHJpbWFyaWx5IHRyaWdnZXJlZCBieSBgc3BsaXRfaHVnZV9wYWdlc19waWRgIGFuZCBgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlYC4gVGhvc2UgYXJlIGJvdGggaW52b2tlZCBmcm9tIGBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlYCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYSBkZWJ1Z2ZzIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHBhdGgsIGRlYnVnZ2luZyBpbmZyYXN0cnVjdHVyZSBpbnRlcmFjdGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LgoKSG1tLCBidXQgd2FpdCBhIG1pbnV0ZS4gU29tZXRoaW5nJiMzOTtzIG5hZ2dpbmcgYXQgbWUuIEl0IGZlZWxzIGxpa2UgYGZvbGlvX3NwbGl0YCAqY291bGQqIGJlIGNhbGxlZCBmcm9tIHNvbWVwbGFjZSBlbHNlLCBvdXRzaWRlIG9mIHRoaXMgZGlyZWN0IGRlYnVnZnMgc2VxdWVuY2UuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQmIzM5O3MgYSBwb3NzaWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGZvbGlvX3NwbGl0YCB0byBjb25maXJtLiBJdCYjMzk7cyB0aW1lIHRvIGZvbGxvdyB0aGUgY2FsbCBzdGFjayBtb3JlIGNsb3NlbHkgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHVuZXhwZWN0ZWQgcGF0aHMuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMzQ4PXN0YXRpYyB2bV9mYXVsdF90IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNTktXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzYwOnN0YXRpYyB2b2lkIGRybV9wYWdlbWFwX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqb3JpZ19mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8pXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzYxLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMzcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIGRybV9wYWdlbWFwX3BhZ2VtYXBfb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNzQtXHQubWlncmF0ZV90b19yYW0gPSBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzNzU6XHQuZm9saW9fc3BsaXQgPSBkcm1fcGFnZW1hcF9mb2xpb19zcGxpdCxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNzYtfTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI3OS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjI4MDpzdGF0aWMgdm9pZCBub3V2ZWF1X2RtZW1fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpoZWFkLCBzdHJ1Y3QgZm9saW8gKnRhaWwpXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yODEte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI4OT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBub3V2ZWF1X2RtZW1fcGFnZW1hcF9vcHMgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjkxLVx0Lm1pZ3JhdGVfdG9fcmFtXHRcdD0gbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtLFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjkyOlx0LmZvbGlvX3NwbGl0XHRcdD0gbm91dmVhdV9kbWVtX2ZvbGlvX3NwbGl0LFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjkzLX07XG4tLVxuZnMvZXJvZnMvZGF0YS5jPTI1OT12b2lkIGVyb2ZzX29ubGluZWZvbGlvX2luaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9lcm9mcy9kYXRhLmMtMjY4LVxuZnMvZXJvZnMvZGF0YS5jOjI2OTp2b2lkIGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9lcm9mcy9kYXRhLmMtMjcwLXtcbi0tXG5mcy9lcm9mcy9maWxlaW8uYz04OT1zdGF0aWMgaW50IGVyb2ZzX2ZpbGVpb19zY2FuX2ZvbGlvKHN0cnVjdCBlcm9mc19maWxlaW8gKmlvLFxuLS1cbmZzL2Vyb2ZzL2ZpbGVpby5jLTE0Ny1cdFx0XHRpZiAoIWF0dGFjaGVkJiM0MzsmIzQzOylcbmZzL2Vyb2ZzL2ZpbGVpby5jOjE0ODpcdFx0XHRcdGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KGZvbGlvKTtcbmZzL2Vyb2ZzL2ZpbGVpby5jLTE0OS1cdFx0XHRpby1cdTAwM2VkZXYubV9wYSAmIzQzOz0gbGVuO1xuLS1cbmZzL2Vyb2ZzL2ludGVybmFsLmg9NDE1PXZvaWQgZXJvZnNfb25saW5lZm9saW9faW5pdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDE2OnZvaWQgZXJvZnNfb25saW5lZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5mcy9lcm9mcy9pbnRlcm5hbC5oLTQxNy12b2lkIGVyb2ZzX29ubGluZWZvbGlvX2VuZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZXJyLCBib29sIGRpcnR5KTtcbi0tXG5mcy9lcm9mcy96ZGF0YS5jPTEwMDU9c3RhdGljIGludCB6X2Vyb2ZzX3NjYW5fZm9saW8oc3RydWN0IHpfZXJvZnNfZnJvbnRlbmQgKmYsXG4tLVxuZnMvZXJvZnMvemRhdGEuYy0xMDc1LVxuZnMvZXJvZnMvemRhdGEuYzoxMDc2Olx0XHRcdGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KGZvbGlvKTtcbmZzL2Vyb2ZzL3pkYXRhLmMtMTA3Ny1cdFx0XHRpZiAoZi1cdTAwM2VwY2wtXHUwMDNlbGVuZ3RoIFx1MDAzYyBvZmZzZXQgJiM0MzsgZW5kIC0gbWFwLVx1MDAzZW1fbGEpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDI9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDMtXHRcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA0OmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNS11bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDc9aW50IGZvbGlvX2NoZWNrX3NwbGl0dGFibGUoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwOC1cdFx0XHQgICBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDk6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsIHN0cnVjdCBwYWdlICpwYWdlLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDEwLVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NTM9c3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY1OC1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY1OTpzdGF0aWMgaW5saW5lIGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjYwLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMDIwPXZvaWQgc3BsaXRfcGFnZV9tZW1jZyhzdHJ1Y3QgcGFnZSAqZmlyc3QsIHVuc2lnbmVkIG9yZGVyKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwMjE6dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjItXHRcdHVuc2lnbmVkIG5ld19vcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ0NT1zdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9tZW1jZyhzdHJ1Y3QgcGFnZSAqZmlyc3QsIHVuc2lnbmVkIG9yZGVyKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NDgtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDQ5OnN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNDUwLVx0XHR1bnNpZ25lZCBvbGRfb3JkZXIsIHVuc2lnbmVkIG5ld19vcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Nzc9c3RydWN0IGRldl9wYWdlbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTEwNy1cdCAqL1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjEwODpcdHZvaWQgKCpmb2xpb19zcGxpdCkoc3RydWN0IGZvbGlvICpoZWFkLCBzdHJ1Y3QgZm9saW8gKnRhaWwpO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTEwOS19O1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjUwLVx0aWYgKGZvbGlvX2lzX2RldmljZV9wcml2YXRlKG9yaWdpbmFsX2ZvbGlvKSkge1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI1MTpcdFx0aWYgKCFvcmlnaW5hbF9mb2xpby1cdTAwM2VwZ21hcC1cdTAwM2VvcHMtXHUwMDNlZm9saW9fc3BsaXQpIHtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTItXHRcdFx0aWYgKG5ld19mb2xpbykge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTctXHRcdH0gZWxzZSB7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjU4Olx0XHRcdG9yaWdpbmFsX2ZvbGlvLVx1MDAzZXBnbWFwLVx1MDAzZW9wcy1cdTAwM2Vmb2xpb19zcGxpdChvcmlnaW5hbF9mb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTktXHRcdFx0XHRcdFx0XHRcdCBuZXdfZm9saW8pO1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaD00OT1UUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC01Mi1cdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjUzOlx0XHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtNTQtXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtNTYtXHRUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjU3Olx0XHR0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTU4LVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC02NC1cdFx0X19maWVsZChcdHVuc2lnbmVkIGxvbmcsXHRcdHRocF9zcGxpdClcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo2NTpcdFx0X19maWVsZChcdHVuc2lnbmVkIGxvbmcsXHRcdGxhcmdlX2ZvbGlvX3NwbGl0KVxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTY2LVx0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX21vZGUsXHRtb2RlKVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC03NS1cdFx0X19lbnRyeS1cdTAwM2V0aHBfc3BsaXRcdFx0XHQ9IHRocF9zcGxpdDtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo3NjpcdFx0X19lbnRyeS1cdTAwM2VsYXJnZV9mb2xpb19zcGxpdFx0PSBsYXJnZV9mb2xpb19zcGxpdDtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC03Ny1cdFx0X19lbnRyeS1cdTAwM2Vtb2RlXHRcdFx0XHQ9IG1vZGU7XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTg2LVx0XHRfX2VudHJ5LVx1MDAzZXRocF9zcGxpdCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo4NzpcdFx0X19lbnRyeS1cdTAwM2VsYXJnZV9mb2xpb19zcGxpdCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC04OC1cdFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVx1MDAzZW1vZGUsIE1JR1JBVEVfTU9ERSksXG4tLVxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzMxLVxubGliL3Rlc3RfaG1tLmM6MTczMjpzdGF0aWMgdm9pZCBkbWlycm9yX2Rldm1lbV9mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmhlYWQsIHN0cnVjdCBmb2xpbyAqdGFpbClcbmxpYi90ZXN0X2htbS5jLTE3MzMte1xuLS1cbmxpYi90ZXN0X2htbS5jPTE3NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzID0ge1xuLS1cbmxpYi90ZXN0X2htbS5jLTE3NjgtXHQubWlncmF0ZV90b19yYW1cdD0gZG1pcnJvcl9kZXZtZW1fZmF1bHQsXG5saWIvdGVzdF9obW0uYzoxNzY5Olx0LmZvbGlvX3NwbGl0XHQ9IGRtaXJyb3JfZGV2bWVtX2ZvbGlvX3NwbGl0LFxubGliL3Rlc3RfaG1tLmMtMTc3MC19O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY3Nz1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXG5tbS9odWdlX21lbW9yeS5jOjM3MjA6XHRcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzIxLVx0XHRzcGxpdF9wYWdlX293bmVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE2Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5tbS9odWdlX21lbW9yeS5jLTQxODUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNjE6ICogZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG5tbS9odWdlX21lbW9yeS5jOjQyODc6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVx0XHRcdFx0XHRcdFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcdFx0XHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0NzczOlx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zNjYyPXZvaWQgc3BsaXRfcGFnZV9tZW1jZyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgb3JkZXIpXG4tLVxubW0vbWVtY29udHJvbC5jLTM2NzUtXG5tbS9tZW1jb250cm9sLmM6MzY3Njp2b2lkIGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgb2xkX29yZGVyLFxubW0vbWVtY29udHJvbC5jLTM2NzctXHRcdHVuc2lnbmVkIG5ld19vcmRlcilcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTkwMj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTkxNi1cdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cdTAwM2V2bWEsIGFkZHIsIHRydWUpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzo5MTc6XHRyZXQgPSBmb2xpb19zcGxpdF91bm1hcHBlZChmb2xpbywgMCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTkxOC1cdGlmIChyZXQpXG4tLVxubW0vdHJ1bmNhdGUuYz0xNzA9aW50IHRydW5jYXRlX2lub2RlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3RydW5jYXRlLmMtMTc5LVxubW0vdHJ1bmNhdGUuYzoxODA6c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXG5tbS90cnVuY2F0ZS5jLTE4MS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG1pbl9vcmRlcilcbi0tXG5tbS90cnVuY2F0ZS5jLTE4OC1cbm1tL3RydW5jYXRlLmM6MTg5Olx0cmV0ID0gZm9saW9fc3BsaXQoZm9saW8sIG1pbl9vcmRlciwgc3BsaXRfYXQsIE5VTEwpO1xubW0vdHJ1bmNhdGUuYy0xOTAtXG4tLVxubW0vdHJ1bmNhdGUuYz0yMTc9Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbi0tXG5tbS90cnVuY2F0ZS5jLTI1NC1cdHNwbGl0X2F0ID0gZm9saW9fcGFnZShmb2xpbywgUEFHRV9BTElHTl9ET1dOKG9mZnNldCkgLyBQQUdFX1NJWkUpO1xubW0vdHJ1bmNhdGUuYzoyNTU6XHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xubW0vdHJ1bmNhdGUuYy0yNTYtXHRcdC8qXG4tLVxubW0vdHJ1bmNhdGUuYy0yODEtXHRcdCAgICBmb2xpbzItXHUwMDNlbWFwcGluZyA9PSBmb2xpby1cdTAwM2VtYXBwaW5nKVxubW0vdHJ1bmNhdGUuYzoyODI6XHRcdFx0Zm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7XG5tbS90cnVuY2F0ZS5jLTI4My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlPTY3PXJtYXBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmU6Njg6Zm9saW9fc3BsaXRfcmFjZV90ZXN0XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTA2PVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZToxMDc6VEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUtMTA4LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jLTYtICpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jOjc6ICogSXQgdGVzdHMgdGhlIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gZm9saW9fc3BsaXQoKSBhbmQgZmlsZW1hcF9nZXRfZW50cnkoKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jOjg6ICogd2hlcmUgdGhlIGhvbGUgcHVuY2hlcyBvbiBzaG1lbSBsZWFkIHRvIGZvbGlvX3NwbGl0KCkgYW5kIHJlYWRpbmcgdGhlIHNobWVtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYy05LSAqIGxlYWQgdG8gZmlsZW1hcF9nZXRfZW50cnkoKS5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD00NDQ9Q0FURUdPUlk9XCYjMzQ7dGhwXCYjMzQ7IHJ1bl90ZXN0IC4vdHJhbnNodWdlLXN0cmVzcyAtZCAyMFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtNDQ1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6NDQ2OkNBVEVHT1JZPVwmIzM0O3RocFwmIzM0OyBydW5fdGVzdCAuL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtNDQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMzMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTU5LS8qKlxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy0zOTYxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXG5tbS9odWdlX21lbW9yeS5jOjM5ODA6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTM5ODEtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MjUxPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NjpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyNTctXHRcdFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI4ND1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODYte1xubW0vaHVnZV9tZW1vcnkuYzo0Mjg3Olx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyODgtXHRcdFx0ICAgICBTUExJVF9UWVBFX05PTl9VTklGT1JNKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3OTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zNjc3PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzcxOS1cbm1tL2h1Z2VfbWVtb3J5LmM6MzcyMDpcdFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jLTM3MjEtXHRcdHNwbGl0X3BhZ2Vfb3duZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTU5LS8qKlxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy0zOTYxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXG5tbS9odWdlX21lbW9yeS5jOjM5ODA6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTM5ODEtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MTYyLS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0MTYzOiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXG5tbS9odWdlX21lbW9yeS5jLTQxNjQtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE4My0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDE4NDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4NS17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MjUxPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NjpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQyNTctXHRcdFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI2MC0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDI2MTogKiBmb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTQyNjItICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4My0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NDppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NS1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NjA0PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2OTYtXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0Njk3Olx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00Njk4LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDcyMT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDc3Mi1cdFx0XHRcdFx0XHRcdCAgIGluX2ZvbGlvX29mZnNldCk7XG5tbS9odWdlX21lbW9yeS5jOjQ3NzM6XHRcdFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXG5tbS9odWdlX21lbW9yeS5jLTQ3NzQtXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzcwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEh1Z2UgUGFnZSBTcGxpdHRpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgcmVhY2hhYmlsaXR5IGFuZCByZWxldmFudCBzeW1ib2xzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIHNwbGl0dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gRmlyc3QsIEkgc2VlIHRoYXQgYGZvbGlvX3NwbGl0YCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIGFzIGFuIGV4dGVybmFsIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgdHJhY2UgaXRzIHVzYWdlLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtbS90cnVuY2F0ZS5jYC4gU3BlY2lmaWNhbGx5LCBgdHJ1bmNhdGVfaW5vZGVfZm9saW9gIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYm90aCBjYWxsIGBmb2xpb19zcGxpdF9vcl91bm1hcGAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgZm9saW9fc3BsaXRgLiBTbywgbm8gZG91YnQgdGhhdCBgZm9saW9fc3BsaXRgICppcyogcmVhY2hhYmxlLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYXNjYWRlIGNhbGxzIHRoYXQgY2FuIHVzZSBgZm9saW9fc3BsaXRgLiBMZXQgbWUgZGVsdmUgaW50byBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIEFoLCB0aGF0IG9uZSBpcyBjYWxsZWQgZnJvbSBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgICh3aGljaCBpcyBpbmxpbmUpLiBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGlzIHRoZW4gY2FsbGVkIGZyb20gYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAgKGFsc28gaW5saW5lKS4gVGhpcywgaW4gdHVybiwgaXMgY2FsbGVkIGZyb20gYHNwbGl0X2h1Z2VfcGFnZWAgKGlubGluZSBhZ2FpbikuIEFuZCBgc3BsaXRfaHVnZV9wYWdlYCBpcyBjYWxsZWQgZnJvbSAqbWFueSogcGxhY2VzLCBsaWtlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGFuZCBraHVnZXBhZ2VkLCBhbmQgcHJvYmFibHkgb3RoZXIgcGxhY2VzLCB0b28uIFRoaXMgcmVpbmZvcmNlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IGBmb2xpb19zcGxpdGAgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudC4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGB4YXNfc3BsaXRfYWxsb2NgLCBgZm9saW9fc3BsaXRgLCBhbmQgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLiBBbmQsIHNpbmNlIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYGZvbGlvX3NwbGl0YCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZXkgaGF2ZSBkaXN0aW5jdCwgZXhwb3J0YWJsZSBzeW1ib2xzLiBgeGFzX3NwbGl0X2FsbG9jYCBpcyBhbHNvIGV4cGxpY2l0bHkgZXhwb3J0ZWQuCgpGaW5hbGx5LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBtb2R1bGVzIGFyZSBidWlsdC4gQW5kIHllcywgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gR29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc1MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnM6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb25maWcgZGVwZW5kZW5jaWVzIGhlcmUuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYSBoYXJkIHJlcXVpcmVtZW50LCBubyBxdWVzdGlvbiBhYm91dCB0aGF0LiBXZSBjYW4mIzM5O3QgcHJvY2VlZCB3aXRob3V0IGl0LgoKTm93LCByZWdhcmRpbmcgYENPTkZJR19NRU1DR2AsIEkgc3VzcGVjdCBpdCYjMzk7cyBhbHNvIGdvaW5nIHRvIGJlIGVzc2VudGlhbCwgYWx0aG91Z2ggaXQmIzM5O3MgYSBsaXR0bGUgbGVzcyBvYnZpb3VzIG9uIHRoZSBzdXJmYWNlLiBNeSBpbnR1aXRpb24gaXMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpb2AgYW5kIGBzZXRfYWN0aXZlX21lbWNnYCBwcm9iYWJseSBoYXZlIGR1bW15IGltcGxlbWVudGF0aW9ucyBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZC4gVGhhdCYjMzk7cyBhIGNvbW1vbiBzdHJhdGVneSB0byBhdm9pZCBidWlsZCBmYWlsdXJlcy4gQnV0LCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB0aGVuIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFjdHVhbGx5IGRvIHNvbWV0aGluZyBtZWFuaW5nZnVsLgoKSSB0aGluayBpdCYjMzk7cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBhc3N1bXB0aW9uIGFib3V0IGBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvYCwgc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IG9uZSBpcyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jPTc1OT1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2FsbG9jX2J1ZmZlcnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmZzL2J1ZmZlci5jLTc2NS1cbmZzL2J1ZmZlci5jOjc2NjpcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5mcy9idWZmZXIuYy03NjctXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD03NTM9c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjc1NTpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjEzOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mzk4MD1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMTktXHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDAyMDpcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTQwMjEtXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcbi0tXG5tbS9saXN0X2xydS5jPTYzMT1pbnQgZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2Moc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4tLVxubW0vbGlzdF9scnUuYy02NDgtXHQvKiBBbGxvY2F0aW9uIG1heSBibG9jaywgcGluIHRoZSBtZW1jZyAqL1xubW0vbGlzdF9scnUuYzo2NDk6XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xubW0vbGlzdF9scnUuYy02NTAtXHRyZXMgPSBfX21lbWNnX2xpc3RfbHJ1X2FsbG9jKG1lbWNnLCBscnUsIGdmcCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTMyOD1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzM0LVxubW0vbWVtY29udHJvbC5jOjMzNTpcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS9tZW1jb250cm9sLmMtMzM2LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTU0PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTE3Mi0vKipcbm1tL21lbWNvbnRyb2wuYzoxMTczOiAqIGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8gLSBPYnRhaW4gYSByZWZlcmVuY2Ugb24gYSBnaXZlbiBmb2xpbyYjMzk7cyBtZW1jZy5cbm1tL21lbWNvbnRyb2wuYy0xMTc0LSAqIEBmb2xpbzogZm9saW8gZnJvbSB3aGljaCBtZW1jZyBzaG91bGQgYmUgZXh0cmFjdGVkLlxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTc3LSAqL1xubW0vbWVtY29udHJvbC5jOjExNzg6c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21lbWNvbnRyb2wuYy0xMTc5LXtcbi0tXG5tbS9taWdyYXRlLmM9Mjc0ND1pbnQgbWlncmF0ZV9taXNwbGFjZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5vZGUpXG4tLVxubW0vbWlncmF0ZS5jLTI3NDktXHRMSVNUX0hFQUQobWlncmF0ZXBhZ2VzKTtcbm1tL21pZ3JhdGUuYzoyNzUwOlx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS9taWdyYXRlLmMtMjc1MS1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tLVxubW0vdm1zY2FuLmM9NDE4MD1ib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vdm1zY2FuLmMtNDIzMi1cbm1tL3Ztc2Nhbi5jOjQyMzM6XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xubW0vdm1zY2FuLmMtNDIzNC1cdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tLVxubW0vd29ya2luZ3NldC5jPTU0OD12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTU3Mi1cdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xubW0vd29ya2luZ3NldC5jOjU3MzpcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS93b3JraW5nc2V0LmMtNTc0LVx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIGZvbGlvX3BnZGF0KGZvbGlvKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTE0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X2FjdGl2ZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM9MTA2Mz1pbnQgc2d4X2VuY2xfYWxsb2NfYmFja2luZyhzdHJ1Y3Qgc2d4X2VuY2wgKmVuY2wsIHVuc2lnbmVkIGxvbmcgcGFnZV9pbmRleCxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA2Ni1cdHN0cnVjdCBtZW1fY2dyb3VwICplbmNsX21lbWNnID0gc2d4X2VuY2xfZ2V0X21lbV9jZ3JvdXAoZW5jbCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTA2NzpcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZW5jbF9tZW1jZyk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA2OC1cdGludCByZXQ7XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNzEtXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTA3MjpcdHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNzMtXHRtZW1fY2dyb3VwX3B1dChlbmNsX21lbWNnKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODg2PXN0YXRpYyB2b2lkIGxvb3BfaGFuZGxlX2NtZChzdHJ1Y3QgbG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTA3LVx0aWYgKGNtZF9tZW1jZ19jc3MpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxOTA4Olx0XHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTkwOS1cdFx0XHRtZW1fY2dyb3VwX2Zyb21fY3NzKGNtZF9tZW1jZ19jc3MpKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTIyLVx0aWYgKGNtZF9tZW1jZ19jc3MpIHtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE5MjM6XHRcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MjQtXHRcdGNzc19wdXQoY21kX21lbWNnX2Nzcyk7XG4tLVxuZnMvYnVmZmVyLmM9NzU5PXN0cnVjdCBidWZmZXJfaGVhZCAqZm9saW9fYWxsb2NfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxuZnMvYnVmZmVyLmMtNzY2LVx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbmZzL2J1ZmZlci5jOjc2NzpcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xuZnMvYnVmZmVyLmMtNzY4LVxuLS1cbmZzL2J1ZmZlci5jLTc4NS1vdXQ6XG5mcy9idWZmZXIuYzo3ODY6XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG5mcy9idWZmZXIuYy03ODctXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM9NzQ0PXN0YXRpYyBzdHJ1Y3QgZmFub3RpZnlfZXZlbnQgKmZhbm90aWZ5X2FsbG9jX2V2ZW50KFxuLS1cbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTg0MC1cdC8qIFdob2V2ZXIgaXMgaW50ZXJlc3RlZCBpbiB0aGUgZXZlbnQsIHBheXMgZm9yIHRoZSBhbGxvY2F0aW9uLiAqL1xuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6ODQxOlx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhncm91cC1cdTAwM2VtZW1jZyk7XG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NDItXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtODc4LW91dDpcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjg3OTpcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jLTg4MC1cdHJldHVybiBldmVudDtcbi0tXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmM9NTk9aW50IGlub3RpZnlfaGFuZGxlX2lub2RlX2V2ZW50KHN0cnVjdCBmc25vdGlmeV9tYXJrICppbm9kZV9tYXJrLCB1MzIgbWFzayxcbi0tXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMtOTQtXHQgKi9cbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYzo5NTpcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZ3JvdXAtXHUwMDNlbWVtY2cpO1xuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jLTk2LVx0ZXZlbnQgPSBrbWFsbG9jKGFsbG9jX2xlbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmM6OTc6XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMtOTgtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyOD12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3MzMtICogdGhlIGN1cnJlbnQgdGFzayAoc2ltaWxhciB0byB0aGUgXCYjMzQ7Y3VycmVudFwmIzM0OyBnbG9iYWwgdmFyaWFibGUpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzM0OiAqIG9yIGJ5IHNldF9hY3RpdmVfbWVtY2coKSBwYWlyLlxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTczNS0gKiBQbGVhc2UsIHVzZSBvYmpfY2dyb3VwX2dldCgpIHRvIGdldCBhIHJlZmVyZW5jZSBpZiB0aGUgcG9pbnRlclxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00NzU9REVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtZW1fY2dyb3VwICosIGludF9hY3RpdmVfbWVtY2cpO1xuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ3Ni0vKipcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0Nzc6ICogc2V0X2FjdGl2ZV9tZW1jZyAtIFN0YXJ0cyB0aGUgcmVtb3RlIG1lbWNnIGNoYXJnaW5nIHNjb3BlLlxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ3OC0gKiBAbWVtY2c6IG1lbWNnIHRvIGNoYXJnZS5cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDg1LSAqIHNvIGl0cyBsaWZldGltZSBpcyBndWFyYW50ZWVkIHRvIGV4Y2VlZCB0aGUgc2NvcGUgYmV0d2VlbiB0d29cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo0ODY6ICogc2V0X2FjdGl2ZV9tZW1jZygpIGNhbGxzLlxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ4Ny0gKlxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD00OTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDkyOnNldF9hY3RpdmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ5My17XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTUwNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDo1MDg6c2V0X2FjdGl2ZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNTA5LXtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM9MjA3PXN0YXRpYyB2b2lkIGFsbG9jX2J1bGsoc3RydWN0IGJwZl9tZW1fY2FjaGUgKmMsIGludCBjbnQsIGludCBub2RlLCBib29sIGF0b21pYylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjQwLVx0bWVtY2cgPSBnZXRfbWVtY2coYyk7XG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MjQxOlx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjQyLVx0Zm9yICg7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjUyLVx0fVxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjI1MzpcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy0yNTQtXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4tLVxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTk3OT12b2lkIG5vdHJhY2UgKmJwZl9tZW1fY2FjaGVfYWxsb2NfZmxhZ3Moc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLCBnZnBfdCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTkwLVx0XHRtZW1jZyA9IGdldF9tZW1jZyhjKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5OTE6XHRcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk5Mi1cdFx0cmV0ID0gX19hbGxvYyhjLCBOVU1BX05PX05PREUsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9BQ0NPVU5UKTtcbi0tXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTk0LVx0XHRcdCooc3RydWN0IGJwZl9tZW1fY2FjaGUgKiopcmV0ID0gYztcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5OTU6XHRcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbmtlcm5lbC9icGYvbWVtYWxsb2MuYy05OTYtXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01MTI9dm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxNS1cdCpuZXdfbWVtY2cgPSBicGZfbWFwX2dldF9tZW1jZyhtYXApO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTE2Olx0Km9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coKm5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTctfVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUxOT12b2lkIGJwZl9tYXBfbWVtY2dfZXhpdChzdHJ1Y3QgbWVtX2Nncm91cCAqb2xkX21lbWNnLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUyMS17XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MjI6XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MjMtXHRtZW1fY2dyb3VwX3B1dChuZXdfbWVtY2cpO1xuLS1cbm1tL2ZpbGVtYXAuYz05NDk9aW50IGZpbGVtYXBfYWRkX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2ZpbGVtYXAuYy05NTctXHRpZiAoa2VybmVsX2ZpbGUpXG5tbS9maWxlbWFwLmM6OTU4Olx0XHR0bXAgPSBzZXRfYWN0aXZlX21lbWNnKHJvb3RfbWVtX2Nncm91cCk7XG5tbS9maWxlbWFwLmMtOTU5LVx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIE5VTEwsIGdmcCk7XG5tbS9maWxlbWFwLmMtOTYwLVx0aWYgKGtlcm5lbF9maWxlKVxubW0vZmlsZW1hcC5jOjk2MTpcdFx0c2V0X2FjdGl2ZV9tZW1jZyh0bXApO1xubW0vZmlsZW1hcC5jLTk2Mi1cdGlmIChyZXQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTgwPXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDAyMC1cdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjQwMjE6XHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAyMi1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxNTEtXHQvKiByZXN0b3JlIHRvIGNhbGxlciYjMzk7cyBvbGRfbWVtY2cgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDE1MjpcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDE1My1cdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjk4Nj1fX2Fsd2F5c19pbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmN1cnJlbnRfb2JqX2Nncm91cCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDE4LVx0XHQvKlxubW0vbWVtY29udHJvbC5jOjMwMTk6XHRcdCAqIE1lbWNnIHBvaW50ZXIgaXMgcHJvdGVjdGVkIGJ5IHNjb3BlIChzZWUgc2V0X2FjdGl2ZV9tZW1jZygpKVxubW0vbWVtY29udHJvbC5jLTMwMjAtXHRcdCAqIGFuZCBpcyBwaW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIG9iamNnLCBzbyBvYmpjZyBjYW4mIzM5O3QgZ29cbi0tXG5tbS9tZW1jb250cm9sLmM9MzUzNz1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTQ4LVx0ICogVGhlIG9idGFpbmVkIG9iamNnIHBvaW50ZXIgaXMgc2FmZSB0byB1c2Ugd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLFxubW0vbWVtY29udHJvbC5jOjM1NDk6XHQgKiBkZWZpbmVkIGJ5IGN1cnJlbnQgdGFzayBvciBzZXRfYWN0aXZlX21lbWNnKCkgcGFpci5cbm1tL21lbWNvbnRyb2wuYy0zNTUwLVx0ICogb2JqX2Nncm91cF9nZXQoKSBpcyB1c2VkIHRvIGdldCBhIHBlcm1hbmVudCByZWZlcmVuY2UuXG4tLVxubW0vbWVtY29udHJvbC5jPTQxNTc9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxNjItXG5tbS9tZW1jb250cm9sLmM6NDE2MzpcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYy00MTY0LVx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmM6NDE2NTpcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00MTY2LVx0aWYgKElTX0VSUihtZW1jZykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODg0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MzY3Nz1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXG5tbS9odWdlX21lbW9yeS5jOjM3MjA6XHRcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0zNzIxLVx0XHRzcGxpdF9wYWdlX293bmVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVx0XHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDE2Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5tbS9odWdlX21lbW9yeS5jLTQxODUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNjE6ICogZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODMtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG5tbS9odWdlX21lbW9yeS5jOjQyODc6XHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cdFx0XHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVx0XHRcdFx0XHRcdFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcdFx0XHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0NzczOlx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdHJ1bmNhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS90cnVuY2F0ZS5jPTE3MD1pbnQgdHJ1bmNhdGVfaW5vZGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdHJ1bmNhdGUuYy0xNzktXG5tbS90cnVuY2F0ZS5jOjE4MDpzdGF0aWMgaW50IGZvbGlvX3NwbGl0X29yX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzcGxpdF9hdCxcbm1tL3RydW5jYXRlLmMtMTgxLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbWluX29yZGVyKVxuLS1cbm1tL3RydW5jYXRlLmMtMTg4LVxubW0vdHJ1bmNhdGUuYzoxODk6XHRyZXQgPSBmb2xpb19zcGxpdChmb2xpbywgbWluX29yZGVyLCBzcGxpdF9hdCwgTlVMTCk7XG5tbS90cnVuY2F0ZS5jLTE5MC1cbi0tXG5tbS90cnVuY2F0ZS5jPTIxNz1ib29sIHRydW5jYXRlX2lub2RlX3BhcnRpYWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuLS1cbm1tL3RydW5jYXRlLmMtMjU0LVx0c3BsaXRfYXQgPSBmb2xpb19wYWdlKGZvbGlvLCBQQUdFX0FMSUdOX0RPV04ob2Zmc2V0KSAvIFBBR0VfU0laRSk7XG5tbS90cnVuY2F0ZS5jOjI1NTpcdGlmICghZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8sIHNwbGl0X2F0LCBtaW5fb3JkZXIpKSB7XG5tbS90cnVuY2F0ZS5jLTI1Ni1cdFx0Lypcbi0tXG5tbS90cnVuY2F0ZS5jLTI4MS1cdFx0ICAgIGZvbGlvMi1cdTAwM2VtYXBwaW5nID09IGZvbGlvLVx1MDAzZW1hcHBpbmcpXG5tbS90cnVuY2F0ZS5jOjI4MjpcdFx0XHRmb2xpb19zcGxpdF9vcl91bm1hcChmb2xpbzIsIHNwbGl0X2F0MiwgbWluX29yZGVyKTtcbm1tL3RydW5jYXRlLmMtMjgzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcwNQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA1MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEh1Z2UgUGFnZSBTcGxpdHRpbmcgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBmb2xpb19zcGxpdGAgaXMgaW5kZWVkIGEga2V5IGZ1bmN0aW9uIGluIGBtbS90cnVuY2F0ZS5jYCwgYSBjcml0aWNhbCBhcmVhIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUbyBwcm9wZXJseSBhbmFseXplIHRoaXMsIEkgbmVlZGVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uczsgSSBjb25maXJtZWQgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgIChvciByYXRoZXIgYENPTkZJR19NRU1DR2AsIHRvIGJlIHByZWNpc2UpIGFyZSB0aGUgbmVjZXNzYXJ5IHRvZ2dsZXMuCgpJIHRoZW4gZGlkIGEgZGVlcCBkaXZlIGludG8gdGhlIGZ1bmN0aW9uIG5hbWVzLCBtYWtpbmcgc3VyZSB0byBmaWx0ZXIgc3RhdGljIGZ1bmN0aW9ucyBhbmQgdGhvc2UgdGhhdCBhcmVuJiMzOTt0IGV4cG9ydGVkLiBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgaW50ZXJuYWwsIHNvIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgYW5kIHRoZSBzYW1lIGdvZXMgZm9yIGBmb2xpb19zcGxpdGAuIEJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIGFuZCBmb3VuZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEJ1dCBJIGNvbmZpcm1lZCB0aGF0IGB4YXNfc3BsaXRfYWxsb2NgICppcyogZXhwb3J0ZWQsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4KClRoaXMgaGFzIG5hcnJvd2VkIGRvd24gdGhlIGVzc2VudGlhbCBzeW1ib2xzLiBTbyB0aGUga2V5IGZvY3VzIG9mIHRoaXMgcGF0Y2ggYXJlOgotICAgYHhhc19zcGxpdF9hbGxvY2AKLSAgIGBmb2xpb19zcGxpdGAKLSAgIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYAoKSSBkaWQgYSBmaW5hbCBjaGVjayB0byBjb25maXJtIHRoYXQgbm8gb3RoZXIgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQgb3V0c2lkZSBvZiBgeGFzX3NwbGl0X2FsbG9jYCBhbmQgYF9fZm9saW9fc3BsaXRgLCBzbyBJJiMzOTtsbCBiZSB1c2luZyBgZm9saW9fc3BsaXRgIGFuZCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYXMgd2VsbCB0byBjb3ZlciBhbGwgdGhlIGNhbGwgcGF0aHMsIHNpbmNlIGBfX2ZvbGlvX3NwbGl0YCBpcyBzdGF0aWMuCgpSZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIGtleSBvcHRpb25zIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgLgoKTm93LCBmb3IgdGhlIGNvcmUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBlbmFibGVkLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2ZvbGlvX3NwbGl0YCAoYW5kIGJ5IGV4dGVuc2lvbiwgaXRzIGNhbGxlciwgYGZvbGlvX3NwbGl0YCkgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGlzIG1vZGlmaWNhdGlvbiBpcyB2aXRhbDogaXQgc3dpdGNoZXMgdG8gdGhlIGZvbGlvJiMzOTtzIG1lbWNnICpiZWZvcmUqIGNhcnJ5aW5nIG91dCBvcGVyYXRpb25zIHRoYXQgbWlnaHQgcmVxdWlyZSB0aGUgYWxsb2NhdGlvbiBvZiB4YXJyYXkgbm9kZXMuIFRoaXMgZW5zdXJlcyB0aGF0IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGNvcnJlY3RseSBjaGFyZ2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBtZW1jZywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGFjY3VyYXRlIHJlc291cmNlIGFjY291bnRpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaXMgcmVhY2hlZCB0aHJvdWdoIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuCgpHaXZlbiB0aGlzLCB0aGUgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgaGF2ZSBiZWVuIGlkZW50aWZpZWQsIGFuZCBJJiMzOTtsbCBub3cgbWFyayB0aGUgd29yayBhcyBkb25lIGJ5IGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGFzX3NwbGl0X2FsbG9jJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBhbGxvY2F0ZSB4YXJyYXkgbm9kZXMsIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgeGFycmF5IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGFzX3NwbGl0X2FsbG9jJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJiMzOTtzIG1lbWNnIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBhbGxvY2F0ZSB4YXJyYXkgbm9kZXMsIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgeGFycmF5IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1NzoyOS4wMzIzNjMzMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwMTU4MDA2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGFzX3NwbGl0X2FsbG9jXCIsXG4gICAgXCJmb2xpb19zcGxpdFwiLFxuICAgIFwiX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB4YXNfc3BsaXRfYWxsb2NgIHRvIGFjY291bnQgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBpZiB0aGUgeGFycmF5IGhhcyBgWEFfRkxBR1NfQUNDT1VOVGAgc2V0LiBJdCBhbHNvIG1vZGlmaWVzIGBfX2ZvbGlvX3NwbGl0YCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgdG8gc3dpdGNoIHRvIHRoZSBmb2xpbydzIG1lbWNnIGJlZm9yZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBhbGxvY2F0ZSB4YXJyYXkgbm9kZXMsIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgeGFycmF5IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjI5LjAzMjM2ODY0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MDAxNTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU4Njk1NzBkNmYxYjViMjc3MDE2Yjc3Njk1NzNkNzZjNzExODlmMjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMTo1NzoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcXG5pbmRleCA5YThiNDkxNjU0MGNmLi5iZmU3YmVmODBmMzRlIDEwMDY0NFxcbi0tLSBhL2xpYi94YXJyYXkuY1xcbisrKyBiL2xpYi94YXJyYXkuY1xcbkBAIC0xMDUzLDYgKzEwNTMsOSBAQCB2b2lkIHhhc19zcGxpdF9hbGxvYyhzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0aWYgKHhhcy1cXHUwMDNleGFfc2hpZnQgKyBYQV9DSFVOS19TSElGVCBcXHUwMDNlIG9yZGVyKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAoeGFzLVxcdTAwM2V4YS1cXHUwMDNleGFfZmxhZ3MgXFx1MDAyNiBYQV9GTEFHU19BQ0NPVU5UKVxcbitcXHRcXHRnZnAgfD0gX19HRlBfQUNDT1VOVDtcXG4rXFxuIFxcdGRvIHtcXG4gXFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGU7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDAzMjcwMmE0NjM3YmEuLmU5MDM0NmZkZTU1MWEgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMzk4NCwzNCArMzk4NCw0MiBAQCBzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4gXFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2Zm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWlfcGFnZXMsIGZvbGlvLVxcdTAwM2VpbmRleCk7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XFxuIFxcdGJvb2wgaXNfYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZztcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDtcXG4gXFx0aW50IG9sZF9vcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG4gXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xcbiBcXHRpbnQgbnJfc2htZW1fZHJvcHBlZCA9IDA7XFxuIFxcdGVudW0gdHR1X2ZsYWdzIHR0dV9mbGFncyA9IDA7XFxuLVxcdGludCByZXQ7XFxuIFxcdHBnb2ZmX3QgZW5kID0gMDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sYXJnZShmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdGlmIChmb2xpbyAhPSBwYWdlX2ZvbGlvKHNwbGl0X2F0KSB8fCBmb2xpbyAhPSBwYWdlX2ZvbGlvKGxvY2tfYXQpKSB7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRnb3RvIG91dF9ub19tZW1jZztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG5ld19vcmRlciBcXHUwMDNlPSBvbGRfb3JkZXIpIHtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdGdvdG8gb3V0X25vX21lbWNnO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXQgPSBmb2xpb19jaGVja19zcGxpdHRhYmxlKGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X3R5cGUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFZNX1dBUk5fT05DRShyZXQgPT0gLUVJTlZBTCwgXFxcIlRyaWVkIHRvIHNwbGl0IGFuIHVuc3BsaXR0YWJsZSBmb2xpb1xcXCIpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBvdXRfbm9fbWVtY2c7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIHN3aXRjaCB0byBmb2xpbydzIG1lbWNnIGFzIHhhcnJheSBub2RlIGFsbG9jYXRpb24gY2FuIGhhcHBlbiBhbmRcXG4rXFx0ICogbmVlZHMgdG8gY2hhcmdlIHRvIGl0LlxcbitcXHQgKi9cXG4rXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4rXFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxuK1xcbiBcXHRpZiAoaXNfYW5vbikge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgY2FsbGVyIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhvbGQgYW4gbW1hcF9sb2NrIHRoYXQgd291bGRcXG5AQCAtNDE0MCw2ICs0MTQ4LDEwIEBAIHN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbiBcXHRpZiAobWFwcGluZylcXG4gXFx0XFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xcbiBvdXQ6XFxuK1xcdC8qIHJlc3RvcmUgdG8gY2FsbGVyJ3Mgb2xkX21lbWNnICovXFxuK1xcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitvdXRfbm9fbWVtY2c6XFxuIFxcdHhhc19kZXN0cm95KFxcdTAwMjZ4YXMpO1xcbiBcXHRpZiAoaXNfcG1kX29yZGVyKG9sZF9vcmRlcikpXFxuIFxcdFxcdGNvdW50X3ZtX2V2ZW50KCFyZXQgPyBUSFBfU1BMSVRfUEFHRSA6IFRIUF9TUExJVF9QQUdFX0ZBSUxFRCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjMwLjIyMzA1MjMxNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNzgyNTEwNDU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4YXNfc3BsaXRfYWxsb2NcIixcbiAgICBcImZvbGlvX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJ3MgbWVtY2cgYmVmb3JlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFsbG9jYXRlIHhhcnJheSBub2RlcywgZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB4YXJyYXkgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTg2OTU3MGQ2ZjFiNWIyNzcwMTZiNzc2OTU3M2Q3NmM3MTE4OWYyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjE6NTc6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLmJmZTdiZWY4MGYzNGUgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbisrKyBiL2xpYi94YXJyYXkuY1xuQEAgLTEwNTMsNiArMTA1Myw5IEBAIHZvaWQgeGFzX3NwbGl0X2FsbG9jKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0aWYgKHhhcy1cdTAwM2V4YV9zaGlmdCArIFhBX0NIVU5LX1NISUZUIFx1MDAzZSBvcmRlcilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKHhhcy1cdTAwM2V4YS1cdTAwM2V4YV9mbGFncyBcdTAwMjYgWEFfRkxBR1NfQUNDT1VOVClcbitcdFx0Z2ZwIHw9IF9fR0ZQX0FDQ09VTlQ7XG4rXG4gXHRkbyB7XG4gXHRcdHN0cnVjdCB4YV9ub2RlICpub2RlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAwMzI3MDJhNDYzN2JhLi5lOTAzNDZmZGU1NTFhIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTM5ODQsMzQgKzM5ODQsNDIgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRYQV9TVEFURSh4YXMsIFx1MDAyNmZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaV9wYWdlcywgZm9saW8tXHUwMDNlaW5kZXgpO1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdGJvb2wgaXNfYW5vbiA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbyk7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IE5VTEw7XG4gXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDtcbiBcdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4gXHRpbnQgbnJfc2htZW1fZHJvcHBlZCA9IDA7XG4gXHRlbnVtIHR0dV9mbGFncyB0dHVfZmxhZ3MgPSAwO1xuLVx0aW50IHJldDtcbiBcdHBnb2ZmX3QgZW5kID0gMDtcbitcdGludCByZXQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0aWYgKGZvbGlvICE9IHBhZ2VfZm9saW8oc3BsaXRfYXQpIHx8IGZvbGlvICE9IHBhZ2VfZm9saW8obG9ja19hdCkpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gb3V0X25vX21lbWNnO1xuIFx0fVxuIFxuIFx0aWYgKG5ld19vcmRlciBcdTAwM2U9IG9sZF9vcmRlcikge1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfbm9fbWVtY2c7XG4gXHR9XG4gXG4gXHRyZXQgPSBmb2xpb19jaGVja19zcGxpdHRhYmxlKGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X3R5cGUpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRWTV9XQVJOX09OQ0UocmV0ID09IC1FSU5WQUwsIFwiVHJpZWQgdG8gc3BsaXQgYW4gdW5zcGxpdHRhYmxlIGZvbGlvXCIpO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfbm9fbWVtY2c7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogc3dpdGNoIHRvIGZvbGlvJ3MgbWVtY2cgYXMgeGFycmF5IG5vZGUgYWxsb2NhdGlvbiBjYW4gaGFwcGVuIGFuZFxuK1x0ICogbmVlZHMgdG8gY2hhcmdlIHRvIGl0LlxuK1x0ICovXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XG4rXG4gXHRpZiAoaXNfYW5vbikge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgY2FsbGVyIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhvbGQgYW4gbW1hcF9sb2NrIHRoYXQgd291bGRcbkBAIC00MTQwLDYgKzQxNDgsMTAgQEAgc3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRpZiAobWFwcGluZylcbiBcdFx0aV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpO1xuIG91dDpcbitcdC8qIHJlc3RvcmUgdG8gY2FsbGVyJ3Mgb2xkX21lbWNnICovXG4rXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rb3V0X25vX21lbWNnOlxuIFx0eGFzX2Rlc3Ryb3koXHUwMDI2eGFzKTtcbiBcdGlmIChpc19wbWRfb3JkZXIob2xkX29yZGVyKSlcbiBcdFx0Y291bnRfdm1fZXZlbnQoIXJldCA/IFRIUF9TUExJVF9QQUdFIDogVEhQX1NQTElUX1BBR0VfRkFJTEVEKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjMwLjIyMzA1MzgwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MTk5NzY3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkgY29yZSBhcmVhcyDigJMgYGxpYi94YXJyYXkuY2AgYW5kIGBtbS9odWdlX21lbW9yeS5jYC4gSSBzZWUgdGhhdCBpbiBgbGliL3hhcnJheS5jYCwgdGhlIGB4YXNfc3BsaXRfYWxsb2NgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGBfX0dGUF9BQ0NPVU5UYCB0byB0aGUgYGdmcGAgZmxhZyB1bmRlciBhIGNlcnRhaW4gY29uZGl0aW9uOiBpZiBgeGFzLVx1MDAzZXhhLVx1MDAzZXhhX2ZsYWdzIFx1MDAyNiBYQV9GTEFHU19BQ0NPVU5UYCBpcyB0cnVlLiBUaGF0IGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBwb3RlbnRpYWwgY2hhbmdlIGluIG1lbW9yeSBhY2NvdW50aW5nIHJlbGF0ZWQgdG8gWEFycmF5IGFsbG9jYXRpb25zLCBsaWtlbHkgZm9yIG1lbWNnIGludGVncmF0aW9uLiBPdmVyIGluIGBtbS9odWdlX21lbW9yeS5jYCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBfX2ZvbGlvX3NwbGl0YCB0byBzd2l0Y2ggdGhlIG9wZXJhdGlvbiB0byB0aGUgZm9saW8ncyBtZW1jZyAqYmVmb3JlKiBhbnkgeGFycmF5IG5vZGUgYWxsb2NhdGlvbnMuIFRoaXMgcmVpbmZvcmNlcyB0aGUgbWVtY2cgYWNjb3VudGluZyBhbmdsZTsgdGhlIGFpbSBzZWVtcyB0byBiZSBlbnN1cmluZyBhbGxvY2F0aW9ucyB3aXRoaW4gZm9saW8gc3BsaXR0aW5nIGFyZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLCBpbnN0ZWFkIG9mIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgdGFzaydzIG9yIHBhcmVudCBtZW1jZy5cblxuR2l2ZW4gdGhlIHNjb3Bl4oCUY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIG9mIGh1Z2UgcGFnZXMgYW5kIGZvbGlvIHNwbGl0dGluZywgaW4gY29uanVuY3Rpb24gd2l0aCBjaGFuZ2VzIHRvIHhhcnJheeKAlHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIEkgbmVlZCB0byBnZXQgdGhpcyBwcm9wZXJseSB0ZXN0ZWQsIGFuZCBmYXN0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gYHhhc19zcGxpdF9hbGxvY2Agc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIGluIGBsaWIveGFycmF5LmNgLiBCdXQgYF9fZm9saW9fc3BsaXRg4oCmIHdhaXQsIGl0J3MgYSAqc3RhdGljKiBmdW5jdGlvbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuICpTdGF0aWMqLCBva2F5LiBEb2VzIHRoYXQgaW5mbHVlbmNlIHRoZSBmdXp6aW5nIHN0cmF0ZWd5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IHRvIGl0LiBOb3cgSSBuZWVkIHRvIGNoZWNrIGBtbS9odWdlX21lbW9yeS5jYCwgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjM1Ljc0MzAzMzI2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ2OTMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXFxubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MjUxPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjU1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NjpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI4ND1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg3OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU3OjM1Ljc4NjUwNjYyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NDMwNDUyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRXhhbWluaW5nIEh1Z2UgUGFnZSBTcGxpdHRpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIHNwbGl0dGluZyBwcm9jZXNzLiBJIHNlZSB0aGF0IGJvdGggYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGFuZCBgZm9saW9fc3BsaXRgIHVsdGltYXRlbHkgY2FsbCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gYF9fZm9saW9fc3BsaXRgLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHNwbGl0IG9wZXJhdGlvbiwgaXQgc2VlbXMuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmA6IElzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgdXNlZCBvdXRzaWRlIG9mIHRoaXMgcGFydGljdWxhciBtb2R1bGU/IElzIGl0IGV4cG9ydGVkIGZvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyB0byBsZXZlcmFnZSwgb3IgaXMgaXQgcHVyZWx5IGFuIGludGVybmFsIGRldGFpbD8gSSBuZWVkIHRvIGtub3cgaWYgaXQncyB2aXNpYmxlIG9yIGlmIGl0J3MganVzdCBjYWxsZWQgd2l0aGluIHRoaXMgY29kZSBwYXRoLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCBleHBvcnQgdGFibGUsIGNyb3NzLXJlZmVyZW5jZXMsIGFuZCBwb3NzaWJseSBhIG1vcmUgdGFyZ2V0ZWQgY29kZSBzZWFyY2ggdG8gYXNjZXJ0YWluIGl0cyBzY29wZS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGhlcmUgaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWlnaHQgbWFrZSBpbiB0aGlzIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1Nzo0NS42Mjk1NTQ0NjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1Mzg0NDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zOTc9ZW51bSBzcGxpdF90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwMS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDI6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAzLVxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDEyPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE0LXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTU6XFx0cmV0dXJuIF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgbGlzdCwgbmV3X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTYtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MTg0PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjUwLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1MTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTItXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1Nzo0Ny4xODM0MDM2MzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTQ4NTMxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBc3Nlc3NpbmcgUG90ZW50aWFsIFN0cmF0ZWdpZXMgZm9yIERhdGEgUGFydGl0aW9uaW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBoYW5kbGUgdGhpcyBkYXRhIHNwbGl0dGluZy4gXCJmb2xpb19zcGxpdFwiIGFuZCB0aGF0IGhlbHBlciBmdW5jdGlvbiwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBib3RoIGltbWVkaWF0ZWx5IHNwcmluZyB0byBtaW5kIGFzIHByb21pc2luZyBjYW5kaWRhdGVzLiBUaGV5IHNlZW0gbGlrZSB0aGV5J2Qgb2ZmZXIgYSBnb29kIGFwcHJvYWNoLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgZGF0YSBhbmQgY29uc3RyYWludHMuIE9mIGNvdXJzZSwgdGhhdCdzIGp1c3QgYSBxdWljayBndXQgY2hlY2suIEkgbmVlZCB0byBkaWcgaW4gYSBiaXQgZGVlcGVyLiBMZXQncyBzZWUgaG93IGB4YXNfc3BsaXRfYWxsb2NgIHN0YWNrcyB1cCBhZ2FpbnN0IHRoZW0uIEl0IG1pZ2h0IGJlIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1ODEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1Nzo1Ni43MzE5Mzc1NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2Mjc1NTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YXNfc3BsaXRfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdD00OTA9ZW50cnkgY2FuIGJlIHNwbGl0IGludG8gZW50cmllcyBvY2N1cHlpbmcgc21hbGxlciByYW5nZXMgYnkgY2FsbGluZ1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTE6eGFzX3NwbGl0X2FsbG9jKCkgd2l0aG91dCB0aGUgeGFfbG9jayBoZWxkLCBmb2xsb3dlZCBieSB0YWtpbmcgdGhlIGxvY2tcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3QtNDkyLWFuZCBjYWxsaW5nIHhhc19zcGxpdCgpIG9yIGNhbGxpbmcgeGFzX3RyeV9zcGxpdCgpIHdpdGggeGFfbG9jay4gVGhlXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQ5MzpkaWZmZXJlbmNlIGJldHdlZW4geGFzX3NwbGl0X2FsbG9jKCkreGFzX3NwbGl0KCkgYW5kIHhhc190cnlfYWxsb2MoKSBpc1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdDo0OTQ6dGhhdCB4YXNfc3BsaXRfYWxsb2MoKSArIHhhc19zcGxpdCgpIHNwbGl0IHRoZSBlbnRyeSBmcm9tIHRoZSBvcmlnaW5hbFxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkveGFycmF5LnJzdC00OTUtb3JkZXIgdG8gdGhlIG5ldyBvcmRlciBpbiBvbmUgc2hvdCB1bmlmb3JtbHksIHdoZXJlYXMgeGFzX3RyeV9zcGxpdCgpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3hhcnJheS5yc3Q9NDk3PUZvciBleGFtcGxlLCB0byBzcGxpdCBhbiBvcmRlci05IGVudHJ5LCB3aGljaCB0YWtlcyAyXig5LTYpPTggc2xvdHMsXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0OjQ5ODphc3N1bWluZyBgYFhBX0NIVU5LX1NISUZUYGAgaXMgNiwgeGFzX3NwbGl0X2FsbG9jKCkgKyB4YXNfc3BsaXQoKSBuZWVkXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS94YXJyYXkucnN0LTQ5OS04IHhhX25vZGUuIHhhc190cnlfc3BsaXQoKSBzcGxpdHMgdGhlIG9yZGVyLTkgZW50cnkgaW50b1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdD0zNDU9WEFycmF55pyJ6IO95Yqb5bCG5aSa5Liq57Si5byV6IGU57O75Zyo5LiA6LW377yM5Zug5q2k5a+55LiA5Liq57Si5byV55qE5pON5L2c5Lya5b2x5ZON5Yiw5omA5pyJ55qE57Si5byV44CC5L6L5aaC77yM5a2Y5YKo5Yiw5Lu75L2V57Si5byV5bCGXFx1ZmZmZFxcdWZmZmQuLi5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL3hhcnJheS5yc3QtMzYyLeWcqOS4gOS4quWkmue0ouW8leadoeebrueahOS7u+S9leS4gOS4que0ouW8leS4reWtmOWCqCBgYE5VTExgYCDvvIzlsIbmiormr4/kuKrntKLlvJXnmoTmnaHnm67orr7nva7kuLogYGBOVUxMYGAg77yM5bm26Kej6Zmk57uR5a6a44CC6YCa6L+H6LCDXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdDozNjM655SoeGFzX3NwbGl0X2FsbG9jKCnvvIzlnKjmsqHmnIl4YV9sb2Nr55qE5oOF5Ya15LiL77yM5Y+v5Lul5bCG5LiA5Liq5aSa57Si5byV5p2h55uu5YiG5Ymy5oiQ5Y2g5o2u6L6D5bCP6IyD5Zu055qE5p2h55uu77yM54S25ZCO5YaN5Y+W6ZSB5bm2XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkveGFycmF5LnJzdC0zNjQt6LCD55SoeGFzX3NwbGl0KCnjgIJcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTM2ND1zdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0zODItLypcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDozODM6ICogeGFzX3NwbGl0X2FsbG9jKCkgZG9lcyBub3Qgc3VwcG9ydCBhcmJpdHJhcnkgb3JkZXJzLiBUaGlzIGltcGxpZXMgbm9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0zODQtICogNTEyTUIgVEhQIG9uIEFSTTY0IHdpdGggNjRLQiBiYXNlIHBhZ2Ugc2l6ZS5cXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU2Mj12b2lkIHhhc19zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKiwgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTYzOnZvaWQgeGFzX3NwbGl0X2FsbG9jKHN0cnVjdCB4YV9zdGF0ZSAqLCB2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNTY0LXZvaWQgeGFzX3RyeV9zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksIHVuc2lnbmVkIGludCBvcmRlcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE1Nzc9c3RhdGljIGlubGluZSB2b2lkIHhhc19zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1ODItXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTgzOnN0YXRpYyBpbmxpbmUgdm9pZCB4YXNfc3BsaXRfYWxsb2Moc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5LFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTU4NC1cXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcClcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jPTE4MzY9c3RhdGljIHZvaWQgY2hlY2tfc3BsaXRfMShzdHJ1Y3QgeGFycmF5ICp4YSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmxpYi90ZXN0X3hhcnJheS5jLTE4NDUtXFxubGliL3Rlc3RfeGFycmF5LmM6MTg0NjpcXHR4YXNfc3BsaXRfYWxsb2MoXFx1MDAyNnhhcywgeGEsIG9yZGVyLCBHRlBfS0VSTkVMKTtcXG5saWIvdGVzdF94YXJyYXkuYy0xODQ3LVxcdHhhc19sb2NrKFxcdTAwMjZ4YXMpO1xcbi0tXFxubGliL3hhcnJheS5jPTEwMTE9c3RhdGljIHZvaWQgX194YXNfaW5pdF9ub2RlX2Zvcl9zcGxpdChzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4tLVxcbmxpYi94YXJyYXkuYy0xMDMxLS8qKlxcbmxpYi94YXJyYXkuYzoxMDMyOiAqIHhhc19zcGxpdF9hbGxvYygpIC0gQWxsb2NhdGUgbWVtb3J5IGZvciBzcGxpdHRpbmcgYW4gZW50cnkuXFxubGliL3hhcnJheS5jLTEwMzMtICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cXG4tLVxcbmxpYi94YXJyYXkuYy0xMDQ0LSAqL1xcbmxpYi94YXJyYXkuYzoxMDQ1OnZvaWQgeGFzX3NwbGl0X2FsbG9jKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbmxpYi94YXJyYXkuYy0xMDQ2LVxcdFxcdGdmcF90IGdmcClcXG4tLVxcbmxpYi94YXJyYXkuYy0xMDc1LX1cXG5saWIveGFycmF5LmM6MTA3NjpFWFBPUlRfU1lNQk9MX0dQTCh4YXNfc3BsaXRfYWxsb2MpO1xcbmxpYi94YXJyYXkuYy0xMDc3LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjc3PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzAxLVxcdFxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzozNzAyOlxcdFxcdFxcdCAqIHVuaWZvcm0gc3BsaXQgaGFzIHhhc19zcGxpdF9hbGxvYygpIGNhbGxlZCBiZWZvcmVcXG5tbS9odWdlX21lbW9yeS5jLTM3MDMtXFx0XFx0XFx0ICogaXJxIGlzIGRpc2FibGVkIHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnksIHdoZXJlYXNcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk4MD1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA1OS1cXHRcXHRcXHR4YXNfc2V0X29yZGVyKFxcdTAwMjZ4YXMsIGZvbGlvLVxcdTAwM2VpbmRleCwgbmV3X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jOjQwNjA6XFx0XFx0XFx0eGFzX3NwbGl0X2FsbG9jKFxcdTAwMjZ4YXMsIGZvbGlvLCBvbGRfb3JkZXIsIGdmcCk7XFxubW0vaHVnZV9tZW1vcnkuYy00MDYxLVxcdFxcdFxcdGlmICh4YXNfZXJyb3IoXFx1MDAyNnhhcykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTc6NTguMzk0Njk3OTA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ5NjQwNDUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB4YXNfc3BsaXRfYWxsb2NgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgYSBzcGVjaWZpYyBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgeGFzX3NwbGl0X2FsbG9jYCBpcyBjYWxsZWQgYnkgYF9fZm9saW9fc3BsaXRgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIGtleSBkaWZmZXJlbmNlIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgX19HRlBfQUNDT1VOVGAgd2l0aGluIGB4YXNfc3BsaXRfYWxsb2NgIGJhc2VkIG9uIHRoZSBgWEFfRkxBR1NfQUNDT1VOVGAgZmxhZyBpbiBgeGFzLVx1MDAzZXhhLVx1MDAzZXhhX2ZsYWdzYC4gVGhpcyBpcyBnb29kOyB0aGF0J3MgdGhlIGtpbmQgb2Ygc3VidGxlIGNoYW5nZSB0aGF0IGNhbiBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgaW4gYWNjb3VudGluZy5cblxuVGhlIG90aGVyIGNydWNpYWwgcGFydCBpcyB0aGUgbWVtY2cgc3dpdGNoaW5nIHRoYXQgaGFwcGVucyBpbiBgX19mb2xpb19zcGxpdGAgKmJlZm9yZSogdGhlIGNhbGwgdG8gYHhhc19zcGxpdF9hbGxvY2AuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdyBiZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0IG1lbWNnLCBhIGNyaXRpY2FsIGFzcGVjdCBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBpc29sYXRpb24uIERlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgZXhwZWN0ZWQuXG5cblNpbmNlIHRoaXMgdG91Y2hlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWVtY2cgYWNjb3VudGluZywgdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGRlc2lnbmF0aW9uIGlzIHNwb3Qgb24uIEknbGwgbWFrZSBhIG5vdGUgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIEknbSBhc3Nlc3NpbmcgdGhlIHBhdGNoIGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gYSBiaXQgZGVlcGVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgeGFzX3NwbGl0X2FsbG9jYCwgYGZvbGlvX3NwbGl0YCAoYW5kIGltcG9ydGFudGx5LCBgX19mb2xpb19zcGxpdGApLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGFuZCBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgICh0aGUgaW5saW5lIHZlcnNpb24pLlxuXG5Ib2xkIG9uLCBJIGFsc28gbmVlZCB0byBjaGVjayBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLiBEb2VzIHRoYXQgY2FsbCBgX19mb2xpb19zcGxpdGA/IFRoYXQncyB0aGUgaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZSwgYW5kIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGNhbGwgY2hhaW4gYW5kIGVuc3VyZSBJJ20gZ2V0dGluZyBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTg6MDcuODkxMTA3Mjg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg2ODgwMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NwbGl0X3VubWFwcGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDI9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAzLVxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA1LXVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTgwPXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MTYyLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE2NC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MTg0OmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4NS17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTkwMj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTE2LVxcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cXHUwMDNldm1hLCBhZGRyLCB0cnVlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjkxNzpcXHRyZXQgPSBmb2xpb19zcGxpdF91bm1hcHBlZChmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy05MTgtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTg6MDkuMzc3OTkyMzM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTc1MTAyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYSBQb3RlbnRpYWwgSXNzdWUgaW4gRm9saW8gU3BsaXR0aW5nKipcblxuT2theSwgc28gYGZvbGlvX3NwbGl0X3VubWFwcGVkYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGdpdmluZyBtZSBwYXVzZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGBmb2xpb19zcGxpdF91bm1hcHBlZGAgaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgYW5kIEkgc3VzcGVjdCBpdCBjYWxscyBgX19mb2xpb19zcGxpdGAuIFRoYXQncyB0aGUgbGlrZWx5IHJlbGF0aW9uc2hpcCBhdCBwbGF5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjYWxsIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBpbnZvbHZlZCBpbiB0aGF0IGBfX2ZvbGlvX3NwbGl0YCBmdW5jdGlvbi4gVGhpcyBpcyBhbGwgYWJvdXQgY29uZmlybWluZyB0aGUgZGF0YSBmbG93LCB0aGUgaW50ZXJhY3Rpb25zIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3BsaXR0aW5nIG9wZXJhdGlvbiBpcyBhY3R1YWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGBmb2xpb19zcGxpdF91bm1hcHBlZGAgaXMgKnJlYWxseSogZG9pbmcuIEkgd2FudCB0byBzZWUgaG93IGBfX2ZvbGlvX3NwbGl0YCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU4OjE5Ljk1MzA5NzIzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTg0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTg0OlxcdGludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbjQxODU6XFx0e1xcbjQxODY6XFx0XFx0aW50IHJldCA9IDA7XFxuNDE4NzpcXHRcXG40MTg4OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19tYXBwZWQoZm9saW8pLCBmb2xpbyk7XFxuNDE4OTpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbjQxOTA6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSwgZm9saW8pO1xcbjQxOTE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XFxuNDE5MjpcXHRcXG40MTkzOlxcdFxcdGlmIChmb2xpb19leHBlY3RlZF9yZWZfY291bnQoZm9saW8pICE9IGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSAxKVxcbjQxOTQ6XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuNDE5NTpcXHRcXG40MTk2OlxcdFxcdGxvY2FsX2lycV9kaXNhYmxlKCk7XFxuNDE5NzpcXHRcXHRyZXQgPSBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBOVUxMLFxcbjQxOTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcXG40MTk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdDAsIE5VTEwpO1xcbjQyMDA6XFx0XFx0bG9jYWxfaXJxX2VuYWJsZSgpO1xcbjQyMDE6XFx0XFx0cmV0dXJuIHJldDtcXG40MjAyOlxcdH1cXG40MjAzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1ODoxOS45NTMyNjIzMTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg5OTkwNDc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIFNwbGl0dGluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW5pdGlhbGx5IHRob3VnaHQgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCB3YXMgY2FsbGluZyBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYC4gQnV0IGhhbmcgb24sIHRoZSBwYXRjaCBhY3R1YWxseSBjaGFuZ2VkIGBfX2ZvbGlvX3NwbGl0YCwgbm90IHRoZSBmdW5jdGlvbiBJIHdhcyBqdXN0IGZvY3VzaW5nIG9uLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgX19mb2xpb19zcGxpdGAgaXMgYmVpbmcgdXNlZC4gTGV0J3MgdHJhY2UgdGhvc2UgY2FsbHMgYW5kIHNlZSB3aGF0IGltcGFjdCB0aGUgbW9kaWZpY2F0aW9ucyBoYXZlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcHJvcGVybHkgZXZhbHVhdGUgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg3NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTg6MjkuODUzMTY5Njk3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjcwMDA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXFxubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MjUxPWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjU1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1NjpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00MjU3LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI4ND1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg3OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU4OjI5Ljg5NTg3MjUyNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTA3MTk2ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0J3MgY2xlYXIgdGhhdCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIGBmb2xpb19zcGxpdGAgYm90aCB1bHRpbWF0ZWx5IGNhbGwgYF9fZm9saW9fc3BsaXRgLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHNwbGl0IGxvZ2ljLiBJIHF1aWNrbHkgY2hlY2tlZCBmb3Igb3RoZXIgY2FsbGVycyBvZiBgX19mb2xpb19zcGxpdGAsIGp1c3QgdG8gbWFrZSBzdXJlIEkgd2Fzbid0IG1pc3NpbmcgYW55IG90aGVyIGludGVyYWN0aW9ucywgYnV0IGl0IGxvb2tzIGxpa2UgdGhvc2UgdHdvLCBhbmQgb25seSB0aG9zZSB0d28sIGFyZSBkaXJlY3RseSBjYWxsaW5nIGl0LiBUaGVyZWZvcmUsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYGZvbGlvX3NwbGl0YCBiZWNvbWUgbXkgcHJpbWFyeSBwb2ludHMgb2YgZm9jdXMsIGluIGNvbmp1bmN0aW9uIHdpdGggYHhhc19zcGxpdF9hbGxvY2AuIE5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGVpciBleHBvcnRzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYW5kIGludGVuZGVkIHVzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUzNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1ODozOS4wMDMwNzEzNDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTEzODE4OTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKl9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1ODo0MC45NTQ0NjAxOThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNTY0NzE5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIEZvbGlvIFNwbGl0IEV4cG9ydHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIG91dHB1dCBvZiB0aGUgYGZvbGlvX3NwbGl0YCBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGdlbmVyYXRlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBbbWVudGlvbiBzcGVjaWZpYyBmaWxlIGZvcm1hdHMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHJlbGV2YW50IHRvIHlvdXIgZmllbGRdLiBBcmUgdGhlIGV4cGVjdGVkIGZpbGVzIGJlaW5nIGNyZWF0ZWQ/IEFyZSB0aGV5IHBvcHVsYXRlZCBjb3JyZWN0bHksIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbnM/IEkgbmVlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkgYW5kIGZvcm1hdCBjb25zaXN0ZW5jeS4gQW55IGVycm9ycyBvciBhbm9tYWxpZXMgaGVyZSBjb3VsZCBpbmRpY2F0ZSBkZWVwZXIgaXNzdWVzIGZ1cnRoZXIgZG93biB0aGUgcGlwZWxpbmUsIHNvIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTGV0J3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBleHBvcnRpbmcgYXMgZXhwZWN0ZWQgYmVmb3JlIHdlIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1ODo1MS4wMTA5MzQxNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODE3MjAxOTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTg6NTMuMDkyNjYyMjQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNzM3NTU5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkEgUXVpY2sgSm9sdCBvZiBTdXJwcmlzZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkganVzdCBzYXcgdGhhdCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgZnVuY3Rpb24uIFdhaXQgYSBtaW51dGUuLi4gdGhhdCB0aGluZydzICpleHBvcnRlZCo/IFRoYXQncyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcgYXQgYWxsLiBHaXZlbiB0aGUgbmFtZSwgSSBhc3N1bWVkIGl0IHdhcyBhIGRlZXBseSBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9uLCBzb21ldGhpbmcgbWVhbnQgdG8gYmUgaGlkZGVuIGJlaGluZCBhIGNhcmVmdWxseSBjcmFmdGVkIEFQSS4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBzb21lb25lIHRob3VnaHQgZXhwb3NpbmcgdGhhdCBtYWRlIHNlbnNlLiBXYXMgaXQgZm9yIGEgc3BlY2lmaWMgZGVidWdnaW5nIHNjZW5hcmlvPyBPciBwZXJoYXBzIHRoZXkgZGlkbid0IGZ1bGx5IGdyYXNwIHRoZSBwb3RlbnRpYWwgZm9yIG1pc3VzZSBhbmQgdW5pbnRlbmRlZCBkZXBlbmRlbmNpZXM/IEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBhYm91dCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0cyB2aXNpYmlsaXR5LiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIOKAkyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDY1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjE6NTk6MDIuNDY2NDIwMjAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc0MjkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MTg0PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjUwLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1MTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTItXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OTowMi41MDkxNjU2NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM4NzMyMzkxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjo4NjYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OToyNi4zODI0MDY4ODFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzAyMTYzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTM5Nz1lbnVtIHNwbGl0X3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAxLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwMjppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDMtXFx0XFx0dW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDk9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDExLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQxMjpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTMtXFx0XFx0dW5zaWduZWQgaW50IG5ld19vcmRlcilcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTQte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQxNTpcXHRyZXR1cm4gX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNi19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDE3PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTgte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQxOTpcXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MjAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDIyPXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MjMte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQyNDpcXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgTlVMTCwgMCk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTYyOT1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjYzMDpzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02MzEtXFx0XFx0dW5zaWduZWQgaW50IG5ld19vcmRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgwMD1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0X3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MDIte1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgwMzpcXHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTgwNC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQxODQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNTAtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MjUxOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Mi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNjgtICogSXQgaGFzIHRoZSBzYW1lIHByZXJlcXVpc2l0ZXMgYW5kIHJldHVybnMgYXNcXG5tbS9odWdlX21lbW9yeS5jOjQyNjk6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cXG5tbS9odWdlX21lbW9yeS5jLTQyNzAtICpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDMxOD1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDMxOS17XFxubW0vaHVnZV9tZW1vcnkuYzo0MzIwOlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDMyMS19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2MDQ9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NjczLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0Njc0OlxcdFxcdCAqIEZvciBmb2xpb3Mgd2l0aCBwcml2YXRlLCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpXFxubW0vaHVnZV9tZW1vcnkuYy00Njc1LVxcdFxcdCAqIHdpbGwgdHJ5IHRvIGRyb3AgaXQgYmVmb3JlIHNwbGl0IGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBmb2xpb1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OToyNy44NTI2MjgyMjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3NzU2MDg2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBUaGlzIGZ1bmN0aW9uLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGl0J3Mgbm90IGFjdHVhbGx5IGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBpdCAqaXMqIGFuIGVudHJ5IHBvaW50LCBhbGJlaXQgbm9uLXN0YXRpYywgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gU28gaXQncyBjYWxsYWJsZSBmcm9tIHdpdGhpbiB0aGUga2VybmVsLiBJIHdvbmRlciB3aHkgaXQncyBub3QgZXhwb3J0ZWQuIE1heWJlIGl0J3MgaW50ZW5kZWQgYXMgYW4gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHRoZXkganVzdCBkaWRuJ3QgbWFyayBzdGF0aWMgZm9yIHNvbWUgc3BlY2lmaWMgcmVhc29uLi4uIHBlcmhhcHMgaXQncyB1c2VkIGluIGRlYnVnZ2luZyBvciBieSBvdGhlciBpbnRlcm5hbCBtb2R1bGVzLiBPciBtYXliZSBpdCdzIGp1c3QgYSBoaXN0b3JpY2FsIGFydGlmYWN0LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIHNpbmNlIHdlJ3JlIGxvb2tpbmcgYXQgc3BsaXR0aW5nIGh1Z2UgcGFnZXMsIHdoZXJlIGRvZXMgYGZvbGlvX3NwbGl0YCBmYWN0b3IgaW50byB0aGlzPyBUaGF0J3MgdGhlIGNvcmUgaW50ZXJmYWNlLCBpc24ndCBpdD8gSXMgdGhpcyBmdW5jdGlvbiwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBhIGxvd2VyLWxldmVsIGJ1aWxkaW5nIGJsb2NrICpmb3IqIGBmb2xpb19zcGxpdGA/IE9yIGlzIGl0IHVzZWQgaW4gc29tZSBvdGhlciBzcGVjaWZpYyBzcGxpdC1yZWxhdGVkIGNvbnRleHQ/IExldCBtZSBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0IGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbmFsaXR5IGNvbm5lY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBBUElzIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OTo0My42MjgyMzk3ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTg0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zNjc3PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzE5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzcyMDpcXHRcXHRmb2xpb19zcGxpdF9tZW1jZ19yZWZzKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3MjEtXFx0XFx0c3BsaXRfcGFnZV9vd25lcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXFxubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MTYyLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE2NC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MTg0OmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4NS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyNTE9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXFxubW0vaHVnZV9tZW1vcnkuYzo0MjU2OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTctXFx0XFx0XFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjYwLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI2MTogKiBmb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg1LVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdlX21lbW9yeS5jLTQyODYte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjA0PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbl9mb2xpb19vZmZzZXQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcXHRcXHRcXHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ2OTgtXFx0XFx0XFx0XFx0c3BsaXQrKztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDcyMT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzcyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NzczOlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc3NC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OTo0My42NzM0MjY4NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg1Njc0OTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgYGZvbGlvX3NwbGl0YCBFeHBvcnQqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIHJlZmVyZW5jaW5nIGBmb2xpb19zcGxpdGAuIEZpcnN0IGluc3RpbmN0PyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSdtIHRoaW5raW5nLCBpcyBpdCBhdmFpbGFibGUgaW4gdGhlIHNjb3BlIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkPyBJcyBpdCBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb24/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIGluIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBkZWZpbml0aW9uIHRvIGNvbmZpcm0gdGhlIGV4cG9ydCBzdGF0dXMuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBkZWJ1Z2dpbmcgaWYgaXQncyBhIHNpbXBsZSBzY29waW5nIGlzc3VlLiBHb3R0YSBjb25maXJtIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBleHRlcm5hbGx5LCB5b3Uga25vdz8gTGV0J3MgY2hlY2sgdGhlIGltcG9ydCBzdHJ1Y3R1cmUgb3IgdGhlIEFQSSBkb2N1bWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIxOjU5OjUzLjUzMDE3ODM2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODQzMjQzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qZm9saW9fc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMTo1OTo1NS40Njg2MTg0NTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyNjY1MTE5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTM1NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDA6MjAuNzM1MTMyNzUyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMyODg0NTYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzcGxpdF9odWdlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMDoyMi42NjgwMjMyMzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUxNDg3NTUzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMTM5NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDA6NDcuODE2NzgxNDMxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg4ODcyNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2h1Z2VfcGFnZXNfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQ1OTA9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYwMy1cXG5tbS9odWdlX21lbW9yeS5jOjQ2MDQ6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYwNS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHZhZGRyX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc5MT1zdGF0aWMgc3NpemVfdCBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODU3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg1ODpcXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VzX3BpZChwaWQsIHZhZGRyX3N0YXJ0LCB2YWRkcl9lbmQsIG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTQ4NTktXFx0XFx0XFx0aW5fZm9saW9fb2Zmc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDA6NDkuMzA1NjU5MzM2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MjcxODU5MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTE2NzMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAxOjEzLjU3NzUyMjU3NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NTQzNjkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VzX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQ3MjE9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5MC1cXG5tbS9odWdlX21lbW9yeS5jOjQ3OTE6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG5tbS9odWdlX21lbW9yeS5jLTQ3OTItXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3BzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwbGl0X2h1Z2VfcGFnZXNfZm9wcyA9IHtcXG5tbS9odWdlX21lbW9yeS5jLTQ4NjktXFx0Lm93bmVyXFx0ID0gVEhJU19NT0RVTEUsXFxubW0vaHVnZV9tZW1vcnkuYzo0ODcwOlxcdC53cml0ZVxcdCA9IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUsXFxubW0vaHVnZV9tZW1vcnkuYy00ODcxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAxOjE1LjA1Mjk2NTM1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTU2NDgwNzUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjExOTMzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMTo0MC42MTc3NzUyMTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDAxNjc3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3BsaXRfaHVnZV9wYWdlc19mb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQ3OTE9c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2Ny1cXG5tbS9odWdlX21lbW9yeS5jOjQ4Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2OS1cXHQub3duZXJcXHQgPSBUSElTX01PRFVMRSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDg3Mz1zdGF0aWMgaW50IF9faW5pdCBzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnModm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3NS1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzcGxpdF9odWdlX3BhZ2VzXFxcIiwgMDIwMCwgTlVMTCwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jOjQ4NzY6XFx0XFx0XFx0ICAgIFxcdTAwMjZzcGxpdF9odWdlX3BhZ2VzX2ZvcHMpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3Ny1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDE6NDIuMDU3OTUwMzEzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNzYxNzE2Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTIxOTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAyOjA1LjgxOTY2OTMyOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTIyNzE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9NDYwND1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ3MjAtXFxubW0vaHVnZV9tZW1vcnkuYzo0NzIxOnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXFxubW0vaHVnZV9tZW1vcnkuYy00NzIyLVxcdFxcdFxcdFxcdHBnb2ZmX3Qgb2ZmX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc5MT1zdGF0aWMgc3NpemVfdCBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODM4LVxcdFxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjQ4Mzk6XFx0XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGZpbGVfcGF0aCwgb2ZmX3N0YXJ0LCBvZmZfZW5kLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg0MC1cXHRcXHRcXHRcXHRuZXdfb3JkZXIsIGluX2ZvbGlvX29mZnNldCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jPTQ2Nj1zdGF0aWMgdm9pZCBzcGxpdF9maWxlX2JhY2tlZF90aHAoaW50IG9yZGVyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYy00NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYzo0ODA6XFx0a3NmdF9wcmludF9tc2coXFxcIlBsZWFzZSBlbmFibGUgcHJfZGVidWcgaW4gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKCkgZm9yIG1vcmUgaW5mby5cXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMtNDgxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMjowNy4yNzg5MDIwOTRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjU1OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZm9saW9fc3BsaXRgIEZ1bmN0aW9uIENhbGxzKipcblxuQWxyaWdodCwgc28gSSdtIHRyYWNpbmcgdGhlIGNhbGxzIHRvIGBmb2xpb19zcGxpdGAuIFNlZW1zIGxpa2UgaXQncyBwcmltYXJpbHkgdHJpZ2dlcmVkIGJ5IGBzcGxpdF9odWdlX3BhZ2VzX3BpZGAgYW5kIGBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGVgLiBUaG9zZSBhcmUgYm90aCBpbnZva2VkIGZyb20gYHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGVgLCB3aGljaCwgb2YgY291cnNlLCBpcyBhIGRlYnVnZnMgZmlsZS4gVGhhdCdzIHRoZSBleHBlY3RlZCBwYXRoLCBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgaW50ZXJhY3Rpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC5cblxuSG1tLCBidXQgd2FpdCBhIG1pbnV0ZS4gU29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZS4gSXQgZmVlbHMgbGlrZSBgZm9saW9fc3BsaXRgICpjb3VsZCogYmUgY2FsbGVkIGZyb20gc29tZXBsYWNlIGVsc2UsIG91dHNpZGUgb2YgdGhpcyBkaXJlY3QgZGVidWdmcyBzZXF1ZW5jZS4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCdzIGEgcG9zc2liaWxpdHkuIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGZvbGlvX3NwbGl0YCB0byBjb25maXJtLiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSBjYWxsIHN0YWNrIG1vcmUgY2xvc2VseSB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSB1bmV4cGVjdGVkIHBhdGhzLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMjoxMC44NjE0NjM0NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MDg4MDQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTM0OD1zdGF0aWMgdm1fZmF1bHRfdCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNTktXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM2MDpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKm9yaWdfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNjEte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBkcm1fcGFnZW1hcF9wYWdlbWFwX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNzQtXFx0Lm1pZ3JhdGVfdG9fcmFtID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM3NTpcXHQuZm9saW9fc3BsaXQgPSBkcm1fcGFnZW1hcF9mb2xpb19zcGxpdCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzc2LX07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjc5LVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjI4MDpzdGF0aWMgdm9pZCBub3V2ZWF1X2RtZW1fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpoZWFkLCBzdHJ1Y3QgZm9saW8gKnRhaWwpXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjgxLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI4OT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBub3V2ZWF1X2RtZW1fcGFnZW1hcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yOTEtXFx0Lm1pZ3JhdGVfdG9fcmFtXFx0XFx0PSBub3V2ZWF1X2RtZW1fbWlncmF0ZV90b19yYW0sXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjkyOlxcdC5mb2xpb19zcGxpdFxcdFxcdD0gbm91dmVhdV9kbWVtX2ZvbGlvX3NwbGl0LFxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI5My19O1xcbi0tXFxuZnMvZXJvZnMvZGF0YS5jPTI1OT12b2lkIGVyb2ZzX29ubGluZWZvbGlvX2luaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy0yNjgtXFxuZnMvZXJvZnMvZGF0YS5jOjI2OTp2b2lkIGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZXJvZnMvZGF0YS5jLTI3MC17XFxuLS1cXG5mcy9lcm9mcy9maWxlaW8uYz04OT1zdGF0aWMgaW50IGVyb2ZzX2ZpbGVpb19zY2FuX2ZvbGlvKHN0cnVjdCBlcm9mc19maWxlaW8gKmlvLFxcbi0tXFxuZnMvZXJvZnMvZmlsZWlvLmMtMTQ3LVxcdFxcdFxcdGlmICghYXR0YWNoZWQrKylcXG5mcy9lcm9mcy9maWxlaW8uYzoxNDg6XFx0XFx0XFx0XFx0ZXJvZnNfb25saW5lZm9saW9fc3BsaXQoZm9saW8pO1xcbmZzL2Vyb2ZzL2ZpbGVpby5jLTE0OS1cXHRcXHRcXHRpby1cXHUwMDNlZGV2Lm1fcGEgKz0gbGVuO1xcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaD00MTU9dm9pZCBlcm9mc19vbmxpbmVmb2xpb19pbml0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmZzL2Vyb2ZzL2ludGVybmFsLmg6NDE2OnZvaWQgZXJvZnNfb25saW5lZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuZnMvZXJvZnMvaW50ZXJuYWwuaC00MTctdm9pZCBlcm9mc19vbmxpbmVmb2xpb19lbmQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGVyciwgYm9vbCBkaXJ0eSk7XFxuLS1cXG5mcy9lcm9mcy96ZGF0YS5jPTEwMDU9c3RhdGljIGludCB6X2Vyb2ZzX3NjYW5fZm9saW8oc3RydWN0IHpfZXJvZnNfZnJvbnRlbmQgKmYsXFxuLS1cXG5mcy9lcm9mcy96ZGF0YS5jLTEwNzUtXFxuZnMvZXJvZnMvemRhdGEuYzoxMDc2OlxcdFxcdFxcdGVyb2ZzX29ubGluZWZvbGlvX3NwbGl0KGZvbGlvKTtcXG5mcy9lcm9mcy96ZGF0YS5jLTEwNzctXFx0XFx0XFx0aWYgKGYtXFx1MDAzZXBjbC1cXHUwMDNlbGVuZ3RoIFxcdTAwM2Mgb2Zmc2V0ICsgZW5kIC0gbWFwLVxcdTAwM2VtX2xhKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDI9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDAzLVxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA1LXVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDA3PWludCBmb2xpb19jaGVja19zcGxpdHRhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA4LVxcdFxcdFxcdCAgIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDk6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsIHN0cnVjdCBwYWdlICpwYWdlLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxMC1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY1Mz1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTgtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjU5OnN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjYwLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTAyMD12b2lkIHNwbGl0X3BhZ2VfbWVtY2coc3RydWN0IHBhZ2UgKmZpcnN0LCB1bnNpZ25lZCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAyMTp2b2lkIGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgb2xkX29yZGVyLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMjItXFx0XFx0dW5zaWduZWQgbmV3X29yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE0NDU9c3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2VfbWVtY2coc3RydWN0IHBhZ2UgKmZpcnN0LCB1bnNpZ25lZCBvcmRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NDgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTQ0OTpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc3BsaXRfbWVtY2dfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NTAtXFx0XFx0dW5zaWduZWQgb2xkX29yZGVyLCB1bnNpZ25lZCBuZXdfb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Nzc9c3RydWN0IGRldl9wYWdlbWFwX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTA3LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxMDg6XFx0dm9pZCAoKmZvbGlvX3NwbGl0KShzdHJ1Y3QgZm9saW8gKmhlYWQsIHN0cnVjdCBmb2xpbyAqdGFpbCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTEwOS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTI0Nz1zdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcHJpdmF0ZV9zcGxpdF9jYihzdHJ1Y3QgZm9saW8gKm9yaWdpbmFsX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI1MC1cXHRpZiAoZm9saW9faXNfZGV2aWNlX3ByaXZhdGUob3JpZ2luYWxfZm9saW8pKSB7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI1MTpcXHRcXHRpZiAoIW9yaWdpbmFsX2ZvbGlvLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3BzLVxcdTAwM2Vmb2xpb19zcGxpdCkge1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTItXFx0XFx0XFx0aWYgKG5ld19mb2xpbykge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI1Ny1cXHRcXHR9IGVsc2Uge1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNTg6XFx0XFx0XFx0b3JpZ2luYWxfZm9saW8tXFx1MDAzZXBnbWFwLVxcdTAwM2VvcHMtXFx1MDAzZWZvbGlvX3NwbGl0KG9yaWdpbmFsX2ZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNTktXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19mb2xpbyk7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmg9NDk9VFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC01Mi1cXHRcXHQgdW5zaWduZWQgbG9uZyB0aHBfc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIHRocF9mYWlsZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjUzOlxcdFxcdCB1bnNpZ25lZCBsb25nIHRocF9zcGxpdCwgdW5zaWduZWQgbG9uZyBsYXJnZV9mb2xpb19zcGxpdCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtNTQtXFx0XFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTU2LVxcdFRQX0FSR1Moc3VjY2VlZGVkLCBmYWlsZWQsIHRocF9zdWNjZWVkZWQsIHRocF9mYWlsZWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjU3OlxcdFxcdHRocF9zcGxpdCwgbGFyZ2VfZm9saW9fc3BsaXQsIG1vZGUsIHJlYXNvbiksXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTU4LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTY0LVxcdFxcdF9fZmllbGQoXFx0dW5zaWduZWQgbG9uZyxcXHRcXHR0aHBfc3BsaXQpXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjY1OlxcdFxcdF9fZmllbGQoXFx0dW5zaWduZWQgbG9uZyxcXHRcXHRsYXJnZV9mb2xpb19zcGxpdClcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtNjYtXFx0XFx0X19maWVsZChcXHRlbnVtIG1pZ3JhdGVfbW9kZSxcXHRtb2RlKVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTc1LVxcdFxcdF9fZW50cnktXFx1MDAzZXRocF9zcGxpdFxcdFxcdFxcdD0gdGhwX3NwbGl0O1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo3NjpcXHRcXHRfX2VudHJ5LVxcdTAwM2VsYXJnZV9mb2xpb19zcGxpdFxcdD0gbGFyZ2VfZm9saW9fc3BsaXQ7XFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTc3LVxcdFxcdF9fZW50cnktXFx1MDAzZW1vZGVcXHRcXHRcXHRcXHQ9IG1vZGU7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtODYtXFx0XFx0X19lbnRyeS1cXHUwMDNldGhwX3NwbGl0LFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaDo4NzpcXHRcXHRfX2VudHJ5LVxcdTAwM2VsYXJnZV9mb2xpb19zcGxpdCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtODgtXFx0XFx0X19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVxcdTAwM2Vtb2RlLCBNSUdSQVRFX01PREUpLFxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3MzEtXFxubGliL3Rlc3RfaG1tLmM6MTczMjpzdGF0aWMgdm9pZCBkbWlycm9yX2Rldm1lbV9mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmhlYWQsIHN0cnVjdCBmb2xpbyAqdGFpbClcXG5saWIvdGVzdF9obW0uYy0xNzMzLXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE3NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzID0ge1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTc2OC1cXHQubWlncmF0ZV90b19yYW1cXHQ9IGRtaXJyb3JfZGV2bWVtX2ZhdWx0LFxcbmxpYi90ZXN0X2htbS5jOjE3Njk6XFx0LmZvbGlvX3NwbGl0XFx0PSBkbWlycm9yX2Rldm1lbV9mb2xpb19zcGxpdCxcXG5saWIvdGVzdF9obW0uYy0xNzcwLX07XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2Nzc9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXFxubW0vaHVnZV9tZW1vcnkuYzozNzIwOlxcdFxcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzcyMS1cXHRcXHRzcGxpdF9wYWdlX293bmVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM4MDQ9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcXG5tbS9odWdlX21lbW9yeS5jOjM5NjA6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy0zOTYxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3OS0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjM5ODA6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxNjItLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MTYzOiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxubW0vaHVnZV9tZW1vcnkuYy00MTg1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Ny1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MjYxOiAqIGZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTQyNjItICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjgzLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NDppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg3OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2MDQ9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0Njk3OlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NzIxPXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcXG5tbS9odWdlX21lbW9yeS5jOjQ3NzM6XFx0XFx0XFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXFxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzY2Mj12b2lkIHNwbGl0X3BhZ2VfbWVtY2coc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2NzUtXFxubW0vbWVtY29udHJvbC5jOjM2NzY6dm9pZCBmb2xpb19zcGxpdF9tZW1jZ19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIG9sZF9vcmRlcixcXG5tbS9tZW1jb250cm9sLmMtMzY3Ny1cXHRcXHR1bnNpZ25lZCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTkwMj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTE2LVxcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cXHUwMDNldm1hLCBhZGRyLCB0cnVlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjkxNzpcXHRyZXQgPSBmb2xpb19zcGxpdF91bm1hcHBlZChmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy05MTgtXFx0aWYgKHJldClcXG4tLVxcbm1tL3RydW5jYXRlLmM9MTcwPWludCB0cnVuY2F0ZV9pbm9kZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3RydW5jYXRlLmMtMTc5LVxcbm1tL3RydW5jYXRlLmM6MTgwOnN0YXRpYyBpbnQgZm9saW9fc3BsaXRfb3JfdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LFxcbm1tL3RydW5jYXRlLmMtMTgxLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG1pbl9vcmRlcilcXG4tLVxcbm1tL3RydW5jYXRlLmMtMTg4LVxcbm1tL3RydW5jYXRlLmM6MTg5OlxcdHJldCA9IGZvbGlvX3NwbGl0KGZvbGlvLCBtaW5fb3JkZXIsIHNwbGl0X2F0LCBOVUxMKTtcXG5tbS90cnVuY2F0ZS5jLTE5MC1cXG4tLVxcbm1tL3RydW5jYXRlLmM9MjE3PWJvb2wgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTI1NC1cXHRzcGxpdF9hdCA9IGZvbGlvX3BhZ2UoZm9saW8sIFBBR0VfQUxJR05fRE9XTihvZmZzZXQpIC8gUEFHRV9TSVpFKTtcXG5tbS90cnVuY2F0ZS5jOjI1NTpcXHRpZiAoIWZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvLCBzcGxpdF9hdCwgbWluX29yZGVyKSkge1xcbm1tL3RydW5jYXRlLmMtMjU2LVxcdFxcdC8qXFxuLS1cXG5tbS90cnVuY2F0ZS5jLTI4MS1cXHRcXHQgICAgZm9saW8yLVxcdTAwM2VtYXBwaW5nID09IGZvbGlvLVxcdTAwM2VtYXBwaW5nKVxcbm1tL3RydW5jYXRlLmM6MjgyOlxcdFxcdFxcdGZvbGlvX3NwbGl0X29yX3VubWFwKGZvbGlvMiwgc3BsaXRfYXQyLCBtaW5fb3JkZXIpO1xcbm1tL3RydW5jYXRlLmMtMjgzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZT02Nz1ybWFwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZTo2ODpmb2xpb19zcGxpdF9yYWNlX3Rlc3RcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlPTEwNj1URVNUX0dFTl9GSUxFUyArPSBybWFwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU6MTA3OlRFU1RfR0VOX0ZJTEVTICs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTEwOC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jLTYtICpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYzo3OiAqIEl0IHRlc3RzIHRoZSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGZvbGlvX3NwbGl0KCkgYW5kIGZpbGVtYXBfZ2V0X2VudHJ5KCksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmM6ODogKiB3aGVyZSB0aGUgaG9sZSBwdW5jaGVzIG9uIHNobWVtIGxlYWQgdG8gZm9saW9fc3BsaXQoKSBhbmQgcmVhZGluZyB0aGUgc2htZW1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYy05LSAqIGxlYWQgdG8gZmlsZW1hcF9nZXRfZW50cnkoKS5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoPTQ0ND1DQVRFR09SWT1cXFwidGhwXFxcIiBydW5fdGVzdCAuL3RyYW5zaHVnZS1zdHJlc3MgLWQgMjBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaC00NDUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2g6NDQ2OkNBVEVHT1JZPVxcXCJ0aHBcXFwiIHJ1bl90ZXN0IC4vZm9saW9fc3BsaXRfcmFjZV90ZXN0XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gtNDQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMjoxMi4zNTIzNDk4NjRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5MzAyOTMxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxNzMzMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDI6MzguMjgyNjQ1OTU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0MTIzMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzgwND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTU5LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MDogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTM5NjEtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc5LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk4MDpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM5ODEtXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Ny1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyODQ9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODYte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMjozOS43MDY3NzM0NzNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY2ODE1ODE3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxNzc5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6MDYuMzg4MzU3NThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODUyNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zNjc3PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzE5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzcyMDpcXHRcXHRmb2xpb19zcGxpdF9tZW1jZ19yZWZzKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jLTM3MjEtXFx0XFx0c3BsaXRfcGFnZV9vd25lcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zODA0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NTktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzozOTYwOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM5NzktICovXFxubW0vaHVnZV9tZW1vcnkuYzozOTgwOnN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk4MS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBwYWdlICpsb2NrX2F0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MTYyLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDE2MzogKiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIC0gc3BsaXQgYSBsYXJnZSBhbm9uIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSB1bm1hcHBlZFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE2NC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxODMtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MTg0OmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4NS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQyNTE9aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNTUtXFxubW0vaHVnZV9tZW1vcnkuYzo0MjU2OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQyNTctXFx0XFx0XFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjYwLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI2MTogKiBmb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy00MjYyLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQyODQ6aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg1LVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdlX21lbW9yeS5jLTQyODYte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NzpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4OC1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfTk9OX1VOSUZPUk0pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjA0PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbl9mb2xpb19vZmZzZXQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDY5NzpcXHRcXHRcXHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ2OTgtXFx0XFx0XFx0XFx0c3BsaXQrKztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDcyMT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzcyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0NzczOlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc3NC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowMzowNi40MzAyMTMzMzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMTQxOTA2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSHVnZSBQYWdlIFNwbGl0dGluZyBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgcmVhY2hhYmlsaXR5IGFuZCByZWxldmFudCBzeW1ib2xzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIHNwbGl0dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gRmlyc3QsIEkgc2VlIHRoYXQgYGZvbGlvX3NwbGl0YCBpcyBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIGFzIGFuIGV4dGVybmFsIGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIHRyYWNlIGl0cyB1c2FnZS4gQWgsIHJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIGBtbS90cnVuY2F0ZS5jYC4gU3BlY2lmaWNhbGx5LCBgdHJ1bmNhdGVfaW5vZGVfZm9saW9gIGFuZCBgdHJ1bmNhdGVfaW5vZGVfcGFydGlhbF9mb2xpb2AgYm90aCBjYWxsIGBmb2xpb19zcGxpdF9vcl91bm1hcGAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgZm9saW9fc3BsaXRgLiBTbywgbm8gZG91YnQgdGhhdCBgZm9saW9fc3BsaXRgICppcyogcmVhY2hhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhc2NhZGUgY2FsbHMgdGhhdCBjYW4gdXNlIGBmb2xpb19zcGxpdGAuIExldCBtZSBkZWx2ZSBpbnRvIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gQWgsIHRoYXQgb25lIGlzIGNhbGxlZCBmcm9tIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgKHdoaWNoIGlzIGlubGluZSkuIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgdGhlbiBjYWxsZWQgZnJvbSBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYCAoYWxzbyBpbmxpbmUpLiBUaGlzLCBpbiB0dXJuLCBpcyBjYWxsZWQgZnJvbSBgc3BsaXRfaHVnZV9wYWdlYCAoaW5saW5lIGFnYWluKS4gQW5kIGBzcGxpdF9odWdlX3BhZ2VgIGlzIGNhbGxlZCBmcm9tICptYW55KiBwbGFjZXMsIGxpa2UgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgYW5kIGtodWdlcGFnZWQsIGFuZCBwcm9iYWJseSBvdGhlciBwbGFjZXMsIHRvby4gVGhpcyByZWluZm9yY2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgYGZvbGlvX3NwbGl0YCBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgeGFzX3NwbGl0X2FsbG9jYCwgYGZvbGlvX3NwbGl0YCwgYW5kIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gQW5kLCBzaW5jZSBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgYW5kIGBmb2xpb19zcGxpdGAgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGV5IGhhdmUgZGlzdGluY3QsIGV4cG9ydGFibGUgc3ltYm9scy4gYHhhc19zcGxpdF9hbGxvY2AgaXMgYWxzbyBleHBsaWNpdGx5IGV4cG9ydGVkLlxuXG5GaW5hbGx5LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBtb2R1bGVzIGFyZSBidWlsdC4gQW5kIHllcywgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gR29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6MTYuNzQ0NDA2MzM2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIyODE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAzOjE2Ljc4NjYzODM5M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg5NjYyNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9uczpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZS4gSXQncyBjbGVhciB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gV2UgY2FuJ3QgcHJvY2VlZCB3aXRob3V0IGl0LlxuXG5Ob3csIHJlZ2FyZGluZyBgQ09ORklHX01FTUNHYCwgSSBzdXNwZWN0IGl0J3MgYWxzbyBnb2luZyB0byBiZSBlc3NlbnRpYWwsIGFsdGhvdWdoIGl0J3MgYSBsaXR0bGUgbGVzcyBvYnZpb3VzIG9uIHRoZSBzdXJmYWNlLiBNeSBpbnR1aXRpb24gaXMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpb2AgYW5kIGBzZXRfYWN0aXZlX21lbWNnYCBwcm9iYWJseSBoYXZlIGR1bW15IGltcGxlbWVudGF0aW9ucyBpZiBgQ09ORklHX01FTUNHYCBpcyBkaXNhYmxlZC4gVGhhdCdzIGEgY29tbW9uIHN0cmF0ZWd5IHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmVzLiBCdXQsIGlmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHRoZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWN0dWFsbHkgZG8gc29tZXRoaW5nIG1lYW5pbmdmdWwuXG5cbkkgdGhpbmsgaXQncyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBhc3N1bXB0aW9uIGFib3V0IGBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvYCwgc3BlY2lmaWNhbGx5LiBMZXQncyBzZWUgaG93IHRoYXQgb25lIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzUyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6MjAuOTc2MzA0MDk2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1MTEzNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2J1ZmZlci5jPTc1OT1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmZvbGlvX2FsbG9jX2J1ZmZlcnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuZnMvYnVmZmVyLmMtNzY1LVxcbmZzL2J1ZmZlci5jOjc2NjpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbmZzL2J1ZmZlci5jLTc2Ny1cXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKG1lbWNnKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTc1Mz1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo3NTU6c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzU2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTIxMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTIxNC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM5ODA9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwMTktXFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MDIwOlxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy00MDIxLVxcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xcbi0tXFxubW0vbGlzdF9scnUuYz02MzE9aW50IGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbGlzdF9scnUuYy02NDgtXFx0LyogQWxsb2NhdGlvbiBtYXkgYmxvY2ssIHBpbiB0aGUgbWVtY2cgKi9cXG5tbS9saXN0X2xydS5jOjY0OTpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbm1tL2xpc3RfbHJ1LmMtNjUwLVxcdHJlcyA9IF9fbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIGxydSwgZ2ZwKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMjg9c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzM0LVxcbm1tL21lbWNvbnRyb2wuYzozMzU6XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1jb250cm9sLmMtMzM2LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTExNTQ9c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExNzItLyoqXFxubW0vbWVtY29udHJvbC5jOjExNzM6ICogZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyAtIE9idGFpbiBhIHJlZmVyZW5jZSBvbiBhIGdpdmVuIGZvbGlvJ3MgbWVtY2cuXFxubW0vbWVtY29udHJvbC5jLTExNzQtICogQGZvbGlvOiBmb2xpbyBmcm9tIHdoaWNoIG1lbWNnIHNob3VsZCBiZSBleHRyYWN0ZWQuXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE3Ny0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTE3ODpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21lbWNvbnRyb2wuYy0xMTc5LXtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNzQ0PWludCBtaWdyYXRlX21pc3BsYWNlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbm9kZSlcXG4tLVxcbm1tL21pZ3JhdGUuYy0yNzQ5LVxcdExJU1RfSEVBRChtaWdyYXRlcGFnZXMpO1xcbm1tL21pZ3JhdGUuYzoyNzUwOlxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbm1tL21pZ3JhdGUuYy0yNzUxLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuLS1cXG5tbS92bXNjYW4uYz00MTgwPWJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMzItXFxubW0vdm1zY2FuLmM6NDIzMzpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTQyMzQtXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01NDg9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU3Mi1cXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG5tbS93b3JraW5nc2V0LmM6NTczOlxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxubW0vd29ya2luZ3NldC5jLTU3NC1cXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgZm9saW9fcGdkYXQoZm9saW8pKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6MjIuNDUxNDIxOTgxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNDg5MTAyODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MjA5MTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjAzOjQ1Ljk0MDUyNjkyNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTM1NDc3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfYWN0aXZlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM9MTA2Mz1pbnQgc2d4X2VuY2xfYWxsb2NfYmFja2luZyhzdHJ1Y3Qgc2d4X2VuY2wgKmVuY2wsIHVuc2lnbmVkIGxvbmcgcGFnZV9pbmRleCxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDY2LVxcdHN0cnVjdCBtZW1fY2dyb3VwICplbmNsX21lbWNnID0gc2d4X2VuY2xfZ2V0X21lbV9jZ3JvdXAoZW5jbCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jOjEwNjc6XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhlbmNsX21lbWNnKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA2OC1cXHRpbnQgcmV0O1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNzEtXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jOjEwNzI6XFx0c2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNzMtXFx0bWVtX2Nncm91cF9wdXQoZW5jbF9tZW1jZyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODg2PXN0YXRpYyB2b2lkIGxvb3BfaGFuZGxlX2NtZChzdHJ1Y3QgbG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MDctXFx0aWYgKGNtZF9tZW1jZ19jc3MpXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTkwODpcXHRcXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE5MDktXFx0XFx0XFx0bWVtX2Nncm91cF9mcm9tX2NzcyhjbWRfbWVtY2dfY3NzKSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xOTIyLVxcdGlmIChjbWRfbWVtY2dfY3NzKSB7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTkyMzpcXHRcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTkyNC1cXHRcXHRjc3NfcHV0KGNtZF9tZW1jZ19jc3MpO1xcbi0tXFxuZnMvYnVmZmVyLmM9NzU5PXN0cnVjdCBidWZmZXJfaGVhZCAqZm9saW9fYWxsb2NfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5mcy9idWZmZXIuYy03NjYtXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG5mcy9idWZmZXIuYzo3Njc6XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxuZnMvYnVmZmVyLmMtNzY4LVxcbi0tXFxuZnMvYnVmZmVyLmMtNzg1LW91dDpcXG5mcy9idWZmZXIuYzo3ODY6XFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcbmZzL2J1ZmZlci5jLTc4Ny1cXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYz03NDQ9c3RhdGljIHN0cnVjdCBmYW5vdGlmeV9ldmVudCAqZmFub3RpZnlfYWxsb2NfZXZlbnQoXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NDAtXFx0LyogV2hvZXZlciBpcyBpbnRlcmVzdGVkIGluIHRoZSBldmVudCwgcGF5cyBmb3IgdGhlIGFsbG9jYXRpb24uICovXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmM6ODQxOlxcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2coZ3JvdXAtXFx1MDAzZW1lbWNnKTtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04NDItXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYy04Nzgtb3V0OlxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jOjg3OTpcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMtODgwLVxcdHJldHVybiBldmVudDtcXG4tLVxcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYz01OT1pbnQgaW5vdGlmeV9oYW5kbGVfaW5vZGVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X21hcmsgKmlub2RlX21hcmssIHUzMiBtYXNrLFxcbi0tXFxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jLTk0LVxcdCAqL1xcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYzo5NTpcXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKGdyb3VwLVxcdTAwM2VtZW1jZyk7XFxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jLTk2LVxcdGV2ZW50ID0ga21hbGxvYyhhbGxvY19sZW4sIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYzo5NzpcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jLTk4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTcyOD12b2lkIF9fbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTczMy0gKiB0aGUgY3VycmVudCB0YXNrIChzaW1pbGFyIHRvIHRoZSBcXFwiY3VycmVudFxcXCIgZ2xvYmFsIHZhcmlhYmxlKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE3MzQ6ICogb3IgYnkgc2V0X2FjdGl2ZV9tZW1jZygpIHBhaXIuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTczNS0gKiBQbGVhc2UsIHVzZSBvYmpfY2dyb3VwX2dldCgpIHRvIGdldCBhIHJlZmVyZW5jZSBpZiB0aGUgcG9pbnRlclxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ3NT1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1lbV9jZ3JvdXAgKiwgaW50X2FjdGl2ZV9tZW1jZyk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ3Ni0vKipcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDc3OiAqIHNldF9hY3RpdmVfbWVtY2cgLSBTdGFydHMgdGhlIHJlbW90ZSBtZW1jZyBjaGFyZ2luZyBzY29wZS5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtNDc4LSAqIEBtZW1jZzogbWVtY2cgdG8gY2hhcmdlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ4NS0gKiBzbyBpdHMgbGlmZXRpbWUgaXMgZ3VhcmFudGVlZCB0byBleGNlZWQgdGhlIHNjb3BlIGJldHdlZW4gdHdvXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjQ4NjogKiBzZXRfYWN0aXZlX21lbWNnKCkgY2FsbHMuXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTQ4Ny0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTQ5MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NDkyOnNldF9hY3RpdmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC00OTMte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTUwNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6NTA4OnNldF9hY3RpdmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC01MDkte1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jPTIwNz1zdGF0aWMgdm9pZCBhbGxvY19idWxrKHN0cnVjdCBicGZfbWVtX2NhY2hlICpjLCBpbnQgY250LCBpbnQgbm9kZSwgYm9vbCBhdG9taWMpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjQwLVxcdG1lbWNnID0gZ2V0X21lbWNnKGMpO1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzoyNDE6XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTI0Mi1cXHRmb3IgKDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjUyLVxcdH1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmM6MjUzOlxcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtMjU0LVxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4tLVxcbmtlcm5lbC9icGYvbWVtYWxsb2MuYz05Nzk9dm9pZCBub3RyYWNlICpicGZfbWVtX2NhY2hlX2FsbG9jX2ZsYWdzKHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL21lbWFsbG9jLmMtOTkwLVxcdFxcdG1lbWNnID0gZ2V0X21lbWNnKGMpO1xcbmtlcm5lbC9icGYvbWVtYWxsb2MuYzo5OTE6XFx0XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhtZW1jZyk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk5Mi1cXHRcXHRyZXQgPSBfX2FsbG9jKGMsIE5VTUFfTk9fTk9ERSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX0FDQ09VTlQpO1xcbi0tXFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk5NC1cXHRcXHRcXHQqKHN0cnVjdCBicGZfbWVtX2NhY2hlICoqKXJldCA9IGM7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jOjk5NTpcXHRcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxua2VybmVsL2JwZi9tZW1hbGxvYy5jLTk5Ni1cXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01MTI9dm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTE1LVxcdCpuZXdfbWVtY2cgPSBicGZfbWFwX2dldF9tZW1jZyhtYXApO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUxNjpcXHQqb2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZygqbmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTctfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTE5PXZvaWQgYnBmX21hcF9tZW1jZ19leGl0KHN0cnVjdCBtZW1fY2dyb3VwICpvbGRfbWVtY2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MjEte1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUyMjpcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTIzLVxcdG1lbV9jZ3JvdXBfcHV0KG5ld19tZW1jZyk7XFxuLS1cXG5tbS9maWxlbWFwLmM9OTQ5PWludCBmaWxlbWFwX2FkZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy05NTctXFx0aWYgKGtlcm5lbF9maWxlKVxcbm1tL2ZpbGVtYXAuYzo5NTg6XFx0XFx0dG1wID0gc2V0X2FjdGl2ZV9tZW1jZyhyb290X21lbV9jZ3JvdXApO1xcbm1tL2ZpbGVtYXAuYy05NTktXFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIE5VTEwsIGdmcCk7XFxubW0vZmlsZW1hcC5jLTk2MC1cXHRpZiAoa2VybmVsX2ZpbGUpXFxubW0vZmlsZW1hcC5jOjk2MTpcXHRcXHRzZXRfYWN0aXZlX21lbWNnKHRtcCk7XFxubW0vZmlsZW1hcC5jLTk2Mi1cXHRpZiAocmV0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTgwPXN0YXRpYyBpbnQgX19mb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDIwLVxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzo0MDIxOlxcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cobWVtY2cpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDAyMi1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE1MS1cXHQvKiByZXN0b3JlIHRvIGNhbGxlcidzIG9sZF9tZW1jZyAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDE1MjpcXHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XFxubW0vaHVnZV9tZW1vcnkuYy00MTUzLVxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yOTg2PV9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqY3VycmVudF9vYmpfY2dyb3VwKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzAxOC1cXHRcXHQvKlxcbm1tL21lbWNvbnRyb2wuYzozMDE5OlxcdFxcdCAqIE1lbWNnIHBvaW50ZXIgaXMgcHJvdGVjdGVkIGJ5IHNjb3BlIChzZWUgc2V0X2FjdGl2ZV9tZW1jZygpKVxcbm1tL21lbWNvbnRyb2wuYy0zMDIwLVxcdFxcdCAqIGFuZCBpcyBwaW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIG9iamNnLCBzbyBvYmpjZyBjYW4ndCBnb1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM1Mzc9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTQ4LVxcdCAqIFRoZSBvYnRhaW5lZCBvYmpjZyBwb2ludGVyIGlzIHNhZmUgdG8gdXNlIHdpdGhpbiB0aGUgY3VycmVudCBzY29wZSxcXG5tbS9tZW1jb250cm9sLmM6MzU0OTpcXHQgKiBkZWZpbmVkIGJ5IGN1cnJlbnQgdGFzayBvciBzZXRfYWN0aXZlX21lbWNnKCkgcGFpci5cXG5tbS9tZW1jb250cm9sLmMtMzU1MC1cXHQgKiBvYmpfY2dyb3VwX2dldCgpIGlzIHVzZWQgdG8gZ2V0IGEgcGVybWFuZW50IHJlZmVyZW5jZS5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MTU3PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQxNjItXFxubW0vbWVtY29udHJvbC5jOjQxNjM6XFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy00MTY0LVxcdG1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYzo0MTY1OlxcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG5tbS9tZW1jb250cm9sLmMtNDE2Ni1cXHRpZiAoSVNfRVJSKG1lbWNnKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6MDM6NDcuMzk1ODg2MzcxWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzOTE4NDcxNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MjM4ODQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjA0OjExLjMxNDM2MDQxNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjE0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM2Nzc9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3MTktXFxubW0vaHVnZV9tZW1vcnkuYzozNzIwOlxcdFxcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzcyMS1cXHRcXHRzcGxpdF9wYWdlX293bmVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM4MDQ9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk1OS0vKipcXG5tbS9odWdlX21lbW9yeS5jOjM5NjA6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy0zOTYxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3OS0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjM5ODA6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy0zOTgxLVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQxNjItLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MTYzOiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXFxubW0vaHVnZV9tZW1vcnkuYy00MTY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDE4My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQxODQ6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxubW0vaHVnZV9tZW1vcnkuYy00MTg1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI1MT1pbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1NS1cXG5tbS9odWdlX21lbW9yeS5jOjQyNTY6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI1Ny1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNjAtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MjYxOiAqIGZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTQyNjItICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjgzLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NDppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTQyODUtXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg3OlxcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg4LVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2MDQ9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Njk2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0Njk3OlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY5OC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NzIxPXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ3NzItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcXG5tbS9odWdlX21lbW9yeS5jOjQ3NzM6XFx0XFx0XFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXFxubW0vaHVnZV9tZW1vcnkuYy00Nzc0LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjA0OjExLjM1OTgzNzQ4MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjMxNzEzNzA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjI0OTQ4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjowNDozNy42NzY5NzY3MDRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzA3NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3RydW5jYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdHJ1bmNhdGUuYz0xNzA9aW50IHRydW5jYXRlX2lub2RlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy0xNzktXFxubW0vdHJ1bmNhdGUuYzoxODA6c3RhdGljIGludCBmb2xpb19zcGxpdF9vcl91bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsXFxubW0vdHJ1bmNhdGUuYy0xODEtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbWluX29yZGVyKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy0xODgtXFxubW0vdHJ1bmNhdGUuYzoxODk6XFx0cmV0ID0gZm9saW9fc3BsaXQoZm9saW8sIG1pbl9vcmRlciwgc3BsaXRfYXQsIE5VTEwpO1xcbm1tL3RydW5jYXRlLmMtMTkwLVxcbi0tXFxubW0vdHJ1bmNhdGUuYz0yMTc9Ym9vbCB0cnVuY2F0ZV9pbm9kZV9wYXJ0aWFsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4tLVxcbm1tL3RydW5jYXRlLmMtMjU0LVxcdHNwbGl0X2F0ID0gZm9saW9fcGFnZShmb2xpbywgUEFHRV9BTElHTl9ET1dOKG9mZnNldCkgLyBQQUdFX1NJWkUpO1xcbm1tL3RydW5jYXRlLmM6MjU1OlxcdGlmICghZm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8sIHNwbGl0X2F0LCBtaW5fb3JkZXIpKSB7XFxubW0vdHJ1bmNhdGUuYy0yNTYtXFx0XFx0LypcXG4tLVxcbm1tL3RydW5jYXRlLmMtMjgxLVxcdFxcdCAgICBmb2xpbzItXFx1MDAzZW1hcHBpbmcgPT0gZm9saW8tXFx1MDAzZW1hcHBpbmcpXFxubW0vdHJ1bmNhdGUuYzoyODI6XFx0XFx0XFx0Zm9saW9fc3BsaXRfb3JfdW5tYXAoZm9saW8yLCBzcGxpdF9hdDIsIG1pbl9vcmRlcik7XFxubW0vdHJ1bmNhdGUuYy0yODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjA0OjM3LjcyMDI4NjczMVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI1NjIyOTUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSHVnZSBQYWdlIFNwbGl0dGluZyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLCBpdCdzIGNsZWFyIHRoYXQgYGZvbGlvX3NwbGl0YCBpcyBpbmRlZWQgYSBrZXkgZnVuY3Rpb24gaW4gYG1tL3RydW5jYXRlLmNgLCBhIGNyaXRpY2FsIGFyZWEgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIFRvIHByb3Blcmx5IGFuYWx5emUgdGhpcywgSSBuZWVkZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOyBJIGNvbmZpcm1lZCB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AgKG9yIHJhdGhlciBgQ09ORklHX01FTUNHYCwgdG8gYmUgcHJlY2lzZSkgYXJlIHRoZSBuZWNlc3NhcnkgdG9nZ2xlcy5cblxuSSB0aGVuIGRpZCBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBmdW5jdGlvbiBuYW1lcywgbWFraW5nIHN1cmUgdG8gZmlsdGVyIHN0YXRpYyBmdW5jdGlvbnMgYW5kIHRob3NlIHRoYXQgYXJlbid0IGV4cG9ydGVkLiBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgaW50ZXJuYWwsIHNvIGl0J3Mgbm90IGV4cG9ydGVkLCBhbmQgdGhlIHNhbWUgZ29lcyBmb3IgYGZvbGlvX3NwbGl0YC4gQm90aCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIGZvdW5kIGluIGBtbS9odWdlX21lbW9yeS5jYC4gQnV0IEkgY29uZmlybWVkIHRoYXQgYHhhc19zcGxpdF9hbGxvY2AgKmlzKiBleHBvcnRlZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLlxuXG5UaGlzIGhhcyBuYXJyb3dlZCBkb3duIHRoZSBlc3NlbnRpYWwgc3ltYm9scy4gU28gdGhlIGtleSBmb2N1cyBvZiB0aGlzIHBhdGNoIGFyZTpcbi0gICBgeGFzX3NwbGl0X2FsbG9jYFxuLSAgIGBmb2xpb19zcGxpdGBcbi0gICBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmBcblxuSSBkaWQgYSBmaW5hbCBjaGVjayB0byBjb25maXJtIHRoYXQgbm8gb3RoZXIgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQgb3V0c2lkZSBvZiBgeGFzX3NwbGl0X2FsbG9jYCBhbmQgYF9fZm9saW9fc3BsaXRgLCBzbyBJJ2xsIGJlIHVzaW5nIGBmb2xpb19zcGxpdGAgYW5kIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhcyB3ZWxsIHRvIGNvdmVyIGFsbCB0aGUgY2FsbCBwYXRocywgc2luY2UgYF9fZm9saW9fc3BsaXRgIGlzIHN0YXRpYy5cblxuUmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucywgSSBjYW4gY29uZmlybSB0aGF0IHRoZSBrZXkgb3B0aW9ucyBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1FTUNHYC5cblxuTm93LCBmb3IgdGhlIGNvcmUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciBtZW1vcnkgYWxsb2NhdGlvbiB3aGVuIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBlbmFibGVkLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2ZvbGlvX3NwbGl0YCAoYW5kIGJ5IGV4dGVuc2lvbiwgaXRzIGNhbGxlciwgYGZvbGlvX3NwbGl0YCkgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGlzIG1vZGlmaWNhdGlvbiBpcyB2aXRhbDogaXQgc3dpdGNoZXMgdG8gdGhlIGZvbGlvJ3MgbWVtY2cgKmJlZm9yZSogY2Fycnlpbmcgb3V0IG9wZXJhdGlvbnMgdGhhdCBtaWdodCByZXF1aXJlIHRoZSBhbGxvY2F0aW9uIG9mIHhhcnJheSBub2Rlcy4gVGhpcyBlbnN1cmVzIHRoYXQgbWVtb3J5IGFsbG9jYXRpb24gaXMgY29ycmVjdGx5IGNoYXJnZWQgdG8gdGhlIGFwcHJvcHJpYXRlIG1lbWNnLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgYWNjdXJhdGUgcmVzb3VyY2UgYWNjb3VudGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBpcyByZWFjaGVkIHRocm91Z2ggaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy5cblxuR2l2ZW4gdGhpcywgdGhlIHBhdGNoIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIGhhdmUgYmVlbiBpZGVudGlmaWVkLCBhbmQgSSdsbCBub3cgbWFyayB0aGUgd29yayBhcyBkb25lIGJ5IGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MDUsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjA0OjQ3Ljk3NjUxOTQ3M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjM1Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4YXNfc3BsaXRfYWxsb2NcIixcbiAgICBcImZvbGlvX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJ3MgbWVtY2cgYmVmb3JlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFsbG9jYXRlIHhhcnJheSBub2RlcywgZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB4YXJyYXkgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4YXNfc3BsaXRfYWxsb2NcIixcbiAgICBcImZvbGlvX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHhhc19zcGxpdF9hbGxvY2AgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGlmIHRoZSB4YXJyYXkgaGFzIGBYQV9GTEFHU19BQ0NPVU5UYCBzZXQuIEl0IGFsc28gbW9kaWZpZXMgYF9fZm9saW9fc3BsaXRgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBzd2l0Y2ggdG8gdGhlIGZvbGlvJ3MgbWVtY2cgYmVmb3JlIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGFsbG9jYXRlIHhhcnJheSBub2RlcywgZW5zdXJpbmcgdGhhdCB0aGUgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgdG8gdGhlIGNvcnJlY3QgbWVtY2cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB4YXJyYXkgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgaHVnZSBwYWdlIHNwbGl0dGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowg7762[1] Phase: Succeeded StartedAt: 2026-08-04 22:04:59 +0000 UTC FinishedAt: 2026-08-04 22:04:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 22:04:59 +0000 UTC FinishedAt: 2026-08-04 22:04:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2] Phase: Succeeded StartedAt: 2026-08-04 22:04:59 +0000 UTC FinishedAt: 2026-08-05 01:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 22:04:59 +0000 UTC FinishedAt: 2026-08-05 01:44:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 22:04:59 +0000 UTC FinishedAt: 2026-08-04 22:05:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 22:04:59 +0000 UTC FinishedAt: 2026-08-04 22:05:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowg7762/series-workflowg7762-convert-artifact-700997586/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 22:05:09 +0000 UTC FinishedAt: 2026-08-04 22:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 22:05:09 +0000 UTC FinishedAt: 2026-08-04 22:21:14 +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:*e648f6e8-2625-4a12-bb8d-92370d0396d4,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-workflowg7762/series-workflowg7762-convert-artifact-700997586/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": "226144da-06c6-4e5d-aa2c-5dba88af461d", "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-workflowg7762/series-workflowg7762-build-action-619172944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 22:05:09 +0000 UTC FinishedAt: 2026-08-04 22:21:04 +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:*e648f6e8-2625-4a12-bb8d-92370d0396d4,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-workflowg7762/series-workflowg7762-convert-artifact-700997586/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": "226144da-06c6-4e5d-aa2c-5dba88af461d", "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-workflowg7762/series-workflowg7762-build-action-619172944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 22:21:14 +0000 UTC FinishedAt: 2026-08-04 22:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 22:21:14 +0000 UTC FinishedAt: 2026-08-04 22:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 22:21:14 +0000 UTC FinishedAt: 2026-08-04 22:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 22:21:14 +0000 UTC FinishedAt: 2026-08-04 22:21:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowg7762/series-workflowg7762-convert-artifact-2696954349/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 22:21:24 +0000 UTC FinishedAt: 2026-08-04 22:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 22:21:24 +0000 UTC FinishedAt: 2026-08-04 22:23:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*226144da-06c6-4e5d-aa2c-5dba88af461d,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-workflowg7762/series-workflowg7762-build-action-619172944/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-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 22:23:22 +0000 UTC FinishedAt: 2026-08-04 22:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 22:23:22 +0000 UTC FinishedAt: 2026-08-04 22:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 22:23:22 +0000 UTC FinishedAt: 2026-08-04 22:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 22:23:22 +0000 UTC FinishedAt: 2026-08-04 22:39:23 +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:*e648f6e8-2625-4a12-bb8d-92370d0396d4,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-workflowg7762/series-workflowg7762-convert-artifact-2696954349/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": "948f1357-f995-42c1-b322-5837da65c77a", "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-workflowg7762/series-workflowg7762-build-action-4112970569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 22:23:22 +0000 UTC FinishedAt: 2026-08-04 22:39:13 +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:*e648f6e8-2625-4a12-bb8d-92370d0396d4,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-workflowg7762/series-workflowg7762-convert-artifact-2696954349/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": "948f1357-f995-42c1-b322-5837da65c77a", "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-workflowg7762/series-workflowg7762-build-action-4112970569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 22:39:23 +0000 UTC FinishedAt: 2026-08-04 22:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 22:39:23 +0000 UTC FinishedAt: 2026-08-04 22:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 22:39:23 +0000 UTC FinishedAt: 2026-08-04 22:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 22:39:23 +0000 UTC FinishedAt: 2026-08-04 22:41:07 +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:*948f1357-f995-42c1-b322-5837da65c77a,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-workflowg7762/series-workflowg7762-build-action-4112970569/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-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 22:41:17 +0000 UTC FinishedAt: 2026-08-05 01:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 22:41:17 +0000 UTC FinishedAt: 2026-08-05 01:44:03 +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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"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:*226144da-06c6-4e5d-aa2c-5dba88af461d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*948f1357-f995-42c1-b322-5837da65c77a,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-workflowg7762/series-workflowg7762-build-action-619172944/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-workflowg7762/series-workflowg7762-build-action-4112970569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 22:41:17 +0000 UTC FinishedAt: 2026-08-04 22:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 22:41:17 +0000 UTC FinishedAt: 2026-08-04 22:41:22 +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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"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-workflowg7762/series-workflowg7762-convert-artifact-42162514/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 22:41:17 +0000 UTC FinishedAt: 2026-08-04 22:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 22:41:17 +0000 UTC FinishedAt: 2026-08-04 22:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 22:41:17 +0000 UTC FinishedAt: 2026-08-04 22:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 22:41:27 +0000 UTC FinishedAt: 2026-08-05 01:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["xas_split_alloc","folio_split","__split_huge_page_to_list_to_order"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG"],"series_id":"00c20264-1aea-4c75-9f9f-4d909dcdd4a3","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 22:41:27 +0000 UTC FinishedAt: 2026-08-05 01:43:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*226144da-06c6-4e5d-aa2c-5dba88af461d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*948f1357-f995-42c1-b322-5837da65c77a,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-workflowg7762/series-workflowg7762-build-action-619172944/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-workflowg7762/series-workflowg7762-build-action-4112970569/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-workflowg7762/series-workflowg7762-convert-artifact-42162514/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,}