Name: series-workflowc9877 Phase: Succeeded StartedAt: 2026-06-23 08:41:30 +0000 UTC FinishedAt: 2026-06-23 13:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[0] Phase: Succeeded StartedAt: 2026-06-23 08:41:30 +0000 UTC FinishedAt: 2026-06-23 08:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 08:41:30 +0000 UTC FinishedAt: 2026-06-23 08:50:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "acc1a7bd-816f-451e-86ee-a62f88ad8fcc" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_ea_inode_work", "ext4_put_ea_inode", "ext4_xattr_delete_inode", "ext4_xattr_inode_dec_ref_all", "ext4_xattr_block_set", "ext4_xattr_ibody_set", "ext4_xattr_set_entry", "ext4_xattr_inode_lookup_create", "ext4_xattr_inode_create" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RVhUNF9GU19TRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfc2V0X2VudHJ5JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIHJlc29sdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEl0IG1vZGlmaWVzIGhvdyBFQSBpbm9kZXMgYXJlIHJlbGVhc2VkIGJ5IHF1ZXVpbmcgdGhlbSB0byBhIGxvY2tsZXNzIGxpc3QgYW5kIHByb2Nlc3NpbmcgdGhlbSBpbiBhIHdvcmtxdWV1ZSAoYGV4dDRfZWFfaW5vZGVfd29ya2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyIGR1cmluZyBFQSBpbm9kZSBldmljdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFhZGRlYjA2NmI3ZGNhN2MwMDM0ZjMzYmJhOWRlNGRjOTk4Y2QwMTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwODo0OTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggJiM0MzsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0ICogYmV0d2VlbiByZWFkZXJzIG9mIEVBcyBhbmQgd3JpdGVycyBvZiByZWd1bGFyIGZpbGUgZGF0YSwgc29cbiBcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xuIFx0ICogRUFzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuJiM0MztcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxuIFx0ICovXG4tXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbiYjNDM7XHRcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xuJiM0MztcdH07XG4gXG4gXHQvKlxuIFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcbkBAIC0xNzcwLDYgJiM0MzsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbiYjNDM7XG4mIzQzO1x0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xuJiM0MztcbiBcdHNwaW5sb2NrX3Qgc19lc19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXG4gXHQvKiBKb3VybmFsIHRyaWdnZXJzIGZvciBjaGVja3N1bSBjb21wdXRhdGlvbiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC0xNzYsNyAmIzQzOzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXG4gXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cbi1cdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIFx1MDAyNmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdFx0ICAgICAgZXh0cmFfY3JlZGl0cyk7XG4mIzQzO1x0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGV4dDRfd2FybmluZyhpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDt4YXR0ciBkZWxldGUgKGVyciAlZClcJiMzNDssIGVycik7XG4gc3RvcF9oYW5kbGU6XG5AQCAtMjkwLDcgJiM0MzsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbiBcdFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0XHRnb3RvIG5vX2RlbGV0ZTtcbiBcdH1cbiBcbkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRcdCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQpO1xuIFxuIFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgJiM0MzsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuJiM0MztcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbiYjNDM7XHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXG4mIzQzO1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuJiM0MztcdCAqL1xuJiM0MztcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcbiBcdGVpLVx1MDAzZWlfc3luY190aWQgPSAwO1xuQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NTA4LDYgJiM0Mzs1NTE2LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHQgKiBUaGUgZmlyc3QgaW5vZGUgd2UgbG9vayBhdCBpcyB0aGUgam91cm5hbCBpbm9kZS4gIERvbiYjMzk7dCB0cnlcbiBcdCAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCFcbiBcdCAqL1xuJiM0MztcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X29wdChzYiwgTk9MT0FEKSBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICYjNDM7NTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG4gXHR9XG4gZmFpbGVkX21vdW50M2E6XG4mIzQzO1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuJiM0MztcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uN2YzMzQzNDliZDRmN2QgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuIFx0XHRcdFx0XHRlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHR9XG4gb3V0OlxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCAmIzQzOzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNjAsNyAmIzQzOzExNTYsNiBAQCBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExOTcsMTQgJiM0MzsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7RXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuIFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxuIFx0XHRcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXHUwMDNlaV9zYiwgMSksXG4gXHRcdFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcbkBAIC0xMjEyLDYgJiM0MzsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgJiM0MzsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRlcnIpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgJiM0MzsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0xMjQ1LDYgJiM0MzsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbiBcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLVx0XHRcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyAmIzQzOzE1NTMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4gXHRcdFx0a3ZmcmVlKGVhX2RhdGEpO1xuIFx0XHRcdHJldHVybiBlYV9pbm9kZTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICYjNDM7MTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbkBAIC0xODQ4LDcgJiM0MzsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyAmIzQzOzE5OTksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXG4gXHRcdFx0XHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG4gXHRcdFx0fVxuLVx0XHRcdGlwdXQodG1wX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7ZGVjIHJlZiBlcnJvcj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXG4gXHRpZiAoYnMtXHUwMDNlYmggXHUwMDI2XHUwMDI2IGJzLVx1MDAzZWJoICE9IG5ld19iaCkge1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuLVxuIFx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXHUwMDNlYmgsXG4tXHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHR9XG4gXHRlcnJvciA9IDA7XG4gXG5AQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICYjNDM7MjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yODYzLDQ2ICYjNDM7Mjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICYjNDM7IEVJQV9JTkNSLFxuLVx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuLVx0XHRpZiAobmV3X2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcbi1cdFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0ICAgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQpKTtcbi1cdFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcbi1cdFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xuLVx0fVxuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyAmIzQzOzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cbiAgKi9cbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG5AQCAtMjk1Miw3ICYjNDM7Mjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgJiM0MzsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdH1cbiBcbiBcdFx0fVxuIFxuLVx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LFxuJiM0MztcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICYjNDM7Mjk1Niw1OSBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuJiM0MzsvKlxuJiM0MzsgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbmV4dDtcbiBcbi1cdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuJiM0MztcdHdoaWxlIChub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xuJiM0MztcdFx0bmV4dCA9IG5vZGUtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiYjNDM7XHRcdG5vZGUgPSBuZXh0O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4mIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlXG4mIzQzOyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuJiM0MzsgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbiYjNDM7XHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbiYjNDM7XHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbiYjNDM7XHRcdCAgXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxuJiM0MztcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cdTAwM2Vjb3VudDsgJiM0MzsmIzQzO2lkeClcbi1cdFx0aXB1dChlYV9pbm9kZV9hcnJheS1cdTAwM2Vpbm9kZXNbaWR4XSk7XG4tXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XG4mIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuJiM0Mzt7XG4mIzQzO1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxNGEzMWZlMDAxOGQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaFxuQEAgLTEzMSwxMSAmIzQzOzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xuIFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuIH07XG4gXG4tc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkge1xuLVx0dW5zaWduZWQgaW50IGNvdW50O1xuLVx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xuLX07XG4tXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xuQEAgLTE4Nyw5ICYjNDM7MTgyLDIxIEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEcmFpbiBhbGwgcGVuZGluZyBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cy4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZVxuJiM0MzsgKiBmcmVlaW5nIHJlc291cmNlcyB0aGF0IGV2aWN0aW9uIGRlcGVuZHMgb24gKHF1b3RhLCBibG9jayBhbGxvY2F0b3IpLlxuJiM0MzsgKiBMb29wcyBiZWNhdXNlIHdvcmtlciBpcHV0IG1heSB0cmlnZ2VyIGV2aWN0aW9uIHRoYXQgcmUtcXVldWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4mIzQzO3tcbiYjNDM7XHR3aGlsZSAoZmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspIHx8XG4mIzQzO1x0ICAgICAgICFsbGlzdF9lbXB0eShcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKSlcbiYjNDM7XHRcdDtcbiYjNDM7fVxuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTgsNiAmIzQzOzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4mIzQzOyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuJiM0MzsgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfY291bnQsIC0xLCAxKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfU0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lib2R5X3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9lbnRyeSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byByZXNvbHZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCBtb2RpZmllcyBob3cgRUEgaW5vZGVzIGFyZSByZWxlYXNlZCBieSBxdWV1aW5nIHRoZW0gdG8gYSBsb2NrbGVzcyBsaXN0IGFuZCBwcm9jZXNzaW5nIHRoZW0gaW4gYSB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFhZGRlYjA2NmI3ZGNhN2MwMDM0ZjMzYmJhOWRlNGRjOTk4Y2QwMTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAwODo0OTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHsKIAkgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzbwogCSAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZwogCSAqIEVBcy4KJiM0MzsJICoKJiM0MzsJICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZQomIzQzOwkgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS4KIAkgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTsKJiM0MzsJfTsKIAogCS8qCiAJICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2UKQEAgLTE3NzAsNiAmIzQzOzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7CiAJc3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0czsKIAlzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7CiAJc3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlOwomIzQzOwomIzQzOwkvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yazsKJiM0MzsKIAlzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAJLyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpCiAJICovCiAJaW50IGV4dHJhX2NyZWRpdHMgPSA2OwotCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7CiAJYm9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7CiAKIAl0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTsKQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJfQogCiAJLyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovCi0JZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgJmFtcDtlYV9pbm9kZV9hcnJheSwKLQkJCQkgICAgICBleHRyYV9jcmVkaXRzKTsKJiM0MzsJZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7CiAJaWYgKGVycikgewogCQlleHQ0X3dhcm5pbmcoaW5vZGUtJmd0O2lfc2IsICYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpJiMzNDssIGVycik7CiBzdG9wX2hhbmRsZToKQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CiAJCWlmIChmcmVlemVfcHJvdGVjdGVkKQogCQkJc2JfZW5kX2ludHdyaXRlKGlub2RlLSZndDtpX3NiKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAkJZ290byBub19kZWxldGU7CiAJfQogCkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJaWYgKGZyZWV6ZV9wcm90ZWN0ZWQpCiAJCXNiX2VuZF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7Ci0JZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAlyZXR1cm47CiBub19kZWxldGU6CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQkJICZhbXA7c2ItJmd0O3NfdXVpZCk7CiAKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi8KJiM0MzsJZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7CiAJZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzYmktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKTsKQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCW1lbXNldCgmYW1wO2VpLSZndDtpX2RxdW90LCAwLCBzaXplb2YoZWktJmd0O2lfZHF1b3QpKTsKICNlbmRpZgogCWVpLSZndDtqaW5vZGUgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXMKJiM0MzsJICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heQomIzQzOwkgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzCiYjNDM7CSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS4KJiM0MzsJICovCiYjNDM7CWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2VpLSZndDtpX3Jzdl9jb252ZXJzaW9uX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZWktJmd0O2lfY29tcGxldGVkX2lvX2xvY2spOwogCWVpLSZndDtpX3N5bmNfdGlkID0gMDsKQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9vcnBoYW4pOwotCWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwogCWlub2RlX2luaXRfb25jZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwogCWV4dDRfZmNfaW5pdF9pbm9kZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwpAQCAtNTUwOCw2ICYjNDM7NTUxNiw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCSAqIFRoZSBmaXJzdCBpbm9kZSB3ZSBsb29rIGF0IGlzIHRoZSBqb3VybmFsIGlub2RlLiAgRG9uJiMzOTt0IHRyeQogCSAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCEKIAkgKi8KJiM0MzsJZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTsKJiM0MzsKIAlpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpICZhbXA7JmFtcDsgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkgewogCQllcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7CiAJCWlmIChlcnIpCkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9tb3VudDk6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqLwomIzQzOwlleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTsKIAlleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTsKIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTsKQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCWlmIChFWFQ0X1NCKHNiKS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CiBmYWlsZWRfbW91bnRfd3E6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi8KJiM0MzsJZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7CiAJZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSk7CiAJc2JpLSZndDtzX2VhX2lub2RlX2NhY2hlID0gTlVMTDsKIApAQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJCWV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLSZndDtzX2pvdXJuYWwpOwogCX0KIGZhaWxlZF9tb3VudDNhOgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovCiYjNDM7CWV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpOwogCWV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpOwogZmFpbGVkX21vdW50MzoKIAkvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjgyLi43ZjMzNDM0OWJkNGY3ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTE0LDEwICYjNDM7MTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7CiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKQkoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFwKIAkJCQlpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvKS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSkKIAotc3RhdGljIGludAotZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSkKIHsKQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LAogCQkJCQllYV9pbm9kZS0mZ3Q7aV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pOwogCX0KIG91dDoKLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTsKIAkJaWYgKGVycikgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2luYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCXJldHVybiAwOwogCkBAIC0xMTMzLDcgJiM0MzsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZCYjMzQ7LAogCQkJCQkgICBlcnIpOwotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCX0KIAlyZXR1cm4gc2F2ZWRfZXJyOwogfQpAQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkgICAmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLAogCQkJZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC0mZ3Q7aV9zYiwgMSksCiAJCQlleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLApAQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkJiMzNDssCiAJCQkJCSAgIGVycik7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoZXJyICZndDsgMCkgewpAQCAtMTIyMSw2ICYjNDM7MTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkJJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZCYjMzQ7LAogCQkJCQkJZXJyKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KQEAgLTEyMjksNiAmIzQzOzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWQmIzM0OywKIAkJCQkJICAgZXJyKTsKJiM0MzsJCQlleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJZW50cnktJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CiAKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQlkaXJ0eSA9IHRydWU7CiAJfQogCkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTsKQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkJCQkgICAgIEJGSVJTVChiaCksCiAJCQkJCQkgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLywKLQkJCQkJCSAgICAgZWFfaW5vZGVfYXJyYXksCiAJCQkJCQkgICAgIGV4dHJhX2NyZWRpdHMsCiAJCQkJCQkgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7CiAJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsCkBAIC0xNTA1LDcgJiM0MzsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpCiAJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZCYjMzQ7LCBlcnIpOwotCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIApAQCAtMTU2NCw3ICYjNDM7MTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJCWt2ZnJlZShlYV9kYXRhKTsKIAkJCXJldHVybiBlYV9pbm9kZTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJbmV4dF9lbnRyeToKIAkJY2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTsKIAl9CkBAIC0xNjE1LDcgJiM0MzsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICAgZWFfaW5vZGUtJmd0O2lfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTsKIAlyZXR1cm4gZWFfaW5vZGU7CiBvdXRfZXJyOgotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQpAQCAtMTg0OCw3ICYjNDM7MTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSwKIAogCXJldCA9IDA7CiBvdXQ6Ci0JaXB1dChvbGRfZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgb2xkX2VhX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdSgKIAkJCQkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSk7CiAJCQl9Ci0JCQlpcHV0KHRtcF9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIHRtcF9pbm9kZSk7CiAKIAkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfaW51bSA9IDA7CiAJCQlzLSZndDtoZXJlLSZndDtlX3ZhbHVlX3NpemUgPSAwOwpAQCAtMjE1MCw3ICYjNDM7MjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCQkgICAmIzM0O2RlYyByZWYgZXJyb3I9JWQmIzM0OywKIAkJCQkJCQkgICBlcnJvcik7Ci0JCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQkJZWFfaW5vZGUgPSBOVUxMOwogCQkJfQogCkBAIC0yMTgyLDEyICYjNDM7MjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi8KIAlpZiAoYnMtJmd0O2JoICZhbXA7JmFtcDsgYnMtJmd0O2JoICE9IG5ld19iaCkgewotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwotCiAJCWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy0mZ3Q7YmgsCi0JCQkJCSAmYW1wO2VhX2lub2RlX2FycmF5LAogCQkJCQkgMCAvKiBleHRyYV9jcmVkaXRzICovKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAl9CiAJZXJyb3IgPSAwOwogCkBAIC0yMjAzLDcgJiM0MzsyMTg4LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCWlmIChjZSkKIAkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CkBAIC0yMjg1LDcgJiM0MzsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCX0KIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIyOTcsNyAmIzQzOzIyODIsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJaGVhZGVyLSZndDtoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7CiAJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpOwogCX0KLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg2Myw0NiAmIzQzOzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi8KLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSkKLQotLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS4KLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkCi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci4KLSAqLwotc3RhdGljIGludAotZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS4KLQkJICovCi0JCSgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcywKLQkJCQkJCSBFSUFfTUFTSywgR0ZQX05PRlMpOwotCQlpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ID0gMDsKLQl9IGVsc2UgaWYgKCgoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQgJmFtcDsgRUlBX01BU0spID09IEVJQV9NQVNLKSB7Ci0JCS8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgJiM0MzsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovCi0JCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMOwotCi0JCW5ld19hcnJheSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCSAoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQgJiM0MzsgRUlBX0lOQ1IsCi0JCQkJCSBHRlBfTk9GUyk7Ci0JCWlmIChuZXdfYXJyYXkgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQltZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksCi0JCSAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcywKLQkJCQkgICAoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQpKTsKLQkJa2ZyZWUoKmVhX2lub2RlX2FycmF5KTsKLQkJKmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5OwotCX0KLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQmIzQzOyYjNDM7OwotCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50IC0gMV0gPSBpbm9kZTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKCkKICAqCkBAIC0yOTEzLDcgJiM0MzsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy4KICAqLwogaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICBpbnQgZXh0cmFfY3JlZGl0cykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKQEAgLTI5NTIsNyAmIzQzOzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCwKIAkJCQkJCSAgICAgSUZJUlNUKGhlYWRlciksCiAJCQkJCQkgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTsKIAl9CkBAIC0yOTg2LDEyICYjNDM7MjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJY29udGludWU7CiAJCQkJZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSwKIAkJCQkJICAgICAgbGUzMl90b19jcHUoZW50cnktJmd0O2VfdmFsdWVfc2l6ZSkpOwotCQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJfQogCiAJCX0KIAotCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LAomIzQzOwkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkgZXh0cmFfY3JlZGl0cyk7CiAJCS8qCiAJCSAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXMKQEAgLTMwMTMsMTYgJiM0MzsyOTU2LDU5IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KQomIzQzOy8qCiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkCiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpZHg7CiYjNDM7CXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiYjNDM7CQkJCQkJc3RydWN0IGV4dDRfc2JfaW5mbywKJiM0MzsJCQkJCQlzX2VhX2lub2RlX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfdG9fZnJlZSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpuZXh0OwogCi0JaWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpCiYjNDM7CXdoaWxlIChub2RlKSB7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLAomIzQzOwkJCQkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpOwomIzQzOwkJbmV4dCA9IG5vZGUtJmd0O25leHQ7CiYjNDM7CQlpcHV0KCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CiYjNDM7CQlub2RlID0gbmV4dDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpCiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhCiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYgomIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlCiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsCiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC4KJiM0MzsgKi8KJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwlXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLSZndDtpX2ZsYWdzICZhbXA7IEVYVDRfRUFfSU5PREVfRkwpKTsKJiM0MzsJaWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKQogCQlyZXR1cm47CiYjNDM7CWxsaXN0X2FkZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZWFfaXB1dF9ub2RlLAomIzQzOwkJICAmYW1wO0VYVDRfU0Ioc2IpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSwKJiM0MzsJICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci4KJiM0MzsJICovCiYjNDM7CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO0VYVDRfU0Ioc2IpLSZndDtzX2VhX2lub2RlX3dvcmssIDEpOwomIzQzO30KIAotCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgZWFfaW5vZGVfYXJyYXktJmd0O2NvdW50OyAmIzQzOyYjNDM7aWR4KQotCQlpcHV0KGVhX2lub2RlX2FycmF5LSZndDtpbm9kZXNbaWR4XSk7Ci0Ja2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKQomIzQzO3sKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oCmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjE0YTMxZmUwMDE4ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaApAQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7CiAJc3RydWN0IGV4dDRfaWxvYyBpbG9jOwogfTsKIAotc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgewotCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7Ci19OwotCiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwpAQCAtMTg3LDkgJiM0MzsxODIsMjEgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlib29sIGlzX2NyZWF0ZSk7CiAKIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LAogCQkJCSAgIGludCBleHRyYV9jcmVkaXRzKTsKLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpOwomIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEcmFpbiBhbGwgcGVuZGluZyBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cy4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZQomIzQzOyAqIGZyZWVpbmcgcmVzb3VyY2VzIHRoYXQgZXZpY3Rpb24gZGVwZW5kcyBvbiAocXVvdGEsIGJsb2NrIGFsbG9jYXRvcikuCiYjNDM7ICogTG9vcHMgYmVjYXVzZSB3b3JrZXIgaXB1dCBtYXkgdHJpZ2dlciBldmljdGlvbiB0aGF0IHJlLXF1ZXVlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSkKJiM0Mzt7CiYjNDM7CXdoaWxlIChmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yaykgfHwKJiM0MzsJICAgICAgICFsbGlzdF9lbXB0eSgmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV90b19mcmVlKSkKJiM0MzsJCTsKJiM0Mzt9CiAKIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAkJCSAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTI0MTgsNiAmIzQzOzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2gKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lCiYjNDM7ICogQGlub2RlOiBpbm9kZSB0byBwdXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdAomIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKCZhbXA7aW5vZGUtJmd0O2lfY291bnQsIC0xLCAxKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgZXh0NCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBpbm9kZXMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYSAqZGVmZXJyZWQgaXB1dCogbWVjaGFuaXNtIGZvciB0aGVzZSBFQSBpbm9kZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHRoZXkmIzM5O3JlIGFpbWluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHBlcmhhcHMgaGFuZGxlIHNvbWUgbG9ja2luZyBjb250ZW50aW9uIGlzc3VlcyByZWxhdGVkIHRvIEVBIGlub2RlIG1hbmFnZW1lbnQuCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgY29kZSwgc3Bhbm5pbmcgaGVhZGVyIGZpbGVzIGxpa2UgYGV4dDQuaGAsIGB4YXR0ci5oYCwgYW5kIGBmcy5oYCwgYXMgd2VsbCBhcyBpbXBsZW1lbnRhdGlvbiBmaWxlcyBsaWtlIGBpbm9kZS5jYCwgYHN1cGVyLmNgLCBhbmQgYHhhdHRyLmNgLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIG1ha2luZyBhIGNvcmUgcmVmYWN0b3IgYnkgcmVwbGFjaW5nIHRoZSBvbGQgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBkZWZlcnJlZCB3b3JrcXVldWUgKGBzX2VhX2lub2RlX3dvcmtgKSBhbmQgYSBsb2NrbGVzcyBsaXN0IChgc19lYV9pbm9kZV90b19mcmVlYCkuIFRoaXMgc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZHMgYXN5bmNocm9ub3VzIGZyZWVpbmcgb2YgdGhlc2UgRUEgaW5vZGVzIHRvIGF2b2lkIGJsb2NraW5nIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSBuZXcgZnVuY3Rpb24sIGBpcHV0X2lmX25vdF9sYXN0YCwgYW5kIG1vZGlmaWVkIHNldmVyYWwgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYW5kIGBleHQ0X2V2aWN0X2lub2RlYCBhbmQgYF9fZXh0NF9maWxsX3N1cGVyYC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBjb3JlIGNoYW5nZSB0byBleHQ0JiMzOTtzIHhhdHRyIGhhbmRsaW5nLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmNyZWFzZWQgY29tcGxleGl0eSBvZiB0aGUgYXN5bmNocm9ub3VzIGxvZ2ljLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0byBidWlsZCBhIGZ1enogdGFyZ2V0LiBDbGVhcmx5LCBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBiaWcgb25lLiBCdXQgYXJlIHRoZXJlIGFueSBzcGVjaWZpYyBYQVRUUiBjb25maWd1cmF0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQ/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgdG8gYmUgY2VydGFpbiBJJiMzOTttIGVuYWJsaW5nIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgRUEgaW5vZGUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRVhUNCBDb25maWd1cmF0aW9uIENvbnRleHQqKgoKUmlnaHQsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgYmVmb3JlIHdlIGRpZyB0b28gZGVlcC4gTXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCBvdmVybG9va2luZyBhbnkgZXhpc3RpbmcgRVhUNCBjb25maWd1cmF0aW9ucyBvciByZWxldmFudCBjb250ZXh0LiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBhcmUgZnVsbHkgYXdhcmUgb2Ygd2hhdCYjMzk7cyBhbHJlYWR5IGluIHBsYWNlLCBpZiBhbnl0aGluZywgdG8gYXZvaWQgZHVwbGljYXRpbmcgZWZmb3J0IG9yIGludHJvZHVjaW5nIGNvbmZsaWN0cy4gV2UgYWxsIGtub3cgaG93IGVhc3kgaXQgaXMgdG8gbWlzcyBzb21ldGhpbmcgaW4gYSBjb21wbGV4IGVudmlyb25tZW50LCBzbyBpdCYjMzk7cyBiZXN0IHRvIHN0YXJ0IHdpdGggYSBzYW5pdHkgY2hlY2suIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHRhbnQgRVhUNCBzZXR1cHMgd2UgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTM0LVxuZnMvZXh0NC9LY29uZmlnOjM1OmNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuZnMvZXh0NC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNjctXG5mcy9leHQ0L0tjb25maWc6Njg6Y29uZmlnIEVYVDRfREVCVUdcbmZzL2V4dDQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7RXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03Ni1cbmZzL2V4dDQvS2NvbmZpZzo3Nzpjb25maWcgRVhUNF9LVU5JVF9URVNUU1xuZnMvZXh0NC9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGV4dDRcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRUEgSW5vZGVzIGFuZCBFeHRlbmRlZCBBdHRyaWJ1dGVzOiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIHRoaXMgZmVhdHVyZSBpcyBhbGwgYWJvdXQgRXh0ZW5kZWQgQXR0cmlidXRlIGlub2Rlcywgb3IgRUEgaW5vZGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbnMgZm9yIEVBIGlub2RlcyB0aGVtc2VsdmVzLCBvciBpcyBpdCBoYW5kbGVkIGFzIHBhcnQgb2YgdGhlIGJyb2FkZXIgZXh0NCB4YXR0ciBpbXBsZW1lbnRhdGlvbj8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyB0aGUgbGF0dGVyLCBidXQgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlLgoKSXQgc2VlbXMgbGlrZSBgRVhUNF9GU2AgaXMgcHJvYmFibHkgc3VmZmljaWVudCBmb3IgZW5hYmxpbmcgaXQsIHRob3VnaCBJIHNob3VsZCBjb25zaWRlciBpZiBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgbWlnaHQgYmUgbmVjZXNzYXJ5IG9yIGJlbmVmaWNpYWwgdG8gZW5hYmxlIG1vcmUgcm9idXN0IHhhdHRyIHVzYWdlIG92ZXJhbGwuCgpUbyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciwgSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGZzL2V4dDQveGF0dHIuY2AgYW5kIHRha2UgYSBsb29rLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbiBkZXRhaWxzIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZy4gSXQgd2lsbCBiZSBhIHF1aWNrIGNoZWNrLCBJIGFtIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xuZnMvZXh0NC94YXR0ci5jLTg5LVx0W0VYVDRfWEFUVFJfSU5ERVhfVVNFUl1cdFx0ICAgICA9IFx1MDAyNmV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQveGF0dHIuYy05MS1cdFtFWFQ0X1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdICA9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuLS1cbmZzL2V4dDQveGF0dHIuYy05NC1cdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXHQgICAgID0gXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmMtOTYtXHRbRVhUNF9YQVRUUl9JTkRFWF9TRUNVUklUWV1cdCAgICAgPSBcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTAzLVx0XHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6MTA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5jLTEwNS1cdFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTE2LVxuZnMvZXh0NC94YXR0ci5jOjExNzojaWZkZWYgQ09ORklHX0xPQ0tERVBcbmZzL2V4dDQveGF0dHIuYy0xMTgtdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMjItXHRsb2NrZGVwX3NldF9zdWJjbGFzcyhcdTAwMjZlYV9pbm9kZS1cdTAwM2VpX3J3c2VtLCAxKTtcbmZzL2V4dDQveGF0dHIuYzoxMjM6XHQodm9pZCkgZWk7XHQvKiBzaHV0IHVwIGNsYW5nIHdhcm5pbmcgaWYgIUNPTkZJR19MT0NLREVQICovXG5mcy9leHQ0L3hhdHRyLmMtMTI0LVx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSwgSV9EQVRBX1NFTV9FQSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzMKCQkJCQkJCW91dHB1dDogMjY2CgkJCQkJCQl0aG91Z2h0czogOTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgSW5vZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpcnN0IHRoaW5ncyBmaXJzdDogYEVYVDRfRlNgLCBgRVhUNF9GU19QT1NJWF9BQ0xgLCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFsbCBsb29rIGdvb2QgYW5kIHJlbGV2YW50IHRvIHdoYXQgSSBleHBlY3QuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRoaXMgcGF0Y2ggdG91Y2hlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSAqcmVhbGx5KiB0aGUgZm9jdXMgaGVyZSwgdGhlIG9uZXMgdGhhdCBlbWJvZHkgdGhlIG5ldyBsb2dpYywgbm90IGp1c3QgZ2VuZXJpYyBmaWxlIHN5c3RlbSBzdHVmZi4KClRoZSBwYXRjaCBtb2RpZmllcyBxdWl0ZSBhIGZldyBmdW5jdGlvbnMsIGJ1dCBJJiMzOTttIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCB0aG9zZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBuZXcgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIEVBIGlub2RlczogYGV4dDRfZXZpY3RfaW5vZGVgLCBgZXh0NF9wdXRfc3VwZXJgLCBgZXh0NF9hbGxvY19pbm9kZWAsIGBfX2V4dDRfZmlsbF9zdXBlcmAsIGBleHQ0X3hhdHRyX2lub2RlX2dldGAsIGBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYCwgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAsIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLCBgZXh0NF94YXR0cl9zZXRfZW50cnlgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfZHJhaW5fZWFfaW5vZGVfd29ya2AuCgpJIG5lZWQgdG8gZmlsdGVyIHRob3NlIHRvIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIGBleHQ0X2VhX2lub2RlX3dvcmtgIGlzIGEgc3Ryb25nIGNvbnRlbmRlciBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIHdvcmtlciBmdW5jdGlvbi4gYGV4dDRfcHV0X2VhX2lub2RlYCBzaG91bGQgYWxzbyBiZSBpbXBvcnRhbnQsIGFzIHRoaXMgaXMgdGhlIG5ldyBmdW5jdGlvbiB0byBwdXQgdGhlIEVBIGlub2Rlcy4gYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCBtaWdodCBiZSBpbnRlcmVzdGluZywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyB3aGF0IGl0IGRvZXMgd2l0aCBhbnkgYXJyYXlzLiBQbHVzLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgIGxvb2sgbGlrZSB0aGUgY3JlYXRpb24gYW5kIG1vZGlmaWNhdGlvbiBwb2ludHMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIHRob3NlIGZvY3VzIGZ1bmN0aW9ucy4gSSBzZWUgYGV4dDRfZWFfaW5vZGVfd29ya2AgaXMgYHN0YXRpY2AgaW4gYGZzL2V4dDQveGF0dHIuY2AuIFNvIGl0JiMzOTtzIGludGVybmFsIHRvIHRoYXQgZmlsZS4gVGhlbiBgZXh0NF9wdXRfZWFfaW5vZGVgIGlzICpub3QqIHN0YXRpYywgc28gaXQgaXMgZGVjbGFyZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIG1lYW5pbmcgaXQmIzM5O3MgZXh0ZXJuYWxseSB2aXNpYmxlLiBHb29kLgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGlzIGxpc3QgZm9yIGZ1enppbmc6CiogICBgZXh0NF9lYV9pbm9kZV93b3JrYAoqICAgYGV4dDRfcHV0X2VhX2lub2RlYAoqICAgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgCiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgCiogICBgZXh0NF94YXR0cl9pYm9keV9zZXRgCiogICBgZXh0NF94YXR0cl9zZXRfZW50cnlgCiogICBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYAoKUGVyZmVjdCEgVGhlc2UgYXJlIGFsbCB2ZXJ5IHNwZWNpZmljIHRvIGV4dDQgeGF0dHIgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSBpbiByZWdhcmRzIHRvIEVBIGlub2Rlcy4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgZXhwZWN0IHRvIGNvbnRhaW4gdGhlIGNvcmUgY2hhbmdlcyBvZiB0aGUgcGF0Y2guCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBFQSBpbm9kZXMuIEl0JiMzOTtzIGhhbmRsaW5nIHRoZSByZWxlYXNlIG9mIHRoZXNlIGlub2RlcyBieSBxdWV1aW5nIHRoZW0gdXAgdG8gYSBsb2NrbGVzcyBsaXN0LCBhbmQgdGhlbiBwcm9jZXNzaW5nIHRoZW0gaW4gYSB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgZXh0NCB4YXR0ciBsb2dpYyBmdW5kYW1lbnRhbGx5IHdvcmtzLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBiZSB2ZXJ5IGNhcmVmdWwuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgc3RlbW1pbmcgZnJvbSB0aGlzIG5ldyBFQSBpbm9kZSBldmljdGlvbiBzeXN0ZW0uCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RVhUNF9GU19TRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfc2V0X2VudHJ5JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIHJlc29sdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEl0IG1vZGlmaWVzIGhvdyBFQSBpbm9kZXMgYXJlIHJlbGVhc2VkIGJ5IHF1ZXVpbmcgdGhlbSB0byBhIGxvY2tsZXNzIGxpc3QgYW5kIHByb2Nlc3NpbmcgdGhlbSBpbiBhIHdvcmtxdWV1ZSAoYGV4dDRfZWFfaW5vZGVfd29ya2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyIGR1cmluZyBFQSBpbm9kZSBldmljdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfZW50cnkmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gcmVzb2x2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgbW9kaWZpZXMgaG93IEVBIGlub2RlcyBhcmUgcmVsZWFzZWQgYnkgcXVldWluZyB0aGVtIHRvIGEgbG9ja2xlc3MgbGlzdCBhbmQgcHJvY2Vzc2luZyB0aGVtIGluIGEgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBsb2dpYyBvZiBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NDk6NTEuOTE5OTkyNjc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwMjc5MTM3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUNF9GU19QT1NJWF9BQ0xcIixcbiAgICBcIkVYVDRfRlNfU0VDVVJJVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX3NldF9lbnRyeVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gcmVzb2x2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgbW9kaWZpZXMgaG93IEVBIGlub2RlcyBhcmUgcmVsZWFzZWQgYnkgcXVldWluZyB0aGVtIHRvIGEgbG9ja2xlc3MgbGlzdCBhbmQgcHJvY2Vzc2luZyB0aGVtIGluIGEgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBsb2dpYyBvZiBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODo0OTo1MS45MjAwMjk4NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzQ1NjkwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYWRkZWIwNjZiN2RjYTdjMDAzNGYzM2JiYTlkZTRkYzk5OGNkMDE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDIzIDA4OjQ5OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXFxuIFxcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xcbiBcXHQgKiBFQXMuXFxuK1xcdCAqXFxuK1xcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG4rXFx0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXFxuIFxcdCAqL1xcbi1cXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XFxuK1xcdH07XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxcbkBAIC0xNzcwLDYgKzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuIFxcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xcbitcXG4rXFx0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XFxuK1xcbiBcXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbiBcXG4gXFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xNzYsNyArMTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxcbiBcXHQgKi9cXG4gXFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xcbi1cXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbiBcXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbkBAIC0yODEsOCArMjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xcbi1cXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xcbitcXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcXFwiLCBlcnIpO1xcbiBzdG9wX2hhbmRsZTpcXG5AQCAtMjkwLDcgKzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbiBcXHRcXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcXG4gXFx0XFx0XFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTMyMCw3ICszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gXFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdHJldHVybjtcXG4gbm9fZGVsZXRlOlxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdFxcdFxcdCBcXHUwMDI2c2ItXFx1MDAzZXNfdXVpZCk7XFxuIFxcbiBcXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cXG4rXFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuIFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbiBcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuQEAgLTE0MjMsNiArMTQyNSwxMyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdG1lbXNldChcXHUwMDI2ZWktXFx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cXHUwMDNlaV9kcXVvdCkpO1xcbiAjZW5kaWZcXG4gXFx0ZWktXFx1MDAzZWppbm9kZSA9IE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xcbitcXHQgKiBzaGFyZSB0aGlzIHNwYWNlIHdpdGggaV9lYV9pcHV0X25vZGUgKHZpYSB1bmlvbikgd2hpY2ggbWF5XFxuK1xcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcXG4rXFx0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVpLVxcdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcXG4gXFx0ZWktXFx1MDAzZWlfc3luY190aWQgPSAwO1xcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxcbiBcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9vcnBoYW4pO1xcbi1cXHRpbml0X3J3c2VtKFxcdTAwMjZlaS1cXHUwMDNleGF0dHJfc2VtKTtcXG4gXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbiBcXHRpbm9kZV9pbml0X29uY2UoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbiBcXHRleHQ0X2ZjX2luaXRfaW5vZGUoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbkBAIC01NTA4LDYgKzU1MTYsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0ICogVGhlIGZpcnN0IGlub2RlIHdlIGxvb2sgYXQgaXMgdGhlIGpvdXJuYWwgaW5vZGUuICBEb24ndCB0cnlcXG4gXFx0ICogcm9vdCBmaXJzdDogaXQgbWF5IGJlIG1vZGlmaWVkIGluIHRoZSBqb3VybmFsIVxcbiBcXHQgKi9cXG4rXFx0ZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTtcXG4rXFxuIFxcdGlmICghdGVzdF9vcHQoc2IsIE5PTE9BRCkgXFx1MDAyNlxcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xcbiBcXHRcXHRlcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTU3NDcsNiArNTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGZhaWxlZF9tb3VudDk6XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xcbitcXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcXG4gXFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XFxuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XFxuQEAgLTU3NjcsNiArNTc3OSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuIGZhaWxlZF9tb3VudF93cTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xcbitcXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcXG4gXFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuIFxcdHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XFxuIFxcbkBAIC01Nzc3LDYgKzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbiBcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG4gXFx0fVxcbiBmYWlsZWRfbW91bnQzYTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbitcXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcXG4gXFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuIGZhaWxlZF9tb3VudDM6XFxuIFxcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xcbmluZGV4IDk4MmExZjgzMWUyMjgyLi43ZjMzNDM0OWJkNGY3ZCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcXG5AQCAtMTE0LDEwICsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXFxcXG4gXFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZnNfaW5mbyktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXFxuIFxcbi1zdGF0aWMgaW50XFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi1cXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcXG4ge1xcbkBAIC01NjcsNyArNTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRcXHRcXHRcXHRlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiaW5jIHJlZiBlcnJvciAlZFxcXCIsIGVycik7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBzYXZlZF9lcnI7XFxuIH1cXG5AQCAtMTE2MCw3ICsxMTU2LDYgQEAgc3RhdGljIHZvaWRcXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdCwgYm9vbCBibG9ja19jc3VtLFxcbi1cXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbkBAIC0xMTk3LDE0ICsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkV4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXFxuIFxcdFxcdFxcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXFx1MDAzZWlfc2IsIDEpLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxcbkBAIC0xMjEyLDYgKzExOTksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNlIDApIHtcXG5AQCAtMTIyMSw2ICsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbkBAIC0xMjI5LDYgKzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImVhX2lub2RlIGRlYyByZWYgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMjQ1LDYgKzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuIFxcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0ZGlydHkgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC0xMjcxLDcgKzEyNjIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBzdGF0aWMgdm9pZFxcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLVxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgaW50IGV4dHJhX2NyZWRpdHMpXFxuIHtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcXG5AQCAtMTMxMyw3ICsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQkZJUlNUKGJoKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0cmFfY3JlZGl0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xcbiBcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxcbkBAIC0xNTA1LDcgKzE0OTQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxcbiBcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTU2NCw3ICsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRcXHRrdmZyZWUoZWFfZGF0YSk7XFxuIFxcdFxcdFxcdHJldHVybiBlYV9pbm9kZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0bmV4dF9lbnRyeTpcXG4gXFx0XFx0Y2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTtcXG4gXFx0fVxcbkBAIC0xNjE1LDcgKzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0cmV0dXJuIGVhX2lub2RlO1xcbiBvdXRfZXJyOlxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xcbiBcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiB9XFxuQEAgLTE4NDgsNyArMTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4gXFxuIFxcdHJldCA9IDA7XFxuIG91dDpcXG4tXFx0aXB1dChvbGRfZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMjAxMCw3ICsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aXB1dCh0bXBfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcXG4gXFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuQEAgLTIxNTAsNyArMjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBlcnJvcik7XFxuLVxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTIxODIsMTIgKzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXFxuIFxcdGlmIChicy1cXHUwMDNlYmggXFx1MDAyNlxcdTAwMjYgYnMtXFx1MDAzZWJoICE9IG5ld19iaCkge1xcbi1cXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbi1cXG4gXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVxcdTAwM2ViaCxcXG4tXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0XFx0XFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XFxuLVxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdH1cXG4gXFx0ZXJyb3IgPSAwO1xcbiBcXG5AQCAtMjIwMyw3ICsyMTg4LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdH1cXG4gXFx0aWYgKGNlKVxcbiBcXHRcXHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcXG5AQCAtMjI4NSw3ICsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuQEAgLTIyOTcsNyArMjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRoZWFkZXItXFx1MDAzZWhfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTtcXG4gXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XFxuIFxcdH1cXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yODYzLDQ2ICsyODQ4LDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xcbi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpXFxuLVxcbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxcbi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZFxcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cXG4tICovXFxuLXN0YXRpYyBpbnRcXG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgRUlBX01BU0ssIEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50ID0gMDtcXG4tXFx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50IFxcdTAwMjYgRUlBX01BU0spID09IEVJQV9NQVNLKSB7XFxuLVxcdFxcdC8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgKyBuICogMTYgc2xvdHMgYXJlIGZ1bGwgKi9cXG4tXFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKm5ld19hcnJheSA9IE5VTEw7XFxuLVxcbi1cXHRcXHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHRcXHQgKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50ICsgRUlBX0lOQ1IsXFxuLVxcdFxcdFxcdFxcdFxcdCBHRlBfTk9GUyk7XFxuLVxcdFxcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHQgICAoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQpKTtcXG4tXFx0XFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcXG4tXFx0XFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xcbi1cXHR9XFxuLVxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCsrO1xcbi1cXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCAtIDFdID0gaW5vZGU7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpXFxuICAqXFxuQEAgLTI5MTMsNyArMjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cXG4gICovXFxuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbkBAIC0yOTUyLDcgKzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBpbG9jLmJoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIElGSVJTVChoZWFkZXIpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0cmFfY3JlZGl0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcXG4gXFx0fVxcbkBAIC0yOTg2LDEyICsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xcbi1cXHRcXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHQgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcXG5AQCAtMzAxMywxNiArMjk1Niw1OSBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXFxuKy8qXFxuKyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZFxcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRpbnQgaWR4O1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzX2VhX2lub2RlX3dvcmspO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5leHQ7XFxuIFxcbi1cXHRpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcXG4rXFx0d2hpbGUgKG5vZGUpIHtcXG4rXFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBjb250YWluZXJfb2Yobm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xcbitcXHRcXHRuZXh0ID0gbm9kZS1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0aXB1dChcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZSk7XFxuK1xcdFxcdG5vZGUgPSBuZXh0O1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpXFxuKyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXFxuKyAqXFxuKyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhXFxuKyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cXG4rICpcXG4rICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYlxcbisgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxcbisgKiB3aXRoIHRoZSB1bnVzZWQgeGF0dHJfc2VtKSBhbmQgYSBkZWxheWVkIHdvcmtlciBwZXJmb3JtcyB0aGUgZmluYWxcXG4rICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC5cXG4rICovXFxuK3ZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XFxuK1xcdGlmIChpcHV0X2lmX25vdF9sYXN0KGlub2RlKSlcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHRsbGlzdF9hZGQoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZWFfaXB1dF9ub2RlLFxcbitcXHRcXHQgIFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4rXFx0LypcXG4rXFx0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXFxuK1xcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXFxuK1xcdCAqL1xcbitcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmssIDEpO1xcbit9XFxuIFxcbi1cXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIGVhX2lub2RlX2FycmF5LVxcdTAwM2Vjb3VudDsgKytpZHgpXFxuLVxcdFxcdGlwdXQoZWFfaW5vZGVfYXJyYXktXFx1MDAzZWlub2Rlc1tpZHhdKTtcXG4tXFx0a2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbit2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4re1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspO1xcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxNGEzMWZlMDAxOGQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC94YXR0ci5oXFxuKysrIGIvZnMvZXh0NC94YXR0ci5oXFxuQEAgLTEzMSwxMSArMTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XFxuIFxcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4gfTtcXG4gXFxuLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHtcXG4tXFx0dW5zaWduZWQgaW50IGNvdW50O1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XFxuLX07XFxuLVxcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjtcXG5AQCAtMTg3LDkgKzE4MiwyMSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRib29sIGlzX2NyZWF0ZSk7XFxuIFxcbiBleHRlcm4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXFxuIFxcdFxcdFxcdFxcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcXG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitcXG4rLypcXG4rICogRHJhaW4gYWxsIHBlbmRpbmcgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmVcXG4rICogZnJlZWluZyByZXNvdXJjZXMgdGhhdCBldmljdGlvbiBkZXBlbmRzIG9uIChxdW90YSwgYmxvY2sgYWxsb2NhdG9yKS5cXG4rICogTG9vcHMgYmVjYXVzZSB3b3JrZXIgaXB1dCBtYXkgdHJpZ2dlciBldmljdGlvbiB0aGF0IHJlLXF1ZXVlcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxcbit7XFxuK1xcdHdoaWxlIChmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKSB8fFxcbitcXHQgICAgICAgIWxsaXN0X2VtcHR5KFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSkpXFxuK1xcdFxcdDtcXG4rfVxcbiBcXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IDZkYTQ0NTczY2U0NTA4Li40OTE2YTlkNTQzNDcwZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtMjQxOCw2ICsyNDE4LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcXG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XFxuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XFxuK1xcbisvKipcXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxcbisgKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcXG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2NvdW50LCAtMSwgMSk7XFxuK31cXG4rXFxuIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBmbGFncyk7XFxuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NDk6NTMuMDk2NzcyMjA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg1MTEyMzEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2VudHJ5XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byByZXNvbHZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCBtb2RpZmllcyBob3cgRUEgaW5vZGVzIGFyZSByZWxlYXNlZCBieSBxdWV1aW5nIHRoZW0gdG8gYSBsb2NrbGVzcyBsaXN0IGFuZCBwcm9jZXNzaW5nIHRoZW0gaW4gYSB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWFkZGViMDY2YjdkY2E3YzAwMzRmMzNiYmE5ZGU0ZGM5OThjZDAxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA4OjQ5OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA3MCw4ICsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0ICogYmV0d2VlbiByZWFkZXJzIG9mIEVBcyBhbmQgd3JpdGVycyBvZiByZWd1bGFyIGZpbGUgZGF0YSwgc29cbiBcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xuIFx0ICogRUFzLlxuK1x0ICpcbitcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcbitcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxuIFx0ICovXG4tXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4rXHRcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xuK1x0fTtcbiBcbiBcdC8qXG4gXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxuQEAgLTE3NzAsNiArMTc3NiwxMSBAQCBzdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbiBcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7XG4rXG4rXHQvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi9cbitcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xuK1xuIFx0c3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcbiBcdC8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTE3Niw3ICsxNzYsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxuIFx0ICovXG4gXHRpbnQgZXh0cmFfY3JlZGl0cyA9IDY7XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuIFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XG4gXG4gXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcbkBAIC0yODEsOCArMjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXG4gXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cbi1cdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIFx1MDAyNmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdFx0ICAgICAgZXh0cmFfY3JlZGl0cyk7XG4rXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZXh0NF93YXJuaW5nKGlub2RlLVx1MDAzZWlfc2IsIFwieGF0dHIgZGVsZXRlIChlcnIgJWQpXCIsIGVycik7XG4gc3RvcF9oYW5kbGU6XG5AQCAtMjkwLDcgKzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xuIFx0XHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHRcdGdvdG8gbm9fZGVsZXRlO1xuIFx0fVxuIFxuQEAgLTMyMCw3ICszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdHJldHVybjtcbiBub19kZWxldGU6XG4gXHQvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjk3ZjBlN2MxYjI1NGY3IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xMzAzLDYgKzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRcdCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQpO1xuIFxuIFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgd2hpbGUgcXVvdGEgaXMgc3RpbGwgYWN0aXZlLiAqL1xuK1x0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG5AQCAtMTQyMyw2ICsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbitcdC8qXG4rXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcbitcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbitcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbitcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cbitcdCAqL1xuK1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9vcnBoYW4pO1xuLVx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiBcdGlub2RlX2luaXRfb25jZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG5AQCAtNTUwOCw2ICs1NTE2LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHQgKiBUaGUgZmlyc3QgaW5vZGUgd2UgbG9vayBhdCBpcyB0aGUgam91cm5hbCBpbm9kZS4gIERvbid0IHRyeVxuIFx0ICogcm9vdCBmaXJzdDogaXQgbWF5IGJlIG1vZGlmaWVkIGluIHRoZSBqb3VybmFsIVxuIFx0ICovXG4rXHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuK1xuIFx0aWYgKCF0ZXN0X29wdChzYiwgTk9MT0FEKSBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsZWRfbW91bnQ5OlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXG4rXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiArNTc3OSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRpZiAoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbiBmYWlsZWRfbW91bnRfd3E6XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovXG4rXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdH1cbiBmYWlsZWRfbW91bnQzYTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbitcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uN2YzMzQzNDliZDRmN2QgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCArMTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcbiBcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvKS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxuIFxuLXN0YXRpYyBpbnRcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLVxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcbiB7XG5AQCAtNTY3LDcgKzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0fVxuIG91dDpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCArMTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJpbmMgcmVmIGVycm9yICVkXCIsIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xMTMzLDcgKzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwiLFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNjAsNyArMTE1Niw2IEBAIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcbi1cdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgICBpbnQgZXh0cmFfY3JlZGl0cywgYm9vbCBza2lwX3F1b3RhKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XG5AQCAtMTE5NywxNCArMTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGVyciA9IGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KGVhX2lub2RlX2FycmF5LCBlYV9pbm9kZSk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4tXHRcdFx0XHRcdCAgIFwiRXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4gXHRcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXG4gXHRcdFx0ZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC1cdTAwM2VpX3NiLCAxKSxcbiBcdFx0XHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxuQEAgLTEyMTIsNiArMTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiRW5zdXJlIGNyZWRpdHMgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMTIyMSw2ICsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdFx0ZXJyKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgKzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcImVhX2lub2RlIGRlYyByZWYgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEyNDUsNiArMTIzNSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG4gXG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgKzEyNjIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tXHRcdFx0IHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0IGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XG5AQCAtMTMxMyw3ICsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0XHQgICAgIEJGSVJTVChiaCksXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxuQEAgLTE1MDUsNyArMTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcIiwgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyArMTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbiBcdFx0XHRrdmZyZWUoZWFfZGF0YSk7XG4gXHRcdFx0cmV0dXJuIGVhX2lub2RlO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRuZXh0X2VudHJ5OlxuIFx0XHRjZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpO1xuIFx0fVxuQEAgLTE2MTUsNyArMTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbitcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuQEAgLTE4NDgsNyArMTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcbiBcbiBcdHJldCA9IDA7XG4gb3V0OlxuLVx0aXB1dChvbGRfZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyArMTk5OSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdShcbiBcdFx0XHRcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplKTtcbiBcdFx0XHR9XG4tXHRcdFx0aXB1dCh0bXBfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIHRtcF9pbm9kZSk7XG4gXG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG5AQCAtMjE1MCw3ICsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCJkZWMgcmVmIGVycm9yPSVkXCIsXG4gXHRcdFx0XHRcdFx0XHQgICBlcnJvcik7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiArMjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHQvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi9cbiBcdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4tXG4gXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cdTAwM2ViaCxcbi1cdFx0XHRcdFx0IFx1MDAyNmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdH1cbiBcdGVycm9yID0gMDtcbiBcbkBAIC0yMjAzLDcgKzIxODgsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuQEAgLTIyOTcsNyArMjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI4NjMsNDYgKzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xuLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcbi1cbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxuLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXG4tICovXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcbi1cdFx0Lypcbi1cdFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxuLVx0XHQgKi9cbi1cdFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHRcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xuLVx0XHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ID0gMDtcbi1cdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IFx1MDAyNiBFSUFfTUFTSykgPT0gRUlBX01BU0spIHtcbi1cdFx0LyogZXhwYW5kIHRoZSBhcnJheSBvbmNlIGFsbCAxNSArIG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICsgRUlBX0lOQ1IsXG4tXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4tXHRcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LFxuLVx0XHQgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHQgICAoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCkpO1xuLVx0XHRrZnJlZSgqZWFfaW5vZGVfYXJyYXkpO1xuLVx0XHQqZWFfaW5vZGVfYXJyYXkgPSBuZXdfYXJyYXk7XG4tXHR9XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCsrO1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyArMjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gICogcmVmZXJlbmNlcyBvbiB4YXR0ciBibG9jayBhbmQgeGF0dHIgaW5vZGVzLlxuICAqL1xuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbkBAIC0yOTUyLDcgKzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG4gXHRcdFx0XHRcdFx0ICAgICBJRklSU1QoaGVhZGVyKSxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcbiBcdH1cbkBAIC0yOTg2LDEyICsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0fVxuIFxuIFx0XHR9XG4gXG4tXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXG4rXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0IGV4dHJhX2NyZWRpdHMpO1xuIFx0XHQvKlxuIFx0XHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXG5AQCAtMzAxMywxNiArMjk1Niw1OSBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuKy8qXG4rICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkXG4rICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbisgKi9cbitzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdGludCBpZHg7XG4rXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8sXG4rXHRcdFx0XHRcdFx0c19lYV9pbm9kZV93b3JrKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpuZXh0O1xuIFxuLVx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4rXHR3aGlsZSAobm9kZSkge1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XG4rXHRcdG5leHQgPSBub2RlLVx1MDAzZW5leHQ7XG4rXHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbitcdFx0bm9kZSA9IG5leHQ7XG4rXHR9XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxuKyAqXG4rICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXG4rICpcbisgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcbisgKiB3aXRoIHRoZSB1bnVzZWQgeGF0dHJfc2VtKSBhbmQgYSBkZWxheWVkIHdvcmtlciBwZXJmb3JtcyB0aGUgZmluYWxcbisgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuKyAqL1xuK3ZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRpZiAoIWlub2RlKVxuK1x0XHRyZXR1cm47XG4rXHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbitcdGlmIChpcHV0X2lmX25vdF9sYXN0KGlub2RlKSlcbiBcdFx0cmV0dXJuO1xuK1x0bGxpc3RfYWRkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lYV9pcHV0X25vZGUsXG4rXHRcdCAgXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdC8qXG4rXHQgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSxcbitcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4rXHQgKi9cbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIDEpO1xuK31cbiBcbi1cdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cdTAwM2Vjb3VudDsgKytpZHgpXG4tXHRcdGlwdXQoZWFfaW5vZGVfYXJyYXktXHUwMDNlaW5vZGVzW2lkeF0pO1xuLVx0a2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuK3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuK3tcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxNGEzMWZlMDAxOGQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxuQEAgLTEzMSwxMSArMTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG4gXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gfTtcbiBcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4tfTtcbi1cbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG5AQCAtMTg3LDkgKzE4MiwyMSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0Ym9vbCBpc19jcmVhdGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXG4gXHRcdFx0XHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG4rZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbitleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcbisvKlxuKyAqIERyYWluIGFsbCBwZW5kaW5nIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlXG4rICogZnJlZWluZyByZXNvdXJjZXMgdGhhdCBldmljdGlvbiBkZXBlbmRzIG9uIChxdW90YSwgYmxvY2sgYWxsb2NhdG9yKS5cbisgKiBMb29wcyBiZWNhdXNlIHdvcmtlciBpcHV0IG1heSB0cmlnZ2VyIGV2aWN0aW9uIHRoYXQgcmUtcXVldWVzLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuK3tcbitcdHdoaWxlIChmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaykgfHxcbitcdCAgICAgICAhbGxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSkpXG4rXHRcdDtcbit9XG4gXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDZkYTQ0NTczY2U0NTA4Li40OTE2YTlkNTQzNDcwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjQxOCw2ICsyNDE4LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXG4gZXh0ZXJuIHZvaWQgaWhvbGQoc3RydWN0IGlub2RlICogaW5vZGUpO1xuIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopO1xuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XG4rXG4rLyoqXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxuKyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4rICpcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcbisgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2aW5vZGUtXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xuK31cbitcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjQ5OjUzLjA5Njc3NTgyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1Nzk2MjU5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBleHQ0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgZXh0NCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2Rlcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGEgKmRlZmVycmVkIGlwdXQqIG1lY2hhbmlzbSBmb3IgdGhlc2UgRUEgaW5vZGVzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGV5J3JlIGFpbWluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHBlcmhhcHMgaGFuZGxlIHNvbWUgbG9ja2luZyBjb250ZW50aW9uIGlzc3VlcyByZWxhdGVkIHRvIEVBIGlub2RlIG1hbmFnZW1lbnQuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgZ29vZCBjaHVuayBvZiBjb2RlLCBzcGFubmluZyBoZWFkZXIgZmlsZXMgbGlrZSBgZXh0NC5oYCwgYHhhdHRyLmhgLCBhbmQgYGZzLmhgLCBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9uIGZpbGVzIGxpa2UgYGlub2RlLmNgLCBgc3VwZXIuY2AsIGFuZCBgeGF0dHIuY2AuIExvb2tzIGxpa2UgdGhleSdyZSBtYWtpbmcgYSBjb3JlIHJlZmFjdG9yIGJ5IHJlcGxhY2luZyB0aGUgb2xkIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCB3aXRoIGEgZGVmZXJyZWQgd29ya3F1ZXVlIChgc19lYV9pbm9kZV93b3JrYCkgYW5kIGEgbG9ja2xlc3MgbGlzdCAoYHNfZWFfaW5vZGVfdG9fZnJlZWApLiBUaGlzIHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmRzIGFzeW5jaHJvbm91cyBmcmVlaW5nIG9mIHRoZXNlIEVBIGlub2RlcyB0byBhdm9pZCBibG9ja2luZyBvcGVyYXRpb25zLiBUaGV5J3ZlIGFsc28gYWRkZWQgYSBuZXcgZnVuY3Rpb24sIGBpcHV0X2lmX25vdF9sYXN0YCwgYW5kIG1vZGlmaWVkIHNldmVyYWwgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYW5kIGBleHQ0X2V2aWN0X2lub2RlYCBhbmQgYF9fZXh0NF9maWxsX3N1cGVyYC5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgY2hhbmdlIHRvIGV4dDQncyB4YXR0ciBoYW5kbGluZy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmNyZWFzZWQgY29tcGxleGl0eSBvZiB0aGUgYXN5bmNocm9ub3VzIGxvZ2ljLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdG8gYnVpbGQgYSBmdXp6IHRhcmdldC4gQ2xlYXJseSwgYENPTkZJR19FWFQ0X0ZTYCBpcyB0aGUgYmlnIG9uZS4gQnV0IGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgWEFUVFIgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0PyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgdG8gYmUgY2VydGFpbiBJJ20gZW5hYmxpbmcgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciBFQSBpbm9kZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NDk6NTkuNjc2NDA0Nzk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDc5MDM2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjUwOjAxLjcyNDMxOTQ0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTY4OTgxNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBFWFQ0IENvbmZpZ3VyYXRpb24gQ29udGV4dCoqXG5cblJpZ2h0LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgYmVmb3JlIHdlIGRpZyB0b28gZGVlcC4gTXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UgYXJlbid0IG92ZXJsb29raW5nIGFueSBleGlzdGluZyBFWFQ0IGNvbmZpZ3VyYXRpb25zIG9yIHJlbGV2YW50IGNvbnRleHQuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlIGFyZSBmdWxseSBhd2FyZSBvZiB3aGF0J3MgYWxyZWFkeSBpbiBwbGFjZSwgaWYgYW55dGhpbmcsIHRvIGF2b2lkIGR1cGxpY2F0aW5nIGVmZm9ydCBvciBpbnRyb2R1Y2luZyBjb25mbGljdHMuIFdlIGFsbCBrbm93IGhvdyBlYXN5IGl0IGlzIHRvIG1pc3Mgc29tZXRoaW5nIGluIGEgY29tcGxleCBlbnZpcm9ubWVudCwgc28gaXQncyBiZXN0IHRvIHN0YXJ0IHdpdGggYSBzYW5pdHkgY2hlY2suIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4dGFudCBFWFQ0IHNldHVwcyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUyOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjUwOjEzLjY5MzMwMzk2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjIxMzgxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTM0LVxcbmZzL2V4dDQvS2NvbmZpZzozNTpjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG5mcy9leHQ0L0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNjctXFxuZnMvZXh0NC9LY29uZmlnOjY4OmNvbmZpZyBFWFQ0X0RFQlVHXFxuZnMvZXh0NC9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkV4dDQgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNzYtXFxuZnMvZXh0NC9LY29uZmlnOjc3OmNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXFxuZnMvZXh0NC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODo1MDoxNC4zMTU0NDc1NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzM5MzkzNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVBIElub2RlcyBhbmQgRXh0ZW5kZWQgQXR0cmlidXRlczogQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHNvIHRoaXMgZmVhdHVyZSBpcyBhbGwgYWJvdXQgRXh0ZW5kZWQgQXR0cmlidXRlIGlub2Rlcywgb3IgRUEgaW5vZGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbnMgZm9yIEVBIGlub2RlcyB0aGVtc2VsdmVzLCBvciBpcyBpdCBoYW5kbGVkIGFzIHBhcnQgb2YgdGhlIGJyb2FkZXIgZXh0NCB4YXR0ciBpbXBsZW1lbnRhdGlvbj8gSSdtIHByZXR0eSBzdXJlIGl0J3MgdGhlIGxhdHRlciwgYnV0IGxldCdzIGp1c3QgbWFrZSBzdXJlLlxuXG5JdCBzZWVtcyBsaWtlIGBFWFQ0X0ZTYCBpcyBwcm9iYWJseSBzdWZmaWNpZW50IGZvciBlbmFibGluZyBpdCwgdGhvdWdoIEkgc2hvdWxkIGNvbnNpZGVyIGlmIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBtaWdodCBiZSBuZWNlc3Nhcnkgb3IgYmVuZWZpY2lhbCB0byBlbmFibGUgbW9yZSByb2J1c3QgeGF0dHIgdXNhZ2Ugb3ZlcmFsbC5cblxuVG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIsIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBoZWFkIG92ZXIgdG8gYGZzL2V4dDQveGF0dHIuY2AgYW5kIHRha2UgYSBsb29rLiBUaGF0J3MgdGhlIGJlc3QgcGxhY2UgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25maWd1cmF0aW9uIGRldGFpbHMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBJdCB3aWxsIGJlIGEgcXVpY2sgY2hlY2ssIEkgYW0gc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODo1MDoyMC42NTQ4NDMzNDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjcxMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJfbWFwW10gPSB7XFxuZnMvZXh0NC94YXR0ci5jLTg5LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1VTRVJdXFx0XFx0ICAgICA9IFxcdTAwMjZleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcixcXG5mcy9leHQ0L3hhdHRyLmM6OTA6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQveGF0dHIuYy05MS1cXHRbRVhUNF9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTXSAgPSBcXHUwMDI2bm9wX3Bvc2l4X2FjbF9hY2Nlc3MsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtOTQtXFx0W0VYVDRfWEFUVFJfSU5ERVhfVFJVU1RFRF1cXHQgICAgID0gXFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxcbmZzL2V4dDQveGF0dHIuYzo5NTojaWZkZWYgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L3hhdHRyLmMtOTYtXFx0W0VYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFldXFx0ICAgICA9IFxcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTAxPWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEwMy1cXHRcXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXFxuZnMvZXh0NC94YXR0ci5jOjEwNDojaWZkZWYgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L3hhdHRyLmMtMTA1LVxcdFxcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTE2LVxcbmZzL2V4dDQveGF0dHIuYzoxMTc6I2lmZGVmIENPTkZJR19MT0NLREVQXFxuZnMvZXh0NC94YXR0ci5jLTExOC12b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTIyLVxcdGxvY2tkZXBfc2V0X3N1YmNsYXNzKFxcdTAwMjZlYV9pbm9kZS1cXHUwMDNlaV9yd3NlbSwgMSk7XFxuZnMvZXh0NC94YXR0ci5jOjEyMzpcXHQodm9pZCkgZWk7XFx0Lyogc2h1dCB1cCBjbGFuZyB3YXJuaW5nIGlmICFDT05GSUdfTE9DS0RFUCAqL1xcbmZzL2V4dDQveGF0dHIuYy0xMjQtXFx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtLCBJX0RBVEFfU0VNX0VBKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NTA6MjAuOTIwNTIwMjk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3NzUzMTcyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBJbm9kZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpcnN0IHRoaW5ncyBmaXJzdDogYEVYVDRfRlNgLCBgRVhUNF9GU19QT1NJWF9BQ0xgLCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFsbCBsb29rIGdvb2QgYW5kIHJlbGV2YW50IHRvIHdoYXQgSSBleHBlY3QuIE5vdywgbGV0J3MgZHJpbGwgZG93biBhbmQgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdGhpcyBwYXRjaCB0b3VjaGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlICpyZWFsbHkqIHRoZSBmb2N1cyBoZXJlLCB0aGUgb25lcyB0aGF0IGVtYm9keSB0aGUgbmV3IGxvZ2ljLCBub3QganVzdCBnZW5lcmljIGZpbGUgc3lzdGVtIHN0dWZmLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgcXVpdGUgYSBmZXcgZnVuY3Rpb25zLCBidXQgSSdtIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCB0aG9zZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBuZXcgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIEVBIGlub2RlczogYGV4dDRfZXZpY3RfaW5vZGVgLCBgZXh0NF9wdXRfc3VwZXJgLCBgZXh0NF9hbGxvY19pbm9kZWAsIGBfX2V4dDRfZmlsbF9zdXBlcmAsIGBleHQ0X3hhdHRyX2lub2RlX2dldGAsIGBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYCwgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAsIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLCBgZXh0NF94YXR0cl9zZXRfZW50cnlgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfZHJhaW5fZWFfaW5vZGVfd29ya2AuXG5cbkkgbmVlZCB0byBmaWx0ZXIgdGhvc2UgdG8gdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gYGV4dDRfZWFfaW5vZGVfd29ya2AgaXMgYSBzdHJvbmcgY29udGVuZGVyIGJlY2F1c2UgdGhhdCdzIHRoZSB3b3JrZXIgZnVuY3Rpb24uIGBleHQ0X3B1dF9lYV9pbm9kZWAgc2hvdWxkIGFsc28gYmUgaW1wb3J0YW50LCBhcyB0aGlzIGlzIHRoZSBuZXcgZnVuY3Rpb24gdG8gcHV0IHRoZSBFQSBpbm9kZXMuIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgbWlnaHQgYmUgaW50ZXJlc3RpbmcsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgd2hhdCBpdCBkb2VzIHdpdGggYW55IGFycmF5cy4gUGx1cywgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YCBsb29rIGxpa2UgdGhlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gcG9pbnRzLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgdGhvc2UgZm9jdXMgZnVuY3Rpb25zLiBJIHNlZSBgZXh0NF9lYV9pbm9kZV93b3JrYCBpcyBgc3RhdGljYCBpbiBgZnMvZXh0NC94YXR0ci5jYC4gU28gaXQncyBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIFRoZW4gYGV4dDRfcHV0X2VhX2lub2RlYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0IGlzIGRlY2xhcmVkIGluIGBmcy9leHQ0L3hhdHRyLmhgLCBtZWFuaW5nIGl0J3MgZXh0ZXJuYWxseSB2aXNpYmxlLiBHb29kLlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhpcyBsaXN0IGZvciBmdXp6aW5nOlxuKiAgIGBleHQ0X2VhX2lub2RlX3dvcmtgXG4qICAgYGV4dDRfcHV0X2VhX2lub2RlYFxuKiAgIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWBcbiogICBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGBcbiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgXG4qICAgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YFxuKiAgIGBleHQ0X3hhdHRyX3NldF9lbnRyeWBcbiogICBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZWBcblxuUGVyZmVjdCEgVGhlc2UgYXJlIGFsbCB2ZXJ5IHNwZWNpZmljIHRvIGV4dDQgeGF0dHIgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSBpbiByZWdhcmRzIHRvIEVBIGlub2Rlcy4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgZXhwZWN0IHRvIGNvbnRhaW4gdGhlIGNvcmUgY2hhbmdlcyBvZiB0aGUgcGF0Y2guXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIEVBIGlub2Rlcy4gSXQncyBoYW5kbGluZyB0aGUgcmVsZWFzZSBvZiB0aGVzZSBpbm9kZXMgYnkgcXVldWluZyB0aGVtIHVwIHRvIGEgbG9ja2xlc3MgbGlzdCwgYW5kIHRoZW4gcHJvY2Vzc2luZyB0aGVtIGluIGEgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgY2hhbmdlcyBob3cgdGhlIGV4dDQgeGF0dHIgbG9naWMgZnVuZGFtZW50YWxseSB3b3Jrcy4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBiZSB2ZXJ5IGNhcmVmdWwuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgc3RlbW1pbmcgZnJvbSB0aGlzIG5ldyBFQSBpbm9kZSBldmljdGlvbiBzeXN0ZW0uXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3MywiT3V0cHV0VG9rZW5zIjoyNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NTA6MzUuNjk1ODQwMzQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMDQ4NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2VudHJ5XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byByZXNvbHZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCBtb2RpZmllcyBob3cgRUEgaW5vZGVzIGFyZSByZWxlYXNlZCBieSBxdWV1aW5nIHRoZW0gdG8gYSBsb2NrbGVzcyBsaXN0IGFuZCBwcm9jZXNzaW5nIHRoZW0gaW4gYSB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUNF9GU19QT1NJWF9BQ0xcIixcbiAgICBcIkVYVDRfRlNfU0VDVVJJVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX3NldF9lbnRyeVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gcmVzb2x2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgbW9kaWZpZXMgaG93IEVBIGlub2RlcyBhcmUgcmVsZWFzZWQgYnkgcXVldWluZyB0aGVtIHRvIGEgbG9ja2xlc3MgbGlzdCBhbmQgcHJvY2Vzc2luZyB0aGVtIGluIGEgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBsb2dpYyBvZiBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 08:41:30 +0000 UTC FinishedAt: 2026-06-23 08:50:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "502d801f0ab03e4f32f9a33d203154ce84887921", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "acc1a7bd-816f-451e-86ee-a62f88ad8fcc" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_ea_inode_work", "ext4_put_ea_inode", "ext4_xattr_delete_inode", "ext4_xattr_inode_dec_ref_all", "ext4_xattr_block_set", "ext4_xattr_ibody_set", "ext4_xattr_set_entry", "ext4_xattr_inode_lookup_create", "ext4_xattr_inode_create" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RVhUNF9GU19TRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfc2V0X2VudHJ5JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIHJlc29sdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEl0IG1vZGlmaWVzIGhvdyBFQSBpbm9kZXMgYXJlIHJlbGVhc2VkIGJ5IHF1ZXVpbmcgdGhlbSB0byBhIGxvY2tsZXNzIGxpc3QgYW5kIHByb2Nlc3NpbmcgdGhlbSBpbiBhIHdvcmtxdWV1ZSAoYGV4dDRfZWFfaW5vZGVfd29ya2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyIGR1cmluZyBFQSBpbm9kZSBldmljdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFhZGRlYjA2NmI3ZGNhN2MwMDM0ZjMzYmJhOWRlNGRjOTk4Y2QwMTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwODo0OTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggJiM0MzsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0ICogYmV0d2VlbiByZWFkZXJzIG9mIEVBcyBhbmQgd3JpdGVycyBvZiByZWd1bGFyIGZpbGUgZGF0YSwgc29cbiBcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xuIFx0ICogRUFzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuJiM0MztcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxuIFx0ICovXG4tXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbiYjNDM7XHRcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xuJiM0MztcdH07XG4gXG4gXHQvKlxuIFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcbkBAIC0xNzcwLDYgJiM0MzsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbiYjNDM7XG4mIzQzO1x0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xuJiM0MztcbiBcdHNwaW5sb2NrX3Qgc19lc19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gXG4gXHQvKiBKb3VybmFsIHRyaWdnZXJzIGZvciBjaGVja3N1bSBjb21wdXRhdGlvbiAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC0xNzYsNyAmIzQzOzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXG4gXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cbi1cdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIFx1MDAyNmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdFx0ICAgICAgZXh0cmFfY3JlZGl0cyk7XG4mIzQzO1x0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGV4dDRfd2FybmluZyhpbm9kZS1cdTAwM2VpX3NiLCBcJiMzNDt4YXR0ciBkZWxldGUgKGVyciAlZClcJiMzNDssIGVycik7XG4gc3RvcF9oYW5kbGU6XG5AQCAtMjkwLDcgJiM0MzsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcbiBcdFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0XHRnb3RvIG5vX2RlbGV0ZTtcbiBcdH1cbiBcbkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRcdCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQpO1xuIFxuIFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgJiM0MzsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuJiM0MztcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbiYjNDM7XHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXG4mIzQzO1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuJiM0MztcdCAqL1xuJiM0MztcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcbiBcdGVpLVx1MDAzZWlfc3luY190aWQgPSAwO1xuQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NTA4LDYgJiM0Mzs1NTE2LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHQgKiBUaGUgZmlyc3QgaW5vZGUgd2UgbG9vayBhdCBpcyB0aGUgam91cm5hbCBpbm9kZS4gIERvbiYjMzk7dCB0cnlcbiBcdCAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCFcbiBcdCAqL1xuJiM0MztcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XG4mIzQzO1xuIFx0aWYgKCF0ZXN0X29wdChzYiwgTk9MT0FEKSBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICYjNDM7NTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbiYjNDM7XHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVx1MDAzZXNfam91cm5hbCk7XG4gXHR9XG4gZmFpbGVkX21vdW50M2E6XG4mIzQzO1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xuJiM0MztcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uN2YzMzQzNDliZDRmN2QgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuIFx0XHRcdFx0XHRlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHR9XG4gb3V0OlxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCAmIzQzOzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNjAsNyAmIzQzOzExNTYsNiBAQCBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExOTcsMTQgJiM0MzsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7RXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuIFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxuIFx0XHRcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXHUwMDNlaV9zYiwgMSksXG4gXHRcdFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcbkBAIC0xMjEyLDYgJiM0MzsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgJiM0MzsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRlcnIpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgJiM0MzsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0xMjQ1LDYgJiM0MzsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbiBcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLVx0XHRcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyAmIzQzOzE1NTMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG4gXHRcdFx0a3ZmcmVlKGVhX2RhdGEpO1xuIFx0XHRcdHJldHVybiBlYV9pbm9kZTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICYjNDM7MTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbkBAIC0xODQ4LDcgJiM0MzsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyAmIzQzOzE5OTksNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXG4gXHRcdFx0XHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG4gXHRcdFx0fVxuLVx0XHRcdGlwdXQodG1wX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCYjMzQ7ZGVjIHJlZiBlcnJvcj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXG4gXHRpZiAoYnMtXHUwMDNlYmggXHUwMDI2XHUwMDI2IGJzLVx1MDAzZWJoICE9IG5ld19iaCkge1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuLVxuIFx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXHUwMDNlYmgsXG4tXHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHR9XG4gXHRlcnJvciA9IDA7XG4gXG5AQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICYjNDM7MjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yODYzLDQ2ICYjNDM7Mjg0OCw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICYjNDM7IEVJQV9JTkNSLFxuLVx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuLVx0XHRpZiAobmV3X2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcbi1cdFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0ICAgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQpKTtcbi1cdFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcbi1cdFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xuLVx0fVxuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyAmIzQzOzI4NTgsNiBAQCBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cbiAgKi9cbiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgICAgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG5AQCAtMjk1Miw3ICYjNDM7Mjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgJiM0MzsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdH1cbiBcbiBcdFx0fVxuIFxuLVx0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LFxuJiM0MztcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICYjNDM7Mjk1Niw1OSBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuJiM0MzsvKlxuJiM0MzsgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbmV4dDtcbiBcbi1cdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuJiM0MztcdHdoaWxlIChub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xuJiM0MztcdFx0bmV4dCA9IG5vZGUtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiYjNDM7XHRcdG5vZGUgPSBuZXh0O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4mIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlXG4mIzQzOyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuJiM0MzsgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpbm9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbiYjNDM7XHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbiYjNDM7XHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbiYjNDM7XHRcdCAgXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxuJiM0MztcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XG4mIzQzO31cbiBcbi1cdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cdTAwM2Vjb3VudDsgJiM0MzsmIzQzO2lkeClcbi1cdFx0aXB1dChlYV9pbm9kZV9hcnJheS1cdTAwM2Vpbm9kZXNbaWR4XSk7XG4tXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XG4mIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuJiM0Mzt7XG4mIzQzO1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxNGEzMWZlMDAxOGQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaFxuQEAgLTEzMSwxMSAmIzQzOzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xuIFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuIH07XG4gXG4tc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkge1xuLVx0dW5zaWduZWQgaW50IGNvdW50O1xuLVx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xuLX07XG4tXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xuQEAgLTE4Nyw5ICYjNDM7MTgyLDIxIEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEcmFpbiBhbGwgcGVuZGluZyBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cy4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZVxuJiM0MzsgKiBmcmVlaW5nIHJlc291cmNlcyB0aGF0IGV2aWN0aW9uIGRlcGVuZHMgb24gKHF1b3RhLCBibG9jayBhbGxvY2F0b3IpLlxuJiM0MzsgKiBMb29wcyBiZWNhdXNlIHdvcmtlciBpcHV0IG1heSB0cmlnZ2VyIGV2aWN0aW9uIHRoYXQgcmUtcXVldWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4mIzQzO3tcbiYjNDM7XHR3aGlsZSAoZmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspIHx8XG4mIzQzO1x0ICAgICAgICFsbGlzdF9lbXB0eShcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKSlcbiYjNDM7XHRcdDtcbiYjNDM7fVxuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTgsNiAmIzQzOzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4mIzQzOyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuJiM0MzsgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfY291bnQsIC0xLCAxKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfU0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lib2R5X3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9lbnRyeSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byByZXNvbHZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCBtb2RpZmllcyBob3cgRUEgaW5vZGVzIGFyZSByZWxlYXNlZCBieSBxdWV1aW5nIHRoZW0gdG8gYSBsb2NrbGVzcyBsaXN0IGFuZCBwcm9jZXNzaW5nIHRoZW0gaW4gYSB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFhZGRlYjA2NmI3ZGNhN2MwMDM0ZjMzYmJhOWRlNGRjOTk4Y2QwMTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAwODo0OTo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHsKIAkgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzbwogCSAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZwogCSAqIEVBcy4KJiM0MzsJICoKJiM0MzsJICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZQomIzQzOwkgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS4KIAkgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTsKJiM0MzsJfTsKIAogCS8qCiAJICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2UKQEAgLTE3NzAsNiAmIzQzOzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7CiAJc3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0czsKIAlzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7CiAJc3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlOwomIzQzOwomIzQzOwkvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yazsKJiM0MzsKIAlzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAJLyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpCiAJICovCiAJaW50IGV4dHJhX2NyZWRpdHMgPSA2OwotCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7CiAJYm9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7CiAKIAl0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTsKQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJfQogCiAJLyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovCi0JZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgJmFtcDtlYV9pbm9kZV9hcnJheSwKLQkJCQkgICAgICBleHRyYV9jcmVkaXRzKTsKJiM0MzsJZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7CiAJaWYgKGVycikgewogCQlleHQ0X3dhcm5pbmcoaW5vZGUtJmd0O2lfc2IsICYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpJiMzNDssIGVycik7CiBzdG9wX2hhbmRsZToKQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CiAJCWlmIChmcmVlemVfcHJvdGVjdGVkKQogCQkJc2JfZW5kX2ludHdyaXRlKGlub2RlLSZndDtpX3NiKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAkJZ290byBub19kZWxldGU7CiAJfQogCkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJaWYgKGZyZWV6ZV9wcm90ZWN0ZWQpCiAJCXNiX2VuZF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7Ci0JZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAlyZXR1cm47CiBub19kZWxldGU6CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQkJICZhbXA7c2ItJmd0O3NfdXVpZCk7CiAKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi8KJiM0MzsJZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7CiAJZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzYmktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKTsKQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCW1lbXNldCgmYW1wO2VpLSZndDtpX2RxdW90LCAwLCBzaXplb2YoZWktJmd0O2lfZHF1b3QpKTsKICNlbmRpZgogCWVpLSZndDtqaW5vZGUgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXMKJiM0MzsJICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heQomIzQzOwkgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzCiYjNDM7CSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS4KJiM0MzsJICovCiYjNDM7CWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2VpLSZndDtpX3Jzdl9jb252ZXJzaW9uX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZWktJmd0O2lfY29tcGxldGVkX2lvX2xvY2spOwogCWVpLSZndDtpX3N5bmNfdGlkID0gMDsKQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9vcnBoYW4pOwotCWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwogCWlub2RlX2luaXRfb25jZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwogCWV4dDRfZmNfaW5pdF9pbm9kZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwpAQCAtNTUwOCw2ICYjNDM7NTUxNiw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCSAqIFRoZSBmaXJzdCBpbm9kZSB3ZSBsb29rIGF0IGlzIHRoZSBqb3VybmFsIGlub2RlLiAgRG9uJiMzOTt0IHRyeQogCSAqIHJvb3QgZmlyc3Q6IGl0IG1heSBiZSBtb2RpZmllZCBpbiB0aGUgam91cm5hbCEKIAkgKi8KJiM0MzsJZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTsKJiM0MzsKIAlpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpICZhbXA7JmFtcDsgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkgewogCQllcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7CiAJCWlmIChlcnIpCkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9tb3VudDk6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqLwomIzQzOwlleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTsKIAlleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTsKIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTsKQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCWlmIChFWFQ0X1NCKHNiKS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CiBmYWlsZWRfbW91bnRfd3E6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi8KJiM0MzsJZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7CiAJZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSk7CiAJc2JpLSZndDtzX2VhX2lub2RlX2NhY2hlID0gTlVMTDsKIApAQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJCWV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLSZndDtzX2pvdXJuYWwpOwogCX0KIGZhaWxlZF9tb3VudDNhOgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovCiYjNDM7CWV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpOwogCWV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpOwogZmFpbGVkX21vdW50MzoKIAkvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjgyLi43ZjMzNDM0OWJkNGY3ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTE0LDEwICYjNDM7MTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7CiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKQkoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFwKIAkJCQlpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvKS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSkKIAotc3RhdGljIGludAotZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSkKIHsKQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LAogCQkJCQllYV9pbm9kZS0mZ3Q7aV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pOwogCX0KIG91dDoKLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTsKIAkJaWYgKGVycikgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2luYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCXJldHVybiAwOwogCkBAIC0xMTMzLDcgJiM0MzsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZCYjMzQ7LAogCQkJCQkgICBlcnIpOwotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCX0KIAlyZXR1cm4gc2F2ZWRfZXJyOwogfQpAQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkgICAmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLAogCQkJZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC0mZ3Q7aV9zYiwgMSksCiAJCQlleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLApAQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkJiMzNDssCiAJCQkJCSAgIGVycik7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoZXJyICZndDsgMCkgewpAQCAtMTIyMSw2ICYjNDM7MTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkJJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZCYjMzQ7LAogCQkJCQkJZXJyKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KQEAgLTEyMjksNiAmIzQzOzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWQmIzM0OywKIAkJCQkJICAgZXJyKTsKJiM0MzsJCQlleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJZW50cnktJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CiAKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQlkaXJ0eSA9IHRydWU7CiAJfQogCkBAIC0xMjcxLDcgJiM0MzsxMjYyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTsKQEAgLTEzMTMsNyAmIzQzOzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkJCQkgICAgIEJGSVJTVChiaCksCiAJCQkJCQkgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLywKLQkJCQkJCSAgICAgZWFfaW5vZGVfYXJyYXksCiAJCQkJCQkgICAgIGV4dHJhX2NyZWRpdHMsCiAJCQkJCQkgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7CiAJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsCkBAIC0xNTA1LDcgJiM0MzsxNDk0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpCiAJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZCYjMzQ7LCBlcnIpOwotCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIApAQCAtMTU2NCw3ICYjNDM7MTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJCWt2ZnJlZShlYV9kYXRhKTsKIAkJCXJldHVybiBlYV9pbm9kZTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJbmV4dF9lbnRyeToKIAkJY2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTsKIAl9CkBAIC0xNjE1LDcgJiM0MzsxNjA0LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICAgZWFfaW5vZGUtJmd0O2lfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTsKIAlyZXR1cm4gZWFfaW5vZGU7CiBvdXRfZXJyOgotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQpAQCAtMTg0OCw3ICYjNDM7MTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSwKIAogCXJldCA9IDA7CiBvdXQ6Ci0JaXB1dChvbGRfZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgb2xkX2VhX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdSgKIAkJCQkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSk7CiAJCQl9Ci0JCQlpcHV0KHRtcF9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIHRtcF9pbm9kZSk7CiAKIAkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfaW51bSA9IDA7CiAJCQlzLSZndDtoZXJlLSZndDtlX3ZhbHVlX3NpemUgPSAwOwpAQCAtMjE1MCw3ICYjNDM7MjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCQkgICAmIzM0O2RlYyByZWYgZXJyb3I9JWQmIzM0OywKIAkJCQkJCQkgICBlcnJvcik7Ci0JCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQkJZWFfaW5vZGUgPSBOVUxMOwogCQkJfQogCkBAIC0yMTgyLDEyICYjNDM7MjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi8KIAlpZiAoYnMtJmd0O2JoICZhbXA7JmFtcDsgYnMtJmd0O2JoICE9IG5ld19iaCkgewotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwotCiAJCWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy0mZ3Q7YmgsCi0JCQkJCSAmYW1wO2VhX2lub2RlX2FycmF5LAogCQkJCQkgMCAvKiBleHRyYV9jcmVkaXRzICovKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAl9CiAJZXJyb3IgPSAwOwogCkBAIC0yMjAzLDcgJiM0MzsyMTg4LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCWlmIChjZSkKIAkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CkBAIC0yMjg1LDcgJiM0MzsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCX0KIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIyOTcsNyAmIzQzOzIyODIsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJaGVhZGVyLSZndDtoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7CiAJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpOwogCX0KLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg2Myw0NiAmIzQzOzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi8KLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSkKLQotLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS4KLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkCi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci4KLSAqLwotc3RhdGljIGludAotZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS4KLQkJICovCi0JCSgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2RlcywKLQkJCQkJCSBFSUFfTUFTSywgR0ZQX05PRlMpOwotCQlpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ID0gMDsKLQl9IGVsc2UgaWYgKCgoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQgJmFtcDsgRUlBX01BU0spID09IEVJQV9NQVNLKSB7Ci0JCS8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgJiM0MzsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovCi0JCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMOwotCi0JCW5ld19hcnJheSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCSAoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQgJiM0MzsgRUlBX0lOQ1IsCi0JCQkJCSBHRlBfTk9GUyk7Ci0JCWlmIChuZXdfYXJyYXkgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQltZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksCi0JCSAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2RlcywKLQkJCQkgICAoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQpKTsKLQkJa2ZyZWUoKmVhX2lub2RlX2FycmF5KTsKLQkJKmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5OwotCX0KLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7Y291bnQmIzQzOyYjNDM7OwotCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50IC0gMV0gPSBpbm9kZTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKCkKICAqCkBAIC0yOTEzLDcgJiM0MzsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy4KICAqLwogaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICBpbnQgZXh0cmFfY3JlZGl0cykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKQEAgLTI5NTIsNyAmIzQzOzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCwKIAkJCQkJCSAgICAgSUZJUlNUKGhlYWRlciksCiAJCQkJCQkgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTsKIAl9CkBAIC0yOTg2LDEyICYjNDM7MjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJY29udGludWU7CiAJCQkJZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSwKIAkJCQkJICAgICAgbGUzMl90b19jcHUoZW50cnktJmd0O2VfdmFsdWVfc2l6ZSkpOwotCQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJfQogCiAJCX0KIAotCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LAomIzQzOwkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkgZXh0cmFfY3JlZGl0cyk7CiAJCS8qCiAJCSAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXMKQEAgLTMwMTMsMTYgJiM0MzsyOTU2LDU5IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KQomIzQzOy8qCiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkCiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpZHg7CiYjNDM7CXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiYjNDM7CQkJCQkJc3RydWN0IGV4dDRfc2JfaW5mbywKJiM0MzsJCQkJCQlzX2VhX2lub2RlX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfdG9fZnJlZSk7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpuZXh0OwogCi0JaWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpCiYjNDM7CXdoaWxlIChub2RlKSB7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLAomIzQzOwkJCQkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpOwomIzQzOwkJbmV4dCA9IG5vZGUtJmd0O25leHQ7CiYjNDM7CQlpcHV0KCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CiYjNDM7CQlub2RlID0gbmV4dDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpCiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhCiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYgomIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlCiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsCiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC4KJiM0MzsgKi8KJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwlXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLSZndDtpX2ZsYWdzICZhbXA7IEVYVDRfRUFfSU5PREVfRkwpKTsKJiM0MzsJaWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKQogCQlyZXR1cm47CiYjNDM7CWxsaXN0X2FkZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZWFfaXB1dF9ub2RlLAomIzQzOwkJICAmYW1wO0VYVDRfU0Ioc2IpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSwKJiM0MzsJICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci4KJiM0MzsJICovCiYjNDM7CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO0VYVDRfU0Ioc2IpLSZndDtzX2VhX2lub2RlX3dvcmssIDEpOwomIzQzO30KIAotCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgZWFfaW5vZGVfYXJyYXktJmd0O2NvdW50OyAmIzQzOyYjNDM7aWR4KQotCQlpcHV0KGVhX2lub2RlX2FycmF5LSZndDtpbm9kZXNbaWR4XSk7Ci0Ja2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKQomIzQzO3sKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oCmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjE0YTMxZmUwMDE4ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaApAQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7CiAJc3RydWN0IGV4dDRfaWxvYyBpbG9jOwogfTsKIAotc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgewotCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7Ci19OwotCiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwpAQCAtMTg3LDkgJiM0MzsxODIsMjEgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlib29sIGlzX2NyZWF0ZSk7CiAKIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LAogCQkJCSAgIGludCBleHRyYV9jcmVkaXRzKTsKLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpOwomIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEcmFpbiBhbGwgcGVuZGluZyBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cy4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZQomIzQzOyAqIGZyZWVpbmcgcmVzb3VyY2VzIHRoYXQgZXZpY3Rpb24gZGVwZW5kcyBvbiAocXVvdGEsIGJsb2NrIGFsbG9jYXRvcikuCiYjNDM7ICogTG9vcHMgYmVjYXVzZSB3b3JrZXIgaXB1dCBtYXkgdHJpZ2dlciBldmljdGlvbiB0aGF0IHJlLXF1ZXVlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSkKJiM0Mzt7CiYjNDM7CXdoaWxlIChmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yaykgfHwKJiM0MzsJICAgICAgICFsbGlzdF9lbXB0eSgmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV90b19mcmVlKSkKJiM0MzsJCTsKJiM0Mzt9CiAKIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAkJCSAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA2ZGE0NDU3M2NlNDUwOC4uNDkxNmE5ZDU0MzQ3MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTI0MTgsNiAmIzQzOzI0MTgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2gKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lCiYjNDM7ICogQGlub2RlOiBpbm9kZSB0byBwdXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdAomIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKCZhbXA7aW5vZGUtJmd0O2lfY291bnQsIC0xLCAxKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IGdlbmVyaWNfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgZXh0NCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBpbm9kZXMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYSAqZGVmZXJyZWQgaXB1dCogbWVjaGFuaXNtIGZvciB0aGVzZSBFQSBpbm9kZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGlzIG1lYW5zIHRoZXkmIzM5O3JlIGFpbWluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHBlcmhhcHMgaGFuZGxlIHNvbWUgbG9ja2luZyBjb250ZW50aW9uIGlzc3VlcyByZWxhdGVkIHRvIEVBIGlub2RlIG1hbmFnZW1lbnQuCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgY29kZSwgc3Bhbm5pbmcgaGVhZGVyIGZpbGVzIGxpa2UgYGV4dDQuaGAsIGB4YXR0ci5oYCwgYW5kIGBmcy5oYCwgYXMgd2VsbCBhcyBpbXBsZW1lbnRhdGlvbiBmaWxlcyBsaWtlIGBpbm9kZS5jYCwgYHN1cGVyLmNgLCBhbmQgYHhhdHRyLmNgLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIG1ha2luZyBhIGNvcmUgcmVmYWN0b3IgYnkgcmVwbGFjaW5nIHRoZSBvbGQgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBkZWZlcnJlZCB3b3JrcXVldWUgKGBzX2VhX2lub2RlX3dvcmtgKSBhbmQgYSBsb2NrbGVzcyBsaXN0IChgc19lYV9pbm9kZV90b19mcmVlYCkuIFRoaXMgc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZHMgYXN5bmNocm9ub3VzIGZyZWVpbmcgb2YgdGhlc2UgRUEgaW5vZGVzIHRvIGF2b2lkIGJsb2NraW5nIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSBuZXcgZnVuY3Rpb24sIGBpcHV0X2lmX25vdF9sYXN0YCwgYW5kIG1vZGlmaWVkIHNldmVyYWwgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYW5kIGBleHQ0X2V2aWN0X2lub2RlYCBhbmQgYF9fZXh0NF9maWxsX3N1cGVyYC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBjb3JlIGNoYW5nZSB0byBleHQ0JiMzOTtzIHhhdHRyIGhhbmRsaW5nLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmNyZWFzZWQgY29tcGxleGl0eSBvZiB0aGUgYXN5bmNocm9ub3VzIGxvZ2ljLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgcmlnaHQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0byBidWlsZCBhIGZ1enogdGFyZ2V0LiBDbGVhcmx5LCBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBiaWcgb25lLiBCdXQgYXJlIHRoZXJlIGFueSBzcGVjaWZpYyBYQVRUUiBjb25maWd1cmF0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQ/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgdG8gYmUgY2VydGFpbiBJJiMzOTttIGVuYWJsaW5nIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgRUEgaW5vZGUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRVhUNCBDb25maWd1cmF0aW9uIENvbnRleHQqKgoKUmlnaHQsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgYmVmb3JlIHdlIGRpZyB0b28gZGVlcC4gTXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCBvdmVybG9va2luZyBhbnkgZXhpc3RpbmcgRVhUNCBjb25maWd1cmF0aW9ucyBvciByZWxldmFudCBjb250ZXh0LiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBhcmUgZnVsbHkgYXdhcmUgb2Ygd2hhdCYjMzk7cyBhbHJlYWR5IGluIHBsYWNlLCBpZiBhbnl0aGluZywgdG8gYXZvaWQgZHVwbGljYXRpbmcgZWZmb3J0IG9yIGludHJvZHVjaW5nIGNvbmZsaWN0cy4gV2UgYWxsIGtub3cgaG93IGVhc3kgaXQgaXMgdG8gbWlzcyBzb21ldGhpbmcgaW4gYSBjb21wbGV4IGVudmlyb25tZW50LCBzbyBpdCYjMzk7cyBiZXN0IHRvIHN0YXJ0IHdpdGggYSBzYW5pdHkgY2hlY2suIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHRhbnQgRVhUNCBzZXR1cHMgd2UgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTM0LVxuZnMvZXh0NC9LY29uZmlnOjM1OmNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuZnMvZXh0NC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNjctXG5mcy9leHQ0L0tjb25maWc6Njg6Y29uZmlnIEVYVDRfREVCVUdcbmZzL2V4dDQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7RXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03Ni1cbmZzL2V4dDQvS2NvbmZpZzo3Nzpjb25maWcgRVhUNF9LVU5JVF9URVNUU1xuZnMvZXh0NC9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGV4dDRcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRUEgSW5vZGVzIGFuZCBFeHRlbmRlZCBBdHRyaWJ1dGVzOiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIHRoaXMgZmVhdHVyZSBpcyBhbGwgYWJvdXQgRXh0ZW5kZWQgQXR0cmlidXRlIGlub2Rlcywgb3IgRUEgaW5vZGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbnMgZm9yIEVBIGlub2RlcyB0aGVtc2VsdmVzLCBvciBpcyBpdCBoYW5kbGVkIGFzIHBhcnQgb2YgdGhlIGJyb2FkZXIgZXh0NCB4YXR0ciBpbXBsZW1lbnRhdGlvbj8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyB0aGUgbGF0dGVyLCBidXQgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlLgoKSXQgc2VlbXMgbGlrZSBgRVhUNF9GU2AgaXMgcHJvYmFibHkgc3VmZmljaWVudCBmb3IgZW5hYmxpbmcgaXQsIHRob3VnaCBJIHNob3VsZCBjb25zaWRlciBpZiBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgbWlnaHQgYmUgbmVjZXNzYXJ5IG9yIGJlbmVmaWNpYWwgdG8gZW5hYmxlIG1vcmUgcm9idXN0IHhhdHRyIHVzYWdlIG92ZXJhbGwuCgpUbyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciwgSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYGZzL2V4dDQveGF0dHIuY2AgYW5kIHRha2UgYSBsb29rLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbiBkZXRhaWxzIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZy4gSXQgd2lsbCBiZSBhIHF1aWNrIGNoZWNrLCBJIGFtIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xuZnMvZXh0NC94YXR0ci5jLTg5LVx0W0VYVDRfWEFUVFJfSU5ERVhfVVNFUl1cdFx0ICAgICA9IFx1MDAyNmV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQveGF0dHIuYy05MS1cdFtFWFQ0X1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdICA9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuLS1cbmZzL2V4dDQveGF0dHIuYy05NC1cdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXHQgICAgID0gXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmMtOTYtXHRbRVhUNF9YQVRUUl9JTkRFWF9TRUNVUklUWV1cdCAgICAgPSBcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTAzLVx0XHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6MTA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5jLTEwNS1cdFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTE2LVxuZnMvZXh0NC94YXR0ci5jOjExNzojaWZkZWYgQ09ORklHX0xPQ0tERVBcbmZzL2V4dDQveGF0dHIuYy0xMTgtdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0xMjItXHRsb2NrZGVwX3NldF9zdWJjbGFzcyhcdTAwMjZlYV9pbm9kZS1cdTAwM2VpX3J3c2VtLCAxKTtcbmZzL2V4dDQveGF0dHIuYzoxMjM6XHQodm9pZCkgZWk7XHQvKiBzaHV0IHVwIGNsYW5nIHdhcm5pbmcgaWYgIUNPTkZJR19MT0NLREVQICovXG5mcy9leHQ0L3hhdHRyLmMtMTI0LVx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSwgSV9EQVRBX1NFTV9FQSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NzMKCQkJCQkJCW91dHB1dDogMjY2CgkJCQkJCQl0aG91Z2h0czogOTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgSW5vZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpcnN0IHRoaW5ncyBmaXJzdDogYEVYVDRfRlNgLCBgRVhUNF9GU19QT1NJWF9BQ0xgLCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFsbCBsb29rIGdvb2QgYW5kIHJlbGV2YW50IHRvIHdoYXQgSSBleHBlY3QuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRoaXMgcGF0Y2ggdG91Y2hlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSAqcmVhbGx5KiB0aGUgZm9jdXMgaGVyZSwgdGhlIG9uZXMgdGhhdCBlbWJvZHkgdGhlIG5ldyBsb2dpYywgbm90IGp1c3QgZ2VuZXJpYyBmaWxlIHN5c3RlbSBzdHVmZi4KClRoZSBwYXRjaCBtb2RpZmllcyBxdWl0ZSBhIGZldyBmdW5jdGlvbnMsIGJ1dCBJJiMzOTttIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCB0aG9zZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBuZXcgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIEVBIGlub2RlczogYGV4dDRfZXZpY3RfaW5vZGVgLCBgZXh0NF9wdXRfc3VwZXJgLCBgZXh0NF9hbGxvY19pbm9kZWAsIGBfX2V4dDRfZmlsbF9zdXBlcmAsIGBleHQ0X3hhdHRyX2lub2RlX2dldGAsIGBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYCwgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAsIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLCBgZXh0NF94YXR0cl9zZXRfZW50cnlgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfZHJhaW5fZWFfaW5vZGVfd29ya2AuCgpJIG5lZWQgdG8gZmlsdGVyIHRob3NlIHRvIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIGBleHQ0X2VhX2lub2RlX3dvcmtgIGlzIGEgc3Ryb25nIGNvbnRlbmRlciBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIHdvcmtlciBmdW5jdGlvbi4gYGV4dDRfcHV0X2VhX2lub2RlYCBzaG91bGQgYWxzbyBiZSBpbXBvcnRhbnQsIGFzIHRoaXMgaXMgdGhlIG5ldyBmdW5jdGlvbiB0byBwdXQgdGhlIEVBIGlub2Rlcy4gYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCBtaWdodCBiZSBpbnRlcmVzdGluZywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyB3aGF0IGl0IGRvZXMgd2l0aCBhbnkgYXJyYXlzLiBQbHVzLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgIGxvb2sgbGlrZSB0aGUgY3JlYXRpb24gYW5kIG1vZGlmaWNhdGlvbiBwb2ludHMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSB2aXNpYmlsaXR5IG9mIHRob3NlIGZvY3VzIGZ1bmN0aW9ucy4gSSBzZWUgYGV4dDRfZWFfaW5vZGVfd29ya2AgaXMgYHN0YXRpY2AgaW4gYGZzL2V4dDQveGF0dHIuY2AuIFNvIGl0JiMzOTtzIGludGVybmFsIHRvIHRoYXQgZmlsZS4gVGhlbiBgZXh0NF9wdXRfZWFfaW5vZGVgIGlzICpub3QqIHN0YXRpYywgc28gaXQgaXMgZGVjbGFyZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIG1lYW5pbmcgaXQmIzM5O3MgZXh0ZXJuYWxseSB2aXNpYmxlLiBHb29kLgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGlzIGxpc3QgZm9yIGZ1enppbmc6CiogICBgZXh0NF9lYV9pbm9kZV93b3JrYAoqICAgYGV4dDRfcHV0X2VhX2lub2RlYAoqICAgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgCiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgCiogICBgZXh0NF94YXR0cl9pYm9keV9zZXRgCiogICBgZXh0NF94YXR0cl9zZXRfZW50cnlgCiogICBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYAoKUGVyZmVjdCEgVGhlc2UgYXJlIGFsbCB2ZXJ5IHNwZWNpZmljIHRvIGV4dDQgeGF0dHIgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSBpbiByZWdhcmRzIHRvIEVBIGlub2Rlcy4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgZXhwZWN0IHRvIGNvbnRhaW4gdGhlIGNvcmUgY2hhbmdlcyBvZiB0aGUgcGF0Y2guCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBFQSBpbm9kZXMuIEl0JiMzOTtzIGhhbmRsaW5nIHRoZSByZWxlYXNlIG9mIHRoZXNlIGlub2RlcyBieSBxdWV1aW5nIHRoZW0gdXAgdG8gYSBsb2NrbGVzcyBsaXN0LCBhbmQgdGhlbiBwcm9jZXNzaW5nIHRoZW0gaW4gYSB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgZXh0NCB4YXR0ciBsb2dpYyBmdW5kYW1lbnRhbGx5IHdvcmtzLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBiZSB2ZXJ5IGNhcmVmdWwuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgc3RlbW1pbmcgZnJvbSB0aGlzIG5ldyBFQSBpbm9kZSBldmljdGlvbiBzeXN0ZW0uCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RVhUNF9GU19TRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfc2V0X2VudHJ5JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIHJlc29sdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEl0IG1vZGlmaWVzIGhvdyBFQSBpbm9kZXMgYXJlIHJlbGVhc2VkIGJ5IHF1ZXVpbmcgdGhlbSB0byBhIGxvY2tsZXNzIGxpc3QgYW5kIHByb2Nlc3NpbmcgdGhlbSBpbiBhIHdvcmtxdWV1ZSAoYGV4dDRfZWFfaW5vZGVfd29ya2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyIGR1cmluZyBFQSBpbm9kZSBldmljdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfZW50cnkmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gcmVzb2x2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgbW9kaWZpZXMgaG93IEVBIGlub2RlcyBhcmUgcmVsZWFzZWQgYnkgcXVldWluZyB0aGVtIHRvIGEgbG9ja2xlc3MgbGlzdCBhbmQgcHJvY2Vzc2luZyB0aGVtIGluIGEgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBsb2dpYyBvZiBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NDk6NTEuOTE5OTkyNjc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwMjc5MTM3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUNF9GU19QT1NJWF9BQ0xcIixcbiAgICBcIkVYVDRfRlNfU0VDVVJJVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX3NldF9lbnRyeVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gcmVzb2x2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgbW9kaWZpZXMgaG93IEVBIGlub2RlcyBhcmUgcmVsZWFzZWQgYnkgcXVldWluZyB0aGVtIHRvIGEgbG9ja2xlc3MgbGlzdCBhbmQgcHJvY2Vzc2luZyB0aGVtIGluIGEgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBsb2dpYyBvZiBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODo0OTo1MS45MjAwMjk4NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzQ1NjkwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYWRkZWIwNjZiN2RjYTdjMDAzNGYzM2JiYTlkZTRkYzk5OGNkMDE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDIzIDA4OjQ5OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXFxuIFxcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xcbiBcXHQgKiBFQXMuXFxuK1xcdCAqXFxuK1xcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG4rXFx0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXFxuIFxcdCAqL1xcbi1cXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XFxuK1xcdH07XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxcbkBAIC0xNzcwLDYgKzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuIFxcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xcbitcXG4rXFx0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XFxuK1xcbiBcXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbiBcXG4gXFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xNzYsNyArMTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxcbiBcXHQgKi9cXG4gXFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xcbi1cXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbiBcXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbkBAIC0yODEsOCArMjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xcbi1cXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xcbitcXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcXFwiLCBlcnIpO1xcbiBzdG9wX2hhbmRsZTpcXG5AQCAtMjkwLDcgKzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbiBcXHRcXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcXG4gXFx0XFx0XFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTMyMCw3ICszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gXFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdHJldHVybjtcXG4gbm9fZGVsZXRlOlxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uOTdmMGU3YzFiMjU0ZjcgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdFxcdFxcdCBcXHUwMDI2c2ItXFx1MDAzZXNfdXVpZCk7XFxuIFxcbiBcXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cXG4rXFx0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XFxuIFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbiBcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuQEAgLTE0MjMsNiArMTQyNSwxMyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdG1lbXNldChcXHUwMDI2ZWktXFx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cXHUwMDNlaV9kcXVvdCkpO1xcbiAjZW5kaWZcXG4gXFx0ZWktXFx1MDAzZWppbm9kZSA9IE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xcbitcXHQgKiBzaGFyZSB0aGlzIHNwYWNlIHdpdGggaV9lYV9pcHV0X25vZGUgKHZpYSB1bmlvbikgd2hpY2ggbWF5XFxuK1xcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcXG4rXFx0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVpLVxcdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcXG4gXFx0ZWktXFx1MDAzZWlfc3luY190aWQgPSAwO1xcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxcbiBcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9vcnBoYW4pO1xcbi1cXHRpbml0X3J3c2VtKFxcdTAwMjZlaS1cXHUwMDNleGF0dHJfc2VtKTtcXG4gXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbiBcXHRpbm9kZV9pbml0X29uY2UoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbiBcXHRleHQ0X2ZjX2luaXRfaW5vZGUoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbkBAIC01NTA4LDYgKzU1MTYsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0ICogVGhlIGZpcnN0IGlub2RlIHdlIGxvb2sgYXQgaXMgdGhlIGpvdXJuYWwgaW5vZGUuICBEb24ndCB0cnlcXG4gXFx0ICogcm9vdCBmaXJzdDogaXQgbWF5IGJlIG1vZGlmaWVkIGluIHRoZSBqb3VybmFsIVxcbiBcXHQgKi9cXG4rXFx0ZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTtcXG4rXFxuIFxcdGlmICghdGVzdF9vcHQoc2IsIE5PTE9BRCkgXFx1MDAyNlxcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xcbiBcXHRcXHRlcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTU3NDcsNiArNTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGZhaWxlZF9tb3VudDk6XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xcbitcXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcXG4gXFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XFxuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XFxuQEAgLTU3NjcsNiArNTc3OSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuIGZhaWxlZF9tb3VudF93cTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xcbitcXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcXG4gXFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuIFxcdHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XFxuIFxcbkBAIC01Nzc3LDYgKzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbiBcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG4gXFx0fVxcbiBmYWlsZWRfbW91bnQzYTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbitcXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcXG4gXFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuIGZhaWxlZF9tb3VudDM6XFxuIFxcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xcbmluZGV4IDk4MmExZjgzMWUyMjgyLi43ZjMzNDM0OWJkNGY3ZCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcXG5AQCAtMTE0LDEwICsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXFxcXG4gXFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZnNfaW5mbyktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXFxuIFxcbi1zdGF0aWMgaW50XFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi1cXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcXG4ge1xcbkBAIC01NjcsNyArNTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRcXHRcXHRcXHRlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiaW5jIHJlZiBlcnJvciAlZFxcXCIsIGVycik7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBzYXZlZF9lcnI7XFxuIH1cXG5AQCAtMTE2MCw3ICsxMTU2LDYgQEAgc3RhdGljIHZvaWRcXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpmaXJzdCwgYm9vbCBibG9ja19jc3VtLFxcbi1cXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xcbkBAIC0xMTk3LDE0ICsxMTkyLDYgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkV4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXFxuIFxcdFxcdFxcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXFx1MDAzZWlfc2IsIDEpLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxcbkBAIC0xMjEyLDYgKzExOTksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNlIDApIHtcXG5AQCAtMTIyMSw2ICsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbkBAIC0xMjI5LDYgKzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImVhX2lub2RlIGRlYyByZWYgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMjQ1LDYgKzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuIFxcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0ZGlydHkgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC0xMjcxLDcgKzEyNjIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBzdGF0aWMgdm9pZFxcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLVxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgaW50IGV4dHJhX2NyZWRpdHMpXFxuIHtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcXG5AQCAtMTMxMyw3ICsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQkZJUlNUKGJoKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0cmFfY3JlZGl0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xcbiBcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxcbkBAIC0xNTA1LDcgKzE0OTQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxcbiBcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTU2NCw3ICsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRcXHRrdmZyZWUoZWFfZGF0YSk7XFxuIFxcdFxcdFxcdHJldHVybiBlYV9pbm9kZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0bmV4dF9lbnRyeTpcXG4gXFx0XFx0Y2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTtcXG4gXFx0fVxcbkBAIC0xNjE1LDcgKzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0cmV0dXJuIGVhX2lub2RlO1xcbiBvdXRfZXJyOlxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xcbiBcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiB9XFxuQEAgLTE4NDgsNyArMTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4gXFxuIFxcdHJldCA9IDA7XFxuIG91dDpcXG4tXFx0aXB1dChvbGRfZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMjAxMCw3ICsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aXB1dCh0bXBfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcXG4gXFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuQEAgLTIxNTAsNyArMjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBlcnJvcik7XFxuLVxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTIxODIsMTIgKzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXFxuIFxcdGlmIChicy1cXHUwMDNlYmggXFx1MDAyNlxcdTAwMjYgYnMtXFx1MDAzZWJoICE9IG5ld19iaCkge1xcbi1cXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbi1cXG4gXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVxcdTAwM2ViaCxcXG4tXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0XFx0XFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XFxuLVxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdH1cXG4gXFx0ZXJyb3IgPSAwO1xcbiBcXG5AQCAtMjIwMyw3ICsyMTg4LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdH1cXG4gXFx0aWYgKGNlKVxcbiBcXHRcXHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcXG5AQCAtMjI4NSw3ICsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuQEAgLTIyOTcsNyArMjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRoZWFkZXItXFx1MDAzZWhfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTtcXG4gXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XFxuIFxcdH1cXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yODYzLDQ2ICsyODQ4LDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xcbi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpXFxuLVxcbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxcbi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZFxcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cXG4tICovXFxuLXN0YXRpYyBpbnRcXG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgRUlBX01BU0ssIEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50ID0gMDtcXG4tXFx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50IFxcdTAwMjYgRUlBX01BU0spID09IEVJQV9NQVNLKSB7XFxuLVxcdFxcdC8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgKyBuICogMTYgc2xvdHMgYXJlIGZ1bGwgKi9cXG4tXFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKm5ld19hcnJheSA9IE5VTEw7XFxuLVxcbi1cXHRcXHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHRcXHQgKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50ICsgRUlBX0lOQ1IsXFxuLVxcdFxcdFxcdFxcdFxcdCBHRlBfTk9GUyk7XFxuLVxcdFxcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHQgICAoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQpKTtcXG4tXFx0XFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcXG4tXFx0XFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xcbi1cXHR9XFxuLVxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCsrO1xcbi1cXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCAtIDFdID0gaW5vZGU7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpXFxuICAqXFxuQEAgLTI5MTMsNyArMjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cXG4gICovXFxuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbkBAIC0yOTUyLDcgKzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBpbG9jLmJoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIElGSVJTVChoZWFkZXIpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0cmFfY3JlZGl0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcXG4gXFx0fVxcbkBAIC0yOTg2LDEyICsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xcbi1cXHRcXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHQgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcXG5AQCAtMzAxMywxNiArMjk1Niw1OSBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXFxuKy8qXFxuKyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZFxcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRpbnQgaWR4O1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzX2VhX2lub2RlX3dvcmspO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5leHQ7XFxuIFxcbi1cXHRpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcXG4rXFx0d2hpbGUgKG5vZGUpIHtcXG4rXFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBjb250YWluZXJfb2Yobm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xcbitcXHRcXHRuZXh0ID0gbm9kZS1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0aXB1dChcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZSk7XFxuK1xcdFxcdG5vZGUgPSBuZXh0O1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpXFxuKyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXFxuKyAqXFxuKyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhXFxuKyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cXG4rICpcXG4rICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYlxcbisgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxcbisgKiB3aXRoIHRoZSB1bnVzZWQgeGF0dHJfc2VtKSBhbmQgYSBkZWxheWVkIHdvcmtlciBwZXJmb3JtcyB0aGUgZmluYWxcXG4rICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC5cXG4rICovXFxuK3ZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XFxuK1xcdGlmIChpcHV0X2lmX25vdF9sYXN0KGlub2RlKSlcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHRsbGlzdF9hZGQoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZWFfaXB1dF9ub2RlLFxcbitcXHRcXHQgIFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4rXFx0LypcXG4rXFx0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXFxuK1xcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXFxuK1xcdCAqL1xcbitcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmssIDEpO1xcbit9XFxuIFxcbi1cXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIGVhX2lub2RlX2FycmF5LVxcdTAwM2Vjb3VudDsgKytpZHgpXFxuLVxcdFxcdGlwdXQoZWFfaW5vZGVfYXJyYXktXFx1MDAzZWlub2Rlc1tpZHhdKTtcXG4tXFx0a2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbit2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4re1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspO1xcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxNGEzMWZlMDAxOGQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC94YXR0ci5oXFxuKysrIGIvZnMvZXh0NC94YXR0ci5oXFxuQEAgLTEzMSwxMSArMTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XFxuIFxcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4gfTtcXG4gXFxuLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHtcXG4tXFx0dW5zaWduZWQgaW50IGNvdW50O1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XFxuLX07XFxuLVxcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjtcXG5AQCAtMTg3LDkgKzE4MiwyMSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRib29sIGlzX2NyZWF0ZSk7XFxuIFxcbiBleHRlcm4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXFxuIFxcdFxcdFxcdFxcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcXG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbitcXG4rLypcXG4rICogRHJhaW4gYWxsIHBlbmRpbmcgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmVcXG4rICogZnJlZWluZyByZXNvdXJjZXMgdGhhdCBldmljdGlvbiBkZXBlbmRzIG9uIChxdW90YSwgYmxvY2sgYWxsb2NhdG9yKS5cXG4rICogTG9vcHMgYmVjYXVzZSB3b3JrZXIgaXB1dCBtYXkgdHJpZ2dlciBldmljdGlvbiB0aGF0IHJlLXF1ZXVlcy5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxcbit7XFxuK1xcdHdoaWxlIChmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKSB8fFxcbitcXHQgICAgICAgIWxsaXN0X2VtcHR5KFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSkpXFxuK1xcdFxcdDtcXG4rfVxcbiBcXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IDZkYTQ0NTczY2U0NTA4Li40OTE2YTlkNTQzNDcwZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtMjQxOCw2ICsyNDE4LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcXG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XFxuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XFxuK1xcbisvKipcXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxcbisgKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcXG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcXG4re1xcbitcXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2NvdW50LCAtMSwgMSk7XFxuK31cXG4rXFxuIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBmbGFncyk7XFxuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NDk6NTMuMDk2NzcyMjA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg1MTEyMzEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2VudHJ5XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byByZXNvbHZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCBtb2RpZmllcyBob3cgRUEgaW5vZGVzIGFyZSByZWxlYXNlZCBieSBxdWV1aW5nIHRoZW0gdG8gYSBsb2NrbGVzcyBsaXN0IGFuZCBwcm9jZXNzaW5nIHRoZW0gaW4gYSB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWFkZGViMDY2YjdkY2E3YzAwMzRmMzNiYmE5ZGU0ZGM5OThjZDAxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA4OjQ5OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA3MCw4ICsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuIFx0ICogYmV0d2VlbiByZWFkZXJzIG9mIEVBcyBhbmQgd3JpdGVycyBvZiByZWd1bGFyIGZpbGUgZGF0YSwgc29cbiBcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xuIFx0ICogRUFzLlxuK1x0ICpcbitcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcbitcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxuIFx0ICovXG4tXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4rXHRcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xuK1x0fTtcbiBcbiBcdC8qXG4gXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxuQEAgLTE3NzAsNiArMTc3NiwxMSBAQCBzdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbiBcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7XG4rXG4rXHQvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi9cbitcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xuK1xuIFx0c3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcbiBcdC8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTE3Niw3ICsxNzYsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxuIFx0ICovXG4gXHRpbnQgZXh0cmFfY3JlZGl0cyA9IDY7XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuIFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XG4gXG4gXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcbkBAIC0yODEsOCArMjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR9XG4gXG4gXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cbi1cdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIFx1MDAyNmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdFx0ICAgICAgZXh0cmFfY3JlZGl0cyk7XG4rXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZXh0NF93YXJuaW5nKGlub2RlLVx1MDAzZWlfc2IsIFwieGF0dHIgZGVsZXRlIChlcnIgJWQpXCIsIGVycik7XG4gc3RvcF9oYW5kbGU6XG5AQCAtMjkwLDcgKzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xuIFx0XHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHRcdGdvdG8gbm9fZGVsZXRlO1xuIFx0fVxuIFxuQEAgLTMyMCw3ICszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdHJldHVybjtcbiBub19kZWxldGU6XG4gXHQvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjk3ZjBlN2MxYjI1NGY3IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4rKysgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xMzAzLDYgKzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRcdCBcdTAwMjZzYi1cdTAwM2VzX3V1aWQpO1xuIFxuIFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgd2hpbGUgcXVvdGEgaXMgc3RpbGwgYWN0aXZlLiAqL1xuK1x0ZXh0NF9kcmFpbl9lYV9pbm9kZV93b3JrKHNiaSk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG5AQCAtMTQyMyw2ICsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbitcdC8qXG4rXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcbitcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbitcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbitcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cbitcdCAqL1xuK1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9vcnBoYW4pO1xuLVx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiBcdGlub2RlX2luaXRfb25jZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG5AQCAtNTUwOCw2ICs1NTE2LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHQgKiBUaGUgZmlyc3QgaW5vZGUgd2UgbG9vayBhdCBpcyB0aGUgam91cm5hbCBpbm9kZS4gIERvbid0IHRyeVxuIFx0ICogcm9vdCBmaXJzdDogaXQgbWF5IGJlIG1vZGlmaWVkIGluIHRoZSBqb3VybmFsIVxuIFx0ICovXG4rXHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuK1xuIFx0aWYgKCF0ZXN0X29wdChzYiwgTk9MT0FEKSBcdTAwMjZcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzYiwgZXMsIGN0eCk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsZWRfbW91bnQ5OlxuK1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXG4rXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiArNTc3OSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRpZiAoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbiBmYWlsZWRfbW91bnRfd3E6XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovXG4rXHRleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc2JpKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdH1cbiBmYWlsZWRfbW91bnQzYTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbitcdGV4dDRfZHJhaW5fZWFfaW5vZGVfd29yayhzYmkpO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uN2YzMzQzNDliZDRmN2QgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCArMTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcbiBcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvKS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxuIFxuLXN0YXRpYyBpbnRcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLVxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcbiB7XG5AQCAtNTY3LDcgKzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdFx0ZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0fVxuIG91dDpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCArMTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJpbmMgcmVmIGVycm9yICVkXCIsIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xMTMzLDcgKzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwiLFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNjAsNyArMTE1Niw2IEBAIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcbi1cdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgICBpbnQgZXh0cmFfY3JlZGl0cywgYm9vbCBza2lwX3F1b3RhKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XG5AQCAtMTE5NywxNCArMTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGVyciA9IGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KGVhX2lub2RlX2FycmF5LCBlYV9pbm9kZSk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4tXHRcdFx0XHRcdCAgIFwiRXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4gXHRcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXG4gXHRcdFx0ZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC1cdTAwM2VpX3NiLCAxKSxcbiBcdFx0XHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxuQEAgLTEyMTIsNiArMTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiRW5zdXJlIGNyZWRpdHMgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMTIyMSw2ICsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdFx0ZXJyKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgKzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcImVhX2lub2RlIGRlYyByZWYgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEyNDUsNiArMTIzNSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG4gXG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgKzEyNjIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tXHRcdFx0IHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0IGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XG5AQCAtMTMxMyw3ICsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0XHQgICAgIEJGSVJTVChiaCksXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxuQEAgLTE1MDUsNyArMTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcIiwgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyArMTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbiBcdFx0XHRrdmZyZWUoZWFfZGF0YSk7XG4gXHRcdFx0cmV0dXJuIGVhX2lub2RlO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRuZXh0X2VudHJ5OlxuIFx0XHRjZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpO1xuIFx0fVxuQEAgLTE2MTUsNyArMTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbitcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuQEAgLTE4NDgsNyArMTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcbiBcbiBcdHJldCA9IDA7XG4gb3V0OlxuLVx0aXB1dChvbGRfZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyArMTk5OSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdShcbiBcdFx0XHRcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplKTtcbiBcdFx0XHR9XG4tXHRcdFx0aXB1dCh0bXBfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIHRtcF9pbm9kZSk7XG4gXG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG5AQCAtMjE1MCw3ICsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCJkZWMgcmVmIGVycm9yPSVkXCIsXG4gXHRcdFx0XHRcdFx0XHQgICBlcnJvcik7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiArMjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHQvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi9cbiBcdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4tXG4gXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cdTAwM2ViaCxcbi1cdFx0XHRcdFx0IFx1MDAyNmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdH1cbiBcdGVycm9yID0gMDtcbiBcbkBAIC0yMjAzLDcgKzIxODgsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuQEAgLTIyOTcsNyArMjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI4NjMsNDYgKzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xuLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcbi1cbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxuLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXG4tICovXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcbi1cdFx0Lypcbi1cdFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxuLVx0XHQgKi9cbi1cdFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHRcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xuLVx0XHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ID0gMDtcbi1cdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IFx1MDAyNiBFSUFfTUFTSykgPT0gRUlBX01BU0spIHtcbi1cdFx0LyogZXhwYW5kIHRoZSBhcnJheSBvbmNlIGFsbCAxNSArIG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICsgRUlBX0lOQ1IsXG4tXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4tXHRcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LFxuLVx0XHQgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHQgICAoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCkpO1xuLVx0XHRrZnJlZSgqZWFfaW5vZGVfYXJyYXkpO1xuLVx0XHQqZWFfaW5vZGVfYXJyYXkgPSBuZXdfYXJyYXk7XG4tXHR9XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCsrO1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyArMjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gICogcmVmZXJlbmNlcyBvbiB4YXR0ciBibG9jayBhbmQgeGF0dHIgaW5vZGVzLlxuICAqL1xuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbkBAIC0yOTUyLDcgKzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG4gXHRcdFx0XHRcdFx0ICAgICBJRklSU1QoaGVhZGVyKSxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcbiBcdH1cbkBAIC0yOTg2LDEyICsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0fVxuIFxuIFx0XHR9XG4gXG4tXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXG4rXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0IGV4dHJhX2NyZWRpdHMpO1xuIFx0XHQvKlxuIFx0XHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXG5AQCAtMzAxMywxNiArMjk1Niw1OSBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuKy8qXG4rICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkXG4rICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbisgKi9cbitzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdGludCBpZHg7XG4rXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8sXG4rXHRcdFx0XHRcdFx0c19lYV9pbm9kZV93b3JrKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpuZXh0O1xuIFxuLVx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4rXHR3aGlsZSAobm9kZSkge1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XG4rXHRcdG5leHQgPSBub2RlLVx1MDAzZW5leHQ7XG4rXHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbitcdFx0bm9kZSA9IG5leHQ7XG4rXHR9XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxuKyAqXG4rICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXG4rICpcbisgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcbisgKiB3aXRoIHRoZSB1bnVzZWQgeGF0dHJfc2VtKSBhbmQgYSBkZWxheWVkIHdvcmtlciBwZXJmb3JtcyB0aGUgZmluYWxcbisgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuKyAqL1xuK3ZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRpZiAoIWlub2RlKVxuK1x0XHRyZXR1cm47XG4rXHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbitcdGlmIChpcHV0X2lmX25vdF9sYXN0KGlub2RlKSlcbiBcdFx0cmV0dXJuO1xuK1x0bGxpc3RfYWRkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lYV9pcHV0X25vZGUsXG4rXHRcdCAgXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdC8qXG4rXHQgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSxcbitcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4rXHQgKi9cbitcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIDEpO1xuK31cbiBcbi1cdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cdTAwM2Vjb3VudDsgKytpZHgpXG4tXHRcdGlwdXQoZWFfaW5vZGVfYXJyYXktXHUwMDNlaW5vZGVzW2lkeF0pO1xuLVx0a2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuK3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuK3tcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxNGEzMWZlMDAxOGQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxuQEAgLTEzMSwxMSArMTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG4gXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gfTtcbiBcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4tfTtcbi1cbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG5AQCAtMTg3LDkgKzE4MiwyMSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0Ym9vbCBpc19jcmVhdGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXG4gXHRcdFx0XHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG4rZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbitleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcbisvKlxuKyAqIERyYWluIGFsbCBwZW5kaW5nIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlXG4rICogZnJlZWluZyByZXNvdXJjZXMgdGhhdCBldmljdGlvbiBkZXBlbmRzIG9uIChxdW90YSwgYmxvY2sgYWxsb2NhdG9yKS5cbisgKiBMb29wcyBiZWNhdXNlIHdvcmtlciBpcHV0IG1heSB0cmlnZ2VyIGV2aWN0aW9uIHRoYXQgcmUtcXVldWVzLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2RyYWluX2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuK3tcbitcdHdoaWxlIChmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaykgfHxcbitcdCAgICAgICAhbGxpc3RfZW1wdHkoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSkpXG4rXHRcdDtcbit9XG4gXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IDZkYTQ0NTczY2U0NTA4Li40OTE2YTlkNTQzNDcwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMjQxOCw2ICsyNDE4LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXG4gZXh0ZXJuIHZvaWQgaWhvbGQoc3RydWN0IGlub2RlICogaW5vZGUpO1xuIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopO1xuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XG4rXG4rLyoqXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxuKyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4rICpcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcbisgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2aW5vZGUtXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xuK31cbitcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjQ5OjUzLjA5Njc3NTgyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1Nzk2MjU5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBleHQ0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgZXh0NCBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2Rlcy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGEgKmRlZmVycmVkIGlwdXQqIG1lY2hhbmlzbSBmb3IgdGhlc2UgRUEgaW5vZGVzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGV5J3JlIGFpbWluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHBlcmhhcHMgaGFuZGxlIHNvbWUgbG9ja2luZyBjb250ZW50aW9uIGlzc3VlcyByZWxhdGVkIHRvIEVBIGlub2RlIG1hbmFnZW1lbnQuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgZ29vZCBjaHVuayBvZiBjb2RlLCBzcGFubmluZyBoZWFkZXIgZmlsZXMgbGlrZSBgZXh0NC5oYCwgYHhhdHRyLmhgLCBhbmQgYGZzLmhgLCBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9uIGZpbGVzIGxpa2UgYGlub2RlLmNgLCBgc3VwZXIuY2AsIGFuZCBgeGF0dHIuY2AuIExvb2tzIGxpa2UgdGhleSdyZSBtYWtpbmcgYSBjb3JlIHJlZmFjdG9yIGJ5IHJlcGxhY2luZyB0aGUgb2xkIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCB3aXRoIGEgZGVmZXJyZWQgd29ya3F1ZXVlIChgc19lYV9pbm9kZV93b3JrYCkgYW5kIGEgbG9ja2xlc3MgbGlzdCAoYHNfZWFfaW5vZGVfdG9fZnJlZWApLiBUaGlzIHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmRzIGFzeW5jaHJvbm91cyBmcmVlaW5nIG9mIHRoZXNlIEVBIGlub2RlcyB0byBhdm9pZCBibG9ja2luZyBvcGVyYXRpb25zLiBUaGV5J3ZlIGFsc28gYWRkZWQgYSBuZXcgZnVuY3Rpb24sIGBpcHV0X2lmX25vdF9sYXN0YCwgYW5kIG1vZGlmaWVkIHNldmVyYWwgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYW5kIGBleHQ0X2V2aWN0X2lub2RlYCBhbmQgYF9fZXh0NF9maWxsX3N1cGVyYC5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgY2hhbmdlIHRvIGV4dDQncyB4YXR0ciBoYW5kbGluZy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmNyZWFzZWQgY29tcGxleGl0eSBvZiB0aGUgYXN5bmNocm9ub3VzIGxvZ2ljLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdG8gYnVpbGQgYSBmdXp6IHRhcmdldC4gQ2xlYXJseSwgYENPTkZJR19FWFQ0X0ZTYCBpcyB0aGUgYmlnIG9uZS4gQnV0IGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgWEFUVFIgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0PyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgdG8gYmUgY2VydGFpbiBJJ20gZW5hYmxpbmcgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciBFQSBpbm9kZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NDk6NTkuNjc2NDA0Nzk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDc5MDM2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjUwOjAxLjcyNDMxOTQ0NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTY4OTgxNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBFWFQ0IENvbmZpZ3VyYXRpb24gQ29udGV4dCoqXG5cblJpZ2h0LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgYmVmb3JlIHdlIGRpZyB0b28gZGVlcC4gTXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byBtYWtlIHN1cmUgd2UgYXJlbid0IG92ZXJsb29raW5nIGFueSBleGlzdGluZyBFWFQ0IGNvbmZpZ3VyYXRpb25zIG9yIHJlbGV2YW50IGNvbnRleHQuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlIGFyZSBmdWxseSBhd2FyZSBvZiB3aGF0J3MgYWxyZWFkeSBpbiBwbGFjZSwgaWYgYW55dGhpbmcsIHRvIGF2b2lkIGR1cGxpY2F0aW5nIGVmZm9ydCBvciBpbnRyb2R1Y2luZyBjb25mbGljdHMuIFdlIGFsbCBrbm93IGhvdyBlYXN5IGl0IGlzIHRvIG1pc3Mgc29tZXRoaW5nIGluIGEgY29tcGxleCBlbnZpcm9ubWVudCwgc28gaXQncyBiZXN0IHRvIHN0YXJ0IHdpdGggYSBzYW5pdHkgY2hlY2suIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4dGFudCBFWFQ0IHNldHVwcyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUyOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjUwOjEzLjY5MzMwMzk2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjIxMzgxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTM0LVxcbmZzL2V4dDQvS2NvbmZpZzozNTpjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG5mcy9leHQ0L0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNjctXFxuZnMvZXh0NC9LY29uZmlnOjY4OmNvbmZpZyBFWFQ0X0RFQlVHXFxuZnMvZXh0NC9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkV4dDQgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNzYtXFxuZnMvZXh0NC9LY29uZmlnOjc3OmNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXFxuZnMvZXh0NC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODo1MDoxNC4zMTU0NDc1NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzM5MzkzNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVBIElub2RlcyBhbmQgRXh0ZW5kZWQgQXR0cmlidXRlczogQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHNvIHRoaXMgZmVhdHVyZSBpcyBhbGwgYWJvdXQgRXh0ZW5kZWQgQXR0cmlidXRlIGlub2Rlcywgb3IgRUEgaW5vZGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55ICpzcGVjaWZpYyogY29uZmlndXJhdGlvbnMgZm9yIEVBIGlub2RlcyB0aGVtc2VsdmVzLCBvciBpcyBpdCBoYW5kbGVkIGFzIHBhcnQgb2YgdGhlIGJyb2FkZXIgZXh0NCB4YXR0ciBpbXBsZW1lbnRhdGlvbj8gSSdtIHByZXR0eSBzdXJlIGl0J3MgdGhlIGxhdHRlciwgYnV0IGxldCdzIGp1c3QgbWFrZSBzdXJlLlxuXG5JdCBzZWVtcyBsaWtlIGBFWFQ0X0ZTYCBpcyBwcm9iYWJseSBzdWZmaWNpZW50IGZvciBlbmFibGluZyBpdCwgdGhvdWdoIEkgc2hvdWxkIGNvbnNpZGVyIGlmIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBtaWdodCBiZSBuZWNlc3Nhcnkgb3IgYmVuZWZpY2lhbCB0byBlbmFibGUgbW9yZSByb2J1c3QgeGF0dHIgdXNhZ2Ugb3ZlcmFsbC5cblxuVG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIsIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBoZWFkIG92ZXIgdG8gYGZzL2V4dDQveGF0dHIuY2AgYW5kIHRha2UgYSBsb29rLiBUaGF0J3MgdGhlIGJlc3QgcGxhY2UgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25maWd1cmF0aW9uIGRldGFpbHMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBJdCB3aWxsIGJlIGEgcXVpY2sgY2hlY2ssIEkgYW0gc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODo1MDoyMC42NTQ4NDMzNDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjcxMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJfbWFwW10gPSB7XFxuZnMvZXh0NC94YXR0ci5jLTg5LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1VTRVJdXFx0XFx0ICAgICA9IFxcdTAwMjZleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcixcXG5mcy9leHQ0L3hhdHRyLmM6OTA6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQveGF0dHIuYy05MS1cXHRbRVhUNF9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTXSAgPSBcXHUwMDI2bm9wX3Bvc2l4X2FjbF9hY2Nlc3MsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtOTQtXFx0W0VYVDRfWEFUVFJfSU5ERVhfVFJVU1RFRF1cXHQgICAgID0gXFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxcbmZzL2V4dDQveGF0dHIuYzo5NTojaWZkZWYgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L3hhdHRyLmMtOTYtXFx0W0VYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFldXFx0ICAgICA9IFxcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTAxPWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEwMy1cXHRcXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXFxuZnMvZXh0NC94YXR0ci5jOjEwNDojaWZkZWYgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L3hhdHRyLmMtMTA1LVxcdFxcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTE2LVxcbmZzL2V4dDQveGF0dHIuYzoxMTc6I2lmZGVmIENPTkZJR19MT0NLREVQXFxuZnMvZXh0NC94YXR0ci5jLTExOC12b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTIyLVxcdGxvY2tkZXBfc2V0X3N1YmNsYXNzKFxcdTAwMjZlYV9pbm9kZS1cXHUwMDNlaV9yd3NlbSwgMSk7XFxuZnMvZXh0NC94YXR0ci5jOjEyMzpcXHQodm9pZCkgZWk7XFx0Lyogc2h1dCB1cCBjbGFuZyB3YXJuaW5nIGlmICFDT05GSUdfTE9DS0RFUCAqL1xcbmZzL2V4dDQveGF0dHIuYy0xMjQtXFx0bG9ja2RlcF9zZXRfc3ViY2xhc3MoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtLCBJX0RBVEFfU0VNX0VBKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NTA6MjAuOTIwNTIwMjk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3NzUzMTcyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBJbm9kZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpcnN0IHRoaW5ncyBmaXJzdDogYEVYVDRfRlNgLCBgRVhUNF9GU19QT1NJWF9BQ0xgLCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFsbCBsb29rIGdvb2QgYW5kIHJlbGV2YW50IHRvIHdoYXQgSSBleHBlY3QuIE5vdywgbGV0J3MgZHJpbGwgZG93biBhbmQgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdGhpcyBwYXRjaCB0b3VjaGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlICpyZWFsbHkqIHRoZSBmb2N1cyBoZXJlLCB0aGUgb25lcyB0aGF0IGVtYm9keSB0aGUgbmV3IGxvZ2ljLCBub3QganVzdCBnZW5lcmljIGZpbGUgc3lzdGVtIHN0dWZmLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgcXVpdGUgYSBmZXcgZnVuY3Rpb25zLCBidXQgSSdtIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCB0aG9zZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBuZXcgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIEVBIGlub2RlczogYGV4dDRfZXZpY3RfaW5vZGVgLCBgZXh0NF9wdXRfc3VwZXJgLCBgZXh0NF9hbGxvY19pbm9kZWAsIGBfX2V4dDRfZmlsbF9zdXBlcmAsIGBleHQ0X3hhdHRyX2lub2RlX2dldGAsIGBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYCwgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAsIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLCBgZXh0NF94YXR0cl9zZXRfZW50cnlgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfZHJhaW5fZWFfaW5vZGVfd29ya2AuXG5cbkkgbmVlZCB0byBmaWx0ZXIgdGhvc2UgdG8gdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gYGV4dDRfZWFfaW5vZGVfd29ya2AgaXMgYSBzdHJvbmcgY29udGVuZGVyIGJlY2F1c2UgdGhhdCdzIHRoZSB3b3JrZXIgZnVuY3Rpb24uIGBleHQ0X3B1dF9lYV9pbm9kZWAgc2hvdWxkIGFsc28gYmUgaW1wb3J0YW50LCBhcyB0aGlzIGlzIHRoZSBuZXcgZnVuY3Rpb24gdG8gcHV0IHRoZSBFQSBpbm9kZXMuIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgbWlnaHQgYmUgaW50ZXJlc3RpbmcsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgd2hhdCBpdCBkb2VzIHdpdGggYW55IGFycmF5cy4gUGx1cywgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YCBsb29rIGxpa2UgdGhlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gcG9pbnRzLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgdGhvc2UgZm9jdXMgZnVuY3Rpb25zLiBJIHNlZSBgZXh0NF9lYV9pbm9kZV93b3JrYCBpcyBgc3RhdGljYCBpbiBgZnMvZXh0NC94YXR0ci5jYC4gU28gaXQncyBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIFRoZW4gYGV4dDRfcHV0X2VhX2lub2RlYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0IGlzIGRlY2xhcmVkIGluIGBmcy9leHQ0L3hhdHRyLmhgLCBtZWFuaW5nIGl0J3MgZXh0ZXJuYWxseSB2aXNpYmxlLiBHb29kLlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhpcyBsaXN0IGZvciBmdXp6aW5nOlxuKiAgIGBleHQ0X2VhX2lub2RlX3dvcmtgXG4qICAgYGV4dDRfcHV0X2VhX2lub2RlYFxuKiAgIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWBcbiogICBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGBcbiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgXG4qICAgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YFxuKiAgIGBleHQ0X3hhdHRyX3NldF9lbnRyeWBcbiogICBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZWBcblxuUGVyZmVjdCEgVGhlc2UgYXJlIGFsbCB2ZXJ5IHNwZWNpZmljIHRvIGV4dDQgeGF0dHIgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSBpbiByZWdhcmRzIHRvIEVBIGlub2Rlcy4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgZXhwZWN0IHRvIGNvbnRhaW4gdGhlIGNvcmUgY2hhbmdlcyBvZiB0aGUgcGF0Y2guXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIEVBIGlub2Rlcy4gSXQncyBoYW5kbGluZyB0aGUgcmVsZWFzZSBvZiB0aGVzZSBpbm9kZXMgYnkgcXVldWluZyB0aGVtIHVwIHRvIGEgbG9ja2xlc3MgbGlzdCwgYW5kIHRoZW4gcHJvY2Vzc2luZyB0aGVtIGluIGEgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgY2hhbmdlcyBob3cgdGhlIGV4dDQgeGF0dHIgbG9naWMgZnVuZGFtZW50YWxseSB3b3Jrcy4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBiZSB2ZXJ5IGNhcmVmdWwuIFRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgc3RlbW1pbmcgZnJvbSB0aGlzIG5ldyBFQSBpbm9kZSBldmljdGlvbiBzeXN0ZW0uXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3MywiT3V0cHV0VG9rZW5zIjoyNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6NTA6MzUuNjk1ODQwMzQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMDQ4NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2VudHJ5XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byByZXNvbHZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCBtb2RpZmllcyBob3cgRUEgaW5vZGVzIGFyZSByZWxlYXNlZCBieSBxdWV1aW5nIHRoZW0gdG8gYSBsb2NrbGVzcyBsaXN0IGFuZCBwcm9jZXNzaW5nIHRoZW0gaW4gYSB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRVhUNF9GU19QT1NJWF9BQ0xcIixcbiAgICBcIkVYVDRfRlNfU0VDVVJJVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX3NldF9lbnRyeVwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gcmVzb2x2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgbW9kaWZpZXMgaG93IEVBIGlub2RlcyBhcmUgcmVsZWFzZWQgYnkgcXVldWluZyB0aGVtIHRvIGEgbG9ja2xlc3MgbGlzdCBhbmQgcHJvY2Vzc2luZyB0aGVtIGluIGEgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBsb2dpYyBvZiBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[1] Phase: Succeeded StartedAt: 2026-06-23 08:50:47 +0000 UTC FinishedAt: 2026-06-23 08:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 08:50:47 +0000 UTC FinishedAt: 2026-06-23 08:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2] Phase: Succeeded StartedAt: 2026-06-23 08:50:47 +0000 UTC FinishedAt: 2026-06-23 13:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 08:50:47 +0000 UTC FinishedAt: 2026-06-23 13:06:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 08:50:47 +0000 UTC FinishedAt: 2026-06-23 08:51:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 08:50:47 +0000 UTC FinishedAt: 2026-06-23 08:51:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowc9877/series-workflowc9877-convert-artifact-3058269245/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 08:51:09 +0000 UTC FinishedAt: 2026-06-23 09:21:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 08:51:09 +0000 UTC FinishedAt: 2026-06-23 09:21:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*19b154dd-dd0d-4383-84b7-be777d4c6813,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-workflowc9877/series-workflowc9877-convert-artifact-3058269245/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": "9d202b4e-3004-4ddb-b848-77ec343a940c", "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-workflowc9877/series-workflowc9877-build-action-3634537843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 08:51:09 +0000 UTC FinishedAt: 2026-06-23 09:21:08 +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:*19b154dd-dd0d-4383-84b7-be777d4c6813,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-workflowc9877/series-workflowc9877-convert-artifact-3058269245/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": "9d202b4e-3004-4ddb-b848-77ec343a940c", "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-workflowc9877/series-workflowc9877-build-action-3634537843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 09:21:18 +0000 UTC FinishedAt: 2026-06-23 09:21:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 09:21:18 +0000 UTC FinishedAt: 2026-06-23 09:21:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 09:21:18 +0000 UTC FinishedAt: 2026-06-23 09:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 09:21:18 +0000 UTC FinishedAt: 2026-06-23 09:22:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowc9877/series-workflowc9877-convert-artifact-747241368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 09:25:55 +0000 UTC FinishedAt: 2026-06-23 09:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 09:25:55 +0000 UTC FinishedAt: 2026-06-23 09:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9d202b4e-3004-4ddb-b848-77ec343a940c,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-workflowc9877/series-workflowc9877-build-action-3634537843/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-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 09:27:34 +0000 UTC FinishedAt: 2026-06-23 09:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 09:27:34 +0000 UTC FinishedAt: 2026-06-23 09:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 09:27:34 +0000 UTC FinishedAt: 2026-06-23 10:00:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 09:27:34 +0000 UTC FinishedAt: 2026-06-23 10:00:57 +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:*19b154dd-dd0d-4383-84b7-be777d4c6813,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-workflowc9877/series-workflowc9877-convert-artifact-747241368/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": "79d2cdf0-fde6-4e70-a88c-04d44c9d3e44", "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-workflowc9877/series-workflowc9877-build-action-3304937476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 09:27:34 +0000 UTC FinishedAt: 2026-06-23 10:00:33 +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:*19b154dd-dd0d-4383-84b7-be777d4c6813,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-workflowc9877/series-workflowc9877-convert-artifact-747241368/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": "79d2cdf0-fde6-4e70-a88c-04d44c9d3e44", "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-workflowc9877/series-workflowc9877-build-action-3304937476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 10:00:57 +0000 UTC FinishedAt: 2026-06-23 10:00:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 10:00:57 +0000 UTC FinishedAt: 2026-06-23 10:00:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 10:00:57 +0000 UTC FinishedAt: 2026-06-23 10:02:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 10:00:57 +0000 UTC FinishedAt: 2026-06-23 10:02:42 +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:*79d2cdf0-fde6-4e70-a88c-04d44c9d3e44,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-workflowc9877/series-workflowc9877-build-action-3304937476/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-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 10:02:52 +0000 UTC FinishedAt: 2026-06-23 13:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 10:02:52 +0000 UTC FinishedAt: 2026-06-23 13:06:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9d202b4e-3004-4ddb-b848-77ec343a940c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*79d2cdf0-fde6-4e70-a88c-04d44c9d3e44,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-workflowc9877/series-workflowc9877-build-action-3634537843/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-workflowc9877/series-workflowc9877-build-action-3304937476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 10:02:52 +0000 UTC FinishedAt: 2026-06-23 10:03:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 10:02:52 +0000 UTC FinishedAt: 2026-06-23 10:03:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc9877/series-workflowc9877-convert-artifact-3365684849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 10:02:52 +0000 UTC FinishedAt: 2026-06-23 10:02:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 10:02:52 +0000 UTC FinishedAt: 2026-06-23 10:02:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 10:02:52 +0000 UTC FinishedAt: 2026-06-23 10:02:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 10:03:27 +0000 UTC FinishedAt: 2026-06-23 13:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc9877[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_delete_inode","ext4_xattr_inode_dec_ref_all","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_xattr_set_entry","ext4_xattr_inode_lookup_create","ext4_xattr_inode_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"502d801f0ab03e4f32f9a33d203154ce84887921","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"acc1a7bd-816f-451e-86ee-a62f88ad8fcc","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 10:03:27 +0000 UTC FinishedAt: 2026-06-23 13:06:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9d202b4e-3004-4ddb-b848-77ec343a940c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*79d2cdf0-fde6-4e70-a88c-04d44c9d3e44,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-workflowc9877/series-workflowc9877-build-action-3634537843/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-workflowc9877/series-workflowc9877-build-action-3304937476/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-workflowc9877/series-workflowc9877-convert-artifact-3365684849/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,}