Name: series-workflowjt77l Phase: Succeeded StartedAt: 2026-08-30 04:28:33 +0000 UTC FinishedAt: 2026-08-30 05:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[0] Phase: Succeeded StartedAt: 2026-08-30 04:28:33 +0000 UTC FinishedAt: 2026-08-30 04:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[0].run-triage Phase: Succeeded StartedAt: 2026-08-30 04:28:33 +0000 UTC FinishedAt: 2026-08-30 04:49:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EXT4_FS", "NFS_FS", "NTFS_FS", "NTFS_FS_WOF_COMPRESSION", "SQUASHFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EXT4_FS", "NFS_FS", "NTFS_FS", "NTFS_FS_WOF_COMPRESSION", "SQUASHFS" ], "series_id": "30b4b362-31a6-46cf-a7d0-8df2be654a16" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__filemap_get_folio_mpol", "squashfs_copy_cache", "ext4_generic_write_inline_data", "ntfs_read_wof_compressed_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDssCiAgICAmIzM0O05URlNfRlMmIzM0OywKICAgICYjMzQ7TlRGU19GU19XT0ZfQ09NUFJFU1NJT04mIzM0OywKICAgICYjMzQ7U1FVQVNIRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wmIzM0OywKICAgICYjMzQ7c3F1YXNoZnNfY29weV9jYWNoZSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7bnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZGVwcmVjYXRlZCBGR1BfTk9GUyBmbGFnIGZyb20gdGhlIHBhZ2UgY2FjaGUgZm9saW8gYWNxdWlzaXRpb24gQVBJcyBhbmQgYWRqdXN0cyBjYWxsIHNpdGVzIGFjcm9zcyB2YXJpb3VzIGZpbGVzeXN0ZW1zIChFUk9GUywgRVhUNCwgTkZTLCBOVEZTLCBTcXVhc2hGUykgdG8gcmVseSBvbiBtYXBwaW5nIEdGUCBtYXNrcyBvciBzY29wZWQgbWVtYWxsb2Nfbm9mc19zYXZlKCkvbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgY29udGV4dHMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgYWxsb2NhdGlvbiByZWNsYWltIGZsYWdzIChHRlAvRkdQIGZsYWdzKSBhbmQgZmlsZXN5c3RlbSByZWN1cnNpb24vZGVhZGxvY2sgcHJldmVudGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29udHJvbCBmbG93IGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoZS5nLiwgcmVjbGFpbSByZWN1cnNpb24gb3IgbG9ja2luZyBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgRkdQX05PRlMgZmxhZyBmcm9tIGNvcmUgcGFnZSBjYWNoZSBBUElzIChfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wpIGFuZCBhZGp1c3RzIGZvbGlvIGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJlY2xhaW0gY29udGV4dCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgc3F1YXNoZnMsIGVyb2ZzLCBudGZzLCBhbmQgbmZzKS4gSXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBpbnRyb2R1Y2VzIHNjb3BlZCBOT0ZTIGNvbnRleHRzIChtZW1hbGxvY19ub2ZzX3NhdmUvcmVzdG9yZSkgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gSS9PIGFuZCBjYWNoaW5nIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbWVtb3J5IHJlY2xhaW0gYW5kIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTI0MzU2ZDdhYzY1ZTBmOWJkZWRmNjczMWY2YWEzODIyZDkwNzQ3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjQyOjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL2ludGVybmFsLmggYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5pbmRleCA2NTk3NGU1N2FlYmZiLi44NGIzY2RjOGU4OGYxIDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuQEAgLTMyNyw3ICYjNDM7MzI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmVyb2ZzX2dyYWJfZm9saW9fbm93YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICphcyxcbiBcdFx0XHRcdFx0XHQgICAgcGdvZmZfdCBpbmRleClcbiB7XG4gXHRyZXR1cm4gX19maWxlbWFwX2dldF9mb2xpbyhhcywgaW5kZXgsXG4tXHRcdFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXG4mIzQzO1x0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRyZWFkYWhlYWRfZ2ZwX21hc2soYXMpIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi4xODg0YWJiMDk2MTQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTYwMSw5ICYjNDM7NjAxLDcgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdC8qIFdlIGNhbm5vdCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYXMgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHlcbi1cdCAqIHN0YXJ0ZWQgKi9cbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuJiM0MztcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTixcbiBcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuQEAgLTczNCw3ICYjNDM7NzMyLDcgQEAgaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbiBcdH1cbiBcbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuJiM0MztcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTixcbiBcdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IDQ5Mzk0MTIzYmQwOTYuLmUzNDEyNWE4YTJlMjggMTAwNjQ0XG4tLS0gYS9mcy9uZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy9kaXIuY1xuQEAgLTQ0Nyw3ICYjNDM7NDQ3LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqbmZzX3JlYWRkaXJfZm9saW9fZ2V0X25leHQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxuLVx0XHRcdEZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULFxuJiM0MztcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jXG5pbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2lub2RlLmNcbkBAIC0zNjc2LDcgJiM0MzszNjc2LDcgQEAgc3RhdGljIHM2NCBfX250ZnNfaW5vZGVfcmVzaWRlbnRfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSxcbiBcdG1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtXHUwMDNlbnRmc19pbm8pO1xuIFxuIFx0LyogS2VlcCB0aGUgZmlyc3QgcGFnZSBjbGVhbiBhbmQgdXB0b2RhdGUgKi9cbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuJiM0MztcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTixcbiBcdFx0XHRcdCAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuIFx0aWYgKElTX0VSUihmb2xpbykpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy93b2YuYyBiL2ZzL250ZnMvd29mLmNcbmluZGV4IDhmODRjMjIxMmVlZWMuLmM5ODFiNGEzYjY5NTkgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL3dvZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL3dvZi5jXG5AQCAtNDY0LDEwICYjNDM7NDY0LDkgQEAgc3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0Zm9saW8gPSB0YXJnZXQ7XG4gXHRcdFx0aXNfdGFyZ2V0ID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8oXG4tXHRcdFx0XHRtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMgfCBGR1BfTk9XQUlULFxuLVx0XHRcdFx0R0ZQX05PRlMpO1xuJiM0MztcdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG4mIzQzO1x0XHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4mIzQzO1x0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdFx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0XHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0XHRpc190YXJnZXQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9maWxlLmMgYi9mcy9zcXVhc2hmcy9maWxlLmNcbmluZGV4IGQ4MzU5NGNlOTFkMjMuLjM0YzU1MGEyNjZiY2YgMTAwNjQ0XG4tLS0gYS9mcy9zcXVhc2hmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NxdWFzaGZzL2ZpbGUuY1xuQEAgLTM5OCw2ICYjNDM7Mzk4LDcgQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRzdHJ1Y3Qgc3F1YXNoZnNfc2JfaW5mbyAqbXNibGsgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbztcbiBcdGludCBpLCBtYXNrID0gKDEgXHUwMDNjXHUwMDNjIChtc2Jsay1cdTAwM2VibG9ja19sb2cgLSBQQUdFX1NISUZUKSkgLSAxO1xuIFx0aW50IHN0YXJ0X2luZGV4ID0gZm9saW8tXHUwMDNlaW5kZXggXHUwMDI2IH5tYXNrLCBlbmRfaW5kZXggPSBzdGFydF9pbmRleCB8IG1hc2s7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcbiBcdC8qXG4gXHQgKiBMb29wIGNvcHlpbmcgZGF0YWJsb2NrIGludG8gcGFnZXMuICBBcyB0aGUgZGF0YWJsb2NrIGxpa2VseSBjb3ZlcnNcbkBAIC00MTUsNyAmIzQzOzQxNiw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRwdXNoX2ZvbGlvID0gKGkgPT0gZm9saW8tXHUwMDNlaW5kZXgpID8gZm9saW8gOlxuIFx0XHRcdF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaSxcbi1cdFx0XHRcdFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXG4mIzQzO1x0XHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuIFxuIFx0XHRpZiAoSVNfRVJSKHB1c2hfZm9saW8pKVxuQEAgLTQzMCw2ICYjNDM7NDMxLDggQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGlmIChpICE9IGZvbGlvLVx1MDAzZWluZGV4KVxuIFx0XHRcdGZvbGlvX3B1dChwdXNoX2ZvbGlvKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnMpO1xuIH1cbiBcbiAvKiBSZWFkIGRhdGFibG9jayBzdG9yZWQgcGFja2VkIGluc2lkZSBhIGZyYWdtZW50ICh0YWlsLWVuZCBwYWNrZWQgYmxvY2spICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuaW5kZXggMGFkZmE2NjA1NjUzZC4uYmZmOGI3MjY0ZmIwMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTY5Nyw3ICYjNDM7Njk3LDYgQEAgcGdvZmZfdCBwYWdlX2NhY2hlX3ByZXZfbWlzcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiAgKiAgIGZvbGlvIGlzIGFscmVhZHkgaW4gY2FjaGUuICBJZiB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZCwgdW5sb2NrIGl0XG4gICogICBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgY2FuIGRvIHRoZSBzYW1lIGRhbmNlLlxuICAqICogJUZHUF9XUklURSAtIFRoZSBmb2xpbyB3aWxsIGJlIHdyaXR0ZW4gdG8gYnkgdGhlIGNhbGxlci5cbi0gKiAqICVGR1BfTk9GUyAtIF9fR0ZQX0ZTIHdpbGwgZ2V0IGNsZWFyZWQgaW4gZ2ZwLlxuICAqICogJUZHUF9OT1dBSVQgLSBEb24mIzM5O3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suXG4gICogKiAlRkdQX1NUQUJMRSAtIFdhaXQgZm9yIHRoZSBmb2xpbyB0byBiZSBzdGFibGUgKGZpbmlzaGVkIHdyaXRlYmFjaylcbiAgKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU9cbkBAIC03MTAsMTEgJiM0Mzs3MDksMTAgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZnZl90O1xuICNkZWZpbmUgRkdQX0xPQ0tcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDIpXG4gI2RlZmluZSBGR1BfQ1JFQVRcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDQpXG4gI2RlZmluZSBGR1BfV1JJVEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDgpXG4tI2RlZmluZSBGR1BfTk9GU1x0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcbi0jZGVmaW5lIEZHUF9OT1dBSVRcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMjApXG4tI2RlZmluZSBGR1BfRk9SX01NQVBcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4tI2RlZmluZSBGR1BfU1RBQkxFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuLSNkZWZpbmUgRkdQX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMClcbiYjNDM7I2RlZmluZSBGR1BfTk9XQUlUXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuJiM0MzsjZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbiYjNDM7I2RlZmluZSBGR1BfU1RBQkxFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKVxuJiM0MzsjZGVmaW5lIEZHUF9ET05UQ0FDSEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4gI2RlZmluZSBGR0ZfR0VUX09SREVSKGZnZilcdCgoKF9fZm9yY2UgdW5zaWduZWQpZmdmKSBcdTAwM2VcdTAwM2UgMjYpXHQvKiB0b3AgNiBiaXRzICovXG4gXG4gI2RlZmluZSBGR1BfV1JJVEVCRUdJTlx0XHQoRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfU1RBQkxFKVxuQEAgLTkyOSw3ICYjNDM7OTI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ3JhYl9jYWNoZV9wYWdlX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbiYjNDM7XHRcdFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxuIFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbmluZGV4IGQ3YzZhOTQyYWE3ZTAuLmY3NmJlMTE0MWIwNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuQEAgLTM3MiwxMyAmIzQzOzM3MiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2Nfbm9pb19yZXN0b3JlKHVuc2lnbmVkIGludCBmbGFncylcbiB9XG4gXG4gLyoqXG4tICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gTWFya3MgaW1wbGljaXQgR0ZQX05PRlMgYWxsb2NhdGlvbiBzY29wZS5cbiYjNDM7ICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb25zIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4tICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc29cbi0gKiB0aGV5IGFyZSBzYWZlIGZvciB0aGUgRlMgY3JpdGljYWwgc2VjdGlvbiBmcm9tIHRoZSBhbGxvY2F0aW9uIHJlY3Vyc2lvblxuLSAqIHBvaW50IG9mIHZpZXcuIFVzZSBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUgdG8gZW5kIHRoZSBzY29wZSB3aXRoIGZsYWdzXG4tICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cbiYjNDM7ICogQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgY2FsbGluZ1xuJiM0MzsgKiBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGNhbGxpbmcgaW50byBmaWxlc3lzdGVtc1xuJiM0MzsgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsXG4mIzQzOyAqIGJ1dCAoZm9yIGV4YW1wbGUpIGlub2RlcyB3aWxsIG5vdCBiZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2tcbiYjNDM7ICogd2hpY2ggd291bGQgYmUgbmVlZGVkIGJ5IEZTIHJlY2xhaW0uICBXaGlsZSB3ZSBjb3VsZCB0aGVvcmV0aWNhbGx5XG4mIzQzOyAqIGNhbGwgaW50byBhIGRpZmZlcmVudCBmaWxlc3lzdGVtIGluIHRoaXMgY2FzZSwgaXQgY2FuIGJlIGEgZGVlcCBjYWxsXG4mIzQzOyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuXG4mIzQzOyAqXG4mIzQzOyAqIEZpbGVzeXN0ZW1zIG9mdGVuIGNob29zZSB0byBpbmNvcnBvcmF0ZSBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBhcyBwYXJ0XG4mIzQzOyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbFxuJiM0MzsgKiBzZW5zZSwgaXQgaGFzIG11Y2ggdGhlIHNhbWUgZWZmZWN0IGFzIG5lc3RlZCBqb3VybmFsIHRyYW5zYWN0aW9uc1xuJiM0MzsgKiBhcmUgZWl0aGVyIHByb2hpYml0ZWQgb3IgZXhwZW5zaXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBBbHNvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUgaG9sZGluZ1xuJiM0MzsgKiBhIGZpbGUgZm9saW8gbG9ja2VkLiAgSGlnaCBvcmRlciBhbGxvY2F0aW9ucyAoc3VjaCBhcyB0aG9zZSByZXF1ZXN0ZWRcbiYjNDM7ICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uXG4gICpcbiAgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgdXNlZCBmcm9tIGFueSBjb250ZXh0LlxuICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuXG5AQCAtMzg5LDEwICYjNDM7NDAyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1lbWFsbG9jX25vZnNfc2F2ZSh2b2lkKVxuIH1cbiBcbiAvKipcbi0gKiBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUgLSBFbmRzIHRoZSBpbXBsaWNpdCBHRlBfTk9GUyBzY29wZS5cbiYjNDM7ICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlIC0gRW5kIGZpbGVzeXN0ZW0gcmVjbGFpbSBzY29wZS5cbiAgKiBAZmxhZ3M6IEZsYWdzIHRvIHJlc3RvcmUuXG4gICpcbi0gKiBFbmRzIHRoZSBpbXBsaWNpdCBHRlBfTk9GUyBzY29wZSBzdGFydGVkIGJ5IG1lbWFsbG9jX25vZnNfc2F2ZSBmdW5jdGlvbi5cbiYjNDM7ICogRW5kcyB0aGUgaW1wbGljaXQgbWVtb3J5IGFsbG9jYXRpb24gc2NvcGUgc3RhcnRlZCBieVxuJiM0MzsgKiBtZW1hbGxvY19ub2ZzX3NhdmUoKS4gIFRoaXMgbWF5IG5vdCBlbmFibGUgYWNjZXNzIHRvIGZpbGVzeXN0ZW0gcmVjbGFpbVxuJiM0MzsgKiBpZiBpdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBhdCB0aGUgdGltZSBtZW1hbGxvY19ub2ZzX3NhdmUoKSB3YXMgY2FsbGVkLlxuICAqIEFsd2F5cyBtYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4gZmxhZ3MgaXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZVxuICAqIHBhaXJpbmcgbWVtYWxsb2Nfbm9mc19zYXZlIGNhbGwuXG4gICovXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi5lNjU4MDI5MWYyMTg1IDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0xOTk0LDggJiM0MzsxOTk0LDYgQEAgc3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICgoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfV1JJVEUpIFx1MDAyNlx1MDAyNiBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpXG4gXHRcdFx0Z2ZwIHw9IF9fR0ZQX1dSSVRFO1xuLVx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfTk9GUylcbi1cdFx0XHRnZnAgXHUwMDI2PSB+X19HRlBfRlM7XG4gXHRcdGlmIChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9OT1dBSVQpIHtcbiBcdFx0XHRnZnAgXHUwMDI2PSB+R0ZQX0tFUk5FTDtcbiBcdFx0XHRnZnAgfD0gR0ZQX05PV0FJVDtcbmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jXG5pbmRleCA2ZTU1NjMyOTAyODdlLi45YzExNmQ0YmE5NjNhIDEwMDY0NFxuLS0tIGEvbW0vcmVhZGFoZWFkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JlYWRhaGVhZC5jXG5AQCAtMjI3LDE3ICYjNDM7MjI3LDcgQEAgdm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuIFx0Z2ZwX3QgZ2ZwX21hc2sgPSByZWFkYWhlYWRfZ2ZwX21hc2sobWFwcGluZyk7XG4gXHR1bnNpZ25lZCBsb25nIG1hcmsgPSBVTE9OR19NQVgsIGkgPSAwO1xuIFx0dW5zaWduZWQgaW50IG1pbl9ucnBhZ2VzID0gbWFwcGluZ19taW5fZm9saW9fbnJwYWdlcyhtYXBwaW5nKTtcbi1cbi1cdC8qXG4tXHQgKiBQYXJ0d2F5IHRocm91Z2ggdGhlIHJlYWRhaGVhZCBvcGVyYXRpb24sIHdlIHdpbGwgaGF2ZSBhZGRlZFxuLVx0ICogbG9ja2VkIHBhZ2VzIHRvIHRoZSBwYWdlIGNhY2hlLCBidXQgd2lsbCBub3QgeWV0IGhhdmUgc3VibWl0dGVkXG4tXHQgKiB0aGVtIGZvciBJL08uICBBZGRpbmcgYW5vdGhlciBwYWdlIG1heSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSxcbi1cdCAqIHdoaWNoIGNhbiB0cmlnZ2VyIG1lbW9yeSByZWNsYWltLiAgVGVsbGluZyB0aGUgVk0gd2UmIzM5O3JlIGluXG4tXHQgKiB0aGUgbWlkZGxlIG9mIGEgZmlsZXN5c3RlbSBvcGVyYXRpb24gd2lsbCBjYXVzZSBpdCB0byBub3Rcbi1cdCAqIHRvdWNoIGZpbGUtYmFja2VkIHBhZ2VzLCBwcmV2ZW50aW5nIGEgZGVhZGxvY2suICBNb3N0IChhbGw/KVxuLVx0ICogZmlsZXN5c3RlbXMgYWxyZWFkeSBzcGVjaWZ5IF9fR0ZQX05PRlMgaW4gdGhlaXIgbWFwcGluZyYjMzk7c1xuLVx0ICogZ2ZwX21hc2ssIGJ1dCBsZXQmIzM5O3MgYmUgZXhwbGljaXQgaGVyZS5cbi1cdCAqL1xuJiM0MztcdC8qIEFsbG9jYXRpbmcgd2l0aCBsb2NrZWQgZm9saW9zICovXG4gXHR1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7XG5AQCAtNTEyLDcgJiM0Mzs1MDIsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiBcbiBcdHJhLVx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xuIFxuLVx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xuJiM0MztcdC8qIEFsbG9jYXRpbmcgd2l0aCBsb2NrZWQgZm9saW9zICovXG4gXHRub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDssCiAgICAmIzM0O05URlNfRlMmIzM0OywKICAgICYjMzQ7TlRGU19GU19XT0ZfQ09NUFJFU1NJT04mIzM0OywKICAgICYjMzQ7U1FVQVNIRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wmIzM0OywKICAgICYjMzQ7c3F1YXNoZnNfY29weV9jYWNoZSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7bnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIEZHUF9OT0ZTIGZsYWcgZnJvbSBjb3JlIHBhZ2UgY2FjaGUgQVBJcyAoX19maWxlbWFwX2dldF9mb2xpb19tcG9sKSBhbmQgYWRqdXN0cyBmb2xpbyBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIGNvbnRleHQgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIHNxdWFzaGZzLCBlcm9mcywgbnRmcywgYW5kIG5mcykuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgaW50cm9kdWNlcyBzY29wZWQgTk9GUyBjb250ZXh0cyAobWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmUpIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIEkvTyBhbmQgY2FjaGluZyBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIG1lbW9yeSByZWNsYWltIGFuZCBsb2NraW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUyNDM1NmQ3YWM2NWUwZjliZGVkZjY3MzFmNmFhMzgyMmQ5MDc0N2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAzMCAwNDo0Mjo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL2ludGVybmFsLmggYi9mcy9lcm9mcy9pbnRlcm5hbC5oCmluZGV4IDY1OTc0ZTU3YWViZmIuLjg0YjNjZGM4ZTg4ZjEgMTAwNjQ0Ci0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvaW50ZXJuYWwuaApAQCAtMzI3LDcgJiM0MzszMjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmFzLAogCQkJCQkJICAgIHBnb2ZmX3QgaW5kZXgpCiB7CiAJcmV0dXJuIF9fZmlsZW1hcF9nZXRfZm9saW8oYXMsIGluZGV4LAotCQkJRkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsCiYjNDM7CQkJRkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULAogCQkJcmVhZGFoZWFkX2dmcF9tYXNrKGFzKSAmYW1wOyB+X19HRlBfUkVDTEFJTSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IGNlZWU2OWE2NjQ4MmIuLjE4ODRhYmIwOTYxNDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuYwpAQCAtNjAxLDkgJiM0Mzs2MDEsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIFdlIGNhbm5vdCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYXMgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkKLQkgKiBzdGFydGVkICovCi0JZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsCiYjNDM7CWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiwKIAkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCWlmIChJU19FUlIoZm9saW8pKSB7CiAJCXJldCA9IFBUUl9FUlIoZm9saW8pOwpAQCAtNzM0LDcgJiM0Mzs3MzIsNyBAQCBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlnb3RvIG91dF9yZWxlYXNlX2JoOwogCX0KIAotCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLAomIzQzOwlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sCiAJCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCWlmIChJU19FUlIoZm9saW8pKSB7CiAJCXJldCA9IFBUUl9FUlIoZm9saW8pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDQ5Mzk0MTIzYmQwOTYuLmUzNDEyNWE4YTJlMjggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvZGlyLmMKQEAgLTQ0Nyw3ICYjNDM7NDQ3LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqbmZzX3JlYWRkaXJfZm9saW9fZ2V0X25leHQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAogCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwKLQkJCUZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULAomIzQzOwkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCwKIAkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCWlmIChJU19FUlIoZm9saW8pKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9pbm9kZS5jCkBAIC0zNjc2LDcgJiM0MzszNjc2LDcgQEAgc3RhdGljIHM2NCBfX250ZnNfaW5vZGVfcmVzaWRlbnRfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSwKIAltYXJrX21mdF9yZWNvcmRfZGlydHkoY3R4LSZndDtudGZzX2lubyk7CiAKIAkvKiBLZWVwIHRoZSBmaXJzdCBwYWdlIGNsZWFuIGFuZCB1cHRvZGF0ZSAqLwotCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLAomIzQzOwlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sCiAJCQkJICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJaWYgKElTX0VSUihmb2xpbykpIHsKIAkJZXJyID0gUFRSX0VSUihmb2xpbyk7CmRpZmYgLS1naXQgYS9mcy9udGZzL3dvZi5jIGIvZnMvbnRmcy93b2YuYwppbmRleCA4Zjg0YzIyMTJlZWVjLi5jOTgxYjRhM2I2OTU5IDEwMDY0NAotLS0gYS9mcy9udGZzL3dvZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvd29mLmMKQEAgLTQ2NCwxMCAmIzQzOzQ2NCw5IEBAIHN0YXRpYyBpbnQgbnRmc193b2ZfY29sbGVjdF9kZXN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJZm9saW8gPSB0YXJnZXQ7CiAJCQlpc190YXJnZXQgPSB0cnVlOwogCQl9IGVsc2UgewotCQkJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKAotCQkJCW1hcHBpbmcsIGluZGV4LAotCQkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMgfCBGR1BfTk9XQUlULAotCQkJCUdGUF9OT0ZTKTsKJiM0MzsJCQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsCiYjNDM7CQkJCQlGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsCiYjNDM7CQkJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAkJCWlmIChJU19FUlIoZm9saW8pKQogCQkJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKIAkJCWlzX3RhcmdldCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvZmlsZS5jIGIvZnMvc3F1YXNoZnMvZmlsZS5jCmluZGV4IGQ4MzU5NGNlOTFkMjMuLjM0YzU1MGEyNjZiY2YgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zcXVhc2hmcy9maWxlLmMKQEAgLTM5OCw2ICYjNDM7Mzk4LDcgQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKm1zYmxrID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfZnNfaW5mbzsKIAlpbnQgaSwgbWFzayA9ICgxICZsdDsmbHQ7IChtc2Jsay0mZ3Q7YmxvY2tfbG9nIC0gUEFHRV9TSElGVCkpIC0gMTsKIAlpbnQgc3RhcnRfaW5kZXggPSBmb2xpby0mZ3Q7aW5kZXggJmFtcDsgfm1hc2ssIGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4IHwgbWFzazsKJiM0MzsJdW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTsKIAogCS8qCiAJICogTG9vcCBjb3B5aW5nIGRhdGFibG9jayBpbnRvIHBhZ2VzLiAgQXMgdGhlIGRhdGFibG9jayBsaWtlbHkgY292ZXJzCkBAIC00MTUsNyAmIzQzOzQxNiw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJCXB1c2hfZm9saW8gPSAoaSA9PSBmb2xpby0mZ3Q7aW5kZXgpID8gZm9saW8gOgogCQkJX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpLAotCQkJCQlGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCwKJiM0MzsJCQkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCwKIAkJCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAKIAkJaWYgKElTX0VSUihwdXNoX2ZvbGlvKSkKQEAgLTQzMCw2ICYjNDM7NDMxLDggQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWlmIChpICE9IGZvbGlvLSZndDtpbmRleCkKIAkJCWZvbGlvX3B1dChwdXNoX2ZvbGlvKTsKIAl9CiYjNDM7CiYjNDM7CW1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzKTsKIH0KIAogLyogUmVhZCBkYXRhYmxvY2sgc3RvcmVkIHBhY2tlZCBpbnNpZGUgYSBmcmFnbWVudCAodGFpbC1lbmQgcGFja2VkIGJsb2NrKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAwYWRmYTY2MDU2NTNkLi5iZmY4YjcyNjRmYjAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtNjk3LDcgJiM0Mzs2OTcsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogICogICBmb2xpbyBpcyBhbHJlYWR5IGluIGNhY2hlLiAgSWYgdGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQsIHVubG9jayBpdAogICogICBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgY2FuIGRvIHRoZSBzYW1lIGRhbmNlLgogICogKiAlRkdQX1dSSVRFIC0gVGhlIGZvbGlvIHdpbGwgYmUgd3JpdHRlbiB0byBieSB0aGUgY2FsbGVyLgotICogKiAlRkdQX05PRlMgLSBfX0dGUF9GUyB3aWxsIGdldCBjbGVhcmVkIGluIGdmcC4KICAqICogJUZHUF9OT1dBSVQgLSBEb24mIzM5O3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suCiAgKiAqICVGR1BfU1RBQkxFIC0gV2FpdCBmb3IgdGhlIGZvbGlvIHRvIGJlIHN0YWJsZSAoZmluaXNoZWQgd3JpdGViYWNrKQogICogKiAlRkdQX0RPTlRDQUNIRSAtIFVuY2FjaGVkIGJ1ZmZlcmVkIElPCkBAIC03MTAsMTEgJiM0Mzs3MDksMTAgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZnZl90OwogI2RlZmluZSBGR1BfTE9DSwkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDIpCiAjZGVmaW5lIEZHUF9DUkVBVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDQpCiAjZGVmaW5lIEZHUF9XUklURQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDgpCi0jZGVmaW5lIEZHUF9OT0ZTCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMCkKLSNkZWZpbmUgRkdQX05PV0FJVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMjApCi0jZGVmaW5lIEZHUF9GT1JfTU1BUAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApCi0jZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKQotI2RlZmluZSBGR1BfRE9OVENBQ0hFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMCkKJiM0MzsjZGVmaW5lIEZHUF9OT1dBSVQJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKQomIzQzOyNkZWZpbmUgRkdQX0ZPUl9NTUFQCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMCkKJiM0MzsjZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKQomIzQzOyNkZWZpbmUgRkdQX0RPTlRDQUNIRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApCiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKQkoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgJmd0OyZndDsgMjYpCS8qIHRvcCA2IGJpdHMgKi8KIAogI2RlZmluZSBGR1BfV1JJVEVCRUdJTgkJKEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSkKQEAgLTkyOSw3ICYjNDM7OTI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ3JhYl9jYWNoZV9wYWdlX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlwZ29mZl90IGluZGV4KQogewogCXJldHVybiBwYWdlY2FjaGVfZ2V0X3BhZ2UobWFwcGluZywgaW5kZXgsCi0JCQlGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCwKJiM0MzsJCQlGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsCiAJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oCmluZGV4IGQ3YzZhOTQyYWE3ZTAuLmY3NmJlMTE0MWIwNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgKQEAgLTM3MiwxMyAmIzQzOzM3MiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2Nfbm9pb19yZXN0b3JlKHVuc2lnbmVkIGludCBmbGFncykKIH0KIAogLyoqCi0gKiBtZW1hbGxvY19ub2ZzX3NhdmUgLSBNYXJrcyBpbXBsaWNpdCBHRlBfTk9GUyBhbGxvY2F0aW9uIHNjb3BlLgomIzQzOyAqIG1lbWFsbG9jX25vZnNfc2F2ZSAtIFByZXZlbnQgcmVjdXJzaW9uIGludG8gdGhlIGZpbGVzeXN0ZW0uCiAgKgotICogVGhpcyBmdW5jdGlvbnMgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgR0ZQX05PRlMgYWxsb2NhdGlvbiBzY29wZS4KLSAqIEFsbCBmdXJ0aGVyIGFsbG9jYXRpb25zIHdpbGwgaW1wbGljaXRseSBkcm9wIF9fR0ZQX0ZTIGZsYWcgYW5kIHNvCi0gKiB0aGV5IGFyZSBzYWZlIGZvciB0aGUgRlMgY3JpdGljYWwgc2VjdGlvbiBmcm9tIHRoZSBhbGxvY2F0aW9uIHJlY3Vyc2lvbgotICogcG9pbnQgb2Ygdmlldy4gVXNlIG1lbWFsbG9jX25vZnNfcmVzdG9yZSB0byBlbmQgdGhlIHNjb3BlIHdpdGggZmxhZ3MKLSAqIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uCiYjNDM7ICogQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgY2FsbGluZwomIzQzOyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSgpIHdpbGwgYmUgcHJldmVudGVkIGZyb20gY2FsbGluZyBpbnRvIGZpbGVzeXN0ZW1zCiYjNDM7ICogdG8gcmVjbGFpbSBtZW1vcnkuICBDbGVhbiBwYWdlIGNhY2hlIG1lbW9yeSBjYW4gc3RpbGwgYmUgcmVjbGFpbWVkLAomIzQzOyAqIGJ1dCAoZm9yIGV4YW1wbGUpIGlub2RlcyB3aWxsIG5vdCBiZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBwcmltYXJ5IHJlYXNvbiB0byBkbyB0aGlzIGlzIHRoYXQgdGhlIGNhbGxlciBoYXMgdGFrZW4gYSBsb2NrCiYjNDM7ICogd2hpY2ggd291bGQgYmUgbmVlZGVkIGJ5IEZTIHJlY2xhaW0uICBXaGlsZSB3ZSBjb3VsZCB0aGVvcmV0aWNhbGx5CiYjNDM7ICogY2FsbCBpbnRvIGEgZGlmZmVyZW50IGZpbGVzeXN0ZW0gaW4gdGhpcyBjYXNlLCBpdCBjYW4gYmUgYSBkZWVwIGNhbGwKJiM0MzsgKiBzdGFjayBzbyBpdCBpcyBiZXR0ZXIgdG8gYXZvaWQgYWxsIGZpbGVzeXN0ZW1zLgomIzQzOyAqCiYjNDM7ICogRmlsZXN5c3RlbXMgb2Z0ZW4gY2hvb3NlIHRvIGluY29ycG9yYXRlIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGFzIHBhcnQKJiM0MzsgKiBvZiBzdGFydGluZyBhIGpvdXJuYWwgdHJhbnNhY3Rpb24uICBXaGlsZSBub3QgYSBsb2NrIGluIHRoZSBub3JtYWwKJiM0MzsgKiBzZW5zZSwgaXQgaGFzIG11Y2ggdGhlIHNhbWUgZWZmZWN0IGFzIG5lc3RlZCBqb3VybmFsIHRyYW5zYWN0aW9ucwomIzQzOyAqIGFyZSBlaXRoZXIgcHJvaGliaXRlZCBvciBleHBlbnNpdmUuCiYjNDM7ICoKJiM0MzsgKiBBbHNvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUgaG9sZGluZwomIzQzOyAqIGEgZmlsZSBmb2xpbyBsb2NrZWQuICBIaWdoIG9yZGVyIGFsbG9jYXRpb25zIChzdWNoIGFzIHRob3NlIHJlcXVlc3RlZAomIzQzOyAqIGJ5IHNsYWIpIGNhbiB0cmlnZ2VyIGNvbXBhY3Rpb24gd2hpY2ggd2lsbCBhdHRlbXB0IHRvIGxvY2sgdGhlIGZvbGlvLgogICoKICAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gaXMgc2FmZSB0byBiZSB1c2VkIGZyb20gYW55IGNvbnRleHQuCiAgKiBSZXR1cm46IFRoZSBzYXZlZCBmbGFncyB0byBiZSBwYXNzZWQgdG8gbWVtYWxsb2Nfbm9mc19yZXN0b3JlLgpAQCAtMzg5LDEwICYjNDM7NDAyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1lbWFsbG9jX25vZnNfc2F2ZSh2b2lkKQogfQogCiAvKioKLSAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZHMgdGhlIGltcGxpY2l0IEdGUF9OT0ZTIHNjb3BlLgomIzQzOyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZCBmaWxlc3lzdGVtIHJlY2xhaW0gc2NvcGUuCiAgKiBAZmxhZ3M6IEZsYWdzIHRvIHJlc3RvcmUuCiAgKgotICogRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19ub2ZzX3NhdmUgZnVuY3Rpb24uCiYjNDM7ICogRW5kcyB0aGUgaW1wbGljaXQgbWVtb3J5IGFsbG9jYXRpb24gc2NvcGUgc3RhcnRlZCBieQomIzQzOyAqIG1lbWFsbG9jX25vZnNfc2F2ZSgpLiAgVGhpcyBtYXkgbm90IGVuYWJsZSBhY2Nlc3MgdG8gZmlsZXN5c3RlbSByZWNsYWltCiYjNDM7ICogaWYgaXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRpbWUgbWVtYWxsb2Nfbm9mc19zYXZlKCkgd2FzIGNhbGxlZC4KICAqIEFsd2F5cyBtYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4gZmxhZ3MgaXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZQogICogcGFpcmluZyBtZW1hbGxvY19ub2ZzX3NhdmUgY2FsbC4KICAqLwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZhZmVjNjM2ODgxZmIuLmU2NTgwMjkxZjIxODUgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE5OTQsOCAmIzQzOzE5OTQsNiBAQCBzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAogCQlpZiAoKGZncF9mbGFncyAmYW1wOyBGR1BfV1JJVEUpICZhbXA7JmFtcDsgbWFwcGluZ19jYW5fd3JpdGViYWNrKG1hcHBpbmcpKQogCQkJZ2ZwIHw9IF9fR0ZQX1dSSVRFOwotCQlpZiAoZmdwX2ZsYWdzICZhbXA7IEZHUF9OT0ZTKQotCQkJZ2ZwICZhbXA7PSB+X19HRlBfRlM7CiAJCWlmIChmZ3BfZmxhZ3MgJmFtcDsgRkdQX05PV0FJVCkgewogCQkJZ2ZwICZhbXA7PSB+R0ZQX0tFUk5FTDsKIAkJCWdmcCB8PSBHRlBfTk9XQUlUOwpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCA2ZTU1NjMyOTAyODdlLi45YzExNmQ0YmE5NjNhIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9yZWFkYWhlYWQuYwpAQCAtMjI3LDE3ICYjNDM7MjI3LDcgQEAgdm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLAogCWdmcF90IGdmcF9tYXNrID0gcmVhZGFoZWFkX2dmcF9tYXNrKG1hcHBpbmcpOwogCXVuc2lnbmVkIGxvbmcgbWFyayA9IFVMT05HX01BWCwgaSA9IDA7CiAJdW5zaWduZWQgaW50IG1pbl9ucnBhZ2VzID0gbWFwcGluZ19taW5fZm9saW9fbnJwYWdlcyhtYXBwaW5nKTsKLQotCS8qCi0JICogUGFydHdheSB0aHJvdWdoIHRoZSByZWFkYWhlYWQgb3BlcmF0aW9uLCB3ZSB3aWxsIGhhdmUgYWRkZWQKLQkgKiBsb2NrZWQgcGFnZXMgdG8gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aWxsIG5vdCB5ZXQgaGF2ZSBzdWJtaXR0ZWQKLQkgKiB0aGVtIGZvciBJL08uICBBZGRpbmcgYW5vdGhlciBwYWdlIG1heSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSwKLQkgKiB3aGljaCBjYW4gdHJpZ2dlciBtZW1vcnkgcmVjbGFpbS4gIFRlbGxpbmcgdGhlIFZNIHdlJiMzOTtyZSBpbgotCSAqIHRoZSBtaWRkbGUgb2YgYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiB3aWxsIGNhdXNlIGl0IHRvIG5vdAotCSAqIHRvdWNoIGZpbGUtYmFja2VkIHBhZ2VzLCBwcmV2ZW50aW5nIGEgZGVhZGxvY2suICBNb3N0IChhbGw/KQotCSAqIGZpbGVzeXN0ZW1zIGFscmVhZHkgc3BlY2lmeSBfX0dGUF9OT0ZTIGluIHRoZWlyIG1hcHBpbmcmIzM5O3MKLQkgKiBnZnBfbWFzaywgYnV0IGxldCYjMzk7cyBiZSBleHBsaWNpdCBoZXJlLgotCSAqLwomIzQzOwkvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqLwogCXVuc2lnbmVkIGludCBub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bWFwcGluZy0mZ3Q7aW52YWxpZGF0ZV9sb2NrKTsKQEAgLTUxMiw3ICYjNDM7NTAyLDcgQEAgdm9pZCBwYWdlX2NhY2hlX3JhX29yZGVyKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsCiAKIAlyYS0mZ3Q7b3JkZXIgPSBuZXdfb3JkZXI7CiAKLQkvKiBTZWUgY29tbWVudCBpbiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpICovCiYjNDM7CS8qIEFsbG9jYXRpbmcgd2l0aCBsb2NrZWQgZm9saW9zICovCiAJbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpOwogCWZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTExCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggZG9lcy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBzeXN0ZW1hdGljYWxseSByZW1vdmluZyB0aGUgYEZHUF9OT0ZTYCBmbGFnIGZyb20gdmFyaW91cyBwYWdlIGNhY2hlLXJlbGF0ZWQgZnVuY3Rpb24gY2FsbHMgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtczogYGVyb2ZzYCwgYGV4dDRgLCBgbmZzYCwgYG50ZnNgLCBgc3F1YXNoZnNgLCBhbmQgc29tZSBjb3JlIGBtbWAgYW5kIGBpbmNsdWRlYCBoZWFkZXJzLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgY2xlYW5pbmcgdXAgdGhlIHdheSBOT0ZTIChObyBGaWxlc3lzdGVtKSBtZW1vcnkgYWxsb2NhdGlvbiBpcyBoYW5kbGVkLiBJIHNlZSB0aGlzIGhhcHBlbmluZyB0aHJvdWdoIGEgY29uc2lzdGVudCByZW1vdmFsIG9mIHRoZSBmbGFnIGFuZCB1c2luZyBuZXcgbWV0aG9kcyBzdWNoIGFzIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgYW5kIGBtYXBwaW5nX2dmcF9tYXNrKClgIG9yIHNjb3BlZCBOT0ZTIGNvbnRleHQgaW5zdGVhZC4KClRoZSBgRkdQX05PRlNgIGZsYWcgd2FzIHVzZWQgdG8gc3RyaXAgYF9fR0ZQX0ZTYCBmcm9tIGFsbG9jYXRpb24gZmxhZ3MuIE5vdywgaXQgYXBwZWFycyB0aGUga2VybmVsIGlzIG1vdmluZyB0b3dhcmRzIGEgbW9yZSBtb2Rlcm4gYXBwcm9hY2gsIHdoaWNoIGlzIGdvb2Qg4oCTIGNsZWFuZXIgYW5kIHBvdGVudGlhbGx5IHNhZmVyLiBUaGV5JiMzOTtyZSB1cGRhdGluZyB0aGUgZmxhZyBkZWZpbml0aW9ucyBpbiBgcGFnZW1hcC5oYCBhbmQgcmVtb3ZpbmcgdGhlIGhhbmRsaW5nIG9mIGBGR1BfTk9GU2AgaW4gYG1tL2ZpbGVtYXAuY2AuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzIGEgcHVyZWx5IGludGVybmFsIHJlZmFjdG9yaW5nLCBvciBkb2VzIGl0IGludHJvZHVjZSBjaGFuZ2VzIHRoYXQgbWlnaHQgYmUgZXhwbG9pdGFibGU/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0ICpsb29rcyogbGlrZSBhIGNsZWFudXAsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBjaGFuZ2VzIGluIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIHRoYXQgY291bGQgdHJpZ2dlciBzb21ldGhpbmcgaW50ZXJlc3RpbmcuCgpCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIHNob3VsZCByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUga2VybmVsIG1haW50YWluZXIgZ3VpZGVsaW5lcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyBXb3J0aEZ1enppbmcuIExldCYjMzk7cyBzZWUuLi4gdGhlIHJ1bGVzIG1lbnRpb24gdGhhdCBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBhbmQgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBhcmVuJiMzOTt0IHR5cGljYWxseSB3b3J0aCBmdXp6aW5nLCBub3IgYXJlIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMmIzM5OyB0ZWFyZG93bi4KClNvLCBpcyB0aGlzIGZ1bmN0aW9uYWwgb3IganVzdCBhIHJlZmFjdG9yaW5nPyBMZXQmIzM5O3Mgem9vbSBpbiBvbiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgYW5kIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLiBXaGF0IGFyZSB0aG9zZSBmdW5jdGlvbnMgZG9pbmcgaW4gYGV4dDRgPyBIbW0sIHRoZSBjb21tZW50IHNheXMgd2UgY2FuJiMzOTt0IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5IHN0YXJ0ZWQuIFNvLCBiZWZvcmUgY2FsbGluZyB0aG9zZSBmdW5jdGlvbnMsIGlzIHRoZXJlIGEgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBjYWxsLCBvciBpcyBgUEZfTUVNQUxMT0NfTk9GU2AgYWxyZWFkeSBzZXQ/IEl0IGxvb2tzIGxpa2UgYGV4dDRfam91cm5hbF9zdGFydGAgcHJvYmFibHkgdGFrZXMgY2FyZSBvZiB0aGF0LiBJIHNob3VsZCBncmVwIGZvciBgbWVtYWxsb2Nfbm9mc19zYXZlYCB3aXRoaW4gdGhlIGBmcy9leHQ0YCBvciBgZnMvamJkMmAgZGlyZWN0b3J5IHRvIGNvbmZpcm0uIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gdGhpcyBwYXRjaCAqaXMqIHByb2JhYmx5IGEgcmVmYWN0b3JpbmcsIGJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qIHRoYXQgdGhlIGV4aXN0aW5nIGxvZ2ljIGlzIHRha2luZyBOT0ZTIGludG8gYWNjb3VudCBiZWZvcmUgSSBydWxlIGl0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1hbGxvY19ub2ZzX3NhdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZnMvYnRyZnMvYWNsLmM9NTg9aW50IF9fYnRyZnNfc2V0X2FjbChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9idHJmcy9hY2wuYy04NS1cdFx0ICovXG5mcy9idHJmcy9hY2wuYzo4NjpcdFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9hY2wuYy04Ny1cdFx0dmFsdWUgPSBwb3NpeF9hY2xfdG9feGF0dHIoXHUwMDI2aW5pdF91c2VyX25zLCBhY2wsIFx1MDAyNnNpemUsIEdGUF9LRVJORUwpO1xuLS1cbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM9NzkxPXN0cnVjdCBsaXN0X2hlYWQgKmJ0cmZzX2dldF93b3Jrc3BhY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGludCB0eXBlLCBpbnQgbGV2ZWwpXG4tLVxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy04MzctXHQgKi9cbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6ODM4Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9jb21wcmVzc2lvbi5jLTgzOS1cdHdvcmtzcGFjZSA9IGFsbG9jX3dvcmtzcGFjZShmc19pbmZvLCB0eXBlLCBsZXZlbCk7XG4tLVxuZnMvYnRyZnMvZGlzay1pby5jPTgxNz1zdHJ1Y3QgYnRyZnNfcm9vdCAqYnRyZnNfY3JlYXRlX3RyZWUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsXG4tLVxuZnMvYnRyZnMvZGlzay1pby5jLTgzMC1cdCAqL1xuZnMvYnRyZnMvZGlzay1pby5jOjgzMTpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvZGlzay1pby5jLTgzMi1cdHJvb3QgPSBidHJmc19hbGxvY19yb290KGZzX2luZm8sIG9iamVjdGlkLCBHRlBfS0VSTkVMKTtcbi0tXG5mcy9idHJmcy9kaXNrLWlvLmM9NDc1MD1zdGF0aWMgdm9pZCBidHJmc19kZXN0cm95X2RlbGFsbG9jX2lub2RlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdClcbi0tXG5mcy9idHJmcy9kaXNrLWlvLmMtNDc3Mi1cbmZzL2J0cmZzL2Rpc2staW8uYzo0NzczOlx0XHRcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvZGlzay1pby5jLTQ3NzQtXHRcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi0tXG5mcy9idHJmcy9kaXNrLWlvLmM9NDg2Mz1zdGF0aWMgdm9pZCBidHJmc19jbGVhbnVwX2JnX2lvKHN0cnVjdCBidHJmc19ibG9ja19ncm91cCAqY2FjaGUpXG4tLVxuZnMvYnRyZnMvZGlzay1pby5jLTQ4NzAtXG5mcy9idHJmcy9kaXNrLWlvLmM6NDg3MTpcdFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9kaXNrLWlvLmMtNDg3Mi1cdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi0tXG5mcy9idHJmcy9maWxlLWl0ZW0uYz04Mzk9aW50IGJ0cmZzX2NzdW1fb25lX2JpbyhzdHJ1Y3QgYnRyZnNfYmlvICpiYmlvLCBib29sIGFzeW5jKVxuLS1cbmZzL2J0cmZzL2ZpbGUtaXRlbS5jLTg0Ny1cbmZzL2J0cmZzL2ZpbGUtaXRlbS5jOjg0ODpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvZmlsZS1pdGVtLmMtODQ5LVx0c3VtcyA9IGt2emFsbG9jKGJ0cmZzX29yZGVyZWRfc3VtX3NpemUoZnNfaW5mbywgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSksXG4tLVxuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jPTgzPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fbG9va3VwX2ZyZWVfc3BhY2VfaW5vZGUoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsXG4tLVxuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jLTExOC1cdCAqL1xuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jOjExOTpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jLTEyMC1cdGlub2RlID0gYnRyZnNfaWdldF9wYXRoKGxvY2F0aW9uLm9iamVjdGlkLCByb290LCBwYXRoKTtcbi0tXG5mcy9idHJmcy9mcmVlLXNwYWNlLXRyZWUuYz0xNTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgKmFsbG9jX2JpdG1hcCh1MzIgYml0bWFwX3NpemUpXG4tLVxuZnMvYnRyZnMvZnJlZS1zcGFjZS10cmVlLmMtMTY5LVx0ICovXG5mcy9idHJmcy9mcmVlLXNwYWNlLXRyZWUuYzoxNzA6XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtdHJlZS5jLTE3MS1cdHJldCA9IGt2emFsbG9jKGJpdG1hcF9yb3VuZGVkX3NpemUsIEdGUF9LRVJORUwpO1xuLS1cbmZzL2J0cmZzL2lub2RlLmM9MTI2PXN0YXRpYyBpbnQgZGF0YV9yZWxvY19wcmludF93YXJuaW5nX2lub2RlKHU2NCBpbnVtLCB1NjQgb2Zmc2V0LCB1NjQgbnVtX2J5dGVzLFxuLS1cbmZzL2J0cmZzL2lub2RlLmMtMTYyLVxuZnMvYnRyZnMvaW5vZGUuYzoxNjM6XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL2lub2RlLmMtMTY0LVx0aXBhdGggPSBpbml0X2lwYXRoKDQwOTYsIGxvY2FsX3Jvb3QsIFx1MDAyNndhcm4tXHUwMDNlcGF0aCk7XG4tLVxuZnMvYnRyZnMvaW5vZGUuYz0xNTY1PXN0YXRpYyBib29sIHJ1bl9kZWxhbGxvY19jb21wcmVzc2VkKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXG4tLVxuZnMvYnRyZnMvaW5vZGUuYy0xNTc4LVxuZnMvYnRyZnMvaW5vZGUuYzoxNTc5Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9pbm9kZS5jLTE1ODAtXHRjdHggPSBrdm1hbGxvY19mbGV4KCpjdHgsIGNodW5rcywgbnVtX2NodW5rcyk7XG4tLVxuZnMvYnRyZnMvc2NydWIuYz00ODI9c3RhdGljIGludCBzY3J1Yl9wcmludF93YXJuaW5nX2lub2RlKHU2NCBpbnVtLCB1NjQgb2Zmc2V0LCB1NjQgbnVtX2J5dGVzLFxuLS1cbmZzL2J0cmZzL3NjcnViLmMtNTI3LVx0ICovXG5mcy9idHJmcy9zY3J1Yi5jOjUyODpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvc2NydWIuYy01MjktXHRpcGF0aCA9IGluaXRfaXBhdGgoNDA5NiwgbG9jYWxfcm9vdCwgc3dhcm4tXHUwMDNlcGF0aCk7XG4tLVxuZnMvYnRyZnMvc2NydWIuYz0zMDQzPWludCBidHJmc19zY3J1Yl9kZXYoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIHU2NCBkZXZpZCwgdTY0IHN0YXJ0LFxuLS1cbmZzL2J0cmZzL3NjcnViLmMtMzEzNC1cdCAqL1xuZnMvYnRyZnMvc2NydWIuYzozMTM1Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9zY3J1Yi5jLTMxMzYtXHRpZiAoIWlzX2Rldl9yZXBsYWNlKSB7XG4tLVxuZnMvYnRyZnMvc3lzZnMuYz0xODE4PXZvaWQgYnRyZnNfc3lzZnNfYWRkX2Jsb2NrX2dyb3VwX3R5cGUoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwICpjYWNoZSlcbi0tXG5mcy9idHJmcy9zeXNmcy5jLTE4MzMtXHQgKi9cbmZzL2J0cmZzL3N5c2ZzLmM6MTgzNDpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvc3lzZnMuYy0xODM1LVxuLS1cbmZzL2J0cmZzL3N5c2ZzLmM9MjEzND1pbnQgYnRyZnNfc3lzZnNfYWRkX2RldmljZShzdHJ1Y3QgYnRyZnNfZGV2aWNlICpkZXZpY2UpXG4tLVxuZnMvYnRyZnMvc3lzZnMuYy0yMTQ5LVxuZnMvYnRyZnMvc3lzZnMuYzoyMTUwOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9zeXNmcy5jLTIxNTEtXG4tLVxuZnMvYnRyZnMvdHJhbnNhY3Rpb24uYz0xNjYxPXN0YXRpYyBub2lubGluZSBpbnQgY3JlYXRlX3BlbmRpbmdfc25hcHNob3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsXG4tLVxuZnMvYnRyZnMvdHJhbnNhY3Rpb24uYy0xNjk2LVx0ICovXG5mcy9idHJmcy90cmFuc2FjdGlvbi5jOjE2OTc6XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy90cmFuc2FjdGlvbi5jLTE2OTgtXHRwZW5kaW5nLVx1MDAzZWVycm9yID0gZnNjcnlwdF9zZXR1cF9maWxlbmFtZShcdTAwMjZwYXJlbnRfaW5vZGUtXHUwMDNldmZzX2lub2RlLFxuLS1cbmZzL2J0cmZzL3RyZWUtbG9nLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgYnRyZnNfaW5vZGUgKmJ0cmZzX2lnZXRfbG9nZ2luZyh1NjQgb2JqZWN0aWQsIHN0cnVjdCBidHJmc19yb290ICpyb290KVxuLS1cbmZzL2J0cmZzL3RyZWUtbG9nLmMtMjYzLVx0ICovXG5mcy9idHJmcy90cmVlLWxvZy5jOjI2NDpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvdHJlZS1sb2cuYy0yNjUtXHRpbm9kZSA9IGJ0cmZzX2lnZXQob2JqZWN0aWQsIHJvb3QpO1xuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYz03NTk9c3RhdGljIG5vaW5saW5lIHN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZV9saXN0X2FkZChjb25zdCBjaGFyICpwYXRoLFxuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYy04NDAtXG5mcy9idHJmcy92b2x1bWVzLmM6ODQxOlx0XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3ZvbHVtZXMuYy04NDItXHRcdGRldmljZSA9IGJ0cmZzX2FsbG9jX2RldmljZShOVUxMLCBcdTAwMjZkZXZpZCxcbi0tXG5mcy9idHJmcy92b2x1bWVzLmM9NzQ3MT1zdGF0aWMgc3RydWN0IGJ0cmZzX2RldmljZSAqYWRkX21pc3NpbmdfZGV2KHN0cnVjdCBidHJmc19mc19kZXZpY2VzICpmc19kZXZpY2VzLFxuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYy03NDgzLVxuZnMvYnRyZnMvdm9sdW1lcy5jOjc0ODQ6XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3ZvbHVtZXMuYy03NDg1LVx0ZGV2aWNlID0gYnRyZnNfYWxsb2NfZGV2aWNlKE5VTEwsIFx1MDAyNmRldmlkLCBkZXZfdXVpZCwgTlVMTCk7XG4tLVxuZnMvYnRyZnMveGF0dHIuYz00ODM9c3RhdGljIGludCBidHJmc19pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvYnRyZnMveGF0dHIuYy00OTUtXHQgKi9cbmZzL2J0cmZzL3hhdHRyLmM6NDk2Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy94YXR0ci5jLTQ5Ny1cdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXHUwMDNlbmFtZSAhPSBOVUxMOyB4YXR0ciYjNDM7JiM0MzspIHtcbi0tXG5mcy9idHJmcy96b25lZC5jPTgzMD1zdGF0aWMgaW50IHNiX2xvZ19sb2NhdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmVzLFxuLS1cbmZzL2J0cmZzL3pvbmVkLmMtODU3LVxuZnMvYnRyZnMvem9uZWQuYzo4NTg6XHRcdFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvem9uZWQuYy04NTktXHRcdFx0cmV0ID0gYmxrZGV2X3pvbmVfbWdtdChiZGV2LCBSRVFfT1BfWk9ORV9SRVNFVCxcbi0tXG5mcy9idHJmcy96b25lZC5jPTk3NT1pbnQgYnRyZnNfYWR2YW5jZV9zYl9sb2coc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlLCBpbnQgbWlycm9yKVxuLS1cbmZzL2J0cmZzL3pvbmVkLmMtMTAwOS1cbmZzL2J0cmZzL3pvbmVkLmM6MTAxMDpcdFx0XHRcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3pvbmVkLmMtMTAxMS1cdFx0XHRcdHJldCA9IGJsa2Rldl96b25lX21nbXQoZGV2aWNlLVx1MDAzZWJkZXYsXG4tLVxuZnMvYnRyZnMvem9uZWQuYz0xMDMwPWludCBidHJmc19yZXNldF9zYl9sb2dfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG1pcnJvcilcbi0tXG5mcy9idHJmcy96b25lZC5jLTEwNDgtXG5mcy9idHJmcy96b25lZC5jOjEwNDk6XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy96b25lZC5jLTEwNTAtXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxuLS1cbmZzL2J0cmZzL3pvbmVkLmM9MTE2ND1pbnQgYnRyZnNfcmVzZXRfZGV2aWNlX3pvbmUoc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlLCB1NjQgcGh5c2ljYWwsXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0xMTcwLVx0KmJ5dGVzID0gMDtcbmZzL2J0cmZzL3pvbmVkLmM6MTE3MTpcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3pvbmVkLmMtMTE3Mi1cdHJldCA9IGJsa2Rldl96b25lX21nbXQoZGV2aWNlLVx1MDAzZWJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxuLS1cbmZzL2J0cmZzL3pvbmVkLmM9MTMyND1zdGF0aWMgaW50IGJ0cmZzX2xvYWRfem9uZV9pbmZvKHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLCBpbnQgem9uZV9pZHgsXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0xMzgyLVxuZnMvYnRyZnMvem9uZWQuYzoxMzgzOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy96b25lZC5jLTEzODQtXHRyZXQgPSBidHJmc19nZXRfZGV2X3pvbmUoZGV2aWNlLCBpbmZvLVx1MDAzZXBoeXNpY2FsLCBcdTAwMjZ6b25lKTtcbi0tXG5mcy9idHJmcy96b25lZC5jPTIzMjE9c3RhdGljIGludCByZWFkX3pvbmVfaW5mbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywgdTY0IGxvZ2ljYWwsXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0yMzQxLVxuZnMvYnRyZnMvem9uZWQuYzoyMzQyOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy96b25lZC5jLTIzNDMtXHRubWlycm9ycyA9IChpbnQpYmlvYy1cdTAwM2VudW1fc3RyaXBlcztcbi0tXG5mcy9idHJmcy96b25lZC5jPTI1MTE9c3RhdGljIGludCBjYWxsX3pvbmVfZmluaXNoKHN0cnVjdCBidHJmc19ibG9ja19ncm91cCAqYmxvY2tfZ3JvdXAsXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0yNTI3LVxuZnMvYnRyZnMvem9uZWQuYzoyNTI4Olx0XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy96b25lZC5jLTI1MjktXHRcdHJldCA9IGJsa2Rldl96b25lX21nbXQoZGV2aWNlLVx1MDAzZWJkZXYsIFJFUV9PUF9aT05FX0ZJTklTSCxcbi0tXG5mcy9idHJmcy96b25lZC5jPTMxMTI9aW50IGJ0cmZzX3Jlc2V0X3VudXNlZF9ibG9ja19ncm91cHMoc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNwYWNlX2luZm8sIHU2NCBudW1fYnl0ZXMpXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0zMTc2LVxuZnMvYnRyZnMvem9uZWQuYzozMTc3Olx0XHRcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3pvbmVkLmMtMzE3OC1cdFx0XHRyZXQgPSBibGtkZXZfem9uZV9tZ210KHN0cmlwZS1cdTAwM2VkZXYtXHUwMDNlYmRldiwgUkVRX09QX1pPTkVfUkVTRVQsXG4tLVxuZnMvYnRyZnMvenN0ZC5jPTI4NT1zdHJ1Y3QgbGlzdF9oZWFkICp6c3RkX2dldF93b3Jrc3BhY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGludCBsZXZlbClcbi0tXG5mcy9idHJmcy96c3RkLmMtMzAxLVxuZnMvYnRyZnMvenN0ZC5jOjMwMjpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvenN0ZC5jLTMwMy1cdHdzID0genN0ZF9hbGxvY193b3Jrc3BhY2UoZnNfaW5mbywgbGV2ZWwpO1xuLS1cbmZzL2NhY2hlZmlsZXMvaW8uYz03NT1zdGF0aWMgaW50IGNhY2hlZmlsZXNfcmVhZChzdHJ1Y3QgbmV0ZnNfY2FjaGVfcmVzb3VyY2VzICpjcmVzLFxuLS1cbmZzL2NhY2hlZmlsZXMvaW8uYy0xNTctXHR0cmFjZV9jYWNoZWZpbGVzX3JlYWQob2JqZWN0LCBmaWxlX2lub2RlKGZpbGUpLCBraS1cdTAwM2Vpb2NiLmtpX3BvcywgbGVuIC0gc2tpcHBlZCk7XG5mcy9jYWNoZWZpbGVzL2lvLmM6MTU4Olx0b2xkX25vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2NhY2hlZmlsZXMvaW8uYy0xNTktXHRyZXQgPSBjYWNoZWZpbGVzX2luamVjdF9yZWFkX2Vycm9yKCk7XG4tLVxuZnMvY2FjaGVmaWxlcy9pby5jPTI4MT1pbnQgX19jYWNoZWZpbGVzX3dyaXRlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuLS1cbmZzL2NhY2hlZmlsZXMvaW8uYy0zMjgtXHR0cmFjZV9jYWNoZWZpbGVzX3dyaXRlKG9iamVjdCwgZmlsZV9pbm9kZShmaWxlKSwga2ktXHUwMDNlaW9jYi5raV9wb3MsIGxlbik7XG5mcy9jYWNoZWZpbGVzL2lvLmM6MzI5Olx0b2xkX25vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2NhY2hlZmlsZXMvaW8uYy0zMzAtXHRyZXQgPSBjYWNoZWZpbGVzX2luamVjdF93cml0ZV9lcnJvcigpO1xuLS1cbmZzL2NlcGgvbWRzX2NsaWVudC5jPTQwMTE9c3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5KHN0cnVjdCBjZXBoX21kc19zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3QgY2VwaF9tc2cgKm1zZylcbi0tXG5mcy9jZXBoL21kc19jbGllbnQuYy00MTY4LVx0ICovXG5mcy9jZXBoL21kc19jbGllbnQuYzo0MTY5Olx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvY2VwaC9tZHNfY2xpZW50LmMtNDE3MC1cbi0tXG5mcy9leHQ0L2V4dDQuaD0xODg1PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfd3JpdGVwYWdlc19kb3duX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODg3LVx0cGVyY3B1X2Rvd25fcmVhZChcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX3dyaXRlcGFnZXNfcndzZW0pO1xuZnMvZXh0NC9leHQ0Lmg6MTg4ODpcdHJldHVybiBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2V4dDQvZXh0NC5oLTE4ODktfVxuLS1cbmZzL2V4dDQvZXh0NC5oPTE4OTc9c3RhdGljIGlubGluZSBpbnQgZXh0NF93cml0ZXBhZ2VzX2Rvd25fd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODk5LVx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc193cml0ZXBhZ2VzX3J3c2VtKTtcbmZzL2V4dDQvZXh0NC5oOjE5MDA6XHRyZXR1cm4gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9leHQ0L2V4dDQuaC0xOTAxLX1cbi0tXG5mcy9leHQ0L2V4dDQuaD0xOTA5PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfZmNfbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvZXh0NC5oLTE5MTEtXHRtdXRleF9sb2NrKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZmNfbG9jayk7XG5mcy9leHQ0L2V4dDQuaDoxOTEyOlx0cmV0dXJuIG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvZXh0NC9leHQ0LmgtMTkxMy19XG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuYz0zMz1zdGF0aWMgaGFuZGxlX3QgKmV4dDRfZ2V0X25vam91cm5hbCh2b2lkKVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmMtNDctXHRcdCAqL1xuZnMvZXh0NC9leHQ0X2piZDIuYzo0ODpcdFx0aGFuZGxlLVx1MDAzZXNhdmVkX2FsbG9jX2NvbnRleHQgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2V4dDQvZXh0NF9qYmQyLmMtNDktXHRcdGN1cnJlbnQtXHUwMDNlam91cm5hbF9pbmZvID0gaGFuZGxlO1xuLS1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYz02MD1zdGF0aWMgaW50IG1leHRfZm9saW9fZG91YmxlX2xvY2soc3RydWN0IGlub2RlICppbm9kZTEsIHN0cnVjdCBpbm9kZSAqaW5vZGUyLFxuLS1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYy03Ny1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYzo3ODpcdGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtNzktXHRmZ3BfZmxhZ3MgfD0gZmdmX3NldF9vcmRlcihsZW4pO1xuLS1cbmZzL2YyZnMvZjJmcy5oPTMwNDc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmYyZnNfZ3JhYl9jYWNoZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9mMmZzL2YyZnMuaC0zMDcwLVxuZnMvZjJmcy9mMmZzLmg6MzA3MTpcdGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9mMmZzL2YyZnMuaC0zMDcyLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBGR1BfV1JJVEVCRUdJTixcbi0tXG5mcy9mMmZzL3NlZ21lbnQuYz0xOTg3PXN0YXRpYyBpbnQgX19mMmZzX2lzc3VlX2Rpc2NhcmRfem9uZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZjJmcy9zZWdtZW50LmMtMjAyMi1cdFx0XHR0cmFjZV9mMmZzX2lzc3VlX3Jlc2V0X3pvbmUoYmRldiwgYmxrc3RhcnQpO1xuZnMvZjJmcy9zZWdtZW50LmM6MjAyMzpcdFx0XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9mMmZzL3NlZ21lbnQuYy0yMDI0LVx0XHRcdHJldCA9IGJsa2Rldl96b25lX21nbXQoYmRldiwgUkVRX09QX1pPTkVfUkVTRVQsXG4tLVxuZnMvZjJmcy9zZWdtZW50LmM9NTI4NT1zdGF0aWMgaW50IGNoZWNrX3pvbmVfd3JpdGVfcG9pbnRlcihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZjJmcy9zZWdtZW50LmMtNTM0NS1cbmZzL2YyZnMvc2VnbWVudC5jOjUzNDY6XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9mMmZzL3NlZ21lbnQuYy01MzQ3LVx0cmV0ID0gYmxrZGV2X3pvbmVfbWdtdChmZGV2LVx1MDAzZWJkZXYsIFJFUV9PUF9aT05FX0ZJTklTSCxcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTU1Nz1zdGF0aWMgdm9pZCB2aXJ0aW9fZnNfcmVxdWVzdF9kaXNwYXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTU5Mi1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM6NTkzOlx0XHRmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvZnVzZS92aXJ0aW9fZnMuYy01OTQtXHRcdHJldCA9IHZpcnRpb19mc19lbnF1ZXVlX3JlcShmc3ZxLCByZXEsIHRydWUsIEdGUF9LRVJORUwpO1xuLS1cbmZzL2piZDIvam91cm5hbC5jPTE1OT1zdGF0aWMgaW50IGtqb3VybmFsZDIodm9pZCAqYXJnKVxuLS1cbmZzL2piZDIvam91cm5hbC5jLTE4MS1cdCAqL1xuZnMvamJkMi9qb3VybmFsLmM6MTgyOlx0bWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9qYmQyL2pvdXJuYWwuYy0xODMtXG4tLVxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTMxMj1zdGF0aWMgaW50IHN0YXJ0X3RoaXNfaGFuZGxlKGpvdXJuYWxfdCAqam91cm5hbCwgaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtNDQ5LVx0ICovXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6NDUwOlx0aGFuZGxlLVx1MDAzZXNhdmVkX2FsbG9jX2NvbnRleHQgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy00NTEtXHRyZXR1cm4gMDtcbi0tXG5mcy9uYW1laS5jPTY1NDM9aW50IHBhZ2Vfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLCBpbnQgbGVuKVxuLS1cbmZzL25hbWVpLmMtNjU1NC1cdGlmIChub2ZzKVxuZnMvbmFtZWkuYzo2NTU1Olx0XHRmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvbmFtZWkuYy02NTU2LVx0ZXJyID0gYW9wcy1cdTAwM2V3cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCAwLCBsZW4tMSwgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4tLVxuZnMvbmZzL2ZsZXhmaWxlbGF5b3V0L2ZsZXhmaWxlbGF5b3V0LmM9NDQ2PWZmX2xheW91dF9hbGxvY19sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxoLFxuLS1cbmZzL25mcy9mbGV4ZmlsZWxheW91dC9mbGV4ZmlsZWxheW91dC5jLTU5MS1cdFx0XHRlbHNlIHtcbmZzL25mcy9mbGV4ZmlsZWxheW91dC9mbGV4ZmlsZWxheW91dC5jOjU5MjpcdFx0XHRcdHVuc2lnbmVkIGludCBub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXQuYy01OTMtXG4tLVxuZnMvbmZzL25mczRzdGF0ZS5jPTI1NDI9c3RhdGljIHZvaWQgbmZzNF9zdGF0ZV9tYW5hZ2VyKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApXG4tLVxuZnMvbmZzL25mczRzdGF0ZS5jLTI1NTItXHQgKi9cbmZzL25mcy9uZnM0c3RhdGUuYzoyNTUzOlx0bWVtZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL25mcy9uZnM0c3RhdGUuYy0yNTU0LVxuLS1cbmZzL25mcy9uZnM0c3RhdGUuYy0yNjYxLVx0XHRcdFx0ICAgICAgXHUwMDI2Y2xwLVx1MDAzZWNsX3N0YXRlKSkge1xuZnMvbmZzL25mczRzdGF0ZS5jOjI2NjI6XHRcdFx0bWVtZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL25mcy9uZnM0c3RhdGUuYy0yNjYzLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL250ZnMvbGNuYWxsb2MuYz0xODM9c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19jbHVzdGVyX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBzNjQgc3RhcnRfdmNuLFxuLS1cbmZzL250ZnMvbGNuYWxsb2MuYy0yMTctXG5mcy9udGZzL2xjbmFsbG9jLmM6MjE4Olx0bWVtYWxsb2NfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL250ZnMvbGNuYWxsb2MuYy0yMTktXG4tLVxuZnMvbnRmcy9sY25hbGxvYy5jPTg0Mj1zNjQgX19udGZzX2NsdXN0ZXJfZnJlZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBzdGFydF92Y24sIHM2NCBjb3VudCxcbi0tXG5mcy9udGZzL2xjbmFsbG9jLmMtODcwLVx0aWYgKGxpa2VseSghaXNfcm9sbGJhY2spKSB7XG5mcy9udGZzL2xjbmFsbG9jLmM6ODcxOlx0XHRtZW1hbGxvY19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvbnRmcy9sY25hbGxvYy5jLTg3Mi1cdFx0ZG93bl93cml0ZShcdTAwMjZ2b2wtXHUwMDNlbGNuYm1wX2xvY2spO1xuLS1cbmZzL250ZnMvbGNuYWxsb2MuaD0xMjA9c3RhdGljIGlubGluZSBpbnQgbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbi0tXG5mcy9udGZzL2xjbmFsbG9jLmgtMTI1LVxuZnMvbnRmcy9sY25hbGxvYy5oOjEyNjpcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9udGZzL2xjbmFsbG9jLmgtMTI3LVx0ZG93bl93cml0ZShcdTAwMjZ2b2wtXHUwMDNlbGNuYm1wX2xvY2spO1xuLS1cbmZzL250ZnMvbWZ0LmM9MjAxMz1pbnQgbnRmc19tZnRfcmVjb3JkX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBpbnQgbW9kZSxcbi0tXG5mcy9udGZzL21mdC5jLTIwNDMtXG5mcy9udGZzL21mdC5jOjIwNDQ6XHRtZW1hbGxvY19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvbnRmcy9tZnQuYy0yMDQ1LVxuLS1cbmZzL250ZnMvbWZ0LmM9MjUwOT1pbnQgbnRmc19tZnRfcmVjb3JkX2ZyZWUoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL21mdC5jLTI1NjYtXHQvKiBDbGVhciB0aGUgYml0IGluIHRoZSAkTUZULyRCSVRNQVAgY29ycmVzcG9uZGluZyB0byB0aGlzIHJlY29yZC4gKi9cbmZzL250ZnMvbWZ0LmM6MjU2NzpcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9udGZzL21mdC5jLTI1NjgtXHRpZiAoYmFzZV9uaS1cdTAwM2VtZnRfbm8gIT0gRklMRV9NRlQpXG4tLVxuZnMvbnRmcy9tZnQuYy0yNTgyLWJpdG1hcF9yb2xsYmFjazpcbmZzL250ZnMvbWZ0LmM6MjU4MzpcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9udGZzL21mdC5jLTI1ODQtXHRpZiAoYmFzZV9uaS1cdTAwM2VtZnRfbm8gIT0gRklMRV9NRlQpXG4tLVxuZnMvbnRmcy93b2YuYz0xNDc9c3RhdGljIGludCBudGZzX2JkZXZfcmVhZF9mcm9tX3JsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuLS1cbmZzL250ZnMvd29mLmMtMTY1LVxuZnMvbnRmcy93b2YuYzoxNjY6XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9udGZzL3dvZi5jLTE2Ny1cdGRvd25fcmVhZChcdTAwMjZydW5saXN0LVx1MDAzZWxvY2spO1xuLS1cbmZzL250ZnMvd29mLmM9NTQ5PXN0YXRpYyBpbnQgbnRmc193b2ZfZGVjb2RlX2ZvbGlvc19kaXJlY3Qoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsXG4tLVxuZnMvbnRmcy93b2YuYy01NjgtXG5mcy9udGZzL3dvZi5jOjU2OTpcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL250ZnMvd29mLmMtNTcwLVx0YWRkciA9IHZtYXAoZGVzdC5wYWdlcywgZGVzdC5ucl9wYWdlcywgVk1fTUFQLCBQQUdFX0tFUk5FTCk7XG4tLVxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYz0xNTc5PXN0YXRpYyB2b2lkIG8ybmV0X3N0YXJ0X2Nvbm5lY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMTU5NC1cdCAqL1xuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxNTk1Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE1OTYtXHQvKiBpZiB3ZSYjMzk7cmUgZ3JlYXRlciB3ZSBpbml0aWF0ZSB0eCwgb3RoZXJ3aXNlIHdlIGFjY2VwdCAqL1xuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmM9MTg1MD1zdGF0aWMgaW50IG8ybmV0X2FjY2VwdF9vbmUoc3RydWN0IHNvY2tldCAqc29jaywgaW50ICptb3JlKVxuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMTg2Ny1cdCAqL1xuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxODY4Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE4NjktXG4tLVxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmM9NDYyPWludCBvY2ZzMl9nbG9iYWxfd3JpdGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbi0tXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy00NjktXHRkb3duX3dyaXRlKFx1MDAyNmRxb3B0LVx1MDAzZWRxaW9fc2VtKTtcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jOjQ3MDpcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy00NzEtXHRlcnIgPSBvY2ZzMl9xaW5mb19sb2NrKGluZm8sIDEpO1xuLS1cbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jPTYxNz1zdGF0aWMgaW50IG9jZnMyX3N5bmNfZHF1b3RfaGVscGVyKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy02NDEtXHRkb3duX3dyaXRlKFx1MDAyNnNiX2Rxb3B0KHNiKS1cdTAwM2VkcWlvX3NlbSk7XG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo2NDI6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtNjQzLVx0c3RhdHVzID0gb2NmczJfc3luY19kcXVvdChkcXVvdCk7XG4tLVxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmM9NjgzPXN0YXRpYyBpbnQgb2NmczJfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy02OTktXHRkb3duX3dyaXRlKFx1MDAyNnNiX2Rxb3B0KGRxdW90LVx1MDAzZWRxX3NiKS1cdTAwM2VkcWlvX3NlbSk7XG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo3MDA6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtNzAxLVx0c3RhdHVzID0gb2NmczJfbG9jYWxfd3JpdGVfZHF1b3QoZHF1b3QpO1xuLS1cbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jPTkzOT1zdGF0aWMgaW50IG9jZnMyX21hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy05ODAtXHRkb3duX3dyaXRlKFx1MDAyNnNiX2Rxb3B0KHNiKS1cdTAwM2VkcWlvX3NlbSk7XG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo5ODE6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtOTgyLVx0c3RhdHVzID0gb2NmczJfc3luY19kcXVvdChkcXVvdCk7XG4tLVxuZnMvb2NmczIvcXVvdGFfbG9jYWwuYz00NTc9c3RhdGljIGludCBvY2ZzMl9yZWNvdmVyX2xvY2FsX3F1b3RhX2ZpbGUoc3RydWN0IGlub2RlICpscWlub2RlLFxuLS1cbmZzL29jZnMyL3F1b3RhX2xvY2FsLmMtNTIzLVx0XHRcdGRvd25fd3JpdGUoXHUwMDI2c2JfZHFvcHQoc2IpLVx1MDAzZWRxaW9fc2VtKTtcbmZzL29jZnMyL3F1b3RhX2xvY2FsLmM6NTI0Olx0XHRcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9vY2ZzMi9xdW90YV9sb2NhbC5jLTUyNS1cdFx0XHRzcGluX2xvY2soXHUwMDI2ZHF1b3QtXHUwMDNlZHFfZHFiX2xvY2spO1xuLS1cbmZzL3F1b3RhL2RxdW90LmM9NDgwPWludCBkcXVvdF9hY3F1aXJlKHN0cnVjdCBkcXVvdCAqZHF1b3QpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYy00ODYtXHRtdXRleF9sb2NrKFx1MDAyNmRxdW90LVx1MDAzZWRxX2xvY2spO1xuZnMvcXVvdGEvZHF1b3QuYzo0ODc6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvZHF1b3QuYy00ODgtXHRpZiAoIXRlc3RfYml0KERRX1JFQURfQiwgXHUwMDI2ZHF1b3QtXHUwMDNlZHFfZmxhZ3MpKSB7XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz01Mjc9aW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtNTMzLVx0bXV0ZXhfbG9jayhcdTAwMjZkcXVvdC1cdTAwM2VkcV9sb2NrKTtcbmZzL3F1b3RhL2RxdW90LmM6NTM0Olx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3F1b3RhL2RxdW90LmMtNTM1LVx0aWYgKCFjbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCkpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYz01NTM9aW50IGRxdW90X3JlbGVhc2Uoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTU1OS1cdG11dGV4X2xvY2soXHUwMDI2ZHF1b3QtXHUwMDNlZHFfbG9jayk7XG5mcy9xdW90YS9kcXVvdC5jOjU2MDpcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9xdW90YS9kcXVvdC5jLTU2MS1cdC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIG5vdCByYWNpbmcgd2l0aCBzb21lIG90aGVyIGRxZ2V0KCkgKi9cbi0tXG5mcy9xdW90YS9xdW90YV92MS5jPTE1OT1zdGF0aWMgaW50IHYxX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuLS1cbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTY2LVx0ZG93bl9yZWFkKFx1MDAyNmRxb3B0LVx1MDAzZWRxaW9fc2VtKTtcbmZzL3F1b3RhL3F1b3RhX3YxLmM6MTY3Olx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTY4LVx0cmV0ID0gc2ItXHUwMDNlc19vcC1cdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVx1MDAyNmRxYmxrLFxuLS1cbmZzL3F1b3RhL3F1b3RhX3YxLmM9MTg5PXN0YXRpYyBpbnQgdjFfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuLS1cbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTk2LVx0ZG93bl93cml0ZShcdTAwMjZkcW9wdC1cdTAwM2VkcWlvX3NlbSk7XG5mcy9xdW90YS9xdW90YV92MS5jOjE5NzpcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9xdW90YS9xdW90YV92MS5jLTE5OC1cdHJldCA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlcXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKilcdTAwMjZkcWJsayxcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTkwPXN0YXRpYyBpbnQgdjJfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYy0xMDItXHRkb3duX3JlYWQoXHUwMDI2ZHFvcHQtXHUwMDNlZHFpb19zZW0pO1xuZnMvcXVvdGEvcXVvdGFfdjIuYzoxMDM6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0xMDQtXHRyZXQgPSB2Ml9yZWFkX2hlYWRlcihzYiwgdHlwZSwgXHUwMDI2ZHFoZWFkKTtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTE5Nz1zdGF0aWMgaW50IHYyX3dyaXRlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jLTIwNi1cdGRvd25fd3JpdGUoXHUwMDI2ZHFvcHQtXHUwMDNlZHFpb19zZW0pO1xuZnMvcXVvdGEvcXVvdGFfdjIuYzoyMDc6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMDgtXHRzcGluX2xvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTMzNj1zdGF0aWMgaW50IHYyX3JlYWRfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jLTM0Mi1cdGRvd25fcmVhZChcdTAwMjZkcW9wdC1cdTAwM2VkcWlvX3NlbSk7XG5mcy9xdW90YS9xdW90YV92Mi5jOjM0MzpcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9xdW90YS9xdW90YV92Mi5jLTM0NC1cdHJldCA9IHF0cmVlX3JlYWRfZHF1b3QoXG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYz0zNTI9c3RhdGljIGludCB2Ml93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuLS1cbmZzL3F1b3RhL3F1b3RhX3YyLmMtMzcwLVx0fVxuZnMvcXVvdGEvcXVvdGFfdjIuYzozNzE6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0zNzItXHRyZXQgPSBxdHJlZV93cml0ZV9kcXVvdChcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTM4Mz1zdGF0aWMgaW50IHYyX3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jLTM4OS1cdGRvd25fd3JpdGUoXHUwMDI2ZHFvcHQtXHUwMDNlZHFpb19zZW0pO1xuZnMvcXVvdGEvcXVvdGFfdjIuYzozOTA6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0zOTEtXHRyZXQgPSBxdHJlZV9yZWxlYXNlX2RxdW90KHNiX2RxaW5mbyhkcXVvdC1cdTAwM2VkcV9zYiwgZHF1b3QtXHUwMDNlZHFfaWQudHlwZSktXHUwMDNlZHFpX3ByaXYsIGRxdW90KTtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTQwND1zdGF0aWMgaW50IHYyX2dldF9uZXh0X2lkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkICpxaWQpXG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYy00MTAtXHRkb3duX3JlYWQoXHUwMDI2ZHFvcHQtXHUwMDNlZHFpb19zZW0pO1xuZnMvcXVvdGEvcXVvdGFfdjIuYzo0MTE6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy00MTItXHRyZXQgPSBxdHJlZV9nZXRfbmV4dF9pZChzYl9kcWluZm8oc2IsIHFpZC1cdTAwM2V0eXBlKS1cdTAwM2VkcWlfcHJpdiwgcWlkKTtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg9ODQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX3NlcnZlcl9sb2NrKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcilcbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaC04NDUte1xuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oOjg0NjpcdHVuc2lnbmVkIGludCBub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaC04NDctXG4tLVxuZnMvc3F1YXNoZnMvZmlsZS5jPTM5Mj12b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9zcXVhc2hmcy9maWxlLmMtNDAwLVx0aW50IHN0YXJ0X2luZGV4ID0gZm9saW8tXHUwMDNlaW5kZXggXHUwMDI2IH5tYXNrLCBlbmRfaW5kZXggPSBzdGFydF9pbmRleCB8IG1hc2s7XG5mcy9zcXVhc2hmcy9maWxlLmM6NDAxOlx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3NxdWFzaGZzL2ZpbGUuYy00MDItXG4tLVxuZnMveGZzL3NjcnViL3hmaWxlLmM9MTA4PXhmaWxlX2xvYWQoXG4tLVxuZnMveGZzL3NjcnViL3hmaWxlLmMtMTIzLVxuZnMveGZzL3NjcnViL3hmaWxlLmM6MTI0Olx0cGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMvc2NydWIveGZpbGUuYy0xMjUtXHR3aGlsZSAoY291bnQgXHUwMDNlIDApIHtcbi0tXG5mcy94ZnMvc2NydWIveGZpbGUuYz0xNzE9eGZpbGVfc3RvcmUoXG4tLVxuZnMveGZzL3NjcnViL3hmaWxlLmMtMTkzLVxuZnMveGZzL3NjcnViL3hmaWxlLmM6MTk0Olx0cGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMvc2NydWIveGZpbGUuYy0xOTUtXHR3aGlsZSAoY291bnQgXHUwMDNlIDApIHtcbi0tXG5mcy94ZnMvc2NydWIveGZpbGUuYz0yNDc9eGZpbGVfZ2V0X2ZvbGlvKFxuLS1cbmZzL3hmcy9zY3J1Yi94ZmlsZS5jLTI2OS1cbmZzL3hmcy9zY3J1Yi94ZmlsZS5jOjI3MDpcdHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMveGZzL3NjcnViL3hmaWxlLmMtMjcxLVx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgMCwgXHUwMDI2Zm9saW8sXG4tLVxuZnMveGZzL3hmc19hb3BzLmM9MTA3PXhmc19lbmRfaW9lbmRfd3JpdGUoXG4tLVxuZnMveGZzL3hmc19hb3BzLmMtMTIyLVx0ICovXG5mcy94ZnMveGZzX2FvcHMuYzoxMjM6XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3hmcy94ZnNfYW9wcy5jLTEyNC1cbi0tXG5mcy94ZnMveGZzX2FvcHMuYz01Mjk9eGZzX3dyaXRlYmFja19zdWJtaXQoXG4tLVxuZnMveGZzL3hmc19hb3BzLmMtNTQ0LVxuZnMveGZzL3hmc19hb3BzLmM6NTQ1Olx0XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3hmcy94ZnNfYW9wcy5jLTU0Ni1cdFx0ZXJyb3IgPSB4ZnNfcmVmbGlua19jb252ZXJ0X2NvdyhYRlNfSShpb2VuZC1cdTAwM2Vpb19pbm9kZSksXG4tLVxuZnMveGZzL3hmc19kcXVvdC5jPTg0Nj14ZnNfcW1fZHFnZXRfY2FjaGVfaW5zZXJ0KFxuLS1cbmZzL3hmcy94ZnNfZHF1b3QuYy04NTYtXG5mcy94ZnMveGZzX2RxdW90LmM6ODU3Olx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMveGZzL3hmc19kcXVvdC5jLTg1OC1cdG11dGV4X2xvY2soXHUwMDI2cWktXHUwMDNlcWlfdHJlZV9sb2NrKTtcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYz02MDg9eGZzX3pvbmVkX2Rpb193cml0ZV9lbmRfaW8oXG4tLVxuZnMveGZzL3hmc19maWxlLmMtNjI5LVxuZnMveGZzL3hmc19maWxlLmM6NjMwOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMveGZzX2ZpbGUuYy02MzEtXHRlcnJvciA9IHhmc19kaW9fZW5kaW9fc2V0X2lzaXplKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcywgc2l6ZSk7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9NjM4PXhmc19kaW9fd3JpdGVfZW5kX2lvKFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTY3MS1cdCAqL1xuZnMveGZzL3hmc19maWxlLmM6NjcyOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMveGZzX2ZpbGUuYy02NzMtXG4tLVxuZnMveGZzL3hmc19pY2FjaGUuYz0xOTU1PXhmc19pbm9kZWdjX3dvcmtlcihcbi0tXG5mcy94ZnMveGZzX2ljYWNoZS5jLTE5ODMtXHQgKi9cbmZzL3hmcy94ZnNfaWNhY2hlLmM6MTk4NDpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMveGZzL3hmc19pY2FjaGUuYy0xOTg1LVxuLS1cbmZzL3hmcy94ZnNfbG9nX2NpbC5jPTEzNzU9eGxvZ19jaWxfcHVzaF93b3JrKFxuLS1cbmZzL3hmcy94ZnNfbG9nX2NpbC5jLTEzNzcte1xuZnMveGZzL3hmc19sb2dfY2lsLmM6MTM3ODpcdHVuc2lnbmVkIGludFx0XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMveGZzX2xvZ19jaWwuYy0xMzc5LVx0c3RydWN0IHhmc19jaWxfY3R4XHQqY3R4ID1cbi0tXG5mcy94ZnMveGZzX2xvZ19wcml2Lmg9NjM5PXhsb2dfdmFsaWRfbHNuKFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIEZsYWdzIGluIEZpbGUgU3lzdGVtcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZyBzaXR1YXRpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGhvdyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncywgcGFydGljdWxhcmx5IGluIGNvbnRleHRzIHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyB0cmlnZ2VyaW5nIHJlY3Vyc2l2ZSByZWNsYWltIG9yIG90aGVyIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGJlaGF2aW9ycywgYmVjYXVzZSBJIG5lZWQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgbXkgbW9kaWZpY2F0aW9ucyBpbXBhY3QgdGhlIGNvZGUgYmFzZS4KCkZpcnN0IHVwLCBgZXJvZnNgLiBUaGUgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCBmdW5jdGlvbiBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZSB1c2Ugb2YgYHJlYWRhaGVhZF9nZnBfbWFzayhhcykgJmFtcDsgfl9fR0ZQX1JFQ0xBSU1gIGFscmVhZHkgcHJldmVudHMgdGhlIGFsbG9jYXRpb24gZnJvbSBkaXJlY3RseSByZWNsYWltaW5nLCB3aGljaCBpcyBnb29kLiBUaGF0IHdhcyBhIGdvb2Qgc3RhcnQuCgpOZXh0LCBJIGxvb2tlZCBhdCBgZXh0NGAuIFRoZSBmdW5jdGlvbnMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRgIGFuZCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBhcmUgY2FsbGVkIHdpdGhpbiBhIEpCRDIgdHJhbnNhY3Rpb24gaGFuZGxlLiBUaGlzIGlzIGltcG9ydGFudCwgYmVjYXVzZSB3aXRoaW4gdGhhdCBoYW5kbGUgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBpcyBjYWxsZWQgdmlhIGBzdGFydF90aGlzX2hhbmRsZSgpYC4gVGhpcyBtZWFucyB0aGF0IGFsbG9jYXRpb25zIHdpdGhpbiB0aGUgZXh0ZW50IGNvbnZlcnNpb24gcHJvY2VzcyBhcmUgYWxyZWFkeSBndWFyZGVkIGFnYWluc3QgcmVjdXJzaW9uLiBUaGF0JiMzOTtzIGEgcG9pbnQgaW4gdGhlICYjMzQ7c2FmZSYjMzQ7IGNvbHVtbi4KCk1vdmluZyBvbiB0byBgbmZzYCwgSSBub3RpY2VkIHRoYXQgYG5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0YCB1c2VzIGBGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVRgIGFuZCBgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKWAuIEJ1dCB3YWl0LCBpbiB0aGUgZGVlcGVyIGNhbGwsIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCB0aGUgYEZHUF9OT1dBSVRgIGZsYWcgaXMgZXhwbGljaXRseSBoYW5kbGVkLCBjbGVhcmluZyBgR0ZQX0tFUk5FTGAgYW5kIHNldHRpbmcgYEdGUF9OT1dBSVRgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgYEdGUF9OT1dBSVRgIGl0c2VsZiAqZG9lc24mIzM5O3QqIGhhdmUgYF9fR0ZQX0ZTYCBvciBgX19HRlBfRElSRUNUX1JFQ0xBSU1gIHNldCwgc28gd2UgYXJlIGFsc28gc2FmZSBoZXJlLCBhbmQgd2UgY2FuIGJlIHN1cmUgb2YgdGhpcyBiZWhhdmlvci4KCk5vdywgYG50ZnNgLiBUaGUgZnVuY3Rpb24gYF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZWAgaGFzIGNhbGxlcnMgZWl0aGVyIGluc2lkZSBhbiBOVEZTIGxvY2svdHJhbnNhY3Rpb24gd2hlcmUgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBpcyBhY3RpdmUgKm9yKiB1c2VzIGBtYXBwaW5nX2dmcF9tYXNrYC4gV2UgYXJlIGNvdmVyZWQgZWl0aGVyIHdheS4gQW5kIGBudGZzX3dvZl9jb2xsZWN0X2Rlc3RgIHBhc3NlcyBgRkdQX05PV0FJVGAsIHdoaWNoIGNvcnJlY3RseSBzZXRzIGBHRlBfTk9XQUlUYC4KCkxvb2tpbmcgYXQgYHNxdWFzaGZzYCwgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIGV4cGxpY2l0bHkgdXNlcyBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIGFuZCBgbWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnMpYCBhcm91bmQgYSBsb29wLiBFeHBsaWNpdCBpcyBhbHdheXMgZ29vZC4gVGhhdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbnRleHQuCgpGaW5hbGx5LCBpbiBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLCBgZ3JhYl9jYWNoZV9wYWdlX25vd2FpdGAgdXNlcyBgRkdQX05PV0FJVGAsIHNvIGBnZnBgIGJlY29tZXMgYEdGUF9OT1dBSVRgIGFueXdheS4gVGhlIGtleSB0YWtlYXdheSBmcm9tIHRoaXMgc2VlbXMgdG8gYmUgdGhhdCBgRkdQX05PV0FJVGAgaXMgY29ycmVjdGx5IGhhbmRsZWQuCgpUaGUgZmluYWwgcGllY2Ugb2YgdGhpcyBpcyB0aGF0IGBGR1BfTk9GU2Agd2FzIGNvbXBsZXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwhIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgcmVmZXJlbmNlcyB0byBpdC4gSSB3aWxsIHNlYXJjaCB0aGUgY29kZSB0byB2ZXJpZnkgdGhpcyByZW1vdmFsIHdhcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGR1BfTk9GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mMmZzL2RhdGEuYz0zODQ0PXN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZjJmcy9kYXRhLmMtMzkwMi1cdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbmZzL2YyZnMvZGF0YS5jOjM5MDM6XHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCB8IEZHUF9OT0ZTLFxuZnMvZjJmcy9kYXRhLmMtMzkwNC1cdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBTdWRkZW4gSW5zaWdodCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdG8gbG9vayBhdCBgZnMvZjJmcy9kYXRhLmNgIGluIHRoZSBGMkZTIGZpbGUgc3lzdGVtIGNvZGUuLi4gc3BlY2lmaWNhbGx5LCBJIHdvbmRlciB3aHkgYGZzL2YyZnMvZGF0YS5jYCBpcyB1c2luZyB0aGUgYEZHUF9OT0ZTYCBmbGFnPyBUaGF0JiMzOTtzIGFuIHVudXN1YWwgY29udGV4dCwgYW5kIGl0JiMzOTtzIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBzY3J1dGluaXplIGxpbmUgMzkwMCBpbiBgZnMvZjJmcy9kYXRhLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZjJmcy9kYXRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4OTU6XHQjZW5kaWZcbjM4OTY6XHRcbjM4OTc6XHRyZXBlYXQ6XG4zODk4Olx0XHQvKlxuMzg5OTpcdFx0ICogRG8gbm90IHVzZSBGR1BfU1RBQkxFIHRvIGF2b2lkIGRlYWRsb2NrLlxuMzkwMDpcdFx0ICogV2lsbCB3YWl0IHRoYXQgYmVsb3cgd2l0aCBvdXIgSU8gY29udHJvbC5cbjM5MDE6XHRcdCAqL1xuMzkwMjpcdFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxuMzkwMzpcdFx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcbjM5MDQ6XHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuMzkwNTpcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjM5MDY6XHRcdFx0ZXJyID0gUFRSX0VSUihmb2xpbyk7XG4zOTA3Olx0XHRcdGdvdG8gZmFpbDtcbjM5MDg6XHRcdH1cbjM5MDk6XHRcbjM5MTA6XHRcdC8qIFRPRE86IGNsdXN0ZXIgY2FuIGJlIGNvbXByZXNzZWQgZHVlIHRvIHJhY2Ugd2l0aCAud3JpdGVwYWdlICovXG4zOTExOlx0XG4zOTEyOlx0XHQqZm9saW9wID0gZm9saW87XG4zOTEzOlx0XG4zOTE0Olx0XHRpZiAoZjJmc19pc19hdG9taWNfZmlsZShpbm9kZSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNzMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBGMkZTIENvZGViYXNlIC0gQSBRdWljayBEZXRvdXIqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBkZWVwIGluIGBmcy9mMmZzL2RhdGEuY2AgYW5kIEkmIzM5O20gc2VlaW5nIGBGR1BfTk9GU2AgYmVpbmcgdXNlZC4uLiBpbnRlcmVzdGluZy4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFzaGVzIHRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgYnlwYXNzaW5nIHRoZSBmaWxlIHN5c3RlbS4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbiBjYWxsIG1lbnRpb25lZCBpcyBgZjJmc19maWxlbWFwX2dldF9mb2xpb2AuIExldCBtZSBqdW1wIG92ZXIgdG8gYGZzL2YyZnMvZjJmcy5oYCByaWdodCBub3cuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvYCBoYW5kbGVzIGRhdGEgcmV0cmlldmFsIGFuZCB3aGF0IGNvbnN0cmFpbnRzIGFyZSBpbiBwbGFjZSB3aXRoIGBGR1BfTk9GU2AuIEl0JiMzOTtzIGEgcXVpY2sgcmFiYml0IGhvbGUgYnV0IG5lY2Vzc2FyeSB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2YyZnMvY29tcHJlc3MuYz0xMDg4PXN0YXRpYyBpbnQgcHJlcGFyZV9jb21wcmVzc19vdmVyd3JpdGUoc3RydWN0IGNvbXByZXNzX2N0eCAqY2MsXG4tLVxuZnMvZjJmcy9jb21wcmVzcy5jLTExMDktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjYy1cdTAwM2VjbHVzdGVyX3NpemU7IGkmIzQzOyYjNDM7KSB7XG5mcy9mMmZzL2NvbXByZXNzLmM6MTExMDpcdFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIHN0YXJ0X2lkeCAmIzQzOyBpLFxuZnMvZjJmcy9jb21wcmVzcy5jLTExMTEtXHRcdFx0XHRmZ3BfZmxhZywgR0ZQX05PRlMpO1xuLS1cbmZzL2YyZnMvY29tcHJlc3MuYz0xOTU0PWJvb2wgZjJmc19sb2FkX2NvbXByZXNzZWRfZm9saW8oc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2YyZnMvY29tcHJlc3MuYy0xOTYyLVxuZnMvZjJmcy9jb21wcmVzcy5jOjE5NjM6XHRjZm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKENPTVBSRVNTX01BUFBJTkcoc2JpKSxcbmZzL2YyZnMvY29tcHJlc3MuYy0xOTY0LVx0XHRcdFx0YmxrYWRkciwgRkdQX0xPQ0sgfCBGR1BfTk9XQUlULCBHRlBfTk9GUyk7XG4tLVxuZnMvZjJmcy9kYXRhLmM9MTM2MT1zdHJ1Y3QgZm9saW8gKmYyZnNfZmluZF9kYXRhX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxuZnMvZjJmcy9kYXRhLmMtMTM2Ni1cbmZzL2YyZnMvZGF0YS5jOjEzNjc6XHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsIEZHUF9BQ0NFU1NFRCwgMCk7XG5mcy9mMmZzL2RhdGEuYy0xMzY4LVx0aWYgKElTX0VSUihmb2xpbykpXG4tLVxuZnMvZjJmcy9kYXRhLmM9Mzg0ND1zdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmZzL2YyZnMvZGF0YS5jLTM5MDEtXHQgKi9cbmZzL2YyZnMvZGF0YS5jOjM5MDI6XHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG5mcy9mMmZzL2RhdGEuYy0zOTAzLVx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcbi0tXG5mcy9mMmZzL2YyZnMuaD0zMDQ3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmMmZzX2dyYWJfY2FjaGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZjJmcy9mMmZzLmgtMzA3OC1cbmZzL2YyZnMvZjJmcy5oOjMwNzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmYyZnNfZmlsZW1hcF9nZXRfZm9saW8oXG5mcy9mMmZzL2YyZnMuaC0zMDgwLVx0XHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsXG4tLVxuZnMvZjJmcy9nYy5jPTEyMjA9c3RhdGljIGludCByYV9kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpXG4tLVxuZnMvZjJmcy9nYy5jLTEyOTMtXG5mcy9mMmZzL2djLmM6MTI5NDpcdGVmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8oTUVUQV9NQVBQSU5HKHNiaSksIGRuLmRhdGFfYmxrYWRkcixcbmZzL2YyZnMvZ2MuYy0xMjk1LVx0XHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCwgR0ZQX05PRlMpO1xuLS1cbmZzL2YyZnMvZ2MuYz0xMzMyPXN0YXRpYyBpbnQgbW92ZV9kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJsb2NrX3QgYmlkeCxcbi0tXG5mcy9mMmZzL2djLmMtMTQ1Ni1cbmZzL2YyZnMvZ2MuYzoxNDU3Olx0ZWZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhNRVRBX01BUFBJTkcoZmlvLnNiaSksIG5ld2FkZHIsXG5mcy9mMmZzL2djLmMtMTQ1OC1cdFx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQsIEdGUF9OT0ZTKTtcbi0tXG5mcy9mMmZzL25vZGUuYz0xNjUzPXN0YXRpYyB2b2lkIGZsdXNoX2lubGluZV9kYXRhKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgbmlkX3QgaW5vKVxuLS1cbmZzL2YyZnMvbm9kZS5jLTE2NjMtXG5mcy9mMmZzL25vZGUuYzoxNjY0Olx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKGlub2RlLVx1MDAzZWlfbWFwcGluZywgMCxcbmZzL2YyZnMvbm9kZS5jLTE2NjUtXHRcdFx0XHRcdEZHUF9MT0NLfEZHUF9OT1dBSVQsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gZjJmc19maWxlbWFwX2dldF9mb2xpbyoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGYyZnNfZmlsZW1hcF9nZXRfZm9saW9gLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2YyZnMvZjJmcy5oYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBmb2xpby1iYXNlZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGYyZnMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyByb2xlIGluIG1hcHBpbmcgZmlsZSBkYXRhIHRvIGZvbGlvcywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGVmZmljaWVudCBJL08sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBGMkZTJiMzOTtzIGRlc2lnbiBmb3IgZmxhc2ggbWVtb3J5LiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgcGFnZSBjYWNoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIGZvbGlvIEFQSSwgYW5kIGhvdyBmMmZzIGhhbmRsZXMgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gYW5kIGFsbG9jYXRpb24gd2l0aGluIGl0cyBibG9jay1vcmllbnRlZCBzdHJ1Y3R1cmUuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgbG9ja2luZyBzZW1hbnRpY3MgaW52b2x2ZWQsIGFuZCBob3cgdGhhdCBpbXBhY3RzIGNvbmN1cnJlbmN5LiBMZXQmIzM5O3Mgc2VlIGhvdyBgZjJmc19maWxlbWFwX2dldF9mb2xpb2AgaGFuZGxlcyB0aGUgZGV0YWlscywgc3VjaCBhcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZjJmcy9mMmZzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwNzU6XHRcbjMwNzY6XHRcdHJldHVybiBmb2xpbztcbjMwNzc6XHR9XG4zMDc4Olx0XG4zMDc5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmYyZnNfZmlsZW1hcF9nZXRfZm9saW8oXG4zMDgwOlx0XHRcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCxcbjMwODE6XHRcdFx0XHRcdGZnZl90IGZncF9mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXG4zMDgyOlx0e1xuMzA4MzpcdFx0aWYgKHRpbWVfdG9faW5qZWN0KEYyRlNfTV9TQihtYXBwaW5nKSwgRkFVTFRfUEFHRV9HRVQpKVxuMzA4NDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjMwODU6XHRcbjMwODY6XHRcdHJldHVybiBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsIGdmcF9tYXNrKTtcbjMwODc6XHR9XG4zMDg4Olx0XG4zMDg5Olx0c3RhdGljIGlubGluZSB2b2lkIGYyZnNfZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgdW5sb2NrKVxuMzA5MDpcdHtcbjMwOTE6XHRcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4zMDkyOlx0XHRcdHJldHVybjtcbjMwOTM6XHRcbjMwOTQ6XHRcdGlmICh1bmxvY2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBGMkZTIENvbXBpbGF0aW9uIElzc3VlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBmZWVscyBvZmYuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzLiBJIHdhcyBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgYW5kIG5vdGljZWQgc29tZSBjaGFuZ2VzIHRvIHRoZSBgZmdmX3RgIGZsYWdzLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGBGR1BfTk9GU2AuIExldCBtZSBxdWlja2x5IGNvbXBhcmUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXI6CgpgYGBjCi0jZGVmaW5lIEZHUF9OT0ZTCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMCkKLSNkZWZpbmUgRkdQX05PV0FJVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMjApCi0jZGVmaW5lIEZHUF9GT1JfTU1BUAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApCi0jZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKQotI2RlZmluZSBGR1BfRE9OVENBQ0hFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMCkKJiM0MzsjZGVmaW5lIEZHUF9OT1dBSVQJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKQomIzQzOyNkZWZpbmUgRkdQX0ZPUl9NTUFQCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMCkKJiM0MzsjZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKQomIzQzOyNkZWZpbmUgRkdQX0RPTlRDQUNIRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApCmBgYAoKTm93LCB0aGUgY29uY2VybiBpcyB0aGF0IGlmIGEgZmlsZSBsaWtlIGBmMmZzL2RhdGEuY2AgKndhc24mIzM5O3QqIHVwZGF0ZWQgd2l0aCB0aGlzIHBhdGNoLCB0aGVyZSBjb3VsZCBiZSBhIGNvbXBpbGF0aW9uIGlzc3VlLiBNYXliZSBpdCYjMzk7cyBhIGNvbmZsaWN0IG9yIHRoZXJlJiMzOTtzIGluLXRyZWUgY29kZSB0aGF0IHN0aWxsIHJlbGllcyBvbiBgRkdQX05PRlNgIGJ1dCBpc24mIzM5O3QgZGVmaW5lZCBhbnltb3JlLiBEb2VzIHRoaXMgY29kZSBzdGlsbCBjb21waWxlPyBUaGlzIGlzIGEgcHJvYmxlbSEgTGV0IG1lIGRvdWJsZS1jaGVjayBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVwLCBgRkdQX05PRlNgIGlzIGdvbmUuIEJ1dCB3YWl0LCBJJiMzOTttIHN1cmUgSSBzYXcgYEZHUF9OT0ZTYCBpbiBgZnMvZjJmcy9kYXRhLmM6MzkwM2Agd2hlbiBJIHJhbiBgZ3JlcHBlcmAgdGhlIG90aGVyIGRheT8KClRoaXMgZG9lc24mIzM5O3QgbWFrZSBhbnkgc2Vuc2UuIFdoeSB3b3VsZCBgZ3JlcHBlcmAgcGljayB0aGF0IHVwPyBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBmcy9mMmZzL2RhdGEuY2AgaXMgYWN0dWFsbHkgdXNpbmcgYEZHUF9OT0ZTYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZjJmcy9kYXRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5MDA6XHRcdCAqIFdpbGwgd2FpdCB0aGF0IGJlbG93IHdpdGggb3VyIElPIGNvbnRyb2wuXG4zOTAxOlx0XHQgKi9cbjM5MDI6XHRcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbjM5MDM6XHRcdFx0XHRcdEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMsXG4zOTA0Olx0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbjM5MDU6XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4zOTA2Olx0XHRcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xuMzkwNzpcdFx0XHRnb3RvIGZhaWw7XG4zOTA4Olx0XHR9XG4zOTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgZXhwZXJpZW5jaW5nIGl0OgoKKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgRjJGUyBDb21waWxhdGlvbiBGbGFnIElzc3VlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoZSBzeXN0ZW0mIzM5O3MgdGVsbGluZyBtZSBgRkdQX05PRlNgIGlzIHVuZGVmaW5lZCB3aGVuIHdlJiMzOTtyZSBjb21waWxpbmcgZm9yIEYyRlMuIFRoYXQmIzM5O3MuLi4gdW5leHBlY3RlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHNlZW1zIG9mZiDigJMgdGhpcyBzaG91bGQgYmUgZGVmaW5lZCBhcyBhIGNvbnNlcXVlbmNlIG9mIEYyRlMgY29tcGlsYXRpb24uIEkmIzM5O20gZ2V0dGluZyBhIGJhZCBmZWVsaW5nIGFib3V0IHRoaXMsIGlmIGBGR1BfTk9GU2AgaXMgdW5kZWZpbmVkIHRoZW4gdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGhlcmUuIFRoZSBkZWZpbml0aW9uIGlzIGNsZWFybHkgdXNlZCBkdXJpbmcgRjJGUyBjb21waWxhdGlvbi4KCldhaXQgYSBtaW51dGUsIGJlZm9yZSBJIHN0YXJ0IHJpcHBpbmcgdGhpbmdzIGFwYXJ0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhpcyBpc24mIzM5O3QgZGVmaW5lZCAqc29tZXdoZXJlKiBlbHNlIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0aGF0IEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHRoaW5raW5nIG9mLiBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIHZlcmlmeSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgZGVmaW5lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNydWNpYWwgaW5jbHVkZSBvciBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCYjMzk7cyBvdmVycmlkaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gSSBuZWVkIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBjb21waWxlciBkaXJlY3RpdmVzLiBHb3R0YSBiZSB0aG9yb3VnaC4gVGhlcmUmIzM5O3MgcHJvYmFibHkgYSBsb2dpY2FsIGV4cGxhbmF0aW9uIGhlcmU7IGl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2YgZmluZGluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lXFxzJiM0MztGR1BfTk9GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTY0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjc1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGBGR1BfTk9GU2AgaXMgdW5kZWZpbmVkLCB0aGF0JiMzOTtzIHdlaXJkLiAgTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29udGV4dC4gIEl0IHRvdWNoZXMgYSBidW5jaCBvZiBwbGFjZXM6IGBlcm9mc2AsIGBleHQ0YCwgYG5mc2AsIGBudGZzYCwgYHNxdWFzaGZzYCwgcGx1cyBzb21lIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgY2FjaGUgaGVhZGVycy4gIElzIHRoaXMganVzdCByZWZhY3RvcmluZywgb3IgaXMgdGhlcmUgZnVuY3Rpb25hbCBzdHVmZiBoZXJlIHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byBmb2xsb3cgdGhlIHJ1bGVzLCB0aG91Z2g6CgpUaGUgcHJvbXB0IHJlbWluZHMgbWUgYWJvdXQgdGhlIGNyaXRlcmlhLCBhbmQgSSBuZWVkIHRvIGJlICpyZWFsbHkqIGNhcmVmdWwuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0JiMzOTtzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgaG93IHRoaW5ncyB3b3JrLCB1bnJlYWNoYWJsZSBjb2RlLCBvciB0ZWFyZG93biBjYWxsYmFja3MuICBJdCYjMzk7cyBgV29ydGhGdXp6aW5nPXRydWVgIGlmIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLgoKSG1tLCB0aGlzICpkb2VzKiBtb2RpZnkgY29yZSBrZXJuZWwgbG9naWMuIEkgc2VlIGNoYW5nZXMgaW4gYG1tL2ZpbGVtYXAuY2AsIGFuZCBpbiBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLiBJJiMzOTttIHJlbW92aW5nIHRoZSBgRkdQX05PRlNgIGFuZCBjaGFuZ2luZyBob3cgdGhlIGBHRlBgIGZsYWdzIGFyZSBoYW5kbGVkLiBJIHNlZSBtYWNyb3MgYmVpbmcgc2hpZnRlZCBpbiB2YWx1ZXMuIEluIHNxdWFzaGZzLCBpdCBsb29rcyBsaWtlIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgYW5kIGBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKWAgYXJlIGJlaW5nIGFkZGVkLiBUaGlzIGxvb2tzIGxpa2UgaXQmIzM5O3MgY2hhbmdpbmcgaG93IG1lbW9yeSBhbGxvY2F0aW9uIGlzIHNjb3BlZCBhbmQgdGhlIGJlaGF2aW9yIG9mIEdGUCBmbGFncy4gSXQmIzM5O3MgbW9kaWZ5aW5nIG1lbW9yeSBhbGxvY2F0aW9uISBTbywgaXMgdGhpcyAqanVzdCogaW50ZXJuYWwgY2xlYW51cCwgb3IgaXMgaXQgZnVuZGFtZW50YWxseSBhbHRlcmluZyBleGVjdXRpb24gZmxvdz8KCkxldCYjMzk7cyBicmVhayBpdCBkb3duOiBJcyB0aGlzIHBhdGNoIGFsdGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGluIHBsYWNlcyBsaWtlIGBudGZzX3dvZl9jb2xsZWN0X2Rlc3RgLCBvciBpbnRyb2R1Y2luZyBgbWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmVgIGluIGEga2V5IGZ1bmN0aW9uIGxpa2UgYHNxdWFzaGZzX2NvcHlfY2FjaGVgPyBBYnNvbHV0ZWx5ISBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6IGJlY2F1c2UgdGhpcyBpcyByZWFjaGFibGUuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgbm9uZSBvZiB0aGUgNiBleGNsdXNpb24gY2F0ZWdvcmllcy4gMS4gTm8sIGl0JiMzOTtzIG1vZGlmeWluZyBDIGNvZGUuIDIuIE5vLCBub3QganVzdCBsb2dnaW5nLiAzLiBObywgbm90IGp1c3QgbWFjcm9zOiBJJiMzOTttIGVsaW1pbmF0aW5nIGBGR1BfTk9GU2AgaW4gbWVtb3J5IGFsbG9jYXRpb24gQVBJcywgaXQmIzM5O3MgbW9yZSB0aGFuIGEgY29uc3RhbnQgY2hhbmdlLiA0LiBObywgdGhpcyBjb2RlICppcyogcmVhY2hhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudC4gNS4gTm9wZSwgbm90IFBDSS9HUFUvU21hcnROSUMgZHJpdmVycy4gNi4gTm9wZSwgbm90IHRlYXJkb3duIGNhbGxiYWNrcy4KCk9rYXksIGxldCYjMzk7cyBwbGF5IGRldmlsJiMzOTtzIGFkdm9jYXRlOiBJcyB0aGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIHRvIGNsZWFuIHVwIHRoZSBgRkdQX05PRlNgIGZsYWcgYWNyb3NzIHBhZ2VjYWNoZSBhbmQgY2FsbGVycywgcmVwbGFjaW5nIGl0IHdpdGggc2NvcGVkIGFsbG9jYXRvcnMsIGFuZCBub3QgcmVhbGx5IGNoYW5naW5nIGhvdyB0aGUga2VybmVsIHdvcmtzPyBPciBpcyBpdCBhIGZ1bmRhbWVudGFsIG1vZGlmaWNhdGlvbiB0byBwYWdlIGNhY2hlIGZvbGlvIGZsYWdzLCBhbmQgcmVjbGFpbT8KCkxvb2tpbmcgYXQgaXQgY2xvc2VseSwgdGhpcyBpc24mIzM5O3QganVzdCBhYm91dCByZW1vdmluZyB0aGUgZmxhZzsgaXQmIzM5O3MgYWJvdXQgYWx0ZXJpbmcgaG93IEdGUCBmbGFncyBhbmQgYWxsb2NhdGlvbiBzY29wZXMgd29yayB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAqYW5kKiB0aGUgZmlsZXN5c3RlbXMgdGhhdCB1c2UgaXQuIEluIGBudGZzX3dvZl9jb2xsZWN0X2Rlc3RgLCBub3cgd2UmIzM5O3JlIHVzaW5nIHRoZSBgbWFwcGluZ19nZnBfbWFzaygpYCBhcmd1bWVudCwgaW5zdGVhZCBvZiBgR0ZQX05PRlNgLiBJbiBzcXVhc2hmcywgdGhlIGNvZGUgaXMgdXNpbmcgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBhbmQgYG1lbWFsbG9jX25vZnNfcmVzdG9yZSgpYCBub3cuIFRoZSB2YWx1ZXMgb2YgZmxhZ3MgbGlrZSBgRkdQX05PV0FJVGAgaGF2ZSBjaGFuZ2VkIQoKVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpb24gaXMgc3RyaWN0OiBpZiBJIG1vZGlmeSBjb3JlIGxvZ2ljLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nISBTcGVjaWZpY2FsbHksIGlmIEkgbW9kaWZ5IE1NIGNvZGUgYW5kIEZpbGVzeXN0ZW0gY29kZSwgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gUmVjbGFpbSBiZWhhdmlvciBpcyBjaGFuZ2luZywgYW5kIHRoYXQmIzM5O3MgY3JpdGljYWwgaW4gbG9ja2RlcCBhbmQgZGVhZGxvY2sgcHJldmVudGlvbi4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSBjb25maWcgc3ltYm9scy4gYEVST0ZTX0ZTYCwgYEVYVDRfRlNgLCBgTkZTX0ZTYCwgYE5URlNfRlNgLCBgU1FVQVNIRlNgIGFyZSByZWxldmFudC4gVGhlbiwgdGhlIGNvcmUgTU0gY29kZSBpcyBhbHdheXMgZW5hYmxlZCBvciBhIHN0YW5kYXJkIGNvbmZpZy4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIGJ1dCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgSSBoYXZlIG15IGFuc3dlciEKClRoaXMgY2xlYXJseSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGluY2x1ZGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMuIEl0JiMzOTtzIG5vdCAqanVzdCogY29zbWV0aWMgb3IgdW5yZWFjaGFibGUgY29kZS4gSXQmIzM5O3MgYWJvdXQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIHJlY2xhaW1lZCwgYW5kIHRoYXQgKmFic29sdXRlbHkqIG1ha2VzIHRoaXMgd29ydGggZnV6emluZywgcGFydGljdWxhcmx5IHdpdGggbG9ja2RlcCBhbmQgbWVtb3J5IHByZXNzdXJlLiBUaGVyZWZvcmUsIFdvcnRoRnV6emluZz10cnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVJPRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9LY29uZmlnLTItXG5mcy9lcm9mcy9LY29uZmlnOjM6Y29uZmlnIEVST0ZTX0ZTXG5mcy9lcm9mcy9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTQ5LVxuZnMvZXJvZnMvS2NvbmZpZzo1MDpjb25maWcgRVJPRlNfRlNfREVCVUdcbmZzL2Vyb2ZzL0tjb25maWctNTEtXHRib29sIFwmIzM0O0VST0ZTIGRlYnVnZ2luZyBmZWF0dXJlXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy01OS1cbmZzL2Vyb2ZzL0tjb25maWc6NjA6Y29uZmlnIEVST0ZTX0ZTX1hBVFRSXG5mcy9lcm9mcy9LY29uZmlnLTYxLVx0Ym9vbCBcJiMzNDtFUk9GUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy03MC1cbmZzL2Vyb2ZzL0tjb25maWc6NzE6Y29uZmlnIEVST0ZTX0ZTX1BPU0lYX0FDTFxuZnMvZXJvZnMvS2NvbmZpZy03Mi1cdGJvb2wgXCYjMzQ7RVJPRlMgQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTg0LVxuZnMvZXJvZnMvS2NvbmZpZzo4NTpjb25maWcgRVJPRlNfRlNfU0VDVVJJVFlcbmZzL2Vyb2ZzL0tjb25maWctODYtXHRib29sIFwmIzM0O0VST0ZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOTctXG5mcy9lcm9mcy9LY29uZmlnOjk4OmNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxuZnMvZXJvZnMvS2NvbmZpZy05OS1cdGJvb2wgXCYjMzQ7RmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMTEtXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXG5mcy9lcm9mcy9LY29uZmlnLTExMy1cdGJvb2wgXCYjMzQ7RVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXG5mcy9lcm9mcy9LY29uZmlnOjEyMjpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFcbmZzL2Vyb2ZzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtFUk9GUyBMWk1BIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMzMtXG5mcy9lcm9mcy9LY29uZmlnOjEzNDpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFfREVGQVVMVF9NQVhfU1RSRUFNU1xuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXHRpbnQgXCYjMzQ7RVJPRlMgTFpNQSBkZWZhdWx0IG1heGltdW0gZGVjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7IGlmIFNNUFxuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTUwLVxuZnMvZXJvZnMvS2NvbmZpZzoxNTE6Y29uZmlnIEVST0ZTX0ZTX1pJUF9ERUZMQVRFXG5mcy9lcm9mcy9LY29uZmlnLTE1Mi1cdGJvb2wgXCYjMzQ7RVJPRlMgREVGTEFURSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTYxLVxuZnMvZXJvZnMvS2NvbmZpZzoxNjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9aU1REXG5mcy9lcm9mcy9LY29uZmlnLTE2My1cdGJvb2wgXCYjMzQ7RVJPRlMgWnN0YW5kYXJkIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNzItXG5mcy9lcm9mcy9LY29uZmlnOjE3Mzpjb25maWcgRVJPRlNfRlNfWklQX0FDQ0VMXG5mcy9lcm9mcy9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7RVJPRlMgaGFyZHdhcmUgZGVjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xODYtXG5mcy9lcm9mcy9LY29uZmlnOjE4Nzpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEXG5mcy9lcm9mcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7RVJPRlMgcGVyLWNwdSBkZWNvbXByZXNzaW9uIGt0aHJlYWQgd29ya2Vyc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTk1LVxuZnMvZXJvZnMvS2NvbmZpZzoxOTY6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRF9ISVBSSVxuZnMvZXJvZnMvS2NvbmZpZy0xOTctXHRib29sIFwmIzM0O0VST0ZTIGhpZ2ggcHJpb3JpdHkgcGVyLUNQVSBrdGhyZWFkIHdvcmtlcnNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTIwNS1cbmZzL2Vyb2ZzL0tjb25maWc6MjA2OmNvbmZpZyBFUk9GU19GU19QQUdFX0NBQ0hFX1NIQVJFXG5mcy9lcm9mcy9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7RVJPRlMgcGFnZSBjYWNoZSBzaGFyZSBzdXBwb3J0IChleHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjA3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCBpbiBgZnMvZXJvZnMvaW50ZXJuYWwuaGAqKgoKUmlnaHQsIHNvIHRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHVzYWdlIG9mIGBlcm9mc19ncmFiX2ZvbGlvX25vd2FpdGAgd2l0aGluIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgbG9jYXRlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoZSBgZnMvZXJvZnMvaW50ZXJuYWwuaGAgaGVhZGVyIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBlcm9mc19ncmFiX2ZvbGlvX25vd2FpdGAgYWN0dWFsbHkgKmRvZXMqLiBJcyBpdCBpbnZvbHZlZCBpbiBjYWNoZSBtYW5hZ2VtZW50LCBwZXJoYXBzPyBPciBtYXliZSBpdCYjMzk7cyByZWxhdGVkIHRvIG1ldGFkYXRhIGhhbmRsaW5nPwoKT25jZSBJJiMzOTt2ZSBnb3QgdGhhdCBzdHJhaWdodCBpbiBteSBoZWFkLCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGEgY3JpdGljYWwgYXNwZWN0IG9mIHVuZGVyc3RhbmRpbmcgYW55IGZ1bmN0aW9uOiBpdHMgdXNlIGNhc2VzLiBUaGVyZWZvcmUsIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb2RlIGNhbGxzIGBlcm9mc19ncmFiX2ZvbGlvX25vd2FpdGAuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIHRoZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBjb2RlIHRoYXQgbWFrZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3RoZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgb25lLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgRVJPRlMgb3BlcmF0aW9ucyB0aGF0IGhlYXZpbHkgcmVseSBvbiBpdD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvaW50ZXJuYWwuaD0zMjA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZXJvZnNfaW5vZGVfZGF0YWxheW91dCh1bnNpZ25lZCBpbnQgaWZtdClcbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTMyNS0vKiByZWNsYWltaW5nIGlzIG5ldmVyIHRyaWdnZXJlZCB3aGVuIGFsbG9jYXRpbmcgbmV3IGZvbGlvcy4gKi9cbmZzL2Vyb2ZzL2ludGVybmFsLmg6MzI2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICplcm9mc19ncmFiX2ZvbGlvX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXMsXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTMyNy1cdFx0XHRcdFx0XHQgICAgcGdvZmZfdCBpbmRleClcbi0tXG5mcy9lcm9mcy96ZGF0YS5jPTE4MTQ9c3RhdGljIHZvaWQgel9lcm9mc19wY2x1c3Rlcl9yZWFkbW9yZShzdHJ1Y3Qgel9lcm9mc19mcm9udGVuZCAqZixcbi0tXG5mcy9lcm9mcy96ZGF0YS5jLTE4NTAtXG5mcy9lcm9mcy96ZGF0YS5jOjE4NTE6XHRcdGZvbGlvID0gZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXQoZi1cdTAwM2VzaGFyZWRpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGluZGV4KTtcbmZzL2Vyb2ZzL3pkYXRhLmMtMTg1Mi1cdFx0aWYgKCFJU19FUlJfT1JfTlVMTChmb2xpbykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3OTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEVST0ZTIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBgel9lcm9mc19wY2x1c3Rlcl9yZWFkbW9yZWAgaXMgb25seSByZWxldmFudCB3aGVuIEVST0ZTIGlzIGNvbmZpZ3VyZWQgd2l0aCBlaXRoZXIgYEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVgIG9yIGBFUk9GU19GU19aSVBgLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhbmQgaXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBhbmQgaW1wYWN0LiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIEVST0ZTIGFuZCBpdHMgb3B0aW1pemF0aW9ucywgdGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIG5vdyBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZHVsZSBpcyBhY3R1YWxseSBkb2luZy4KClRvIGdldCBhIGJldHRlciBpZGVhIG9mIGhvdyBFUk9GUyBpcyBjb25maWd1cmVkLCBhbmQgd2hldGhlciBpdCBjb3VsZCBwcm92aWRlIGFueSBpbmZvcm1hdGlvbiwgaXQgbG9va3MgbGlrZSBjaGVja2luZyB0aGUgTlRGUyBjb25maWdzIGluIHRoZSBmaWxlIHN5c3RlbSB3b3VsZCBiZSBhIHVzZWZ1bCBzdGVwIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0LiBUaGVyZWZvcmUsIEkgd2lsbCBub3cgZ28gYW5kIGNoZWNrIHRoZSBgZnMvbnRmcy9NYWtlZmlsZWAgYW5kIGBmcy9udGZzL0tjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgTlRGUyBjb25maWd1cmF0aW9ucywgYW5kIHBvc3NpYmx5IHJldmVhbCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVtcGxveWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xuZnMvbnRmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9udGZzL0tjb25maWctMTItXG5mcy9udGZzL0tjb25maWc6MTM6Y29uZmlnIE5URlNfRlNfV09GX0NPTVBSRVNTSU9OXG5mcy9udGZzL0tjb25maWctMTQtXHRib29sIFwmIzM0O05URlMgV2luZG93cyBzeXN0ZW0gY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0yMy1cbmZzL250ZnMvS2NvbmZpZzoyNDpjb25maWcgTlRGU19ERUJVR1xuZnMvbnRmcy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTQ1LVxuZnMvbnRmcy9LY29uZmlnOjQ2OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqUXVpY2sgTlRGUyBDb25maWd1cmF0aW9uIFNjYW4qKgoKUmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRvcCBvZiB0aGUgTlRGUyBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgTlRGU19GU19XT0ZfQ09NUFJFU1NJT05gLiBUaGF0IG9uZSBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdyaXRlLW9uY2UsIGZpbGUtc3lzdGVtLWJhc2VkIGNvbXByZXNzaW9uIGlzIGhhbmRsZWQuIEFuZCBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgYE5URlNfRlNfUldgIGlzIHN0aWxsIGFyb3VuZCwgb3IgaWYgaXQmIzM5O3MgYmVlbiBzdXBlcnNlZGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBCZXN0IHRvIGp1c3QganVtcCBpbnRvIGBmcy9udGZzL0tjb25maWdgIGFuZCB2ZXJpZnkuIE5vdGhpbmcgd29yc2UgdGhhbiBtYWtpbmcgYXNzdW1wdGlvbnMgd2hlbiBhIHF1aWNrIEtjb25maWcgY2hlY2sgd2lsbCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxuICAgODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDExOlx0XHQgIG50ZnMuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5URlNfRlNfV09GX0NPTVBSRVNTSU9OXG4gIDE0Olx0XHRib29sIFwmIzM0O05URlMgV2luZG93cyBzeXN0ZW0gY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIEVuYWJsZSByZWFkIHN1cHBvcnQgZm9yIFdpbmRvd3Mgc3lzdGVtLWNvbXByZXNzZWQgZmlsZXMuXG4gIDE4Olx0XHQgIFdpbmRvd3MgbW9yZSBhZ2dyZXNzaXZlbHkgY29tcHJlc3NlcyBzeXN0ZW0gZmlsZXMgc3VjaCBhcyBiaW5hcmllc1xuICAxOTpcdFx0ICBhbmQgRExMcyB1c2luZyBzeXN0ZW0gY29tcHJlc3Npb24uIEl0IGlzIG9wdGltaXplZCBmb3IgZmlsZXMgdGhhdFxuICAyMDpcdFx0ICBhcmUgcmFyZWx5IG1vZGlmaWVkLlxuICAyMTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBidWlsZHMgdGhlIGRlY29tcHJlc3Npb24gc3VwcG9ydCBpbnRvIHRoZSBOVEZTXG4gIDIyOlx0XHQgIG1vZHVsZS5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTlRGU19ERUJVR1xuICAyNTpcdFx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4gIDI2Olx0XHRkZXBlbmRzIG9uIE5URlNfRlNcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxuICAyOTpcdFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXG4gIDMwOlx0XHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cbiAgMzE6XHRcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXG4gIDMyOlx0XHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXG4gIDMzOlx0XHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxuICAzNDpcdFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXG4gIDM1Olx0XHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XG4gIDM2Olx0XHQgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcbiAgMzc6XHRcdCAgUmVwbGFjaW5nIHRoZSBcJiMzNDsxXCYjMzQ7IHdpdGggXCYjMzQ7MFwmIzM0OyB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxuICAzODpcdFxuICAzOTpcdFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXG4gIDQwOlx0XHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XG4gIDQxOlx0XHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcbiAgNDQ6XHRcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbiAgNDc6XHRcdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDQ5Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDUwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjkzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqU3F1YXNoRlMgQ29uZmlndXJhdGlvbiBIdW50KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc29ydGVkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIFNxdWFzaEZTIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZCBpbiB0aGUgc3lzdGVtLiBUaGUgYGZzL3NxdWFzaGZzL0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhvc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gc3BvdCBmb3IgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyIHdpdGhpbiB0aGUgYnJvYWRlciBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhvc2UgY29uZmlncyB0aG9yb3VnaGx5IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1FVQVNIRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zcXVhc2hmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zcXVhc2hmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zcXVhc2hmcy9LY29uZmlnOjI6Y29uZmlnIFNRVUFTSEZTXG5mcy9zcXVhc2hmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTcXVhc2hGUyA0LjAgLSBTcXVhc2hlZCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZz0yOT1jaG9pY2Vcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTQwLVxuZnMvc3F1YXNoZnMvS2NvbmZpZzo0MTpjb25maWcgU1FVQVNIRlNfRklMRV9DQUNIRVxuZnMvc3F1YXNoZnMvS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7RGVjb21wcmVzcyBmaWxlIGRhdGEgaW50byBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy00Ni1cbmZzL3NxdWFzaGZzL0tjb25maWc6NDc6Y29uZmlnIFNRVUFTSEZTX0ZJTEVfRElSRUNUXG5mcy9zcXVhc2hmcy9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEZWNvbXByZXNzIGZpbGVzIGRpcmVjdGx5IGludG8gdGhlIHBhZ2UgY2FjaGVcJiMzNDtcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnPTU1PWVuZGNob2ljZVxuZnMvc3F1YXNoZnMvS2NvbmZpZy01Ni1cbmZzL3NxdWFzaGZzL0tjb25maWc6NTc6Y29uZmlnIFNRVUFTSEZTX0RFQ09NUF9TSU5HTEVcbmZzL3NxdWFzaGZzL0tjb25maWctNTgtXHRkZXBlbmRzIG9uIFNRVUFTSEZTXG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy02MC1cbmZzL3NxdWFzaGZzL0tjb25maWc6NjE6Y29uZmlnIFNRVUFTSEZTX0RFQ09NUF9NVUxUSVxuZnMvc3F1YXNoZnMvS2NvbmZpZy02Mi1cdGRlcGVuZHMgb24gU1FVQVNIRlNcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTY0LVxuZnMvc3F1YXNoZnMvS2NvbmZpZzo2NTpjb25maWcgU1FVQVNIRlNfREVDT01QX01VTFRJX1BFUkNQVVxuZnMvc3F1YXNoZnMvS2NvbmZpZy02Ni1cdGRlcGVuZHMgb24gU1FVQVNIRlNcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTY4LVxuZnMvc3F1YXNoZnMvS2NvbmZpZzo2OTpjb25maWcgU1FVQVNIRlNfQ0hPSUNFX0RFQ09NUF9CWV9NT1VOVFxuZnMvc3F1YXNoZnMvS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7U2VsZWN0IHRoZSBwYXJhbGxlbCBkZWNvbXByZXNzaW9uIG1vZGUgZHVyaW5nIG1vdW50XCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZz04Mj1jaG9pY2Vcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTkyLVxuZnMvc3F1YXNoZnMvS2NvbmZpZzo5Mzpjb25maWcgU1FVQVNIRlNfQ09NUElMRV9ERUNPTVBfU0lOR0xFXG5mcy9zcXVhc2hmcy9LY29uZmlnLTk0LVx0Ym9vbCBcJiMzNDtTaW5nbGUgdGhyZWFkZWQgY29tcHJlc3Npb25cJiMzNDtcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTEwMC1cbmZzL3NxdWFzaGZzL0tjb25maWc6MTAxOmNvbmZpZyBTUVVBU0hGU19DT01QSUxFX0RFQ09NUF9NVUxUSVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O1VzZSBtdWx0aXBsZSBkZWNvbXByZXNzb3JzIGZvciBwYXJhbGxlbCBJL09cJiMzNDtcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTExNS1cbmZzL3NxdWFzaGZzL0tjb25maWc6MTE2OmNvbmZpZyBTUVVBU0hGU19DT01QSUxFX0RFQ09NUF9NVUxUSV9QRVJDUFVcbmZzL3NxdWFzaGZzL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtVc2UgcGVyY3B1IG11bHRpcGxlIGRlY29tcHJlc3NvcnMgZm9yIHBhcmFsbGVsIEkvT1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWc9MTI3PWVuZGNob2ljZVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMjgtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjEyOTpjb25maWcgU1FVQVNIRlNfTU9VTlRfREVDT01QX1RIUkVBRFNcbmZzL3NxdWFzaGZzL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtBZGQgdGhlIG1vdW50IHBhcmFtZXRlciAmIzM5O3RocmVhZHM9JiMzOTsgZm9yIHNxdWFzaGZzXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNDEtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE0Mjpjb25maWcgU1FVQVNIRlNfWEFUVFJcbmZzL3NxdWFzaGZzL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtTcXVhc2hmcyBYQVRUUiBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNTEtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE1Mjpjb25maWcgU1FVQVNIRlNfQ09NUF9DQUNIRV9GVUxMXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIGZ1bGwgY2FjaGluZyBvZiBjb21wcmVzc2VkIGJsb2Nrc1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWctMTcyLVxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxNzM6Y29uZmlnIFNRVUFTSEZTX1pMSUJcbmZzL3NxdWFzaGZzL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIHN1cHBvcnQgZm9yIFpMSUIgY29tcHJlc3NlZCBmaWxlIHN5c3RlbXNcJiMzNDtcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE4NS1cbmZzL3NxdWFzaGZzL0tjb25maWc6MTg2OmNvbmZpZyBTUVVBU0hGU19MWjRcbmZzL3NxdWFzaGZzL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIHN1cHBvcnQgZm9yIExaNCBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWctMjAwLVxuZnMvc3F1YXNoZnMvS2NvbmZpZzoyMDE6Y29uZmlnIFNRVUFTSEZTX0xaT1xuZnMvc3F1YXNoZnMvS2NvbmZpZy0yMDItXHRib29sIFwmIzM0O0luY2x1ZGUgc3VwcG9ydCBmb3IgTFpPIGNvbXByZXNzZWQgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yMTUtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjIxNjpjb25maWcgU1FVQVNIRlNfWFpcbmZzL3NxdWFzaGZzL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIHN1cHBvcnQgZm9yIFhaIGNvbXByZXNzZWQgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yMzAtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjIzMTpjb25maWcgU1FVQVNIRlNfWlNURFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yMzItXHRib29sIFwmIzM0O0luY2x1ZGUgc3VwcG9ydCBmb3IgWlNURCBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWctMjQ0LVxuZnMvc3F1YXNoZnMvS2NvbmZpZzoyNDU6Y29uZmlnIFNRVUFTSEZTXzRLX0RFVkJMS19TSVpFXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI0Ni1cdGJvb2wgXCYjMzQ7VXNlIDRLIGRldmljZSBibG9jayBzaXplP1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWctMjY2LVxuZnMvc3F1YXNoZnMvS2NvbmZpZzoyNjc6Y29uZmlnIFNRVUFTSEZTX0VNQkVEREVEXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI2OC1cdGJvb2wgXCYjMzQ7QWRkaXRpb25hbCBvcHRpb24gZm9yIG1lbW9yeS1jb25zdHJhaW5lZCBzeXN0ZW1zXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yNzQtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjI3NTpjb25maWcgU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yNzYtXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGZyYWdtZW50cyBjYWNoZWRcJiMzNDsgaWYgU1FVQVNIRlNfRU1CRURERURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5MzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhY3R1YWxseSBlbmFibGluZyB0aGUgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL3NxdWFzaGZzL2ZpbGUuY2AuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIEkmIzM5O20gY2hhc2luZyBkb3duIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgZXNwZWNpYWxseSBvbmUgcmVsYXRlZCB0byBmaWxlIGhhbmRsaW5nLCBpcyBjb250cm9sbGVkIGF0IGJ1aWxkIHRpbWUuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBzY2FuIHRocm91Z2ggdGhlIGNvZGUsIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMg4oCTIHRoZSBgI2lmZGVmYCBvciBzaW1pbGFyIGNvbnN0cnVjdHMg4oCTIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoZSBjb2RlIHV0aWxpemluZyBgc3F1YXNoZnNfY29weV9jYWNoZWAgaXMgYWN0dWFsbHkgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGtlcm5lbCBpbWFnZS4gVGltZSB0byBzZWUgd2hpY2ggY29uZmlnIG9wdGlvbnMgdWx0aW1hdGVseSBkZWNpZGUgaWYgdGhhdCBjb2RlIGdldHMgbGlua2VkIG9yIG5vdC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBtYXliZSBhIHNpbmdsZSBgQ09ORklHX1NRVUFTSEZTXypgIHZhcmlhYmxlLCBvciBwZXJoYXBzIGEgbW9yZSBpbnZvbHZlZCBkZXBlbmRlbmN5IGNoYWluLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcXVhc2hmc19jb3B5X2NhY2hlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc3F1YXNoZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3F1YXNoZnMvZmlsZS5jPTM3ND1zdGF0aWMgYm9vbCBzcXVhc2hmc19maWxsX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9zcXVhc2hmcy9maWxlLmMtMzkxLS8qIENvcHkgZGF0YSBpbnRvIHBhZ2UgY2FjaGUgICovXG5mcy9zcXVhc2hmcy9maWxlLmM6MzkyOnZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvc3F1YXNoZnMvZmlsZS5jLTM5My1cdFx0c3RydWN0IHNxdWFzaGZzX2NhY2hlX2VudHJ5ICpidWZmZXIsIHNpemVfdCBieXRlcyxcbi0tXG5mcy9zcXVhc2hmcy9maWxlLmM9NDM5PXN0YXRpYyBpbnQgc3F1YXNoZnNfcmVhZHBhZ2VfZnJhZ21lbnQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGV4cGVjdGVkKVxuLS1cbmZzL3NxdWFzaGZzL2ZpbGUuYy00NTEtXHRlbHNlXG5mcy9zcXVhc2hmcy9maWxlLmM6NDUyOlx0XHRzcXVhc2hmc19jb3B5X2NhY2hlKGZvbGlvLCBidWZmZXIsIGV4cGVjdGVkLFxuZnMvc3F1YXNoZnMvZmlsZS5jLTQ1My1cdFx0XHRzcXVhc2hmc19pKGlub2RlKS1cdTAwM2VmcmFnbWVudF9vZmZzZXQpO1xuLS1cbmZzL3NxdWFzaGZzL2ZpbGUuYz00NTk9c3RhdGljIGludCBzcXVhc2hmc19yZWFkcGFnZV9zcGFyc2Uoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGV4cGVjdGVkKVxuZnMvc3F1YXNoZnMvZmlsZS5jLTQ2MC17XG5mcy9zcXVhc2hmcy9maWxlLmM6NDYxOlx0c3F1YXNoZnNfY29weV9jYWNoZShmb2xpbywgTlVMTCwgZXhwZWN0ZWQsIDApO1xuZnMvc3F1YXNoZnMvZmlsZS5jLTQ2Mi1cdHJldHVybiAwO1xuLS1cbmZzL3NxdWFzaGZzL2ZpbGVfY2FjaGUuYz0yMT1pbnQgc3F1YXNoZnNfcmVhZHBhZ2VfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbywgdTY0IGJsb2NrLCBpbnQgYnNpemUsIGludCBleHBlY3RlZClcbi0tXG5mcy9zcXVhc2hmcy9maWxlX2NhY2hlLmMtMzEtXHRlbHNlXG5mcy9zcXVhc2hmcy9maWxlX2NhY2hlLmM6MzI6XHRcdHNxdWFzaGZzX2NvcHlfY2FjaGUoZm9saW8sIGJ1ZmZlciwgZXhwZWN0ZWQsIDApO1xuZnMvc3F1YXNoZnMvZmlsZV9jYWNoZS5jLTMzLVxuLS1cbmZzL3NxdWFzaGZzL3NxdWFzaGZzLmg9NzI9ZXh0ZXJuIF9fbGU2NCAqc3F1YXNoZnNfcmVhZF9mcmFnbWVudF9pbmRleF90YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKixcbi0tXG5mcy9zcXVhc2hmcy9zcXVhc2hmcy5oLTc1LS8qIGZpbGUuYyAqL1xuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaDo3Njp2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICosIHN0cnVjdCBzcXVhc2hmc19jYWNoZV9lbnRyeSAqLFxuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaC03Ny1cdFx0c2l6ZV90IGJ5dGVzLCBzaXplX3Qgb2Zmc2V0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBmcy9zcXVhc2hmcy9NYWtlZmlsZWA6CgoqKkFuYWx5emluZyB0aGUgU3F1YXNoZnMgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9zcXVhc2hmcy9NYWtlZmlsZWAuIEdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiBmaWxlIHN5c3RlbXMgYW5kIGJ1aWxkIHByb2Nlc3NlcywgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB3aGF0IEkgZXhwZWN0IHRvIHNlZS4gSSBhbnRpY2lwYXRlIHRoaXMgTWFrZWZpbGUgd2lsbCBtYW5hZ2UgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIHRoZSBTcXVhc2hmcyBrZXJuZWwgbW9kdWxlLCBpdHMgdXRpbGl0aWVzLCBhbmQgcG90ZW50aWFsbHkgc29tZSB0ZXN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5IGVsZW1lbnRzOiB0aGUgbW9kdWxlIG5hbWUgZGVmaW5pdGlvbiwgc291cmNlIGZpbGUgbGlzdHMsIG9iamVjdCBmaWxlIGdlbmVyYXRpb24sIGRlcGVuZGVuY3kgcnVsZXMsIGNvbXBpbGF0aW9uIGZsYWdzLCBsaW5rZXIgb3B0aW9ucywgaW5zdGFsbGF0aW9uIHRhcmdldHMsIGFuZCBhbnkgY3Jvc3MtY29tcGlsYXRpb24gY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbnkgY2xldmVyIHRyaWNrcyBvciBvcHRpbWl6YXRpb25zIHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGJ1aWxkIHN0cnVjdHVyZSwgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIG9yIHNwb3QgYW55IHVudXN1YWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBhbHNvIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgbWFrZSBydWxlcywgb3IgaGF2ZSB0aGV5IGludHJvZHVjZWQgY3VzdG9tIGxvZ2ljPyBGaW5hbGx5LCBJIG5lZWQgdG8gbm90ZSBhbnkgc3BlY2lmaWMgZmxhZ3Mgb3IgdGFyZ2V0cyB0aGF0IEkgY291bGQgdXRpbGl6ZSBmb3IgcXVpY2sgcmVidWlsZHMgb3IgdW5pdCB0ZXN0cyBpbiBteSBzcGVjaWZpYyB1c2UgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zcXVhc2hmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IHNxdWFzaGZzIHJvdXRpbmVzLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfU1FVQVNIRlMpICYjNDM7PSBzcXVhc2hmcy5vXG4gICA3Olx0c3F1YXNoZnMteSAmIzQzOz0gYmxvY2subyBjYWNoZS5vIGRpci5vIGV4cG9ydC5vIGZpbGUubyBmcmFnbWVudC5vIGlkLm8gaW5vZGUub1xuICAgODpcdHNxdWFzaGZzLXkgJiM0Mzs9IG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm8gZGVjb21wcmVzc29yLm8gcGFnZV9hY3Rvci5vXG4gICA5Olx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfRklMRV9DQUNIRSkgJiM0Mzs9IGZpbGVfY2FjaGUub1xuICAxMDpcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0ZJTEVfRElSRUNUKSAmIzQzOz0gZmlsZV9kaXJlY3Qub1xuICAxMTpcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9TSU5HTEUpICYjNDM7PSBkZWNvbXByZXNzb3Jfc2luZ2xlLm9cbiAgMTI6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19ERUNPTVBfTVVMVEkpICYjNDM7PSBkZWNvbXByZXNzb3JfbXVsdGkub1xuICAxMzpcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9NVUxUSV9QRVJDUFUpICYjNDM7PSBkZWNvbXByZXNzb3JfbXVsdGlfcGVyY3B1Lm9cbiAgMTQ6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19YQVRUUikgJiM0Mzs9IHhhdHRyLm8geGF0dHJfaWQub1xuICAxNTpcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0xaNCkgJiM0Mzs9IGx6NF93cmFwcGVyLm9cbiAgMTY6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19MWk8pICYjNDM7PSBsem9fd3JhcHBlci5vXG4gIDE3Olx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfWFopICYjNDM7PSB4el93cmFwcGVyLm9cbiAgMTg6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19aTElCKSAmIzQzOz0gemxpYl93cmFwcGVyLm9cbiAgMTk6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19aU1REKSAmIzQzOz0genN0ZF93cmFwcGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBGaWxlbWFwIGFuZCBGb2xpbyBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBmb2N1cyBzeW1ib2xzIGFuZCBob3cgdGhleSYjMzk7cmUgZGVjbGFyZWQgYW5kIGxpbmtlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY2hhbmdlcyBhbmQgdGhlaXIgaW1wYWN0IG9uIGNlcnRhaW4gZnVuY3Rpb25zLCBuYW1lbHkgYF9fZmlsZW1hcF9nZXRfZm9saW9gIGFuZCBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCByZXNpZGluZyBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGNoZWNrLiBJcyBgX19maWxlbWFwX2dldF9mb2xpb2AgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlY2xhcmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgZnVsbHkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYG1tL2ZpbGVtYXAuY2AgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19maWxlbWFwX2dldF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTg5OT12b2lkICpmaWxlbWFwX2dldF9lbnRyeShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleClcbi0tXG5tbS9maWxlbWFwLmMtMTkzMC0vKipcbm1tL2ZpbGVtYXAuYzoxOTMxOiAqIF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCAtIEZpbmQgYW5kIGdldCBhIHJlZmVyZW5jZSB0byBhIGZvbGlvLlxubW0vZmlsZW1hcC5jLTE5MzItICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzX3NwYWNlIHRvIHNlYXJjaC5cbi0tXG5tbS9maWxlbWFwLmMtMTk0Ni0gKi9cbm1tL2ZpbGVtYXAuYzoxOTQ3OnN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vZmlsZW1hcC5jLTE5NDgtXHRcdHBnb2ZmX3QgaW5kZXgsIGZnZl90IGZncF9mbGFncywgZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXG4tLVxubW0vZmlsZW1hcC5jLTIwNzMtfVxubW0vZmlsZW1hcC5jOjIwNzQ6RVhQT1JUX1NZTUJPTChfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wpO1xubW0vZmlsZW1hcC5jLTIwNzUtXG4tLVxubW0vZmlsZW1hcC5jPTM1NTM9dm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ZpbGVtYXAuYy0zNjA0LVx0XHR9XG5tbS9maWxlbWFwLmM6MzYwNTpcdFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxubW0vZmlsZW1hcC5jLTM2MDYtXHRcdFx0XHRcdCAgRkdQX0NSRUFUfEZHUF9GT1JfTU1BUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGaWxlIFN5c3RlbSBEYXRhIENvcnJ1cHRpb24gRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgZmlsZSBzeXN0ZW0gZGF0YSBjb3JydXB0aW9uIGNvdWxkIGNyZWVwIGluLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGZpbGUgc3lzdGVtcyB0aGF0IGhhbmRsZSBkYXRhIGRpcmVjdGx5LCBpbiBwYXJ0aWN1bGFyIGlubGluZSBkYXRhIGFuZCBjYWNoZSBtYW5hZ2VtZW50LiBJIHN0YXJ0IGJ5IG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZSBleHBvcnRlZCBzeW1ib2wgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAsIGFuZCB0aGUgaW5saW5lIHdyYXBwZXIgYF9fZmlsZW1hcF9nZXRfZm9saW9gIOKAkyB0aGVzZSBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgdmlzaWJsZSBleHRlcm5hbGx5LiBJIGtub3cgdGhvc2UgYXJlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAsIEkgd2FudCB0byBiZSBhd2FyZSBvZiBob3cgdGhleSYjMzk7cmUgdXNlZC4KCk5leHQsIEkgc2VlIGBzcXVhc2hmc19jb3B5X2NhY2hlYCBpbiBgZnMvc3F1YXNoZnMvZmlsZS5jYCBpcyBub24tc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIGV4dGVybmFsbHkgdmlzaWJsZSB3aXRoaW4gdGhhdCBtb2R1bGUuIFNhbWUgd2l0aCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBpbiBgZnMvZXh0NC9pbmxpbmUuY2AuIFRoZXNlIGp1bXAgb3V0IGFzIGZ1bmN0aW9ucyBJIHNob3VsZCBkZWZpbml0ZWx5IHNjcnV0aW5pemUuIEFueSBub24tc3RhdGljIGZ1bmN0aW9uIGNvdWxkIGhhdmUgaXRzIGRhdGEgbWFuaXB1bGF0ZWQgYnkgYW5vdGhlciBtb2R1bGUuCgpUaGVuLCB0aGVyZSYjMzk7cyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBJdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBleHRlcm5hbGx5IHZpc2libGUsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IG1lYW4gaXQmIzM5O3Mgc2FmZS4gSXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBub24tc3RhdGljIGVudHJ5IHBvaW50cyB3aXRoaW4gdGhlIGZpbGUsIG9yIGFueSBleHBvcnRlZCBzeW1ib2xzLCB0aGF0IG1pZ2h0IGNhbGwgaXQsIG9yIG90aGVyd2lzZSBleHBvc2UgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgZnMvZXh0NC9pbmxpbmUuY2AgYW5kIHNwZWNpZmljYWxseSB0cmFjZSB0aGUgY2FsbGVycyBvZiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gdHJpZ2dlciBpdCBmcm9tIG91dHNpZGUgaXRzIGZpbGUgc2NvcGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGFuYWx5c2lzIHRvIHVuY292ZXIgYW55IHN1YnRsZSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmM9NTQ0PWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTcwLVxuZnMvZXh0NC9pbmxpbmUuYzo1NzE6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy01NzItXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz02OTM9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTcyNC1cdFx0XHQvKiBSZXRyeSBpbnNpZGUgKi9cbmZzL2V4dDQvaW5saW5lLmM6NzI1Olx0XHRcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcbmZzL2V4dDQvaW5saW5lLmMtNzI2LVx0XHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz03ODA9aW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNzg1LVx0aWYgKHBvcyAmIzQzOyBsZW4gXHUwMDNlIGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jOjc4NjpcdFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xuZnMvZXh0NC9pbmxpbmUuYy03ODctXHRyZXR1cm4gZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyMTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIElubGluZSBEYXRhIEhhbmRsaW5nKioKCk9rYXksIHNvIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGFgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIHRoZXkgY291bGQgcG90ZW50aWFsbHkgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGVpciBpbW1lZGlhdGUgc2NvcGUsIHdoaWNoIGlzIHJlbGV2YW50IGlmIHdlJiMzOTtyZSBpbnZlc3RpZ2F0aW5nIGhvdyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMgYXBwcm9hY2ggaW5saW5lIGRhdGEuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBjb25zb2xpZGF0ZSBvciBiZXR0ZXIgdW5kZXJzdGFuZCB0aGVzZSBpbXBsZW1lbnRhdGlvbnMuCgpUbyB0aGF0IGVuZCwgSSB0aGluayBhIGxvb2sgYXQgYG50ZnNfd29mX2NvbGxlY3RfZGVzdGAgaW4gYGZzL250ZnMvd29mLmNgIHdvdWxkIGJlIHdvcnRod2hpbGUuIFNlZWluZyBob3cgTlRGUyBoYW5kbGVzIGl0cyBXcml0ZS1Pbmx5LUZpbHRlciAoV09GKSBhbmQgaW5saW5lIGRhdGEgY291bGQgcmV2ZWFsIHBvdGVudGlhbCBpbnNpZ2h0cywgY29tcGFyaXNvbnMsIG9yIGV2ZW4gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIGludmVzdGlnYXRpb24uIEl0IG1pZ2h0IGlsbHVtaW5hdGUgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBtb2R1bGUgaGFzIHRvIG9mZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX3dvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9udGZzLmg9MjA2PWludCBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG5mcy9udGZzL250ZnMuaDoyMDc6dm9pZCBudGZzX3dvZl9mcmVlX3dvcmtzcGFjZXModm9pZCk7XG5mcy9udGZzL250ZnMuaC0yMDgtI2VuZGlmXG4tLVxuZnMvbnRmcy9zdXBlci5jPTI2ODM9c3RhdGljIHZvaWQgX19leGl0IGV4aXRfbnRmc19mcyh2b2lkKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0yNjk0LSNpZmRlZiBDT05GSUdfTlRGU19GU19XT0ZfQ09NUFJFU1NJT05cbmZzL250ZnMvc3VwZXIuYzoyNjk1Olx0bnRmc193b2ZfZnJlZV93b3Jrc3BhY2VzKCk7XG5mcy9udGZzL3N1cGVyLmMtMjY5Ni0jZW5kaWZcbi0tXG5mcy9udGZzL3dvZi5jPTIzPXN0YXRpYyBjb25zdCBfX2xlMTYgV09GX05BTUVbXSA9IHtcbi0tXG5mcy9udGZzL3dvZi5jLTM3LVxuZnMvbnRmcy93b2YuYzozODpzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIHtcbmZzL250ZnMvd29mLmMtMzktXHRzdHJ1Y3QgbXV0ZXggKmxvY2s7XG4tLVxuZnMvbnRmcy93b2YuYy00Ny1cbmZzL250ZnMvd29mLmM6NDg6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl94cHJlc3M0a19sb2NrKTtcbmZzL250ZnMvd29mLmM6NDk6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl94cHJlc3M4a19sb2NrKTtcbmZzL250ZnMvd29mLmM6NTA6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl94cHJlc3MxNmtfbG9jayk7XG5mcy9udGZzL3dvZi5jOjUxOnN0YXRpYyBERUZJTkVfTVVURVgobnRmc193b2ZfbHp4MzJrX2xvY2spO1xuZnMvbnRmcy93b2YuYy01Mi1cbmZzL250ZnMvd29mLmM6NTM6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgbnRmc193b2ZfeHByZXNzNGtfd29ya3NwYWNlID0ge1xuZnMvbnRmcy93b2YuYzo1NDpcdC5sb2NrID0gXHUwMDI2bnRmc193b2ZfeHByZXNzNGtfbG9jayxcbmZzL250ZnMvd29mLmMtNTUtXHQuY29kZWMgPSBcdTAwMjZudGZzX3hwcmVzczRrX2NvZGVjX29wcyxcbi0tXG5mcy9udGZzL3dvZi5jLTU4LVxuZnMvbnRmcy93b2YuYzo1OTpzdGF0aWMgc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSBudGZzX3dvZl94cHJlc3M4a193b3Jrc3BhY2UgPSB7XG5mcy9udGZzL3dvZi5jOjYwOlx0LmxvY2sgPSBcdTAwMjZudGZzX3dvZl94cHJlc3M4a19sb2NrLFxuZnMvbnRmcy93b2YuYy02MS1cdC5jb2RlYyA9IFx1MDAyNm50ZnNfeHByZXNzOGtfY29kZWNfb3BzLFxuLS1cbmZzL250ZnMvd29mLmMtNjQtXG5mcy9udGZzL3dvZi5jOjY1OnN0YXRpYyBzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIG50ZnNfd29mX3hwcmVzczE2a193b3Jrc3BhY2UgPSB7XG5mcy9udGZzL3dvZi5jOjY2Olx0LmxvY2sgPSBcdTAwMjZudGZzX3dvZl94cHJlc3MxNmtfbG9jayxcbmZzL250ZnMvd29mLmMtNjctXHQuY29kZWMgPSBcdTAwMjZudGZzX3hwcmVzczE2a19jb2RlY19vcHMsXG4tLVxuZnMvbnRmcy93b2YuYy03MC1cbmZzL250ZnMvd29mLmM6NzE6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgbnRmc193b2ZfbHp4MzJrX3dvcmtzcGFjZSA9IHtcbmZzL250ZnMvd29mLmM6NzI6XHQubG9jayA9IFx1MDAyNm50ZnNfd29mX2x6eDMya19sb2NrLFxuZnMvbnRmcy93b2YuYy03My1cdC5jb2RlYyA9IFx1MDAyNm50ZnNfbHp4MzJrX2NvZGVjX29wcyxcbi0tXG5mcy9udGZzL3dvZi5jLTc2LVxuZnMvbnRmcy93b2YuYzo3NzpzdGF0aWMgc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqY29uc3QgbnRmc193b2Zfd29ya3NwYWNlc1tdID0ge1xuZnMvbnRmcy93b2YuYzo3ODpcdFx1MDAyNm50ZnNfd29mX3hwcmVzczRrX3dvcmtzcGFjZSxcbmZzL250ZnMvd29mLmM6Nzk6XHRcdTAwMjZudGZzX3dvZl94cHJlc3M4a193b3Jrc3BhY2UsXG5mcy9udGZzL3dvZi5jOjgwOlx0XHUwMDI2bnRmc193b2ZfeHByZXNzMTZrX3dvcmtzcGFjZSxcbmZzL250ZnMvd29mLmM6ODE6XHRcdTAwMjZudGZzX3dvZl9sengzMmtfd29ya3NwYWNlLFxuZnMvbnRmcy93b2YuYy04Mi19O1xuZnMvbnRmcy93b2YuYy04My1cbmZzL250ZnMvd29mLmM6ODQ6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKm50ZnNfd29mX3dvcmtzcGFjZSh1OCBibG9ja19zaXplX2JpdHMpXG5mcy9udGZzL3dvZi5jLTg1LXtcbi0tXG5mcy9udGZzL3dvZi5jLTg3LVx0Y2FzZSAxMjpcbmZzL250ZnMvd29mLmM6ODg6XHRcdHJldHVybiBcdTAwMjZudGZzX3dvZl94cHJlc3M0a193b3Jrc3BhY2U7XG5mcy9udGZzL3dvZi5jLTg5LVx0Y2FzZSAxMzpcbmZzL250ZnMvd29mLmM6OTA6XHRcdHJldHVybiBcdTAwMjZudGZzX3dvZl94cHJlc3M4a193b3Jrc3BhY2U7XG5mcy9udGZzL3dvZi5jLTkxLVx0Y2FzZSAxNDpcbmZzL250ZnMvd29mLmM6OTI6XHRcdHJldHVybiBcdTAwMjZudGZzX3dvZl94cHJlc3MxNmtfd29ya3NwYWNlO1xuZnMvbnRmcy93b2YuYy05My1cdGNhc2UgMTU6XG5mcy9udGZzL3dvZi5jOjk0Olx0XHRyZXR1cm4gXHUwMDI2bnRmc193b2ZfbHp4MzJrX3dvcmtzcGFjZTtcbmZzL250ZnMvd29mLmMtOTUtXHRkZWZhdWx0OlxuLS1cbmZzL250ZnMvd29mLmMtOTktXG5mcy9udGZzL3dvZi5jOjEwMDpzdGF0aWMgaW50IG50ZnNfd29mX3dvcmtzcGFjZV9wcmVwYXJlKHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKndzKVxuZnMvbnRmcy93b2YuYy0xMDEte1xuLS1cbmZzL250ZnMvd29mLmMtMTI4LVxuZnMvbnRmcy93b2YuYzoxMjk6dm9pZCBudGZzX3dvZl9mcmVlX3dvcmtzcGFjZXModm9pZClcbmZzL250ZnMvd29mLmMtMTMwLXtcbi0tXG5mcy9udGZzL3dvZi5jLTEzMi1cbmZzL250ZnMvd29mLmM6MTMzOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShudGZzX3dvZl93b3Jrc3BhY2VzKTsgaSYjNDM7JiM0MzspIHtcbmZzL250ZnMvd29mLmM6MTM0Olx0XHRzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cyA9IG50ZnNfd29mX3dvcmtzcGFjZXNbaV07XG5mcy9udGZzL3dvZi5jLTEzNS1cbi0tXG5mcy9udGZzL3dvZi5jPTM2NT1zdGF0aWMgaW50IG50ZnNfcmVhZF93b2ZfY2h1bmsoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXG4tLVxuZnMvbnRmcy93b2YuYy00MTktXG5mcy9udGZzL3dvZi5jOjQyMDpzdHJ1Y3QgbnRmc193b2ZfZGVzdCB7XG5mcy9udGZzL3dvZi5jLTQyMS1cdHN0cnVjdCBmb2xpbyAqZm9saW9zW05URlNfV09GX01BWF9QQUdFU107XG4tLVxuZnMvbnRmcy93b2YuYy00MjYtXG5mcy9udGZzL3dvZi5jOjQyNzpzdGF0aWMgdm9pZCBudGZzX3dvZl9yZWxlYXNlX2Rlc3Qoc3RydWN0IG50ZnNfd29mX2Rlc3QgKmRlc3QsXG5mcy9udGZzL3dvZi5jLTQyOC1cdFx0XHRcdCAgc3RydWN0IGZvbGlvICp0YXJnZXQsIGJvb2wgc3VjY2Vzcylcbi0tXG5mcy9udGZzL3dvZi5jLTQ0Ny1cbmZzL250ZnMvd29mLmM6NDQ4OnN0YXRpYyBpbnQgbnRmc193b2ZfY29sbGVjdF9kZXN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvbnRmcy93b2YuYy00NDktXHRcdFx0XHQgc3RydWN0IGZvbGlvICp0YXJnZXQsIGxvZmZfdCBjaHVua19zdGFydCxcbmZzL250ZnMvd29mLmM6NDUwOlx0XHRcdFx0IGxvZmZfdCBjaHVua19lbmQsIHN0cnVjdCBudGZzX3dvZl9kZXN0ICpkZXN0KVxuZnMvbnRmcy93b2YuYy00NTEte1xuLS1cbmZzL250ZnMvd29mLmMtNTEyLVxuZnMvbnRmcy93b2YuYzo1MTM6c3RhdGljIGludCBudGZzX3dvZl9kZWNvZGUoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsIGNvbnN0IHZvaWQgKnNyYyxcbmZzL250ZnMvd29mLmMtNTE0LVx0XHRcdCAgIHUzMiBzcmNfbGVuLCB2b2lkICpkc3QsIHUzMiBkc3RfbGVuKVxuLS1cbmZzL250ZnMvd29mLmMtNTIzLVxuZnMvbnRmcy93b2YuYzo1MjQ6c3RhdGljIGludCBudGZzX3dvZl9kZWNvZGVfcGFnZV9kaXJlY3Qoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsXG5mcy9udGZzL3dvZi5jLTUyNS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZm9saW8gKnRhcmdldCwgbG9mZl90IGNodW5rX3N0YXJ0LFxuLS1cbmZzL250ZnMvd29mLmMtNTQwLVx0YWRkciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbmZzL250ZnMvd29mLmM6NTQxOlx0ZXJyID0gbnRmc193b2ZfZGVjb2RlKHdzLCBzcmMsIHNyY19sZW4sICh1OCAqKWFkZHIgJiM0MzsgcGFnZV9vZmZzZXQsXG5mcy9udGZzL3dvZi5jLTU0Mi1cdFx0XHQgICAgICBkc3RfbGVuKTtcbi0tXG5mcy9udGZzL3dvZi5jLTU0OC1cbmZzL250ZnMvd29mLmM6NTQ5OnN0YXRpYyBpbnQgbnRmc193b2ZfZGVjb2RlX2ZvbGlvc19kaXJlY3Qoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsXG5mcy9udGZzL3dvZi5jLTU1MC1cdFx0XHRcdFx0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL250ZnMvd29mLmMtNTU2LVx0dW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY2h1bmtfc3RhcnQpO1xuZnMvbnRmcy93b2YuYzo1NTc6XHRzdHJ1Y3QgbnRmc193b2ZfZGVzdCBkZXN0O1xuZnMvbnRmcy93b2YuYy01NTgtXHR2b2lkICphZGRyO1xuLS1cbmZzL250ZnMvd29mLmMtNTYxLVxuZnMvbnRmcy93b2YuYzo1NjI6XHRlcnIgPSBudGZzX3dvZl9jb2xsZWN0X2Rlc3QobWFwcGluZywgdGFyZ2V0LCBjaHVua19zdGFydCwgY2h1bmtfZW5kLFxuZnMvbnRmcy93b2YuYy01NjMtXHRcdFx0XHQgICAgXHUwMDI2ZGVzdCk7XG5mcy9udGZzL3dvZi5jLTU2NC1cdGlmIChlcnIpIHtcbmZzL250ZnMvd29mLmM6NTY1Olx0XHRudGZzX3dvZl9yZWxlYXNlX2Rlc3QoXHUwMDI2ZGVzdCwgdGFyZ2V0LCBmYWxzZSk7XG5mcy9udGZzL3dvZi5jLTU2Ni1cdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuZnMvbnRmcy93b2YuYy01NzItXHRpZiAoIWFkZHIpIHtcbmZzL250ZnMvd29mLmM6NTczOlx0XHRudGZzX3dvZl9yZWxlYXNlX2Rlc3QoXHUwMDI2ZGVzdCwgdGFyZ2V0LCBmYWxzZSk7XG5mcy9udGZzL3dvZi5jLTU3NC1cdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuZnMvbnRmcy93b2YuYy01NzYtXG5mcy9udGZzL3dvZi5jOjU3NzpcdGVyciA9IG50ZnNfd29mX2RlY29kZSh3cywgc3JjLCBzcmNfbGVuLCAodTggKilhZGRyICYjNDM7IHBhZ2Vfb2Zmc2V0LFxuZnMvbnRmcy93b2YuYy01NzgtXHRcdFx0ICAgICAgZHN0X2xlbik7XG4tLVxuZnMvbnRmcy93b2YuYy01ODAtXHRpZiAoZXJyKSB7XG5mcy9udGZzL3dvZi5jOjU4MTpcdFx0bnRmc193b2ZfcmVsZWFzZV9kZXN0KFx1MDAyNmRlc3QsIHRhcmdldCwgZmFsc2UpO1xuZnMvbnRmcy93b2YuYy01ODItXHRcdHJldHVybiAtRUlOVkFMO1xuZnMvbnRmcy93b2YuYy01ODMtXHR9XG5mcy9udGZzL3dvZi5jOjU4NDpcdG50ZnNfd29mX3JlbGVhc2VfZGVzdChcdTAwMjZkZXN0LCB0YXJnZXQsIHRydWUpO1xuZnMvbnRmcy93b2YuYy01ODUtXHRyZXR1cm4gMDtcbi0tXG5mcy9udGZzL3dvZi5jLTU4Ny1cbmZzL250ZnMvd29mLmM6NTg4OnN0YXRpYyBpbnQgbnRmc193b2ZfdHJ5X2RpcmVjdChzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cyxcbmZzL250ZnMvd29mLmMtNTg5LVx0XHRcdCAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9udGZzL3dvZi5jLTU5Ni1cdGlmIChkc3RfbGVuIFx1MDAzYz0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQpXG5mcy9udGZzL3dvZi5jOjU5NzpcdFx0cmV0dXJuIG50ZnNfd29mX2RlY29kZV9wYWdlX2RpcmVjdCh3cywgdGFyZ2V0LCBjaHVua19zdGFydCwgc3JjLFxuZnMvbnRmcy93b2YuYy01OTgtXHRcdFx0XHRcdFx0ICAgc3JjX2xlbiwgZHN0X2xlbik7XG5mcy9udGZzL3dvZi5jLTU5OS1cbmZzL250ZnMvd29mLmM6NjAwOlx0cmV0dXJuIG50ZnNfd29mX2RlY29kZV9mb2xpb3NfZGlyZWN0KHdzLCBtYXBwaW5nLCB0YXJnZXQsIGNodW5rX3N0YXJ0LFxuZnMvbnRmcy93b2YuYy02MDEtXHRcdFx0XHRcdCAgICAgY2h1bmtfZW5kLCBzcmMsIHNyY19sZW4sIGRzdF9sZW4pO1xuLS1cbmZzL250ZnMvd29mLmM9NjA0PWludCBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9udGZzL3dvZi5jLTYwOS1cdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuZnMvbnRmcy93b2YuYzo2MTA6XHRzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cztcbmZzL250ZnMvd29mLmMtNjExLVx0bG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKFZGU19JKG5pKSk7XG4tLVxuZnMvbnRmcy93b2YuYy02MTgtXG5mcy9udGZzL3dvZi5jOjYxOTpcdHdzID0gbnRmc193b2Zfd29ya3NwYWNlKG5pLVx1MDAzZWl0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZV9iaXRzKTtcbmZzL250ZnMvd29mLmMtNjIwLVx0aWYgKCF3cykge1xuLS1cbmZzL250ZnMvd29mLmMtNjU0LVx0bXV0ZXhfbG9jayh3cy1cdTAwM2Vsb2NrKTtcbmZzL250ZnMvd29mLmM6NjU1Olx0ZXJyID0gbnRmc193b2Zfd29ya3NwYWNlX3ByZXBhcmUod3MpO1xuZnMvbnRmcy93b2YuYy02NTYtXHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvd29mLmMtNjg1LVx0XHRjaHVua19lbmQgPSBjaHVua19maWxlX29mZnNldCAmIzQzOyBkZWNvbXBfc2l6ZTtcbmZzL250ZnMvd29mLmM6Njg2Olx0XHRlcnIgPSBudGZzX3dvZl90cnlfZGlyZWN0KHdzLCBtYXBwaW5nLCBmb2xpbywgY2h1bmtfZmlsZV9vZmZzZXQsXG5mcy9udGZzL3dvZi5jLTY4Ny1cdFx0XHRcdFx0ICBjaHVua19lbmQsIGNodW5rX21lbSwgY2h1bmtfc2l6ZSxcbi0tXG5mcy9udGZzL3dvZi5jLTY5My1cbmZzL250ZnMvd29mLmM6Njk0Olx0XHRlcnIgPSBudGZzX3dvZl9kZWNvZGUod3MsIGNodW5rX21lbSwgY2h1bmtfc2l6ZSwgd3MtXHUwMDNlb3V0cHV0LFxuZnMvbnRmcy93b2YuYy02OTUtXHRcdFx0XHQgICAgICBkZWNvbXBfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDM1CgkJCQkJCQlvdXRwdXQ6IDIyNgoJCQkJCQkJdGhvdWdodHM6IDc0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGaWxlIFN5c3RlbSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgbnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrYCwgYSBwdWJsaWMgZnVuY3Rpb24gaW4gdGhlIE5URlMgbW9kdWxlLCBpcyBhdCB0aGUgaGVhcnQgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLCBzbyBJJiMzOTt2ZSBjcm9zcy1yZWZlcmVuY2VkIGl0IGFnYWluc3Qgb3RoZXIgcG90ZW50aWFsbHkgYWZmZWN0ZWQgY29kZS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmV2aWV3IGFsbCB0aGUgY29kZSB0aGF0IHdhcyBjaGFuZ2VkOgoKKiAgIGBmcy9lcm9mcy9pbnRlcm5hbC5oYCBsb29rcyByZWxldmFudCBkdWUgdG8gdGhlIGB6X2Vyb2ZzX3BjbHVzdGVyX3JlYWRtb3JlYCAvIGB6X2Vyb2ZzX3JlYWRhaGVhZGAKKiAgIGBmcy9leHQ0L2lubGluZS5jYCBhbmQgZnVuY3Rpb25zIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgbWlnaHQgYmUgYSBjb25jZXJuLgoqICAgYGZzL25mcy9kaXIuY2Agd2hlcmUgYG5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0YCBjYWxscyBgbmZzX3JlYWRkaXJfZm9saW9fZmlsbGVyYCAvIGBuZnNfcmVhZGRpcmAKKiAgIGBmcy9udGZzL2lub2RlLmNgIHdpdGggdGhlIGZ1bmN0aW9ucyBgX19udGZzX2lub2RlX3Jlc2lkZW50X2F0dHJfcHdyaXRlYCAvIGBudGZzX2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBmcy9udGZzL3dvZi5jYCB3aXRoIGBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2tgIHdoaWNoIGlzIG15IGluaXRpYWwgcG9pbnQKKiAgIGBmcy9zcXVhc2hmcy9maWxlLmNgIGFuZCBmdW5jdGlvbnMgYHNxdWFzaGZzX2NvcHlfY2FjaGVgLCBgc3F1YXNoZnNfcmVhZF9mb2xpb2AKKiAgIGBtbS9maWxlbWFwLmNgIGFuZCB0aGUgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAgZnVuY3Rpb24KKiAgIGBtbS9yZWFkYWhlYWQuY2Agd2l0aCB0aGUgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCwgYHBhZ2VfY2FjaGVfcmFfb3JkZXJgCgpOb3csIEkgbmVlZCB0byBuYXJyb3cgZG93biB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGFyZ2V0ZWQgYW5hbHlzaXMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cyBhbmQgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBvbmVzOgoKKiAgIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgIC0gQ29yZSBmaWxlbWFwIGZ1bmN0aW9uIGlzIGludGVyZXN0aW5nLgoqICAgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIC0gUGFydCBvZiBzcXVhc2hmcyBmaWxlIGhhbmRsaW5nLgoqICAgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgLSBEZWFsaW5nIHdpdGggaW5saW5lIGRhdGEgd2l0aGluIGV4dDQuCiogICBgbnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrYCAtIFRoZSBpbml0aWFsIHBvaW50IG9mIGludGVyZXN0IHJlbGF0ZWQgdG8gTlRGUy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpczoKCiogICBgRVJPRlNfRlNgIC0gZm9yIEVST0ZTLgoqICAgYEVYVDRfRlNgIC0gZm9yIGV4dDQuCiogICBgTkZTX0ZTYCAtIGZvciBORlMuCiogICBgTlRGU19GU2AgLSBmb3IgTlRGUywgbmF0dXJhbGx5LgoqICAgYE5URlNfRlNfV09GX0NPTVBSRVNTSU9OYCAtIHRoaXMgaXMgbGlrZWx5ICpjcnVjaWFsKiB0byBlbmFibGUgTlRGUyYjMzk7cyBXT0YgY29tcHJlc3Npb24uCiogICBgU1FVQVNIRlNgIC0gZm9yIFNxdWFzaEZTLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYE5URlNfRlNfV09GX0NPTVBSRVNTSU9OYCBkZXBlbmRzIG9uIGBOVEZTX0ZTYCBhcyBleHBlY3RlZC4gVGhlIG90aGVycyBhcmUgc3RhbmRhcmQgYW5kIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbCBpcyBjb25maWd1cmVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBjb250YWluczoKCiogICBgRW5hYmxlQ29uZmlnc2A6IEFsbCBvZiB0aGUgY29uZmlncyBJIG1lbnRpb25lZC4KKiAgIGBGb2N1c1N5bWJvbHNgOiB0aGUgbGlzdCBvZiBrZXkgZnVuY3Rpb25zIEkgaWRlbnRpZmllZC4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggcmVtb3ZlcyBgRkdQX05PRlNgIGZyb20gcGFnZWNhY2hlIEFQSXMgYW5kIHVwZGF0ZXMgZm9saW8gYWxsb2NhdGlvbi9yZWNsYWltIHNjb3BlcyBhY3Jvc3MgY29yZSBtbSBhbmQgZmlsZXN5c3RlbXMsIGltcGFjdGluZyByZWNsYWltIGNvbnRleHRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBpbiBjb3JlIHBhdGhzLgoqICAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHkuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSByaXBlIGZvciBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgcmFjZSBjb25kaXRpb25zIGR1ZSB0byBjaGFuZ2VzIGluIGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJlY2xhaW0gcGF0aHMuCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDssCiAgICAmIzM0O05URlNfRlMmIzM0OywKICAgICYjMzQ7TlRGU19GU19XT0ZfQ09NUFJFU1NJT04mIzM0OywKICAgICYjMzQ7U1FVQVNIRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wmIzM0OywKICAgICYjMzQ7c3F1YXNoZnNfY29weV9jYWNoZSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7bnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIEZHUF9OT0ZTIGZsYWcgZnJvbSBjb3JlIHBhZ2UgY2FjaGUgQVBJcyAoX19maWxlbWFwX2dldF9mb2xpb19tcG9sKSBhbmQgYWRqdXN0cyBmb2xpbyBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIGNvbnRleHQgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIHNxdWFzaGZzLCBlcm9mcywgbnRmcywgYW5kIG5mcykuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgaW50cm9kdWNlcyBzY29wZWQgTk9GUyBjb250ZXh0cyAobWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmUpIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIEkvTyBhbmQgY2FjaGluZyBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIG1lbW9yeSByZWNsYWltIGFuZCBsb2NraW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7TlRGU19GUyYjMzQ7LAogICAgJiMzNDtOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTiYjMzQ7LAogICAgJiMzNDtTUVVBU0hGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCYjMzQ7LAogICAgJiMzNDtzcXVhc2hmc19jb3B5X2NhY2hlJiMzNDssCiAgICAmIzM0O2V4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgRkdQX05PRlMgZmxhZyBmcm9tIGNvcmUgcGFnZSBjYWNoZSBBUElzIChfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wpIGFuZCBhZGp1c3RzIGZvbGlvIGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJlY2xhaW0gY29udGV4dCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgc3F1YXNoZnMsIGVyb2ZzLCBudGZzLCBhbmQgbmZzKS4gSXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBpbnRyb2R1Y2VzIHNjb3BlZCBOT0ZTIGNvbnRleHRzIChtZW1hbGxvY19ub2ZzX3NhdmUvcmVzdG9yZSkgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gSS9PIGFuZCBjYWNoaW5nIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbWVtb3J5IHJlY2xhaW0gYW5kIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZGVwcmVjYXRlZCBGR1BfTk9GUyBmbGFnIGZyb20gdGhlIHBhZ2UgY2FjaGUgZm9saW8gYWNxdWlzaXRpb24gQVBJcyBhbmQgYWRqdXN0cyBjYWxsIHNpdGVzIGFjcm9zcyB2YXJpb3VzIGZpbGVzeXN0ZW1zIChFUk9GUywgRVhUNCwgTkZTLCBOVEZTLCBTcXVhc2hGUykgdG8gcmVseSBvbiBtYXBwaW5nIEdGUCBtYXNrcyBvciBzY29wZWQgbWVtYWxsb2Nfbm9mc19zYXZlKCkvbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgY29udGV4dHMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgYWxsb2NhdGlvbiByZWNsYWltIGZsYWdzIChHRlAvRkdQIGZsYWdzKSBhbmQgZmlsZXN5c3RlbSByZWN1cnNpb24vZGVhZGxvY2sgcHJldmVudGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29udHJvbCBmbG93IGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoZS5nLiwgcmVjbGFpbSByZWN1cnNpb24gb3IgbG9ja2luZyBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTI0MzU2ZDdhYzY1ZTBmOWJkZWRmNjczMWY2YWEzODIyZDkwNzQ3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDMwIDA0OjQyOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKaW5kZXggNjU5NzRlNTdhZWJmYi4uODRiM2NkYzhlODhmMSAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9pbnRlcm5hbC5oCkBAIC0zMjcsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICplcm9mc19ncmFiX2ZvbGlvX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXMsCiAJCQkJCQkgICAgcGdvZmZfdCBpbmRleCkKIHsKIAlyZXR1cm4gX19maWxlbWFwX2dldF9mb2xpbyhhcywgaW5kZXgsCi0JCQlGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCwKJiM0MzsJCQlGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsCiAJCQlyZWFkYWhlYWRfZ2ZwX21hc2soYXMpICZhbXA7IH5fX0dGUF9SRUNMQUlNKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmMKaW5kZXggY2VlZTY5YTY2NDgyYi4uMTg4NGFiYjA5NjE0MCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbmxpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lubGluZS5jCkBAIC02MDEsOSAmIzQzOzYwMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeQotCSAqIHN0YXJ0ZWQgKi8KLQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUywKJiM0MzsJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLAogCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJaWYgKElTX0VSUihmb2xpbykpIHsKIAkJcmV0ID0gUFRSX0VSUihmb2xpbyk7CkBAIC03MzQsNyAmIzQzOzczMiw3IEBAIGludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCWdvdG8gb3V0X3JlbGVhc2VfYmg7CiAJfQogCi0JZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsCiYjNDM7CWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiwKIAkJCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJaWYgKElTX0VSUihmb2xpbykpIHsKIAkJcmV0ID0gUFRSX0VSUihmb2xpbyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggNDkzOTQxMjNiZDA5Ni4uZTM0MTI1YThhMmUyOCAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy9kaXIuYwpAQCAtNDQ3LDcgJiM0Mzs0NDcsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpuZnNfcmVhZGRpcl9mb2xpb19nZXRfbmV4dChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LAotCQkJRkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsCiYjNDM7CQkJRkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULAogCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jCmluZGV4IDMyZWRiNDA0NTE3OGEuLjM2YTBkNmIyNmMwMmUgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2lub2RlLmMKQEAgLTM2NzYsNyAmIzQzOzM2NzYsNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLAogCW1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtJmd0O250ZnNfaW5vKTsKIAogCS8qIEtlZXAgdGhlIGZpcnN0IHBhZ2UgY2xlYW4gYW5kIHVwdG9kYXRlICovCi0JZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsCiYjNDM7CWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiwKIAkJCQkgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAlpZiAoSVNfRVJSKGZvbGlvKSkgewogCQllcnIgPSBQVFJfRVJSKGZvbGlvKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvd29mLmMgYi9mcy9udGZzL3dvZi5jCmluZGV4IDhmODRjMjIxMmVlZWMuLmM5ODFiNGEzYjY5NTkgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvd29mLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy93b2YuYwpAQCAtNDY0LDEwICYjNDM7NDY0LDkgQEAgc3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlmb2xpbyA9IHRhcmdldDsKIAkJCWlzX3RhcmdldCA9IHRydWU7CiAJCX0gZWxzZSB7Ci0JCQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8oCi0JCQkJbWFwcGluZywgaW5kZXgsCi0JCQkJRkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyB8IEZHUF9OT1dBSVQsCi0JCQkJR0ZQX05PRlMpOwomIzQzOwkJCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwKJiM0MzsJCQkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCwKJiM0MzsJCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCQkJaWYgKElTX0VSUihmb2xpbykpCiAJCQkJcmV0dXJuIFBUUl9FUlIoZm9saW8pOwogCQkJaXNfdGFyZ2V0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9maWxlLmMgYi9mcy9zcXVhc2hmcy9maWxlLmMKaW5kZXggZDgzNTk0Y2U5MWQyMy4uMzRjNTUwYTI2NmJjZiAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NxdWFzaGZzL2ZpbGUuYwpAQCAtMzk4LDYgJiM0MzszOTgsNyBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAlzdHJ1Y3Qgc3F1YXNoZnNfc2JfaW5mbyAqbXNibGsgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvOwogCWludCBpLCBtYXNrID0gKDEgJmx0OyZsdDsgKG1zYmxrLSZndDtibG9ja19sb2cgLSBQQUdFX1NISUZUKSkgLSAxOwogCWludCBzdGFydF9pbmRleCA9IGZvbGlvLSZndDtpbmRleCAmYW1wOyB+bWFzaywgZW5kX2luZGV4ID0gc3RhcnRfaW5kZXggfCBtYXNrOwomIzQzOwl1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpOwogCiAJLyoKIAkgKiBMb29wIGNvcHlpbmcgZGF0YWJsb2NrIGludG8gcGFnZXMuICBBcyB0aGUgZGF0YWJsb2NrIGxpa2VseSBjb3ZlcnMKQEAgLTQxNSw3ICYjNDM7NDE2LDcgQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIAkJcHVzaF9mb2xpbyA9IChpID09IGZvbGlvLSZndDtpbmRleCkgPyBmb2xpbyA6CiAJCQlfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGksCi0JCQkJCUZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULAomIzQzOwkJCQkJRkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULAogCQkJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAogCQlpZiAoSVNfRVJSKHB1c2hfZm9saW8pKQpAQCAtNDMwLDYgJiM0Mzs0MzEsOCBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJaWYgKGkgIT0gZm9saW8tJmd0O2luZGV4KQogCQkJZm9saW9fcHV0KHB1c2hfZm9saW8pOwogCX0KJiM0MzsKJiM0MzsJbWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnMpOwogfQogCiAvKiBSZWFkIGRhdGFibG9jayBzdG9yZWQgcGFja2VkIGluc2lkZSBhIGZyYWdtZW50ICh0YWlsLWVuZCBwYWNrZWQgYmxvY2spICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDBhZGZhNjYwNTY1M2QuLmJmZjhiNzI2NGZiMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCkBAIC02OTcsNyAmIzQzOzY5Nyw2IEBAIHBnb2ZmX3QgcGFnZV9jYWNoZV9wcmV2X21pc3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAgKiAgIGZvbGlvIGlzIGFscmVhZHkgaW4gY2FjaGUuICBJZiB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZCwgdW5sb2NrIGl0CiAgKiAgIGJlZm9yZSByZXR1cm5pbmcgc28gdGhlIGNhbGxlciBjYW4gZG8gdGhlIHNhbWUgZGFuY2UuCiAgKiAqICVGR1BfV1JJVEUgLSBUaGUgZm9saW8gd2lsbCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBjYWxsZXIuCi0gKiAqICVGR1BfTk9GUyAtIF9fR0ZQX0ZTIHdpbGwgZ2V0IGNsZWFyZWQgaW4gZ2ZwLgogICogKiAlRkdQX05PV0FJVCAtIERvbiYjMzk7dCBibG9jayBvbiB0aGUgZm9saW8gbG9jay4KICAqICogJUZHUF9TVEFCTEUgLSBXYWl0IGZvciB0aGUgZm9saW8gdG8gYmUgc3RhYmxlIChmaW5pc2hlZCB3cml0ZWJhY2spCiAgKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU8KQEAgLTcxMCwxMSAmIzQzOzcwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7CiAjZGVmaW5lIEZHUF9MT0NLCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwMikKICNkZWZpbmUgRkdQX0NSRUFUCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwNCkKICNkZWZpbmUgRkdQX1dSSVRFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOCkKLSNkZWZpbmUgRkdQX05PRlMJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKQotI2RlZmluZSBGR1BfTk9XQUlUCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMCkKLSNkZWZpbmUgRkdQX0ZPUl9NTUFQCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MCkKLSNkZWZpbmUgRkdQX1NUQUJMRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApCi0jZGVmaW5lIEZHUF9ET05UQ0FDSEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKQomIzQzOyNkZWZpbmUgRkdQX05PV0FJVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMTApCiYjNDM7I2RlZmluZSBGR1BfRk9SX01NQVAJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDIwKQomIzQzOyNkZWZpbmUgRkdQX1NUQUJMRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApCiYjNDM7I2RlZmluZSBGR1BfRE9OVENBQ0hFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA4MCkKICNkZWZpbmUgRkdGX0dFVF9PUkRFUihmZ2YpCSgoKF9fZm9yY2UgdW5zaWduZWQpZmdmKSAmZ3Q7Jmd0OyAyNikJLyogdG9wIDYgYml0cyAqLwogCiAjZGVmaW5lIEZHUF9XUklURUJFR0lOCQkoRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfU1RBQkxFKQpAQCAtOTI5LDcgJiM0Mzs5MjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpncmFiX2NhY2hlX3BhZ2Vfbm93YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXBnb2ZmX3QgaW5kZXgpCiB7CiAJcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCwKLQkJCUZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULAomIzQzOwkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCwKIAkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgKaW5kZXggZDdjNmE5NDJhYTdlMC4uZjc2YmUxMTQxYjA2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaApAQCAtMzcyLDEzICYjNDM7MzcyLDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1hbGxvY19ub2lvX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKQogfQogCiAvKioKLSAqIG1lbWFsbG9jX25vZnNfc2F2ZSAtIE1hcmtzIGltcGxpY2l0IEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuCiYjNDM7ICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS4KICAqCi0gKiBUaGlzIGZ1bmN0aW9ucyBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBHRlBfTk9GUyBhbGxvY2F0aW9uIHNjb3BlLgotICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc28KLSAqIHRoZXkgYXJlIHNhZmUgZm9yIHRoZSBGUyBjcml0aWNhbCBzZWN0aW9uIGZyb20gdGhlIGFsbG9jYXRpb24gcmVjdXJzaW9uCi0gKiBwb2ludCBvZiB2aWV3LiBVc2UgbWVtYWxsb2Nfbm9mc19yZXN0b3JlIHRvIGVuZCB0aGUgc2NvcGUgd2l0aCBmbGFncwotICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4KJiM0MzsgKiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBjYWxsaW5nCiYjNDM7ICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBjYWxsaW5nIGludG8gZmlsZXN5c3RlbXMKJiM0MzsgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsCiYjNDM7ICogYnV0IChmb3IgZXhhbXBsZSkgaW5vZGVzIHdpbGwgbm90IGJlLgomIzQzOyAqCiYjNDM7ICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2sKJiM0MzsgKiB3aGljaCB3b3VsZCBiZSBuZWVkZWQgYnkgRlMgcmVjbGFpbS4gIFdoaWxlIHdlIGNvdWxkIHRoZW9yZXRpY2FsbHkKJiM0MzsgKiBjYWxsIGludG8gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSBpbiB0aGlzIGNhc2UsIGl0IGNhbiBiZSBhIGRlZXAgY2FsbAomIzQzOyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuCiYjNDM7ICoKJiM0MzsgKiBGaWxlc3lzdGVtcyBvZnRlbiBjaG9vc2UgdG8gaW5jb3Jwb3JhdGUgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gYXMgcGFydAomIzQzOyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbAomIzQzOyAqIHNlbnNlLCBpdCBoYXMgbXVjaCB0aGUgc2FtZSBlZmZlY3QgYXMgbmVzdGVkIGpvdXJuYWwgdHJhbnNhY3Rpb25zCiYjNDM7ICogYXJlIGVpdGhlciBwcm9oaWJpdGVkIG9yIGV4cGVuc2l2ZS4KJiM0MzsgKgomIzQzOyAqIEFsc28gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSB3aGlsZSBob2xkaW5nCiYjNDM7ICogYSBmaWxlIGZvbGlvIGxvY2tlZC4gIEhpZ2ggb3JkZXIgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgdGhvc2UgcmVxdWVzdGVkCiYjNDM7ICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uCiAgKgogICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiBpcyBzYWZlIHRvIGJlIHVzZWQgZnJvbSBhbnkgY29udGV4dC4KICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuCkBAIC0zODksMTAgJiM0Mzs0MDIsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2Nfbm9mc19zYXZlKHZvaWQpCiB9CiAKIC8qKgotICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlIC0gRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUuCiYjNDM7ICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlIC0gRW5kIGZpbGVzeXN0ZW0gcmVjbGFpbSBzY29wZS4KICAqIEBmbGFnczogRmxhZ3MgdG8gcmVzdG9yZS4KICAqCi0gKiBFbmRzIHRoZSBpbXBsaWNpdCBHRlBfTk9GUyBzY29wZSBzdGFydGVkIGJ5IG1lbWFsbG9jX25vZnNfc2F2ZSBmdW5jdGlvbi4KJiM0MzsgKiBFbmRzIHRoZSBpbXBsaWNpdCBtZW1vcnkgYWxsb2NhdGlvbiBzY29wZSBzdGFydGVkIGJ5CiYjNDM7ICogbWVtYWxsb2Nfbm9mc19zYXZlKCkuICBUaGlzIG1heSBub3QgZW5hYmxlIGFjY2VzcyB0byBmaWxlc3lzdGVtIHJlY2xhaW0KJiM0MzsgKiBpZiBpdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBhdCB0aGUgdGltZSBtZW1hbGxvY19ub2ZzX3NhdmUoKSB3YXMgY2FsbGVkLgogICogQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmbGFncyBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlCiAgKiBwYWlyaW5nIG1lbWFsbG9jX25vZnNfc2F2ZSBjYWxsLgogICovCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmFmZWM2MzY4ODFmYi4uZTY1ODAyOTFmMjE4NSAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuYwpAQCAtMTk5NCw4ICYjNDM7MTk5NCw2IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCiAJCWlmICgoZmdwX2ZsYWdzICZhbXA7IEZHUF9XUklURSkgJmFtcDsmYW1wOyBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpCiAJCQlnZnAgfD0gX19HRlBfV1JJVEU7Ci0JCWlmIChmZ3BfZmxhZ3MgJmFtcDsgRkdQX05PRlMpCi0JCQlnZnAgJmFtcDs9IH5fX0dGUF9GUzsKIAkJaWYgKGZncF9mbGFncyAmYW1wOyBGR1BfTk9XQUlUKSB7CiAJCQlnZnAgJmFtcDs9IH5HRlBfS0VSTkVMOwogCQkJZ2ZwIHw9IEdGUF9OT1dBSVQ7CmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IDZlNTU2MzI5MDI4N2UuLjljMTE2ZDRiYTk2M2EgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JlYWRhaGVhZC5jCkBAIC0yMjcsMTcgJiM0MzsyMjcsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsCiAJZ2ZwX3QgZ2ZwX21hc2sgPSByZWFkYWhlYWRfZ2ZwX21hc2sobWFwcGluZyk7CiAJdW5zaWduZWQgbG9uZyBtYXJrID0gVUxPTkdfTUFYLCBpID0gMDsKIAl1bnNpZ25lZCBpbnQgbWluX25ycGFnZXMgPSBtYXBwaW5nX21pbl9mb2xpb19ucnBhZ2VzKG1hcHBpbmcpOwotCi0JLyoKLQkgKiBQYXJ0d2F5IHRocm91Z2ggdGhlIHJlYWRhaGVhZCBvcGVyYXRpb24sIHdlIHdpbGwgaGF2ZSBhZGRlZAotCSAqIGxvY2tlZCBwYWdlcyB0byB0aGUgcGFnZSBjYWNoZSwgYnV0IHdpbGwgbm90IHlldCBoYXZlIHN1Ym1pdHRlZAotCSAqIHRoZW0gZm9yIEkvTy4gIEFkZGluZyBhbm90aGVyIHBhZ2UgbWF5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LAotCSAqIHdoaWNoIGNhbiB0cmlnZ2VyIG1lbW9yeSByZWNsYWltLiAgVGVsbGluZyB0aGUgVk0gd2UmIzM5O3JlIGluCi0JICogdGhlIG1pZGRsZSBvZiBhIGZpbGVzeXN0ZW0gb3BlcmF0aW9uIHdpbGwgY2F1c2UgaXQgdG8gbm90Ci0JICogdG91Y2ggZmlsZS1iYWNrZWQgcGFnZXMsIHByZXZlbnRpbmcgYSBkZWFkbG9jay4gIE1vc3QgKGFsbD8pCi0JICogZmlsZXN5c3RlbXMgYWxyZWFkeSBzcGVjaWZ5IF9fR0ZQX05PRlMgaW4gdGhlaXIgbWFwcGluZyYjMzk7cwotCSAqIGdmcF9tYXNrLCBidXQgbGV0JiMzOTtzIGJlIGV4cGxpY2l0IGhlcmUuCi0JICovCiYjNDM7CS8qIEFsbG9jYXRpbmcgd2l0aCBsb2NrZWQgZm9saW9zICovCiAJdW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDttYXBwaW5nLSZndDtpbnZhbGlkYXRlX2xvY2spOwpAQCAtNTEyLDcgJiM0Mzs1MDIsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCwKIAogCXJhLSZndDtvcmRlciA9IG5ld19vcmRlcjsKIAotCS8qIFNlZSBjb21tZW50IGluIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkgKi8KJiM0MzsJLyogQWxsb2NhdGluZyB3aXRoIGxvY2tlZCBmb2xpb3MgKi8KIAlub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7CiAJZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA4CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDg3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlbW92YWwgb2YgdGhlIGBGR1BfTk9GU2AgRmxhZyBhbmQgSXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHJpcHBpbmcgb3V0IHRoZSBgRkdQX05PRlNgIGZsYWcgZnJvbSBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGFuZCB0aGVuIHVwZGF0aW5nIGFsbCB0aGUgcGxhY2VzIHRoYXQgdXNlZCBpdC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHNpZ25pZmljYW50IHJlZmFjdG9yLCBidXQgdGhlIG92ZXJhbGwgZ29hbCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBhdm9pZGluZyBGUyByZWNsYWltIGRlYWRsb2NrcyBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24uIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgY2hhbmdlcyBtZXRob2RpY2FsbHkuCgpGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIHNwZWNpZmljIGFyZWFzIGJlaW5nIHRvdWNoZWQ6IGBlcm9mcy9pbnRlcm5hbC5oYCwgYGV4dDQvaW5saW5lLmNgLCBgbmZzL2Rpci5jYCwgYG50ZnMvaW5vZGUuY2AsIGBudGZzL3dvZi5jYCwgYHNxdWFzaGZzL2ZpbGUuY2AsIGBwYWdlbWFwLmhgLCBgc2NoZWQvbW0uaGAsIGBmaWxlbWFwLmNgLCBhbmQgYHJlYWRhaGVhZC5jYC4gRWFjaCBvZiB0aGVzZSBmaWxlcyBpcyBiZWluZyBhZGp1c3RlZCB0byBlaXRoZXIgcmVtb3ZlIHRoZSBgRkdQX05PRlNgIGZsYWcgZGlyZWN0bHkgb3IgcmVwbGFjZSBpdCB3aXRoIGEgbW9yZSBhcHByb3ByaWF0ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBvZnRlbiBpbnZvbHZpbmcgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBhbmQgYG1lbWFsbG9jX25vZnNfcmVzdG9yZSgpYC4KClNwZWNpZmljYWxseSwgaW4gYGVyb2ZzYCwgSSBzZWUgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCByZW1vdmluZyB0aGUgZmxhZywgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIGl0IGFscmVhZHkgdXNlcyBhIG1hc2sgdGhhdCBleGNsdWRlcyBgX19HRlBfUkVDTEFJTWAuIFRoZW4sIGBleHQ0YCBpcyBjbGVhbmluZyB1cCBgaW5saW5lLmNgLCBzYW1lIHdpdGggYG5mc2AsIGFuZCBgbnRmc2AuIFRoZSBgc3F1YXNoZnNgIGNoYW5nZSBpcyBrZXk7IHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgd3JhcHBpbmcgdGhlIGBzcXVhc2hmc19jb3B5X2NhY2hlKClgIGNhbGwgd2l0aCB0aG9zZSBgbWVtYWxsb2Nfbm9mc18uLi5gIGNhbGxzLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGFwcHJvYWNoIEkgd291bGQgZXhwZWN0IHRvIHNlZSBmb3IgcHJvcGVyIEZTIHJlY2xhaW0gcHJvdGVjdGlvbi4gSSYjMzk7bSB0YWtpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGlzIHBhdHRlcm4sIEkgbWlnaHQgYmUgdXNpbmcgaXQgbXlzZWxmLiBUaGUgaGVhZGVyIGZpbGVzIGFyZSBiZWluZyBjbGVhbmVkIHVwIGFuZCB0aGUgZmxhZyBpdHNlbGYgaXMgYmVpbmcgcmVtb3ZlZCBhbmQgcmVudW1iZXJlZCwgYW5kIEkmIzM5O20gdXBkYXRpbmcgbXkgbWVudGFsIG1hcCBvZiB3aGVyZSB0aGUgZmxhZ3MgYXJlLiBUaGUgYG1tL2ZpbGVtYXAuY2AgY2hhbmdlIG1ha2VzIHNlbnNlOiBpdCYjMzk7cyByZW1vdmluZyBhIGNoZWNrIHJlbGF0ZWQgdG8gdGhlIGZsYWcuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHN0dWZmLCBob25lc3RseSwgbG9va3MgcHJldHR5IGNsZWFuLgoKTm93LCBteSBrZXkgY29uY2VybjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlza3M/IEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIEtBU0FOIGlzc3Vlcywgb3IgcG90ZW50aWFsIGRlYWRsb2Nrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhIHNjZW5hcmlvIHdoZXJlIHdlJiMzOTtyZSBsZWFraW5nIGluZm9ybWF0aW9uIG9yIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24uIEkgY2FuJiMzOTt0IHNlZSBhbnl0aGluZyBvYnZpb3VzIHRoYXQgd291bGQgY2F1c2UgYSBwcm9ibGVtIHdpdGggc3RydWN0IHBhZGRpbmcuIEkmIzM5O20gY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYnVmZmVycywgbm8gY2hhbmdlcyB0byBkYXRhIGxlbmd0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIGJyYW5jaGluZy4gVGhlIHBhdGNoIGlzIHNvbGVseSBmb2N1c2VkIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIChHRlAgZmxhZ3MpIGFuZCBwYWdlIGNhY2hlIGZvbGlvIHJldHJpZXZhbCBmbGFncyAoRkdQIGZsYWdzKSBhbmQgRlMgcmVjbGFpbSBkZWFkbG9jayBhdm9pZGFuY2UsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgaXQgbG9va3MgbGlrZSBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIGNvbmNlcm5zLiBJJiMzOTttIGFsc28gY29uZmlybWluZyBpdCB3b3VsZG4mIzM5O3QgaW1wYWN0IHRob3NlIEtBU0FOL0xPQ0tERVAgZG9tYWlucy4KCkkmIzM5O20gbm93IHJ1bm5pbmcgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEgaW4gbXkgaGVhZDogS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLiBDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcnM/IE5vLiBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLiBCb3VuZHMgY2hlY2tzL3VuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBoZXJlLgoKQmFzZWQgb24gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29tZm9ydGFibGUgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUuIEkmIzM5O20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZGVwcmVjYXRlZCBGR1BfTk9GUyBmbGFnIGZyb20gdGhlIHBhZ2UgY2FjaGUgZm9saW8gYWNxdWlzaXRpb24gQVBJcyBhbmQgYWRqdXN0cyBjYWxsIHNpdGVzIGFjcm9zcyB2YXJpb3VzIGZpbGVzeXN0ZW1zIChFUk9GUywgRVhUNCwgTkZTLCBOVEZTLCBTcXVhc2hGUykgdG8gcmVseSBvbiBtYXBwaW5nIEdGUCBtYXNrcyBvciBzY29wZWQgbWVtYWxsb2Nfbm9mc19zYXZlKCkvbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgY29udGV4dHMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgYWxsb2NhdGlvbiByZWNsYWltIGZsYWdzIChHRlAvRkdQIGZsYWdzKSBhbmQgZmlsZXN5c3RlbSByZWN1cnNpb24vZGVhZGxvY2sgcHJldmVudGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29udHJvbCBmbG93IGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoZS5nLiwgcmVjbGFpbSByZWN1cnNpb24gb3IgbG9ja2luZyBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGRlcHJlY2F0ZWQgRkdQX05PRlMgZmxhZyBmcm9tIHRoZSBwYWdlIGNhY2hlIGZvbGlvIGFjcXVpc2l0aW9uIEFQSXMgYW5kIGFkanVzdHMgY2FsbCBzaXRlcyBhY3Jvc3MgdmFyaW91cyBmaWxlc3lzdGVtcyAoRVJPRlMsIEVYVDQsIE5GUywgTlRGUywgU3F1YXNoRlMpIHRvIHJlbHkgb24gbWFwcGluZyBHRlAgbWFza3Mgb3Igc2NvcGVkIG1lbWFsbG9jX25vZnNfc2F2ZSgpL21lbWFsbG9jX25vZnNfcmVzdG9yZSgpIGNvbnRleHRzLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGFsbG9jYXRpb24gcmVjbGFpbSBmbGFncyAoR0ZQL0ZHUCBmbGFncykgYW5kIGZpbGVzeXN0ZW0gcmVjdXJzaW9uL2RlYWRsb2NrIHByZXZlbnRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbnRyb2wgZmxvdyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKGUuZy4sIHJlY2xhaW0gcmVjdXJzaW9uIG9yIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQyOjQzLjI5MDU0NDYzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMzkxMTM0MTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJOVEZTX0ZTXCIsXG4gICAgXCJOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTlwiLFxuICAgIFwiU1FVQVNIRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xcIixcbiAgICBcInNxdWFzaGZzX2NvcHlfY2FjaGVcIixcbiAgICBcImV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YVwiLFxuICAgIFwibnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBkZXByZWNhdGVkIEZHUF9OT0ZTIGZsYWcgZnJvbSB0aGUgcGFnZSBjYWNoZSBmb2xpbyBhY3F1aXNpdGlvbiBBUElzIGFuZCBhZGp1c3RzIGNhbGwgc2l0ZXMgYWNyb3NzIHZhcmlvdXMgZmlsZXN5c3RlbXMgKEVST0ZTLCBFWFQ0LCBORlMsIE5URlMsIFNxdWFzaEZTKSB0byByZWx5IG9uIG1hcHBpbmcgR0ZQIG1hc2tzIG9yIHNjb3BlZCBtZW1hbGxvY19ub2ZzX3NhdmUoKS9tZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSBjb250ZXh0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGFsbG9jYXRpb24gcmVjbGFpbSBmbGFncyAoR0ZQL0ZHUCBmbGFncykgYW5kIGZpbGVzeXN0ZW0gcmVjdXJzaW9uL2RlYWRsb2NrIHByZXZlbnRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbnRyb2wgZmxvdyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKGUuZy4sIHJlY2xhaW0gcmVjdXJzaW9uIG9yIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgRkdQX05PRlMgZmxhZyBmcm9tIGNvcmUgcGFnZSBjYWNoZSBBUElzIChfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wpIGFuZCBhZGp1c3RzIGZvbGlvIGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJlY2xhaW0gY29udGV4dCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgc3F1YXNoZnMsIGVyb2ZzLCBudGZzLCBhbmQgbmZzKS4gSXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBpbnRyb2R1Y2VzIHNjb3BlZCBOT0ZTIGNvbnRleHRzIChtZW1hbGxvY19ub2ZzX3NhdmUvcmVzdG9yZSkgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gSS9PIGFuZCBjYWNoaW5nIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbWVtb3J5IHJlY2xhaW0gYW5kIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0Mjo0My4yOTA1NDk0NTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzkzNDYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUyNDM1NmQ3YWM2NWUwZjliZGVkZjY3MzFmNmFhMzgyMmQ5MDc0N2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMzAgMDQ6NDI6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcXG5pbmRleCA2NTk3NGU1N2FlYmZiLi44NGIzY2RjOGU4OGYxIDEwMDY0NFxcbi0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXFxuQEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmFzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGdvZmZfdCBpbmRleClcXG4ge1xcbiBcXHRyZXR1cm4gX19maWxlbWFwX2dldF9mb2xpbyhhcywgaW5kZXgsXFxuLVxcdFxcdFxcdEZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULFxcbitcXHRcXHRcXHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXFxuIFxcdFxcdFxcdHJlYWRhaGVhZF9nZnBfbWFzayhhcykgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXFxuaW5kZXggY2VlZTY5YTY2NDgyYi4uMTg4NGFiYjA5NjE0MCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXFxuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xcbkBAIC02MDEsOSArNjAxLDcgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeVxcbi1cXHQgKiBzdGFydGVkICovXFxuLVxcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxcbitcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXFxuIFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcXG5AQCAtNzM0LDcgKzczMiw3IEBAIGludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfYmg7XFxuIFxcdH1cXG4gXFxuLVxcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxcbitcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXFxuIFxcdFxcdFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXFxuaW5kZXggNDkzOTQxMjNiZDA5Ni4uZTM0MTI1YThhMmUyOCAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvZGlyLmNcXG4rKysgYi9mcy9uZnMvZGlyLmNcXG5AQCAtNDQ3LDcgKzQ0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKm5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4gXFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbi1cXHRcXHRcXHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcXG4rXFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxcbiBcXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcXG4gXFx0aWYgKElTX0VSUihmb2xpbykpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmMgYi9mcy9udGZzL2lub2RlLmNcXG5pbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvaW5vZGUuY1xcbisrKyBiL2ZzL250ZnMvaW5vZGUuY1xcbkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLFxcbiBcXHRtYXJrX21mdF9yZWNvcmRfZGlydHkoY3R4LVxcdTAwM2VudGZzX2lubyk7XFxuIFxcbiBcXHQvKiBLZWVwIHRoZSBmaXJzdCBwYWdlIGNsZWFuIGFuZCB1cHRvZGF0ZSAqL1xcbi1cXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUyxcXG4rXFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLFxcbiBcXHRcXHRcXHRcXHQgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcXG4gXFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvd29mLmMgYi9mcy9udGZzL3dvZi5jXFxuaW5kZXggOGY4NGMyMjEyZWVlYy4uYzk4MWI0YTNiNjk1OSAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL3dvZi5jXFxuKysrIGIvZnMvbnRmcy93b2YuY1xcbkBAIC00NjQsMTAgKzQ2NCw5IEBAIHN0YXRpYyBpbnQgbnRmc193b2ZfY29sbGVjdF9kZXN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRmb2xpbyA9IHRhcmdldDtcXG4gXFx0XFx0XFx0aXNfdGFyZ2V0ID0gdHJ1ZTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKFxcbi1cXHRcXHRcXHRcXHRtYXBwaW5nLCBpbmRleCxcXG4tXFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyB8IEZHUF9OT1dBSVQsXFxuLVxcdFxcdFxcdFxcdEdGUF9OT0ZTKTtcXG4rXFx0XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbitcXHRcXHRcXHRcXHRcXHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXFxuK1xcdFxcdFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbiBcXHRcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbiBcXHRcXHRcXHRpc190YXJnZXQgPSBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvZmlsZS5jIGIvZnMvc3F1YXNoZnMvZmlsZS5jXFxuaW5kZXggZDgzNTk0Y2U5MWQyMy4uMzRjNTUwYTI2NmJjZiAxMDA2NDRcXG4tLS0gYS9mcy9zcXVhc2hmcy9maWxlLmNcXG4rKysgYi9mcy9zcXVhc2hmcy9maWxlLmNcXG5AQCAtMzk4LDYgKzM5OCw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRzdHJ1Y3Qgc3F1YXNoZnNfc2JfaW5mbyAqbXNibGsgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mc19pbmZvO1xcbiBcXHRpbnQgaSwgbWFzayA9ICgxIFxcdTAwM2NcXHUwMDNjIChtc2Jsay1cXHUwMDNlYmxvY2tfbG9nIC0gUEFHRV9TSElGVCkpIC0gMTtcXG4gXFx0aW50IHN0YXJ0X2luZGV4ID0gZm9saW8tXFx1MDAzZWluZGV4IFxcdTAwMjYgfm1hc2ssIGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4IHwgbWFzaztcXG4rXFx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIExvb3AgY29weWluZyBkYXRhYmxvY2sgaW50byBwYWdlcy4gIEFzIHRoZSBkYXRhYmxvY2sgbGlrZWx5IGNvdmVyc1xcbkBAIC00MTUsNyArNDE2LDcgQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcbiBcXHRcXHRwdXNoX2ZvbGlvID0gKGkgPT0gZm9saW8tXFx1MDAzZWluZGV4KSA/IGZvbGlvIDpcXG4gXFx0XFx0XFx0X19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpLFxcbi1cXHRcXHRcXHRcXHRcXHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcXG4rXFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxcbiBcXHRcXHRcXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcXG4gXFxuIFxcdFxcdGlmIChJU19FUlIocHVzaF9mb2xpbykpXFxuQEAgLTQzMCw2ICs0MzEsOCBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0aWYgKGkgIT0gZm9saW8tXFx1MDAzZWluZGV4KVxcbiBcXHRcXHRcXHRmb2xpb19wdXQocHVzaF9mb2xpbyk7XFxuIFxcdH1cXG4rXFxuK1xcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzKTtcXG4gfVxcbiBcXG4gLyogUmVhZCBkYXRhYmxvY2sgc3RvcmVkIHBhY2tlZCBpbnNpZGUgYSBmcmFnbWVudCAodGFpbC1lbmQgcGFja2VkIGJsb2NrKSAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuaW5kZXggMGFkZmE2NjA1NjUzZC4uYmZmOGI3MjY0ZmIwMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTY5Nyw3ICs2OTcsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiAgKiAgIGZvbGlvIGlzIGFscmVhZHkgaW4gY2FjaGUuICBJZiB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZCwgdW5sb2NrIGl0XFxuICAqICAgYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGNhbiBkbyB0aGUgc2FtZSBkYW5jZS5cXG4gICogKiAlRkdQX1dSSVRFIC0gVGhlIGZvbGlvIHdpbGwgYmUgd3JpdHRlbiB0byBieSB0aGUgY2FsbGVyLlxcbi0gKiAqICVGR1BfTk9GUyAtIF9fR0ZQX0ZTIHdpbGwgZ2V0IGNsZWFyZWQgaW4gZ2ZwLlxcbiAgKiAqICVGR1BfTk9XQUlUIC0gRG9uJ3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suXFxuICAqICogJUZHUF9TVEFCTEUgLSBXYWl0IGZvciB0aGUgZm9saW8gdG8gYmUgc3RhYmxlIChmaW5pc2hlZCB3cml0ZWJhY2spXFxuICAqICogJUZHUF9ET05UQ0FDSEUgLSBVbmNhY2hlZCBidWZmZXJlZCBJT1xcbkBAIC03MTAsMTEgKzcwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7XFxuICNkZWZpbmUgRkdQX0xPQ0tcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwMilcXG4gI2RlZmluZSBGR1BfQ1JFQVRcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwNClcXG4gI2RlZmluZSBGR1BfV1JJVEVcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcXG4tI2RlZmluZSBGR1BfTk9GU1xcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxcbi0jZGVmaW5lIEZHUF9OT1dBSVRcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcXG4tI2RlZmluZSBGR1BfRk9SX01NQVBcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcXG4tI2RlZmluZSBGR1BfU1RBQkxFXFx0XFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXFxuLSNkZWZpbmUgRkdQX0RPTlRDQUNIRVxcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxcbisjZGVmaW5lIEZHUF9OT1dBSVRcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcXG4rI2RlZmluZSBGR1BfRk9SX01NQVBcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcXG4rI2RlZmluZSBGR1BfU1RBQkxFXFx0XFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXFxuKyNkZWZpbmUgRkdQX0RPTlRDQUNIRVxcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxcbiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKVxcdCgoKF9fZm9yY2UgdW5zaWduZWQpZmdmKSBcXHUwMDNlXFx1MDAzZSAyNilcXHQvKiB0b3AgNiBiaXRzICovXFxuIFxcbiAjZGVmaW5lIEZHUF9XUklURUJFR0lOXFx0XFx0KEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSlcXG5AQCAtOTI5LDcgKzkyNyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmdyYWJfY2FjaGVfcGFnZV9ub3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdHBnb2ZmX3QgaW5kZXgpXFxuIHtcXG4gXFx0cmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCxcXG4tXFx0XFx0XFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXFxuK1xcdFxcdFxcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcXG4gXFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxcbmluZGV4IGQ3YzZhOTQyYWE3ZTAuLmY3NmJlMTE0MWIwNjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXFxuQEAgLTM3MiwxMyArMzcyLDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1hbGxvY19ub2lvX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKVxcbiB9XFxuIFxcbiAvKipcXG4tICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gTWFya3MgaW1wbGljaXQgR0ZQX05PRlMgYWxsb2NhdGlvbiBzY29wZS5cXG4rICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS5cXG4gICpcXG4tICogVGhpcyBmdW5jdGlvbnMgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgR0ZQX05PRlMgYWxsb2NhdGlvbiBzY29wZS5cXG4tICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc29cXG4tICogdGhleSBhcmUgc2FmZSBmb3IgdGhlIEZTIGNyaXRpY2FsIHNlY3Rpb24gZnJvbSB0aGUgYWxsb2NhdGlvbiByZWN1cnNpb25cXG4tICogcG9pbnQgb2Ygdmlldy4gVXNlIG1lbWFsbG9jX25vZnNfcmVzdG9yZSB0byBlbmQgdGhlIHNjb3BlIHdpdGggZmxhZ3NcXG4tICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cXG4rICogQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgY2FsbGluZ1xcbisgKiBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGNhbGxpbmcgaW50byBmaWxlc3lzdGVtc1xcbisgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsXFxuKyAqIGJ1dCAoZm9yIGV4YW1wbGUpIGlub2RlcyB3aWxsIG5vdCBiZS5cXG4rICpcXG4rICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2tcXG4rICogd2hpY2ggd291bGQgYmUgbmVlZGVkIGJ5IEZTIHJlY2xhaW0uICBXaGlsZSB3ZSBjb3VsZCB0aGVvcmV0aWNhbGx5XFxuKyAqIGNhbGwgaW50byBhIGRpZmZlcmVudCBmaWxlc3lzdGVtIGluIHRoaXMgY2FzZSwgaXQgY2FuIGJlIGEgZGVlcCBjYWxsXFxuKyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuXFxuKyAqXFxuKyAqIEZpbGVzeXN0ZW1zIG9mdGVuIGNob29zZSB0byBpbmNvcnBvcmF0ZSBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBhcyBwYXJ0XFxuKyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbFxcbisgKiBzZW5zZSwgaXQgaGFzIG11Y2ggdGhlIHNhbWUgZWZmZWN0IGFzIG5lc3RlZCBqb3VybmFsIHRyYW5zYWN0aW9uc1xcbisgKiBhcmUgZWl0aGVyIHByb2hpYml0ZWQgb3IgZXhwZW5zaXZlLlxcbisgKlxcbisgKiBBbHNvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUgaG9sZGluZ1xcbisgKiBhIGZpbGUgZm9saW8gbG9ja2VkLiAgSGlnaCBvcmRlciBhbGxvY2F0aW9ucyAoc3VjaCBhcyB0aG9zZSByZXF1ZXN0ZWRcXG4rICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uXFxuICAqXFxuICAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gaXMgc2FmZSB0byBiZSB1c2VkIGZyb20gYW55IGNvbnRleHQuXFxuICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuXFxuQEAgLTM4OSwxMCArNDAyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1lbWFsbG9jX25vZnNfc2F2ZSh2b2lkKVxcbiB9XFxuIFxcbiAvKipcXG4tICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlIC0gRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUuXFxuKyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZCBmaWxlc3lzdGVtIHJlY2xhaW0gc2NvcGUuXFxuICAqIEBmbGFnczogRmxhZ3MgdG8gcmVzdG9yZS5cXG4gICpcXG4tICogRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19ub2ZzX3NhdmUgZnVuY3Rpb24uXFxuKyAqIEVuZHMgdGhlIGltcGxpY2l0IG1lbW9yeSBhbGxvY2F0aW9uIHNjb3BlIHN0YXJ0ZWQgYnlcXG4rICogbWVtYWxsb2Nfbm9mc19zYXZlKCkuICBUaGlzIG1heSBub3QgZW5hYmxlIGFjY2VzcyB0byBmaWxlc3lzdGVtIHJlY2xhaW1cXG4rICogaWYgaXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRpbWUgbWVtYWxsb2Nfbm9mc19zYXZlKCkgd2FzIGNhbGxlZC5cXG4gICogQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmbGFncyBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlXFxuICAqIHBhaXJpbmcgbWVtYWxsb2Nfbm9mc19zYXZlIGNhbGwuXFxuICAqL1xcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcXG5pbmRleCA2YWZlYzYzNjg4MWZiLi5lNjU4MDI5MWYyMTg1IDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC0xOTk0LDggKzE5OTQsNiBAQCBzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFxuIFxcdFxcdGlmICgoZmdwX2ZsYWdzIFxcdTAwMjYgRkdQX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpXFxuIFxcdFxcdFxcdGdmcCB8PSBfX0dGUF9XUklURTtcXG4tXFx0XFx0aWYgKGZncF9mbGFncyBcXHUwMDI2IEZHUF9OT0ZTKVxcbi1cXHRcXHRcXHRnZnAgXFx1MDAyNj0gfl9fR0ZQX0ZTO1xcbiBcXHRcXHRpZiAoZmdwX2ZsYWdzIFxcdTAwMjYgRkdQX05PV0FJVCkge1xcbiBcXHRcXHRcXHRnZnAgXFx1MDAyNj0gfkdGUF9LRVJORUw7XFxuIFxcdFxcdFxcdGdmcCB8PSBHRlBfTk9XQUlUO1xcbmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jXFxuaW5kZXggNmU1NTYzMjkwMjg3ZS4uOWMxMTZkNGJhOTYzYSAxMDA2NDRcXG4tLS0gYS9tbS9yZWFkYWhlYWQuY1xcbisrKyBiL21tL3JlYWRhaGVhZC5jXFxuQEAgLTIyNywxNyArMjI3LDcgQEAgdm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbiBcXHRnZnBfdCBnZnBfbWFzayA9IHJlYWRhaGVhZF9nZnBfbWFzayhtYXBwaW5nKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBtYXJrID0gVUxPTkdfTUFYLCBpID0gMDtcXG4gXFx0dW5zaWduZWQgaW50IG1pbl9ucnBhZ2VzID0gbWFwcGluZ19taW5fZm9saW9fbnJwYWdlcyhtYXBwaW5nKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFBhcnR3YXkgdGhyb3VnaCB0aGUgcmVhZGFoZWFkIG9wZXJhdGlvbiwgd2Ugd2lsbCBoYXZlIGFkZGVkXFxuLVxcdCAqIGxvY2tlZCBwYWdlcyB0byB0aGUgcGFnZSBjYWNoZSwgYnV0IHdpbGwgbm90IHlldCBoYXZlIHN1Ym1pdHRlZFxcbi1cXHQgKiB0aGVtIGZvciBJL08uICBBZGRpbmcgYW5vdGhlciBwYWdlIG1heSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSxcXG4tXFx0ICogd2hpY2ggY2FuIHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0uICBUZWxsaW5nIHRoZSBWTSB3ZSdyZSBpblxcbi1cXHQgKiB0aGUgbWlkZGxlIG9mIGEgZmlsZXN5c3RlbSBvcGVyYXRpb24gd2lsbCBjYXVzZSBpdCB0byBub3RcXG4tXFx0ICogdG91Y2ggZmlsZS1iYWNrZWQgcGFnZXMsIHByZXZlbnRpbmcgYSBkZWFkbG9jay4gIE1vc3QgKGFsbD8pXFxuLVxcdCAqIGZpbGVzeXN0ZW1zIGFscmVhZHkgc3BlY2lmeSBfX0dGUF9OT0ZTIGluIHRoZWlyIG1hcHBpbmcnc1xcbi1cXHQgKiBnZnBfbWFzaywgYnV0IGxldCdzIGJlIGV4cGxpY2l0IGhlcmUuXFxuLVxcdCAqL1xcbitcXHQvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrKTtcXG5AQCAtNTEyLDcgKzUwMiw3IEBAIHZvaWQgcGFnZV9jYWNoZV9yYV9vcmRlcihzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbiBcXG4gXFx0cmEtXFx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xcbiBcXG4tXFx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xcbitcXHQvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqL1xcbiBcXHRub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDI6NDMuNzE1MTc3OTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjgxMTQ3NDAzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTlRGU19GU1wiLFxuICAgIFwiTlRGU19GU19XT0ZfQ09NUFJFU1NJT05cIixcbiAgICBcIlNRVUFTSEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19maWxlbWFwX2dldF9mb2xpb19tcG9sXCIsXG4gICAgXCJzcXVhc2hmc19jb3B5X2NhY2hlXCIsXG4gICAgXCJleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFcIixcbiAgICBcIm50ZnNfcmVhZF93b2ZfY29tcHJlc3NlZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIEZHUF9OT0ZTIGZsYWcgZnJvbSBjb3JlIHBhZ2UgY2FjaGUgQVBJcyAoX19maWxlbWFwX2dldF9mb2xpb19tcG9sKSBhbmQgYWRqdXN0cyBmb2xpbyBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIGNvbnRleHQgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIHNxdWFzaGZzLCBlcm9mcywgbnRmcywgYW5kIG5mcykuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgaW50cm9kdWNlcyBzY29wZWQgTk9GUyBjb250ZXh0cyAobWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmUpIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIEkvTyBhbmQgY2FjaGluZyBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIG1lbW9yeSByZWNsYWltIGFuZCBsb2NraW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTI0MzU2ZDdhYzY1ZTBmOWJkZWRmNjczMWY2YWEzODIyZDkwNzQ3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbmluZGV4IDY1OTc0ZTU3YWViZmIuLjg0YjNjZGM4ZTg4ZjEgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICplcm9mc19ncmFiX2ZvbGlvX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXMsXG4gXHRcdFx0XHRcdFx0ICAgIHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIF9fZmlsZW1hcF9nZXRfZm9saW8oYXMsIGluZGV4LFxuLVx0XHRcdEZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULFxuK1x0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRyZWFkYWhlYWRfZ2ZwX21hc2soYXMpIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi4xODg0YWJiMDk2MTQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTYwMSw5ICs2MDEsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0LyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeVxuLVx0ICogc3RhcnRlZCAqL1xuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4rXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcbkBAIC03MzQsNyArNzMyLDcgQEAgaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbiBcdH1cbiBcbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuK1x0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLFxuIFx0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xuaW5kZXggNDkzOTQxMjNiZDA5Ni4uZTM0MTI1YThhMmUyOCAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtNDQ3LDcgKzQ0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKm5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbitcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jXG5pbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5jXG4rKysgYi9mcy9udGZzL2lub2RlLmNcbkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLFxuIFx0bWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC1cdTAwM2VudGZzX2lubyk7XG4gXG4gXHQvKiBLZWVwIHRoZSBmaXJzdCBwYWdlIGNsZWFuIGFuZCB1cHRvZGF0ZSAqL1xuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4rXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4gXHRcdFx0XHQgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvd29mLmMgYi9mcy9udGZzL3dvZi5jXG5pbmRleCA4Zjg0YzIyMTJlZWVjLi5jOTgxYjRhM2I2OTU5IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy93b2YuY1xuKysrIGIvZnMvbnRmcy93b2YuY1xuQEAgLTQ2NCwxMCArNDY0LDkgQEAgc3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0Zm9saW8gPSB0YXJnZXQ7XG4gXHRcdFx0aXNfdGFyZ2V0ID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8oXG4tXHRcdFx0XHRtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMgfCBGR1BfTk9XQUlULFxuLVx0XHRcdFx0R0ZQX05PRlMpO1xuK1x0XHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbitcdFx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxuK1x0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdFx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0XHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0XHRpc190YXJnZXQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9maWxlLmMgYi9mcy9zcXVhc2hmcy9maWxlLmNcbmluZGV4IGQ4MzU5NGNlOTFkMjMuLjM0YzU1MGEyNjZiY2YgMTAwNjQ0XG4tLS0gYS9mcy9zcXVhc2hmcy9maWxlLmNcbisrKyBiL2ZzL3NxdWFzaGZzL2ZpbGUuY1xuQEAgLTM5OCw2ICszOTgsNyBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzcXVhc2hmc19zYl9pbmZvICptc2JsayA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuIFx0aW50IGksIG1hc2sgPSAoMSBcdTAwM2NcdTAwM2MgKG1zYmxrLVx1MDAzZWJsb2NrX2xvZyAtIFBBR0VfU0hJRlQpKSAtIDE7XG4gXHRpbnQgc3RhcnRfaW5kZXggPSBmb2xpby1cdTAwM2VpbmRleCBcdTAwMjYgfm1hc2ssIGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4IHwgbWFzaztcbitcdHVuc2lnbmVkIGludCBub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4gXG4gXHQvKlxuIFx0ICogTG9vcCBjb3B5aW5nIGRhdGFibG9jayBpbnRvIHBhZ2VzLiAgQXMgdGhlIGRhdGFibG9jayBsaWtlbHkgY292ZXJzXG5AQCAtNDE1LDcgKzQxNiw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRwdXNoX2ZvbGlvID0gKGkgPT0gZm9saW8tXHUwMDNlaW5kZXgpID8gZm9saW8gOlxuIFx0XHRcdF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaSxcbi1cdFx0XHRcdFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXG4rXHRcdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXG4gXHRcdGlmIChJU19FUlIocHVzaF9mb2xpbykpXG5AQCAtNDMwLDYgKzQzMSw4IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRpZiAoaSAhPSBmb2xpby1cdTAwM2VpbmRleClcbiBcdFx0XHRmb2xpb19wdXQocHVzaF9mb2xpbyk7XG4gXHR9XG4rXG4rXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mcyk7XG4gfVxuIFxuIC8qIFJlYWQgZGF0YWJsb2NrIHN0b3JlZCBwYWNrZWQgaW5zaWRlIGEgZnJhZ21lbnQgKHRhaWwtZW5kIHBhY2tlZCBibG9jaykgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAwYWRmYTY2MDU2NTNkLi5iZmY4YjcyNjRmYjAyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtNjk3LDcgKzY5Nyw2IEBAIHBnb2ZmX3QgcGFnZV9jYWNoZV9wcmV2X21pc3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gICogICBmb2xpbyBpcyBhbHJlYWR5IGluIGNhY2hlLiAgSWYgdGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQsIHVubG9jayBpdFxuICAqICAgYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGNhbiBkbyB0aGUgc2FtZSBkYW5jZS5cbiAgKiAqICVGR1BfV1JJVEUgLSBUaGUgZm9saW8gd2lsbCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBjYWxsZXIuXG4tICogKiAlRkdQX05PRlMgLSBfX0dGUF9GUyB3aWxsIGdldCBjbGVhcmVkIGluIGdmcC5cbiAgKiAqICVGR1BfTk9XQUlUIC0gRG9uJ3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suXG4gICogKiAlRkdQX1NUQUJMRSAtIFdhaXQgZm9yIHRoZSBmb2xpbyB0byBiZSBzdGFibGUgKGZpbmlzaGVkIHdyaXRlYmFjaylcbiAgKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU9cbkBAIC03MTAsMTEgKzcwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7XG4gI2RlZmluZSBGR1BfTE9DS1x0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwMilcbiAjZGVmaW5lIEZHUF9DUkVBVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwNClcbiAjZGVmaW5lIEZHUF9XUklURVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcbi0jZGVmaW5lIEZHUF9OT0ZTXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuLSNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbi0jZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcbi0jZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4tI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxuKyNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcbisjZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbisjZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4rI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuICNkZWZpbmUgRkdGX0dFVF9PUkRFUihmZ2YpXHQoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgXHUwMDNlXHUwMDNlIDI2KVx0LyogdG9wIDYgYml0cyAqL1xuIFxuICNkZWZpbmUgRkdQX1dSSVRFQkVHSU5cdFx0KEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSlcbkBAIC05MjksNyArOTI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ3JhYl9jYWNoZV9wYWdlX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbitcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuaW5kZXggZDdjNmE5NDJhYTdlMC4uZjc2YmUxMTQxYjA2NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG5AQCAtMzcyLDEzICszNzIsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX25vaW9fcmVzdG9yZSh1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gfVxuIFxuIC8qKlxuLSAqIG1lbWFsbG9jX25vZnNfc2F2ZSAtIE1hcmtzIGltcGxpY2l0IEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4rICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb25zIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4tICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc29cbi0gKiB0aGV5IGFyZSBzYWZlIGZvciB0aGUgRlMgY3JpdGljYWwgc2VjdGlvbiBmcm9tIHRoZSBhbGxvY2F0aW9uIHJlY3Vyc2lvblxuLSAqIHBvaW50IG9mIHZpZXcuIFVzZSBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUgdG8gZW5kIHRoZSBzY29wZSB3aXRoIGZsYWdzXG4tICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cbisgKiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBjYWxsaW5nXG4rICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBjYWxsaW5nIGludG8gZmlsZXN5c3RlbXNcbisgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsXG4rICogYnV0IChmb3IgZXhhbXBsZSkgaW5vZGVzIHdpbGwgbm90IGJlLlxuKyAqXG4rICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2tcbisgKiB3aGljaCB3b3VsZCBiZSBuZWVkZWQgYnkgRlMgcmVjbGFpbS4gIFdoaWxlIHdlIGNvdWxkIHRoZW9yZXRpY2FsbHlcbisgKiBjYWxsIGludG8gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSBpbiB0aGlzIGNhc2UsIGl0IGNhbiBiZSBhIGRlZXAgY2FsbFxuKyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuXG4rICpcbisgKiBGaWxlc3lzdGVtcyBvZnRlbiBjaG9vc2UgdG8gaW5jb3Jwb3JhdGUgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gYXMgcGFydFxuKyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbFxuKyAqIHNlbnNlLCBpdCBoYXMgbXVjaCB0aGUgc2FtZSBlZmZlY3QgYXMgbmVzdGVkIGpvdXJuYWwgdHJhbnNhY3Rpb25zXG4rICogYXJlIGVpdGhlciBwcm9oaWJpdGVkIG9yIGV4cGVuc2l2ZS5cbisgKlxuKyAqIEFsc28gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSB3aGlsZSBob2xkaW5nXG4rICogYSBmaWxlIGZvbGlvIGxvY2tlZC4gIEhpZ2ggb3JkZXIgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgdGhvc2UgcmVxdWVzdGVkXG4rICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uXG4gICpcbiAgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgdXNlZCBmcm9tIGFueSBjb250ZXh0LlxuICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuXG5AQCAtMzg5LDEwICs0MDIsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2Nfbm9mc19zYXZlKHZvaWQpXG4gfVxuIFxuIC8qKlxuLSAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZHMgdGhlIGltcGxpY2l0IEdGUF9OT0ZTIHNjb3BlLlxuKyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZCBmaWxlc3lzdGVtIHJlY2xhaW0gc2NvcGUuXG4gICogQGZsYWdzOiBGbGFncyB0byByZXN0b3JlLlxuICAqXG4tICogRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19ub2ZzX3NhdmUgZnVuY3Rpb24uXG4rICogRW5kcyB0aGUgaW1wbGljaXQgbWVtb3J5IGFsbG9jYXRpb24gc2NvcGUgc3RhcnRlZCBieVxuKyAqIG1lbWFsbG9jX25vZnNfc2F2ZSgpLiAgVGhpcyBtYXkgbm90IGVuYWJsZSBhY2Nlc3MgdG8gZmlsZXN5c3RlbSByZWNsYWltXG4rICogaWYgaXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRpbWUgbWVtYWxsb2Nfbm9mc19zYXZlKCkgd2FzIGNhbGxlZC5cbiAgKiBBbHdheXMgbWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIGZsYWdzIGlzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGVcbiAgKiBwYWlyaW5nIG1lbWFsbG9jX25vZnNfc2F2ZSBjYWxsLlxuICAqL1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNmFmZWM2MzY4ODFmYi4uZTY1ODAyOTFmMjE4NSAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTk5NCw4ICsxOTk0LDYgQEAgc3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICgoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfV1JJVEUpIFx1MDAyNlx1MDAyNiBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpXG4gXHRcdFx0Z2ZwIHw9IF9fR0ZQX1dSSVRFO1xuLVx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfTk9GUylcbi1cdFx0XHRnZnAgXHUwMDI2PSB+X19HRlBfRlM7XG4gXHRcdGlmIChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9OT1dBSVQpIHtcbiBcdFx0XHRnZnAgXHUwMDI2PSB+R0ZQX0tFUk5FTDtcbiBcdFx0XHRnZnAgfD0gR0ZQX05PV0FJVDtcbmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jXG5pbmRleCA2ZTU1NjMyOTAyODdlLi45YzExNmQ0YmE5NjNhIDEwMDY0NFxuLS0tIGEvbW0vcmVhZGFoZWFkLmNcbisrKyBiL21tL3JlYWRhaGVhZC5jXG5AQCAtMjI3LDE3ICsyMjcsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4gXHRnZnBfdCBnZnBfbWFzayA9IHJlYWRhaGVhZF9nZnBfbWFzayhtYXBwaW5nKTtcbiBcdHVuc2lnbmVkIGxvbmcgbWFyayA9IFVMT05HX01BWCwgaSA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgbWluX25ycGFnZXMgPSBtYXBwaW5nX21pbl9mb2xpb19ucnBhZ2VzKG1hcHBpbmcpO1xuLVxuLVx0Lypcbi1cdCAqIFBhcnR3YXkgdGhyb3VnaCB0aGUgcmVhZGFoZWFkIG9wZXJhdGlvbiwgd2Ugd2lsbCBoYXZlIGFkZGVkXG4tXHQgKiBsb2NrZWQgcGFnZXMgdG8gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aWxsIG5vdCB5ZXQgaGF2ZSBzdWJtaXR0ZWRcbi1cdCAqIHRoZW0gZm9yIEkvTy4gIEFkZGluZyBhbm90aGVyIHBhZ2UgbWF5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LFxuLVx0ICogd2hpY2ggY2FuIHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0uICBUZWxsaW5nIHRoZSBWTSB3ZSdyZSBpblxuLVx0ICogdGhlIG1pZGRsZSBvZiBhIGZpbGVzeXN0ZW0gb3BlcmF0aW9uIHdpbGwgY2F1c2UgaXQgdG8gbm90XG4tXHQgKiB0b3VjaCBmaWxlLWJhY2tlZCBwYWdlcywgcHJldmVudGluZyBhIGRlYWRsb2NrLiAgTW9zdCAoYWxsPylcbi1cdCAqIGZpbGVzeXN0ZW1zIGFscmVhZHkgc3BlY2lmeSBfX0dGUF9OT0ZTIGluIHRoZWlyIG1hcHBpbmcnc1xuLVx0ICogZ2ZwX21hc2ssIGJ1dCBsZXQncyBiZSBleHBsaWNpdCBoZXJlLlxuLVx0ICovXG4rXHQvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqL1xuIFx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2spO1xuQEAgLTUxMiw3ICs1MDIsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiBcbiBcdHJhLVx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xuIFxuLVx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xuK1x0LyogQWxsb2NhdGluZyB3aXRoIGxvY2tlZCBmb2xpb3MgKi9cbiBcdG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0Mjo0My43MTUxNzk1MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODQ2NzI5NTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGRvZXMuIEl0IHNlZW1zIGxpa2UgaXQncyBzeXN0ZW1hdGljYWxseSByZW1vdmluZyB0aGUgYEZHUF9OT0ZTYCBmbGFnIGZyb20gdmFyaW91cyBwYWdlIGNhY2hlLXJlbGF0ZWQgZnVuY3Rpb24gY2FsbHMgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtczogYGVyb2ZzYCwgYGV4dDRgLCBgbmZzYCwgYG50ZnNgLCBgc3F1YXNoZnNgLCBhbmQgc29tZSBjb3JlIGBtbWAgYW5kIGBpbmNsdWRlYCBoZWFkZXJzLiBFc3NlbnRpYWxseSwgaXQncyBjbGVhbmluZyB1cCB0aGUgd2F5IE5PRlMgKE5vIEZpbGVzeXN0ZW0pIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQuIEkgc2VlIHRoaXMgaGFwcGVuaW5nIHRocm91Z2ggYSBjb25zaXN0ZW50IHJlbW92YWwgb2YgdGhlIGZsYWcgYW5kIHVzaW5nIG5ldyBtZXRob2RzIHN1Y2ggYXMgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBhbmQgYG1hcHBpbmdfZ2ZwX21hc2soKWAgb3Igc2NvcGVkIE5PRlMgY29udGV4dCBpbnN0ZWFkLlxuXG5UaGUgYEZHUF9OT0ZTYCBmbGFnIHdhcyB1c2VkIHRvIHN0cmlwIGBfX0dGUF9GU2AgZnJvbSBhbGxvY2F0aW9uIGZsYWdzLiBOb3csIGl0IGFwcGVhcnMgdGhlIGtlcm5lbCBpcyBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLCB3aGljaCBpcyBnb29kIOKAkyBjbGVhbmVyIGFuZCBwb3RlbnRpYWxseSBzYWZlci4gVGhleSdyZSB1cGRhdGluZyB0aGUgZmxhZyBkZWZpbml0aW9ucyBpbiBgcGFnZW1hcC5oYCBhbmQgcmVtb3ZpbmcgdGhlIGhhbmRsaW5nIG9mIGBGR1BfTk9GU2AgaW4gYG1tL2ZpbGVtYXAuY2AuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgYSBwdXJlbHkgaW50ZXJuYWwgcmVmYWN0b3JpbmcsIG9yIGRvZXMgaXQgaW50cm9kdWNlIGNoYW5nZXMgdGhhdCBtaWdodCBiZSBleHBsb2l0YWJsZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgKmxvb2tzKiBsaWtlIGEgY2xlYW51cCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGNoYW5nZXMgaW4gbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgdGhhdCBjb3VsZCB0cmlnZ2VyIHNvbWV0aGluZyBpbnRlcmVzdGluZy5cblxuQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBzaG91bGQgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhlIGtlcm5lbCBtYWludGFpbmVyIGd1aWRlbGluZXMgZm9yIGRldGVybWluaW5nIGlmIGEgcGF0Y2ggaXMgV29ydGhGdXp6aW5nLiBMZXQncyBzZWUuLi4gdGhlIHJ1bGVzIG1lbnRpb24gdGhhdCBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBhbmQgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBhcmVuJ3QgdHlwaWNhbGx5IHdvcnRoIGZ1enppbmcsIG5vciBhcmUgdW5yZWFjaGFibGUgY29kZSBwYXRocyBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycycgdGVhcmRvd24uXG5cblNvLCBpcyB0aGlzIGZ1bmN0aW9uYWwgb3IganVzdCBhIHJlZmFjdG9yaW5nPyBMZXQncyB6b29tIGluIG9uIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50YCBhbmQgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAuIFdoYXQgYXJlIHRob3NlIGZ1bmN0aW9ucyBkb2luZyBpbiBgZXh0NGA/IEhtbSwgdGhlIGNvbW1lbnQgc2F5cyB3ZSBjYW4ndCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYmVjYXVzZSB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBzdGFydGVkLiBTbywgYmVmb3JlIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLCBpcyB0aGVyZSBhIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgY2FsbCwgb3IgaXMgYFBGX01FTUFMTE9DX05PRlNgIGFscmVhZHkgc2V0PyBJdCBsb29rcyBsaWtlIGBleHQ0X2pvdXJuYWxfc3RhcnRgIHByb2JhYmx5IHRha2VzIGNhcmUgb2YgdGhhdC4gSSBzaG91bGQgZ3JlcCBmb3IgYG1lbWFsbG9jX25vZnNfc2F2ZWAgd2l0aGluIHRoZSBgZnMvZXh0NGAgb3IgYGZzL2piZDJgIGRpcmVjdG9yeSB0byBjb25maXJtLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gdGhpcyBwYXRjaCAqaXMqIHByb2JhYmx5IGEgcmVmYWN0b3JpbmcsIGJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qIHRoYXQgdGhlIGV4aXN0aW5nIGxvZ2ljIGlzIHRha2luZyBOT0ZTIGludG8gYWNjb3VudCBiZWZvcmUgSSBydWxlIGl0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NDowMi4xODI0Nzg0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTg4Njg3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtYWxsb2Nfbm9mc19zYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZnMvYnRyZnMvYWNsLmM9NTg9aW50IF9fYnRyZnNfc2V0X2FjbChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2J0cmZzL2FjbC5jLTg1LVxcdFxcdCAqL1xcbmZzL2J0cmZzL2FjbC5jOjg2OlxcdFxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL2FjbC5jLTg3LVxcdFxcdHZhbHVlID0gcG9zaXhfYWNsX3RvX3hhdHRyKFxcdTAwMjZpbml0X3VzZXJfbnMsIGFjbCwgXFx1MDAyNnNpemUsIEdGUF9LRVJORUwpO1xcbi0tXFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYz03OTE9c3RydWN0IGxpc3RfaGVhZCAqYnRyZnNfZ2V0X3dvcmtzcGFjZShzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywgaW50IHR5cGUsIGludCBsZXZlbClcXG4tLVxcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmMtODM3LVxcdCAqL1xcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6ODM4OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmMtODM5LVxcdHdvcmtzcGFjZSA9IGFsbG9jX3dvcmtzcGFjZShmc19pbmZvLCB0eXBlLCBsZXZlbCk7XFxuLS1cXG5mcy9idHJmcy9kaXNrLWlvLmM9ODE3PXN0cnVjdCBidHJmc19yb290ICpidHJmc19jcmVhdGVfdHJlZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucyxcXG4tLVxcbmZzL2J0cmZzL2Rpc2staW8uYy04MzAtXFx0ICovXFxuZnMvYnRyZnMvZGlzay1pby5jOjgzMTpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9kaXNrLWlvLmMtODMyLVxcdHJvb3QgPSBidHJmc19hbGxvY19yb290KGZzX2luZm8sIG9iamVjdGlkLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmZzL2J0cmZzL2Rpc2staW8uYz00NzUwPXN0YXRpYyB2b2lkIGJ0cmZzX2Rlc3Ryb3lfZGVsYWxsb2NfaW5vZGVzKHN0cnVjdCBidHJmc19yb290ICpyb290KVxcbi0tXFxuZnMvYnRyZnMvZGlzay1pby5jLTQ3NzItXFxuZnMvYnRyZnMvZGlzay1pby5jOjQ3NzM6XFx0XFx0XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvZGlzay1pby5jLTQ3NzQtXFx0XFx0XFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLS1cXG5mcy9idHJmcy9kaXNrLWlvLmM9NDg2Mz1zdGF0aWMgdm9pZCBidHJmc19jbGVhbnVwX2JnX2lvKHN0cnVjdCBidHJmc19ibG9ja19ncm91cCAqY2FjaGUpXFxuLS1cXG5mcy9idHJmcy9kaXNrLWlvLmMtNDg3MC1cXG5mcy9idHJmcy9kaXNrLWlvLmM6NDg3MTpcXHRcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9kaXNrLWlvLmMtNDg3Mi1cXHRcXHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4tLVxcbmZzL2J0cmZzL2ZpbGUtaXRlbS5jPTgzOT1pbnQgYnRyZnNfY3N1bV9vbmVfYmlvKHN0cnVjdCBidHJmc19iaW8gKmJiaW8sIGJvb2wgYXN5bmMpXFxuLS1cXG5mcy9idHJmcy9maWxlLWl0ZW0uYy04NDctXFxuZnMvYnRyZnMvZmlsZS1pdGVtLmM6ODQ4OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL2ZpbGUtaXRlbS5jLTg0OS1cXHRzdW1zID0ga3Z6YWxsb2MoYnRyZnNfb3JkZXJlZF9zdW1fc2l6ZShmc19pbmZvLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSksXFxuLS1cXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmM9ODM9c3RhdGljIHN0cnVjdCBpbm9kZSAqX19sb29rdXBfZnJlZV9zcGFjZV9pbm9kZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCxcXG4tLVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYy0xMTgtXFx0ICovXFxuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jOjExOTpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMtMTIwLVxcdGlub2RlID0gYnRyZnNfaWdldF9wYXRoKGxvY2F0aW9uLm9iamVjdGlkLCByb290LCBwYXRoKTtcXG4tLVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtdHJlZS5jPTE1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyAqYWxsb2NfYml0bWFwKHUzMiBiaXRtYXBfc2l6ZSlcXG4tLVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtdHJlZS5jLTE2OS1cXHQgKi9cXG5mcy9idHJmcy9mcmVlLXNwYWNlLXRyZWUuYzoxNzA6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvZnJlZS1zcGFjZS10cmVlLmMtMTcxLVxcdHJldCA9IGt2emFsbG9jKGJpdG1hcF9yb3VuZGVkX3NpemUsIEdGUF9LRVJORUwpO1xcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz0xMjY9c3RhdGljIGludCBkYXRhX3JlbG9jX3ByaW50X3dhcm5pbmdfaW5vZGUodTY0IGludW0sIHU2NCBvZmZzZXQsIHU2NCBudW1fYnl0ZXMsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jLTE2Mi1cXG5mcy9idHJmcy9pbm9kZS5jOjE2MzpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9pbm9kZS5jLTE2NC1cXHRpcGF0aCA9IGluaXRfaXBhdGgoNDA5NiwgbG9jYWxfcm9vdCwgXFx1MDAyNndhcm4tXFx1MDAzZXBhdGgpO1xcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz0xNTY1PXN0YXRpYyBib29sIHJ1bl9kZWxhbGxvY19jb21wcmVzc2VkKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jLTE1NzgtXFxuZnMvYnRyZnMvaW5vZGUuYzoxNTc5OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL2lub2RlLmMtMTU4MC1cXHRjdHggPSBrdm1hbGxvY19mbGV4KCpjdHgsIGNodW5rcywgbnVtX2NodW5rcyk7XFxuLS1cXG5mcy9idHJmcy9zY3J1Yi5jPTQ4Mj1zdGF0aWMgaW50IHNjcnViX3ByaW50X3dhcm5pbmdfaW5vZGUodTY0IGludW0sIHU2NCBvZmZzZXQsIHU2NCBudW1fYnl0ZXMsXFxuLS1cXG5mcy9idHJmcy9zY3J1Yi5jLTUyNy1cXHQgKi9cXG5mcy9idHJmcy9zY3J1Yi5jOjUyODpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9zY3J1Yi5jLTUyOS1cXHRpcGF0aCA9IGluaXRfaXBhdGgoNDA5NiwgbG9jYWxfcm9vdCwgc3dhcm4tXFx1MDAzZXBhdGgpO1xcbi0tXFxuZnMvYnRyZnMvc2NydWIuYz0zMDQzPWludCBidHJmc19zY3J1Yl9kZXYoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIHU2NCBkZXZpZCwgdTY0IHN0YXJ0LFxcbi0tXFxuZnMvYnRyZnMvc2NydWIuYy0zMTM0LVxcdCAqL1xcbmZzL2J0cmZzL3NjcnViLmM6MzEzNTpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9zY3J1Yi5jLTMxMzYtXFx0aWYgKCFpc19kZXZfcmVwbGFjZSkge1xcbi0tXFxuZnMvYnRyZnMvc3lzZnMuYz0xODE4PXZvaWQgYnRyZnNfc3lzZnNfYWRkX2Jsb2NrX2dyb3VwX3R5cGUoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwICpjYWNoZSlcXG4tLVxcbmZzL2J0cmZzL3N5c2ZzLmMtMTgzMy1cXHQgKi9cXG5mcy9idHJmcy9zeXNmcy5jOjE4MzQ6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvc3lzZnMuYy0xODM1LVxcbi0tXFxuZnMvYnRyZnMvc3lzZnMuYz0yMTM0PWludCBidHJmc19zeXNmc19hZGRfZGV2aWNlKHN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZSlcXG4tLVxcbmZzL2J0cmZzL3N5c2ZzLmMtMjE0OS1cXG5mcy9idHJmcy9zeXNmcy5jOjIxNTA6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvc3lzZnMuYy0yMTUxLVxcbi0tXFxuZnMvYnRyZnMvdHJhbnNhY3Rpb24uYz0xNjYxPXN0YXRpYyBub2lubGluZSBpbnQgY3JlYXRlX3BlbmRpbmdfc25hcHNob3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsXFxuLS1cXG5mcy9idHJmcy90cmFuc2FjdGlvbi5jLTE2OTYtXFx0ICovXFxuZnMvYnRyZnMvdHJhbnNhY3Rpb24uYzoxNjk3OlxcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy90cmFuc2FjdGlvbi5jLTE2OTgtXFx0cGVuZGluZy1cXHUwMDNlZXJyb3IgPSBmc2NyeXB0X3NldHVwX2ZpbGVuYW1lKFxcdTAwMjZwYXJlbnRfaW5vZGUtXFx1MDAzZXZmc19pbm9kZSxcXG4tLVxcbmZzL2J0cmZzL3RyZWUtbG9nLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgYnRyZnNfaW5vZGUgKmJ0cmZzX2lnZXRfbG9nZ2luZyh1NjQgb2JqZWN0aWQsIHN0cnVjdCBidHJmc19yb290ICpyb290KVxcbi0tXFxuZnMvYnRyZnMvdHJlZS1sb2cuYy0yNjMtXFx0ICovXFxuZnMvYnRyZnMvdHJlZS1sb2cuYzoyNjQ6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvdHJlZS1sb2cuYy0yNjUtXFx0aW5vZGUgPSBidHJmc19pZ2V0KG9iamVjdGlkLCByb290KTtcXG4tLVxcbmZzL2J0cmZzL3ZvbHVtZXMuYz03NTk9c3RhdGljIG5vaW5saW5lIHN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZV9saXN0X2FkZChjb25zdCBjaGFyICpwYXRoLFxcbi0tXFxuZnMvYnRyZnMvdm9sdW1lcy5jLTg0MC1cXG5mcy9idHJmcy92b2x1bWVzLmM6ODQxOlxcdFxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3ZvbHVtZXMuYy04NDItXFx0XFx0ZGV2aWNlID0gYnRyZnNfYWxsb2NfZGV2aWNlKE5VTEwsIFxcdTAwMjZkZXZpZCxcXG4tLVxcbmZzL2J0cmZzL3ZvbHVtZXMuYz03NDcxPXN0YXRpYyBzdHJ1Y3QgYnRyZnNfZGV2aWNlICphZGRfbWlzc2luZ19kZXYoc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKmZzX2RldmljZXMsXFxuLS1cXG5mcy9idHJmcy92b2x1bWVzLmMtNzQ4My1cXG5mcy9idHJmcy92b2x1bWVzLmM6NzQ4NDpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy92b2x1bWVzLmMtNzQ4NS1cXHRkZXZpY2UgPSBidHJmc19hbGxvY19kZXZpY2UoTlVMTCwgXFx1MDAyNmRldmlkLCBkZXZfdXVpZCwgTlVMTCk7XFxuLS1cXG5mcy9idHJmcy94YXR0ci5jPTQ4Mz1zdGF0aWMgaW50IGJ0cmZzX2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2J0cmZzL3hhdHRyLmMtNDk1LVxcdCAqL1xcbmZzL2J0cmZzL3hhdHRyLmM6NDk2OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3hhdHRyLmMtNDk3LVxcdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXFx1MDAzZW5hbWUgIT0gTlVMTDsgeGF0dHIrKykge1xcbi0tXFxuZnMvYnRyZnMvem9uZWQuYz04MzA9c3RhdGljIGludCBzYl9sb2dfbG9jYXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJsa196b25lICp6b25lcyxcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmMtODU3LVxcbmZzL2J0cmZzL3pvbmVkLmM6ODU4OlxcdFxcdFxcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy96b25lZC5jLTg1OS1cXHRcXHRcXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxcbi0tXFxuZnMvYnRyZnMvem9uZWQuYz05NzU9aW50IGJ0cmZzX2FkdmFuY2Vfc2JfbG9nKHN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZSwgaW50IG1pcnJvcilcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmMtMTAwOS1cXG5mcy9idHJmcy96b25lZC5jOjEwMTA6XFx0XFx0XFx0XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3pvbmVkLmMtMTAxMS1cXHRcXHRcXHRcXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGRldmljZS1cXHUwMDNlYmRldixcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmM9MTAzMD1pbnQgYnRyZnNfcmVzZXRfc2JfbG9nX3pvbmVzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBtaXJyb3IpXFxuLS1cXG5mcy9idHJmcy96b25lZC5jLTEwNDgtXFxuZnMvYnRyZnMvem9uZWQuYzoxMDQ5OlxcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy96b25lZC5jLTEwNTAtXFx0cmV0ID0gYmxrZGV2X3pvbmVfbWdtdChiZGV2LCBSRVFfT1BfWk9ORV9SRVNFVCxcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmM9MTE2ND1pbnQgYnRyZnNfcmVzZXRfZGV2aWNlX3pvbmUoc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlLCB1NjQgcGh5c2ljYWwsXFxuLS1cXG5mcy9idHJmcy96b25lZC5jLTExNzAtXFx0KmJ5dGVzID0gMDtcXG5mcy9idHJmcy96b25lZC5jOjExNzE6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3pvbmVkLmMtMTE3Mi1cXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGRldmljZS1cXHUwMDNlYmRldiwgUkVRX09QX1pPTkVfUkVTRVQsXFxuLS1cXG5mcy9idHJmcy96b25lZC5jPTEzMjQ9c3RhdGljIGludCBidHJmc19sb2FkX3pvbmVfaW5mbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywgaW50IHpvbmVfaWR4LFxcbi0tXFxuZnMvYnRyZnMvem9uZWQuYy0xMzgyLVxcbmZzL2J0cmZzL3pvbmVkLmM6MTM4MzpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy96b25lZC5jLTEzODQtXFx0cmV0ID0gYnRyZnNfZ2V0X2Rldl96b25lKGRldmljZSwgaW5mby1cXHUwMDNlcGh5c2ljYWwsIFxcdTAwMjZ6b25lKTtcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmM9MjMyMT1zdGF0aWMgaW50IHJlYWRfem9uZV9pbmZvKHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLCB1NjQgbG9naWNhbCxcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmMtMjM0MS1cXG5mcy9idHJmcy96b25lZC5jOjIzNDI6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvem9uZWQuYy0yMzQzLVxcdG5taXJyb3JzID0gKGludCliaW9jLVxcdTAwM2VudW1fc3RyaXBlcztcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmM9MjUxMT1zdGF0aWMgaW50IGNhbGxfem9uZV9maW5pc2goc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwICpibG9ja19ncm91cCxcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmMtMjUyNy1cXG5mcy9idHJmcy96b25lZC5jOjI1Mjg6XFx0XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3pvbmVkLmMtMjUyOS1cXHRcXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGRldmljZS1cXHUwMDNlYmRldiwgUkVRX09QX1pPTkVfRklOSVNILFxcbi0tXFxuZnMvYnRyZnMvem9uZWQuYz0zMTEyPWludCBidHJmc19yZXNldF91bnVzZWRfYmxvY2tfZ3JvdXBzKHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvLCB1NjQgbnVtX2J5dGVzKVxcbi0tXFxuZnMvYnRyZnMvem9uZWQuYy0zMTc2LVxcbmZzL2J0cmZzL3pvbmVkLmM6MzE3NzpcXHRcXHRcXHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvem9uZWQuYy0zMTc4LVxcdFxcdFxcdHJldCA9IGJsa2Rldl96b25lX21nbXQoc3RyaXBlLVxcdTAwM2VkZXYtXFx1MDAzZWJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxcbi0tXFxuZnMvYnRyZnMvenN0ZC5jPTI4NT1zdHJ1Y3QgbGlzdF9oZWFkICp6c3RkX2dldF93b3Jrc3BhY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGludCBsZXZlbClcXG4tLVxcbmZzL2J0cmZzL3pzdGQuYy0zMDEtXFxuZnMvYnRyZnMvenN0ZC5jOjMwMjpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy96c3RkLmMtMzAzLVxcdHdzID0genN0ZF9hbGxvY193b3Jrc3BhY2UoZnNfaW5mbywgbGV2ZWwpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9pby5jPTc1PXN0YXRpYyBpbnQgY2FjaGVmaWxlc19yZWFkKHN0cnVjdCBuZXRmc19jYWNoZV9yZXNvdXJjZXMgKmNyZXMsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL2lvLmMtMTU3LVxcdHRyYWNlX2NhY2hlZmlsZXNfcmVhZChvYmplY3QsIGZpbGVfaW5vZGUoZmlsZSksIGtpLVxcdTAwM2Vpb2NiLmtpX3BvcywgbGVuIC0gc2tpcHBlZCk7XFxuZnMvY2FjaGVmaWxlcy9pby5jOjE1ODpcXHRvbGRfbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2NhY2hlZmlsZXMvaW8uYy0xNTktXFx0cmV0ID0gY2FjaGVmaWxlc19pbmplY3RfcmVhZF9lcnJvcigpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9pby5jPTI4MT1pbnQgX19jYWNoZWZpbGVzX3dyaXRlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pby5jLTMyOC1cXHR0cmFjZV9jYWNoZWZpbGVzX3dyaXRlKG9iamVjdCwgZmlsZV9pbm9kZShmaWxlKSwga2ktXFx1MDAzZWlvY2Iua2lfcG9zLCBsZW4pO1xcbmZzL2NhY2hlZmlsZXMvaW8uYzozMjk6XFx0b2xkX25vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9jYWNoZWZpbGVzL2lvLmMtMzMwLVxcdHJldCA9IGNhY2hlZmlsZXNfaW5qZWN0X3dyaXRlX2Vycm9yKCk7XFxuLS1cXG5mcy9jZXBoL21kc19jbGllbnQuYz00MDExPXN0YXRpYyB2b2lkIGhhbmRsZV9yZXBseShzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IGNlcGhfbXNnICptc2cpXFxuLS1cXG5mcy9jZXBoL21kc19jbGllbnQuYy00MTY4LVxcdCAqL1xcbmZzL2NlcGgvbWRzX2NsaWVudC5jOjQxNjk6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2NlcGgvbWRzX2NsaWVudC5jLTQxNzAtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xODg1PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfd3JpdGVwYWdlc19kb3duX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE4ODctXFx0cGVyY3B1X2Rvd25fcmVhZChcXHUwMDI2RVhUNF9TQihzYiktXFx1MDAzZXNfd3JpdGVwYWdlc19yd3NlbSk7XFxuZnMvZXh0NC9leHQ0Lmg6MTg4ODpcXHRyZXR1cm4gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvZXh0NC9leHQ0LmgtMTg4OS19XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xODk3PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfd3JpdGVwYWdlc19kb3duX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xODk5LVxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc193cml0ZXBhZ2VzX3J3c2VtKTtcXG5mcy9leHQ0L2V4dDQuaDoxOTAwOlxcdHJldHVybiBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9leHQ0L2V4dDQuaC0xOTAxLX1cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE5MDk9c3RhdGljIGlubGluZSBpbnQgZXh0NF9mY19sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xOTExLVxcdG11dGV4X2xvY2soXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2ZjX2xvY2spO1xcbmZzL2V4dDQvZXh0NC5oOjE5MTI6XFx0cmV0dXJuIG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2V4dDQvZXh0NC5oLTE5MTMtfVxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuYz0zMz1zdGF0aWMgaGFuZGxlX3QgKmV4dDRfZ2V0X25vam91cm5hbCh2b2lkKVxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuYy00Ny1cXHRcXHQgKi9cXG5mcy9leHQ0L2V4dDRfamJkMi5jOjQ4OlxcdFxcdGhhbmRsZS1cXHUwMDNlc2F2ZWRfYWxsb2NfY29udGV4dCA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2V4dDQvZXh0NF9qYmQyLmMtNDktXFx0XFx0Y3VycmVudC1cXHUwMDNlam91cm5hbF9pbmZvID0gaGFuZGxlO1xcbi0tXFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jPTYwPXN0YXRpYyBpbnQgbWV4dF9mb2xpb19kb3VibGVfbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlMSwgc3RydWN0IGlub2RlICppbm9kZTIsXFxuLS1cXG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtNzctXFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jOjc4OlxcdGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jLTc5LVxcdGZncF9mbGFncyB8PSBmZ2Zfc2V0X29yZGVyKGxlbik7XFxuLS1cXG5mcy9mMmZzL2YyZnMuaD0zMDQ3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmMmZzX2dyYWJfY2FjaGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9mMmZzL2YyZnMuaC0zMDcwLVxcbmZzL2YyZnMvZjJmcy5oOjMwNzE6XFx0ZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9mMmZzL2YyZnMuaC0zMDcyLVxcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwgRkdQX1dSSVRFQkVHSU4sXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYz0xOTg3PXN0YXRpYyBpbnQgX19mMmZzX2lzc3VlX2Rpc2NhcmRfem9uZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy0yMDIyLVxcdFxcdFxcdHRyYWNlX2YyZnNfaXNzdWVfcmVzZXRfem9uZShiZGV2LCBibGtzdGFydCk7XFxuZnMvZjJmcy9zZWdtZW50LmM6MjAyMzpcXHRcXHRcXHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvZjJmcy9zZWdtZW50LmMtMjAyNC1cXHRcXHRcXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxcbi0tXFxuZnMvZjJmcy9zZWdtZW50LmM9NTI4NT1zdGF0aWMgaW50IGNoZWNrX3pvbmVfd3JpdGVfcG9pbnRlcihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy01MzQ1LVxcbmZzL2YyZnMvc2VnbWVudC5jOjUzNDY6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2YyZnMvc2VnbWVudC5jLTUzNDctXFx0cmV0ID0gYmxrZGV2X3pvbmVfbWdtdChmZGV2LVxcdTAwM2ViZGV2LCBSRVFfT1BfWk9ORV9GSU5JU0gsXFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTU1Nz1zdGF0aWMgdm9pZCB2aXJ0aW9fZnNfcmVxdWVzdF9kaXNwYXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtNTkyLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6NTkzOlxcdFxcdGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvZnVzZS92aXJ0aW9fZnMuYy01OTQtXFx0XFx0cmV0ID0gdmlydGlvX2ZzX2VucXVldWVfcmVxKGZzdnEsIHJlcSwgdHJ1ZSwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYz0xNTk9c3RhdGljIGludCBram91cm5hbGQyKHZvaWQgKmFyZylcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jLTE4MS1cXHQgKi9cXG5mcy9qYmQyL2pvdXJuYWwuYzoxODI6XFx0bWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvamJkMi9qb3VybmFsLmMtMTgzLVxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTMxMj1zdGF0aWMgaW50IHN0YXJ0X3RoaXNfaGFuZGxlKGpvdXJuYWxfdCAqam91cm5hbCwgaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy00NDktXFx0ICovXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjQ1MDpcXHRoYW5kbGUtXFx1MDAzZXNhdmVkX2FsbG9jX2NvbnRleHQgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtNDUxLVxcdHJldHVybiAwO1xcbi0tXFxuZnMvbmFtZWkuYz02NTQzPWludCBwYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbilcXG4tLVxcbmZzL25hbWVpLmMtNjU1NC1cXHRpZiAobm9mcylcXG5mcy9uYW1laS5jOjY1NTU6XFx0XFx0ZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9uYW1laS5jLTY1NTYtXFx0ZXJyID0gYW9wcy1cXHUwMDNld3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgMCwgbGVuLTEsIFxcdTAwMjZmb2xpbywgXFx1MDAyNmZzZGF0YSk7XFxuLS1cXG5mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXQuYz00NDY9ZmZfbGF5b3V0X2FsbG9jX2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbGgsXFxuLS1cXG5mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXQuYy01OTEtXFx0XFx0XFx0ZWxzZSB7XFxuZnMvbmZzL2ZsZXhmaWxlbGF5b3V0L2ZsZXhmaWxlbGF5b3V0LmM6NTkyOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvbmZzL2ZsZXhmaWxlbGF5b3V0L2ZsZXhmaWxlbGF5b3V0LmMtNTkzLVxcbi0tXFxuZnMvbmZzL25mczRzdGF0ZS5jPTI1NDI9c3RhdGljIHZvaWQgbmZzNF9zdGF0ZV9tYW5hZ2VyKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApXFxuLS1cXG5mcy9uZnMvbmZzNHN0YXRlLmMtMjU1Mi1cXHQgKi9cXG5mcy9uZnMvbmZzNHN0YXRlLmM6MjU1MzpcXHRtZW1mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL25mcy9uZnM0c3RhdGUuYy0yNTU0LVxcbi0tXFxuZnMvbmZzL25mczRzdGF0ZS5jLTI2NjEtXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNscC1cXHUwMDNlY2xfc3RhdGUpKSB7XFxuZnMvbmZzL25mczRzdGF0ZS5jOjI2NjI6XFx0XFx0XFx0bWVtZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9uZnMvbmZzNHN0YXRlLmMtMjY2My1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL250ZnMvbGNuYWxsb2MuYz0xODM9c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19jbHVzdGVyX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBzNjQgc3RhcnRfdmNuLFxcbi0tXFxuZnMvbnRmcy9sY25hbGxvYy5jLTIxNy1cXG5mcy9udGZzL2xjbmFsbG9jLmM6MjE4OlxcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvbnRmcy9sY25hbGxvYy5jLTIxOS1cXG4tLVxcbmZzL250ZnMvbGNuYWxsb2MuYz04NDI9czY0IF9fbnRmc19jbHVzdGVyX2ZyZWUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgc3RhcnRfdmNuLCBzNjQgY291bnQsXFxuLS1cXG5mcy9udGZzL2xjbmFsbG9jLmMtODcwLVxcdGlmIChsaWtlbHkoIWlzX3JvbGxiYWNrKSkge1xcbmZzL250ZnMvbGNuYWxsb2MuYzo4NzE6XFx0XFx0bWVtYWxsb2NfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9udGZzL2xjbmFsbG9jLmMtODcyLVxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnZvbC1cXHUwMDNlbGNuYm1wX2xvY2spO1xcbi0tXFxuZnMvbnRmcy9sY25hbGxvYy5oPTEyMD1zdGF0aWMgaW5saW5lIGludCBudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbi0tXFxuZnMvbnRmcy9sY25hbGxvYy5oLTEyNS1cXG5mcy9udGZzL2xjbmFsbG9jLmg6MTI2OlxcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvbnRmcy9sY25hbGxvYy5oLTEyNy1cXHRkb3duX3dyaXRlKFxcdTAwMjZ2b2wtXFx1MDAzZWxjbmJtcF9sb2NrKTtcXG4tLVxcbmZzL250ZnMvbWZ0LmM9MjAxMz1pbnQgbnRmc19tZnRfcmVjb3JkX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBpbnQgbW9kZSxcXG4tLVxcbmZzL250ZnMvbWZ0LmMtMjA0My1cXG5mcy9udGZzL21mdC5jOjIwNDQ6XFx0bWVtYWxsb2NfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9udGZzL21mdC5jLTIwNDUtXFxuLS1cXG5mcy9udGZzL21mdC5jPTI1MDk9aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL21mdC5jLTI1NjYtXFx0LyogQ2xlYXIgdGhlIGJpdCBpbiB0aGUgJE1GVC8kQklUTUFQIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyByZWNvcmQuICovXFxuZnMvbnRmcy9tZnQuYzoyNTY3OlxcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvbnRmcy9tZnQuYy0yNTY4LVxcdGlmIChiYXNlX25pLVxcdTAwM2VtZnRfbm8gIT0gRklMRV9NRlQpXFxuLS1cXG5mcy9udGZzL21mdC5jLTI1ODItYml0bWFwX3JvbGxiYWNrOlxcbmZzL250ZnMvbWZ0LmM6MjU4MzpcXHRtZW1hbGxvY19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL250ZnMvbWZ0LmMtMjU4NC1cXHRpZiAoYmFzZV9uaS1cXHUwMDNlbWZ0X25vICE9IEZJTEVfTUZUKVxcbi0tXFxuZnMvbnRmcy93b2YuYz0xNDc9c3RhdGljIGludCBudGZzX2JkZXZfcmVhZF9mcm9tX3JsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbi0tXFxuZnMvbnRmcy93b2YuYy0xNjUtXFxuZnMvbnRmcy93b2YuYzoxNjY6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL250ZnMvd29mLmMtMTY3LVxcdGRvd25fcmVhZChcXHUwMDI2cnVubGlzdC1cXHUwMDNlbG9jayk7XFxuLS1cXG5mcy9udGZzL3dvZi5jPTU0OT1zdGF0aWMgaW50IG50ZnNfd29mX2RlY29kZV9mb2xpb3NfZGlyZWN0KHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKndzLFxcbi0tXFxuZnMvbnRmcy93b2YuYy01NjgtXFxuZnMvbnRmcy93b2YuYzo1Njk6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL250ZnMvd29mLmMtNTcwLVxcdGFkZHIgPSB2bWFwKGRlc3QucGFnZXMsIGRlc3QubnJfcGFnZXMsIFZNX01BUCwgUEFHRV9LRVJORUwpO1xcbi0tXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYz0xNTc5PXN0YXRpYyB2b2lkIG8ybmV0X3N0YXJ0X2Nvbm5lY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYy0xNTk0LVxcdCAqL1xcbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmM6MTU5NTpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE1OTYtXFx0LyogaWYgd2UncmUgZ3JlYXRlciB3ZSBpbml0aWF0ZSB0eCwgb3RoZXJ3aXNlIHdlIGFjY2VwdCAqL1xcbi0tXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYz0xODUwPXN0YXRpYyBpbnQgbzJuZXRfYWNjZXB0X29uZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgKm1vcmUpXFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE4NjctXFx0ICovXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxODY4OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMTg2OS1cXG4tLVxcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jPTQ2Mj1pbnQgb2NmczJfZ2xvYmFsX3dyaXRlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXFxuLS1cXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy00NjktXFx0ZG93bl93cml0ZShcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo0NzA6XFx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy00NzEtXFx0ZXJyID0gb2NmczJfcWluZm9fbG9jayhpbmZvLCAxKTtcXG4tLVxcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jPTYxNz1zdGF0aWMgaW50IG9jZnMyX3N5bmNfZHF1b3RfaGVscGVyKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jLTY0MS1cXHRkb3duX3dyaXRlKFxcdTAwMjZzYl9kcW9wdChzYiktXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo2NDI6XFx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy02NDMtXFx0c3RhdHVzID0gb2NmczJfc3luY19kcXVvdChkcXVvdCk7XFxuLS1cXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYz02ODM9c3RhdGljIGludCBvY2ZzMl93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtNjk5LVxcdGRvd25fd3JpdGUoXFx1MDAyNnNiX2Rxb3B0KGRxdW90LVxcdTAwM2VkcV9zYiktXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo3MDA6XFx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy03MDEtXFx0c3RhdHVzID0gb2NmczJfbG9jYWxfd3JpdGVfZHF1b3QoZHF1b3QpO1xcbi0tXFxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmM9OTM5PXN0YXRpYyBpbnQgb2NmczJfbWFya19kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtOTgwLVxcdGRvd25fd3JpdGUoXFx1MDAyNnNiX2Rxb3B0KHNiKS1cXHUwMDNlZHFpb19zZW0pO1xcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jOjk4MTpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jLTk4Mi1cXHRzdGF0dXMgPSBvY2ZzMl9zeW5jX2RxdW90KGRxdW90KTtcXG4tLVxcbmZzL29jZnMyL3F1b3RhX2xvY2FsLmM9NDU3PXN0YXRpYyBpbnQgb2NmczJfcmVjb3Zlcl9sb2NhbF9xdW90YV9maWxlKHN0cnVjdCBpbm9kZSAqbHFpbm9kZSxcXG4tLVxcbmZzL29jZnMyL3F1b3RhX2xvY2FsLmMtNTIzLVxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnNiX2Rxb3B0KHNiKS1cXHUwMDNlZHFpb19zZW0pO1xcbmZzL29jZnMyL3F1b3RhX2xvY2FsLmM6NTI0OlxcdFxcdFxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvb2NmczIvcXVvdGFfbG9jYWwuYy01MjUtXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZkcXVvdC1cXHUwMDNlZHFfZHFiX2xvY2spO1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYz00ODA9aW50IGRxdW90X2FjcXVpcmUoc3RydWN0IGRxdW90ICpkcXVvdClcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtNDg2LVxcdG11dGV4X2xvY2soXFx1MDAyNmRxdW90LVxcdTAwM2VkcV9sb2NrKTtcXG5mcy9xdW90YS9kcXVvdC5jOjQ4NzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL2RxdW90LmMtNDg4LVxcdGlmICghdGVzdF9iaXQoRFFfUkVBRF9CLCBcXHUwMDI2ZHF1b3QtXFx1MDAzZWRxX2ZsYWdzKSkge1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYz01Mjc9aW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy01MzMtXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHF1b3QtXFx1MDAzZWRxX2xvY2spO1xcbmZzL3F1b3RhL2RxdW90LmM6NTM0OlxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvcXVvdGEvZHF1b3QuYy01MzUtXFx0aWYgKCFjbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCkpXFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTU1Mz1pbnQgZHF1b3RfcmVsZWFzZShzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy01NTktXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHF1b3QtXFx1MDAzZWRxX2xvY2spO1xcbmZzL3F1b3RhL2RxdW90LmM6NTYwOlxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvcXVvdGEvZHF1b3QuYy01NjEtXFx0LyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgbm90IHJhY2luZyB3aXRoIHNvbWUgb3RoZXIgZHFnZXQoKSAqL1xcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjEuYz0xNTk9c3RhdGljIGludCB2MV9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTY2LVxcdGRvd25fcmVhZChcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9xdW90YS9xdW90YV92MS5jOjE2NzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTY4LVxcdHJldCA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVxcdTAwMjZkcWJsayxcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YxLmM9MTg5PXN0YXRpYyBpbnQgdjFfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjEuYy0xOTYtXFx0ZG93bl93cml0ZShcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9xdW90YS9xdW90YV92MS5jOjE5NzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTk4LVxcdHJldCA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVxcdTAwMjZkcWJsayxcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9OTA9c3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMTAyLVxcdGRvd25fcmVhZChcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9xdW90YS9xdW90YV92Mi5jOjEwMzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMTA0LVxcdHJldCA9IHYyX3JlYWRfaGVhZGVyKHNiLCB0eXBlLCBcXHUwMDI2ZHFoZWFkKTtcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9MTk3PXN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMDYtXFx0ZG93bl93cml0ZShcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9xdW90YS9xdW90YV92Mi5jOjIwNzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMjA4LVxcdHNwaW5fbG9jayhcXHUwMDI2ZHFfZGF0YV9sb2NrKTtcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9MzM2PXN0YXRpYyBpbnQgdjJfcmVhZF9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0zNDItXFx0ZG93bl9yZWFkKFxcdTAwMjZkcW9wdC1cXHUwMDNlZHFpb19zZW0pO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmM6MzQzOlxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0zNDQtXFx0cmV0ID0gcXRyZWVfcmVhZF9kcXVvdChcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9MzUyPXN0YXRpYyBpbnQgdjJfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdClcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMzcwLVxcdH1cXG5mcy9xdW90YS9xdW90YV92Mi5jOjM3MTpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMzcyLVxcdHJldCA9IHF0cmVlX3dyaXRlX2RxdW90KFxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYz0zODM9c3RhdGljIGludCB2Ml9yZWxlYXNlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpXFxuLS1cXG5mcy9xdW90YS9xdW90YV92Mi5jLTM4OS1cXHRkb3duX3dyaXRlKFxcdTAwMjZkcW9wdC1cXHUwMDNlZHFpb19zZW0pO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmM6MzkwOlxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0zOTEtXFx0cmV0ID0gcXRyZWVfcmVsZWFzZV9kcXVvdChzYl9kcWluZm8oZHF1b3QtXFx1MDAzZWRxX3NiLCBkcXVvdC1cXHUwMDNlZHFfaWQudHlwZSktXFx1MDAzZWRxaV9wcml2LCBkcXVvdCk7XFxuLS1cXG5mcy9xdW90YS9xdW90YV92Mi5jPTQwND1zdGF0aWMgaW50IHYyX2dldF9uZXh0X2lkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkICpxaWQpXFxuLS1cXG5mcy9xdW90YS9xdW90YV92Mi5jLTQxMC1cXHRkb3duX3JlYWQoXFx1MDAyNmRxb3B0LVxcdTAwM2VkcWlvX3NlbSk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYzo0MTE6XFx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9xdW90YS9xdW90YV92Mi5jLTQxMi1cXHRyZXQgPSBxdHJlZV9nZXRfbmV4dF9pZChzYl9kcWluZm8oc2IsIHFpZC1cXHUwMDNldHlwZSktXFx1MDAzZWRxaV9wcml2LCBxaWQpO1xcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oPTg0ND1zdGF0aWMgaW5saW5lIHZvaWQgY2lmc19zZXJ2ZXJfbG9jayhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpXFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oLTg0NS17XFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oOjg0NjpcXHR1bnNpZ25lZCBpbnQgbm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oLTg0Ny1cXG4tLVxcbmZzL3NxdWFzaGZzL2ZpbGUuYz0zOTI9dm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9zcXVhc2hmcy9maWxlLmMtNDAwLVxcdGludCBzdGFydF9pbmRleCA9IGZvbGlvLVxcdTAwM2VpbmRleCBcXHUwMDI2IH5tYXNrLCBlbmRfaW5kZXggPSBzdGFydF9pbmRleCB8IG1hc2s7XFxuZnMvc3F1YXNoZnMvZmlsZS5jOjQwMTpcXHR1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3NxdWFzaGZzL2ZpbGUuYy00MDItXFxuLS1cXG5mcy94ZnMvc2NydWIveGZpbGUuYz0xMDg9eGZpbGVfbG9hZChcXG4tLVxcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jLTEyMy1cXG5mcy94ZnMvc2NydWIveGZpbGUuYzoxMjQ6XFx0cGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMveGZzL3NjcnViL3hmaWxlLmMtMTI1LVxcdHdoaWxlIChjb3VudCBcXHUwMDNlIDApIHtcXG4tLVxcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jPTE3MT14ZmlsZV9zdG9yZShcXG4tLVxcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jLTE5My1cXG5mcy94ZnMvc2NydWIveGZpbGUuYzoxOTQ6XFx0cGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMveGZzL3NjcnViL3hmaWxlLmMtMTk1LVxcdHdoaWxlIChjb3VudCBcXHUwMDNlIDApIHtcXG4tLVxcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jPTI0Nz14ZmlsZV9nZXRfZm9saW8oXFxuLS1cXG5mcy94ZnMvc2NydWIveGZpbGUuYy0yNjktXFxuZnMveGZzL3NjcnViL3hmaWxlLmM6MjcwOlxcdHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jLTI3MS1cXHRlcnJvciA9IHNobWVtX2dldF9mb2xpbyhpbm9kZSwgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIDAsIFxcdTAwMjZmb2xpbyxcXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jPTEwNz14ZnNfZW5kX2lvZW5kX3dyaXRlKFxcbi0tXFxuZnMveGZzL3hmc19hb3BzLmMtMTIyLVxcdCAqL1xcbmZzL3hmcy94ZnNfYW9wcy5jOjEyMzpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy94ZnMveGZzX2FvcHMuYy0xMjQtXFxuLS1cXG5mcy94ZnMveGZzX2FvcHMuYz01Mjk9eGZzX3dyaXRlYmFja19zdWJtaXQoXFxuLS1cXG5mcy94ZnMveGZzX2FvcHMuYy01NDQtXFxuZnMveGZzL3hmc19hb3BzLmM6NTQ1OlxcdFxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy94ZnNfYW9wcy5jLTU0Ni1cXHRcXHRlcnJvciA9IHhmc19yZWZsaW5rX2NvbnZlcnRfY293KFhGU19JKGlvZW5kLVxcdTAwM2Vpb19pbm9kZSksXFxuLS1cXG5mcy94ZnMveGZzX2RxdW90LmM9ODQ2PXhmc19xbV9kcWdldF9jYWNoZV9pbnNlcnQoXFxuLS1cXG5mcy94ZnMveGZzX2RxdW90LmMtODU2LVxcbmZzL3hmcy94ZnNfZHF1b3QuYzo4NTc6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy94ZnNfZHF1b3QuYy04NTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cWktXFx1MDAzZXFpX3RyZWVfbG9jayk7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz02MDg9eGZzX3pvbmVkX2Rpb193cml0ZV9lbmRfaW8oXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy02MjktXFxuZnMveGZzL3hmc19maWxlLmM6NjMwOlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy94ZnNfZmlsZS5jLTYzMS1cXHRlcnJvciA9IHhmc19kaW9fZW5kaW9fc2V0X2lzaXplKGlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MsIHNpemUpO1xcbi0tXFxuZnMveGZzL3hmc19maWxlLmM9NjM4PXhmc19kaW9fd3JpdGVfZW5kX2lvKFxcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtNjcxLVxcdCAqL1xcbmZzL3hmcy94ZnNfZmlsZS5jOjY3MjpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy94ZnMveGZzX2ZpbGUuYy02NzMtXFxuLS1cXG5mcy94ZnMveGZzX2ljYWNoZS5jPTE5NTU9eGZzX2lub2RlZ2Nfd29ya2VyKFxcbi0tXFxuZnMveGZzL3hmc19pY2FjaGUuYy0xOTgzLVxcdCAqL1xcbmZzL3hmcy94ZnNfaWNhY2hlLmM6MTk4NDpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy94ZnMveGZzX2ljYWNoZS5jLTE5ODUtXFxuLS1cXG5mcy94ZnMveGZzX2xvZ19jaWwuYz0xMzc1PXhsb2dfY2lsX3B1c2hfd29yayhcXG4tLVxcbmZzL3hmcy94ZnNfbG9nX2NpbC5jLTEzNzcte1xcbmZzL3hmcy94ZnNfbG9nX2NpbC5jOjEzNzg6XFx0dW5zaWduZWQgaW50XFx0XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy94ZnNfbG9nX2NpbC5jLTEzNzktXFx0c3RydWN0IHhmc19jaWxfY3R4XFx0KmN0eCA9XFxuLS1cXG5mcy94ZnMveGZzX2xvZ19wcml2Lmg9NjM5PXhsb2dfdmFsaWRfbHNuKFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NDowMi41NDEzNTMwNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjMzODYwNzIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gRmxhZ3MgaW4gRmlsZSBTeXN0ZW1zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZyBzaXR1YXRpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGhvdyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncywgcGFydGljdWxhcmx5IGluIGNvbnRleHRzIHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyB0cmlnZ2VyaW5nIHJlY3Vyc2l2ZSByZWNsYWltIG9yIG90aGVyIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGJlaGF2aW9ycywgYmVjYXVzZSBJIG5lZWQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgbXkgbW9kaWZpY2F0aW9ucyBpbXBhY3QgdGhlIGNvZGUgYmFzZS5cblxuRmlyc3QgdXAsIGBlcm9mc2AuIFRoZSBgZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXRgIGZ1bmN0aW9uIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHVzZSBvZiBgcmVhZGFoZWFkX2dmcF9tYXNrKGFzKSBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU1gIGFscmVhZHkgcHJldmVudHMgdGhlIGFsbG9jYXRpb24gZnJvbSBkaXJlY3RseSByZWNsYWltaW5nLCB3aGljaCBpcyBnb29kLiBUaGF0IHdhcyBhIGdvb2Qgc3RhcnQuXG5cbk5leHQsIEkgbG9va2VkIGF0IGBleHQ0YC4gVGhlIGZ1bmN0aW9ucyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgYW5kIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgIGFyZSBjYWxsZWQgd2l0aGluIGEgSkJEMiB0cmFuc2FjdGlvbiBoYW5kbGUuIFRoaXMgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHdpdGhpbiB0aGF0IGhhbmRsZSBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIGlzIGNhbGxlZCB2aWEgYHN0YXJ0X3RoaXNfaGFuZGxlKClgLiBUaGlzIG1lYW5zIHRoYXQgYWxsb2NhdGlvbnMgd2l0aGluIHRoZSBleHRlbnQgY29udmVyc2lvbiBwcm9jZXNzIGFyZSBhbHJlYWR5IGd1YXJkZWQgYWdhaW5zdCByZWN1cnNpb24uIFRoYXQncyBhIHBvaW50IGluIHRoZSBcInNhZmVcIiBjb2x1bW4uXG5cbk1vdmluZyBvbiB0byBgbmZzYCwgSSBub3RpY2VkIHRoYXQgYG5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0YCB1c2VzIGBGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVRgIGFuZCBgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKWAuIEJ1dCB3YWl0LCBpbiB0aGUgZGVlcGVyIGNhbGwsIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCB0aGUgYEZHUF9OT1dBSVRgIGZsYWcgaXMgZXhwbGljaXRseSBoYW5kbGVkLCBjbGVhcmluZyBgR0ZQX0tFUk5FTGAgYW5kIHNldHRpbmcgYEdGUF9OT1dBSVRgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgYEdGUF9OT1dBSVRgIGl0c2VsZiAqZG9lc24ndCogaGF2ZSBgX19HRlBfRlNgIG9yIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgc2V0LCBzbyB3ZSBhcmUgYWxzbyBzYWZlIGhlcmUsIGFuZCB3ZSBjYW4gYmUgc3VyZSBvZiB0aGlzIGJlaGF2aW9yLlxuXG5Ob3csIGBudGZzYC4gVGhlIGZ1bmN0aW9uIGBfX250ZnNfaW5vZGVfcmVzaWRlbnRfYXR0cl9wd3JpdGVgIGhhcyBjYWxsZXJzIGVpdGhlciBpbnNpZGUgYW4gTlRGUyBsb2NrL3RyYW5zYWN0aW9uIHdoZXJlIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgaXMgYWN0aXZlICpvciogdXNlcyBgbWFwcGluZ19nZnBfbWFza2AuIFdlIGFyZSBjb3ZlcmVkIGVpdGhlciB3YXkuIEFuZCBgbnRmc193b2ZfY29sbGVjdF9kZXN0YCBwYXNzZXMgYEZHUF9OT1dBSVRgLCB3aGljaCBjb3JyZWN0bHkgc2V0cyBgR0ZQX05PV0FJVGAuXG5cbkxvb2tpbmcgYXQgYHNxdWFzaGZzYCwgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIGV4cGxpY2l0bHkgdXNlcyBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIGFuZCBgbWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnMpYCBhcm91bmQgYSBsb29wLiBFeHBsaWNpdCBpcyBhbHdheXMgZ29vZC4gVGhhdCdzIGEgZ29vZCBhcHByb2FjaCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29udGV4dC5cblxuRmluYWxseSwgaW4gYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCwgYGdyYWJfY2FjaGVfcGFnZV9ub3dhaXRgIHVzZXMgYEZHUF9OT1dBSVRgLCBzbyBgZ2ZwYCBiZWNvbWVzIGBHRlBfTk9XQUlUYCBhbnl3YXkuIFRoZSBrZXkgdGFrZWF3YXkgZnJvbSB0aGlzIHNlZW1zIHRvIGJlIHRoYXQgYEZHUF9OT1dBSVRgIGlzIGNvcnJlY3RseSBoYW5kbGVkLlxuXG5UaGUgZmluYWwgcGllY2Ugb2YgdGhpcyBpcyB0aGF0IGBGR1BfTk9GU2Agd2FzIGNvbXBsZXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwhIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgcmVmZXJlbmNlcyB0byBpdC4gSSB3aWxsIHNlYXJjaCB0aGUgY29kZSB0byB2ZXJpZnkgdGhpcyByZW1vdmFsIHdhcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMzAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDQ6NDQuODc5OTYyNjg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA1MjU2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkdQX05PRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZjJmcy9kYXRhLmM9Mzg0ND1zdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvZjJmcy9kYXRhLmMtMzkwMi1cXHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXFxuZnMvZjJmcy9kYXRhLmM6MzkwMzpcXHRcXHRcXHRcXHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCB8IEZHUF9OT0ZTLFxcbmZzL2YyZnMvZGF0YS5jLTM5MDQtXFx0XFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ0OjQ2LjQ2MDQ5MzUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwOTM1NzcyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBTdWRkZW4gSW5zaWdodCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0byBsb29rIGF0IGBmcy9mMmZzL2RhdGEuY2AgaW4gdGhlIEYyRlMgZmlsZSBzeXN0ZW0gY29kZS4uLiBzcGVjaWZpY2FsbHksIEkgd29uZGVyIHdoeSBgZnMvZjJmcy9kYXRhLmNgIGlzIHVzaW5nIHRoZSBgRkdQX05PRlNgIGZsYWc/IFRoYXQncyBhbiB1bnVzdWFsIGNvbnRleHQsIGFuZCBpdCdzIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIHNjcnV0aW5pemUgbGluZSAzOTAwIGluIGBmcy9mMmZzL2RhdGEuY2AuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ1OjA3LjU1NDA3MjYzOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mMmZzL2RhdGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODk1OlxcdCNlbmRpZlxcbjM4OTY6XFx0XFxuMzg5NzpcXHRyZXBlYXQ6XFxuMzg5ODpcXHRcXHQvKlxcbjM4OTk6XFx0XFx0ICogRG8gbm90IHVzZSBGR1BfU1RBQkxFIHRvIGF2b2lkIGRlYWRsb2NrLlxcbjM5MDA6XFx0XFx0ICogV2lsbCB3YWl0IHRoYXQgYmVsb3cgd2l0aCBvdXIgSU8gY29udHJvbC5cXG4zOTAxOlxcdFxcdCAqL1xcbjM5MDI6XFx0XFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbjM5MDM6XFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcXG4zOTA0OlxcdFxcdFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbjM5MDU6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4zOTA2OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xcbjM5MDc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjM5MDg6XFx0XFx0fVxcbjM5MDk6XFx0XFxuMzkxMDpcXHRcXHQvKiBUT0RPOiBjbHVzdGVyIGNhbiBiZSBjb21wcmVzc2VkIGR1ZSB0byByYWNlIHdpdGggLndyaXRlcGFnZSAqL1xcbjM5MTE6XFx0XFxuMzkxMjpcXHRcXHQqZm9saW9wID0gZm9saW87XFxuMzkxMzpcXHRcXG4zOTE0OlxcdFxcdGlmIChmMmZzX2lzX2F0b21pY19maWxlKGlub2RlKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDU6MDcuNTU0MzE4Mjk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYxODMxNDE3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEYyRlMgQ29kZWJhc2UgLSBBIFF1aWNrIERldG91cioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBkZWVwIGluIGBmcy9mMmZzL2RhdGEuY2AgYW5kIEknbSBzZWVpbmcgYEZHUF9OT0ZTYCBiZWluZyB1c2VkLi4uIGludGVyZXN0aW5nLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYXNoZXMgdG8gdGhlIGltcGxpY2F0aW9ucyBvZiBieXBhc3NpbmcgdGhlIGZpbGUgc3lzdGVtLiBCdXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUuIFRoZSBjcnVjaWFsIGZ1bmN0aW9uIGNhbGwgbWVudGlvbmVkIGlzIGBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvYC4gTGV0IG1lIGp1bXAgb3ZlciB0byBgZnMvZjJmcy9mMmZzLmhgIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGYyZnNfZmlsZW1hcF9nZXRfZm9saW9gIGhhbmRsZXMgZGF0YSByZXRyaWV2YWwgYW5kIHdoYXQgY29uc3RyYWludHMgYXJlIGluIHBsYWNlIHdpdGggYEZHUF9OT0ZTYC4gSXQncyBhIHF1aWNrIHJhYmJpdCBob2xlIGJ1dCBuZWNlc3NhcnkgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA3MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDU6MjMuNzM3NDYyNTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzk0NjUyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZjJmc19maWxlbWFwX2dldF9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mMmZzL2NvbXByZXNzLmM9MTA4OD1zdGF0aWMgaW50IHByZXBhcmVfY29tcHJlc3Nfb3ZlcndyaXRlKHN0cnVjdCBjb21wcmVzc19jdHggKmNjLFxcbi0tXFxuZnMvZjJmcy9jb21wcmVzcy5jLTExMDktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNjLVxcdTAwM2VjbHVzdGVyX3NpemU7IGkrKykge1xcbmZzL2YyZnMvY29tcHJlc3MuYzoxMTEwOlxcdFxcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBzdGFydF9pZHggKyBpLFxcbmZzL2YyZnMvY29tcHJlc3MuYy0xMTExLVxcdFxcdFxcdFxcdGZncF9mbGFnLCBHRlBfTk9GUyk7XFxuLS1cXG5mcy9mMmZzL2NvbXByZXNzLmM9MTk1ND1ib29sIGYyZnNfbG9hZF9jb21wcmVzc2VkX2ZvbGlvKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2YyZnMvY29tcHJlc3MuYy0xOTYyLVxcbmZzL2YyZnMvY29tcHJlc3MuYzoxOTYzOlxcdGNmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8oQ09NUFJFU1NfTUFQUElORyhzYmkpLFxcbmZzL2YyZnMvY29tcHJlc3MuYy0xOTY0LVxcdFxcdFxcdFxcdGJsa2FkZHIsIEZHUF9MT0NLIHwgRkdQX05PV0FJVCwgR0ZQX05PRlMpO1xcbi0tXFxuZnMvZjJmcy9kYXRhLmM9MTM2MT1zdHJ1Y3QgZm9saW8gKmYyZnNfZmluZF9kYXRhX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5mcy9mMmZzL2RhdGEuYy0xMzY2LVxcbmZzL2YyZnMvZGF0YS5jOjEzNjc6XFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBGR1BfQUNDRVNTRUQsIDApO1xcbmZzL2YyZnMvZGF0YS5jLTEzNjgtXFx0aWYgKElTX0VSUihmb2xpbykpXFxuLS1cXG5mcy9mMmZzL2RhdGEuYz0zODQ0PXN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9mMmZzL2RhdGEuYy0zOTAxLVxcdCAqL1xcbmZzL2YyZnMvZGF0YS5jOjM5MDI6XFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbmZzL2YyZnMvZGF0YS5jLTM5MDMtXFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcXG4tLVxcbmZzL2YyZnMvZjJmcy5oPTMwNDc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmYyZnNfZ3JhYl9jYWNoZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2YyZnMvZjJmcy5oLTMwNzgtXFxuZnMvZjJmcy9mMmZzLmg6MzA3OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZjJmc19maWxlbWFwX2dldF9mb2xpbyhcXG5mcy9mMmZzL2YyZnMuaC0zMDgwLVxcdFxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxuZnMvZjJmcy9nYy5jPTEyMjA9c3RhdGljIGludCByYV9kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpXFxuLS1cXG5mcy9mMmZzL2djLmMtMTI5My1cXG5mcy9mMmZzL2djLmM6MTI5NDpcXHRlZm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKE1FVEFfTUFQUElORyhzYmkpLCBkbi5kYXRhX2Jsa2FkZHIsXFxuZnMvZjJmcy9nYy5jLTEyOTUtXFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQsIEdGUF9OT0ZTKTtcXG4tLVxcbmZzL2YyZnMvZ2MuYz0xMzMyPXN0YXRpYyBpbnQgbW92ZV9kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJsb2NrX3QgYmlkeCxcXG4tLVxcbmZzL2YyZnMvZ2MuYy0xNDU2LVxcbmZzL2YyZnMvZ2MuYzoxNDU3OlxcdGVmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8oTUVUQV9NQVBQSU5HKGZpby5zYmkpLCBuZXdhZGRyLFxcbmZzL2YyZnMvZ2MuYy0xNDU4LVxcdFxcdFxcdFxcdFxcdEZHUF9MT0NLIHwgRkdQX0NSRUFULCBHRlBfTk9GUyk7XFxuLS1cXG5mcy9mMmZzL25vZGUuYz0xNjUzPXN0YXRpYyB2b2lkIGZsdXNoX2lubGluZV9kYXRhKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgbmlkX3QgaW5vKVxcbi0tXFxuZnMvZjJmcy9ub2RlLmMtMTY2My1cXG5mcy9mMmZzL25vZGUuYzoxNjY0OlxcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCAwLFxcbmZzL2YyZnMvbm9kZS5jLTE2NjUtXFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0t8RkdQX05PV0FJVCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ1OjI1LjYxNjkzNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMyODg2MjUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvYC4gTGV0J3MgemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2YyZnMvZjJmcy5oYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBmb2xpby1iYXNlZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGYyZnMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyByb2xlIGluIG1hcHBpbmcgZmlsZSBkYXRhIHRvIGZvbGlvcywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGVmZmljaWVudCBJL08sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBGMkZTJ3MgZGVzaWduIGZvciBmbGFzaCBtZW1vcnkuIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHRpZXMgaW50byB0aGUgb3ZlcmFsbCBwYWdlIGNhY2hlIGltcGxlbWVudGF0aW9uLCB0aGUgZm9saW8gQVBJLCBhbmQgaG93IGYyZnMgaGFuZGxlcyBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBhbmQgYWxsb2NhdGlvbiB3aXRoaW4gaXRzIGJsb2NrLW9yaWVudGVkIHN0cnVjdHVyZS4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGxvY2tpbmcgc2VtYW50aWNzIGludm9sdmVkLCBhbmQgaG93IHRoYXQgaW1wYWN0cyBjb25jdXJyZW5jeS4gTGV0J3Mgc2VlIGhvdyBgZjJmc19maWxlbWFwX2dldF9mb2xpb2AgaGFuZGxlcyB0aGUgZGV0YWlscywgc3VjaCBhcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDI5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDU6MjkuOTQ1ODAwMjIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mMmZzL2YyZnMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDc1OlxcdFxcbjMwNzY6XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjMwNzc6XFx0fVxcbjMwNzg6XFx0XFxuMzA3OTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZjJmc19maWxlbWFwX2dldF9mb2xpbyhcXG4zMDgwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbjMwODE6XFx0XFx0XFx0XFx0XFx0ZmdmX3QgZmdwX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4zMDgyOlxcdHtcXG4zMDgzOlxcdFxcdGlmICh0aW1lX3RvX2luamVjdChGMkZTX01fU0IobWFwcGluZyksIEZBVUxUX1BBR0VfR0VUKSlcXG4zMDg0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjMwODU6XFx0XFxuMzA4NjpcXHRcXHRyZXR1cm4gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwgZmdwX2ZsYWdzLCBnZnBfbWFzayk7XFxuMzA4NzpcXHR9XFxuMzA4ODpcXHRcXG4zMDg5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmMmZzX2ZvbGlvX3B1dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHVubG9jaylcXG4zMDkwOlxcdHtcXG4zMDkxOlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXFxuMzA5MjpcXHRcXHRcXHRyZXR1cm47XFxuMzA5MzpcXHRcXG4zMDk0OlxcdFxcdGlmICh1bmxvY2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDU6MjkuOTQ1OTg3NDYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NjU2NzQ4NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRjJGUyBDb21waWxhdGlvbiBJc3N1ZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBmZWVscyBvZmYuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzLiBJIHdhcyBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgYW5kIG5vdGljZWQgc29tZSBjaGFuZ2VzIHRvIHRoZSBgZmdmX3RgIGZsYWdzLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGBGR1BfTk9GU2AuIExldCBtZSBxdWlja2x5IGNvbXBhcmUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXI6XG5cbmBgYGNcbi0jZGVmaW5lIEZHUF9OT0ZTXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuLSNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbi0jZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcbi0jZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4tI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxuKyNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcbisjZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbisjZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4rI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuYGBgXG5cbk5vdywgdGhlIGNvbmNlcm4gaXMgdGhhdCBpZiBhIGZpbGUgbGlrZSBgZjJmcy9kYXRhLmNgICp3YXNuJ3QqIHVwZGF0ZWQgd2l0aCB0aGlzIHBhdGNoLCB0aGVyZSBjb3VsZCBiZSBhIGNvbXBpbGF0aW9uIGlzc3VlLiBNYXliZSBpdCdzIGEgY29uZmxpY3Qgb3IgdGhlcmUncyBpbi10cmVlIGNvZGUgdGhhdCBzdGlsbCByZWxpZXMgb24gYEZHUF9OT0ZTYCBidXQgaXNuJ3QgZGVmaW5lZCBhbnltb3JlLiBEb2VzIHRoaXMgY29kZSBzdGlsbCBjb21waWxlPyBUaGlzIGlzIGEgcHJvYmxlbSEgTGV0IG1lIGRvdWJsZS1jaGVjayBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVwLCBgRkdQX05PRlNgIGlzIGdvbmUuIEJ1dCB3YWl0LCBJJ20gc3VyZSBJIHNhdyBgRkdQX05PRlNgIGluIGBmcy9mMmZzL2RhdGEuYzozOTAzYCB3aGVuIEkgcmFuIGBncmVwcGVyYCB0aGUgb3RoZXIgZGF5P1xuXG5UaGlzIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuIFdoeSB3b3VsZCBgZ3JlcHBlcmAgcGljayB0aGF0IHVwPyBMZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGZzL2YyZnMvZGF0YS5jYCBpcyBhY3R1YWxseSB1c2luZyBgRkdQX05PRlNgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NjowNy42MDI3Mzg3ODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2YyZnMvZGF0YS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5MDA6XFx0XFx0ICogV2lsbCB3YWl0IHRoYXQgYmVsb3cgd2l0aCBvdXIgSU8gY29udHJvbC5cXG4zOTAxOlxcdFxcdCAqL1xcbjM5MDI6XFx0XFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbjM5MDM6XFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcXG4zOTA0OlxcdFxcdFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbjM5MDU6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4zOTA2OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xcbjM5MDc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjM5MDg6XFx0XFx0fVxcbjM5MDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ2OjA3LjYwMjk3NDkzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ2Nzg1ODQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGV4cGVyaWVuY2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgRjJGUyBDb21waWxhdGlvbiBGbGFnIElzc3VlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhlIHN5c3RlbSdzIHRlbGxpbmcgbWUgYEZHUF9OT0ZTYCBpcyB1bmRlZmluZWQgd2hlbiB3ZSdyZSBjb21waWxpbmcgZm9yIEYyRlMuIFRoYXQncy4uLiB1bmV4cGVjdGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgb2ZmIOKAkyB0aGlzIHNob3VsZCBiZSBkZWZpbmVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgRjJGUyBjb21waWxhdGlvbi4gSSdtIGdldHRpbmcgYSBiYWQgZmVlbGluZyBhYm91dCB0aGlzLCBpZiBgRkdQX05PRlNgIGlzIHVuZGVmaW5lZCB0aGVuIHRoZXJlJ3MgYSBwcm9ibGVtIGhlcmUuIFRoZSBkZWZpbml0aW9uIGlzIGNsZWFybHkgdXNlZCBkdXJpbmcgRjJGUyBjb21waWxhdGlvbi5cblxuV2FpdCBhIG1pbnV0ZSwgYmVmb3JlIEkgc3RhcnQgcmlwcGluZyB0aGluZ3MgYXBhcnQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoaXMgaXNuJ3QgZGVmaW5lZCAqc29tZXdoZXJlKiBlbHNlIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0aGF0IEknbSBub3QgaW1tZWRpYXRlbHkgdGhpbmtpbmcgb2YuIExldCdzIHRyYWNlIGl0IGFuZCB2ZXJpZnkgd2hlcmUgaXQncyBiZWluZyB1c2VkIGFuZCBob3cgaXQncyBiZWluZyBkZWZpbmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIGluY2x1ZGUgb3IgYSBtYWNybyBkZWZpbml0aW9uIHRoYXQncyBvdmVycmlkaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gSSBuZWVkIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBjb21waWxlciBkaXJlY3RpdmVzLiBHb3R0YSBiZSB0aG9yb3VnaC4gVGhlcmUncyBwcm9iYWJseSBhIGxvZ2ljYWwgZXhwbGFuYXRpb24gaGVyZTsgaXQncyBqdXN0IGEgbWF0dGVyIG9mIGZpbmRpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NjoyNi4wNzA4MzY0NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDU0NTM2MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmVcXFxccytGR1BfTk9GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDY6MjguMzE2Mjk5MzAyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDc2NTkxODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGBGR1BfTk9GU2AgaXMgdW5kZWZpbmVkLCB0aGF0J3Mgd2VpcmQuICBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvbnRleHQuICBJdCB0b3VjaGVzIGEgYnVuY2ggb2YgcGxhY2VzOiBgZXJvZnNgLCBgZXh0NGAsIGBuZnNgLCBgbnRmc2AsIGBzcXVhc2hmc2AsIHBsdXMgc29tZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIGNhY2hlIGhlYWRlcnMuICBJcyB0aGlzIGp1c3QgcmVmYWN0b3JpbmcsIG9yIGlzIHRoZXJlIGZ1bmN0aW9uYWwgc3R1ZmYgaGVyZSB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gZm9sbG93IHRoZSBydWxlcywgdGhvdWdoOlxuXG5UaGUgcHJvbXB0IHJlbWluZHMgbWUgYWJvdXQgdGhlIGNyaXRlcmlhLCBhbmQgSSBuZWVkIHRvIGJlICpyZWFsbHkqIGNhcmVmdWwuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0J3MgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQgb25seSBjb250YWlucyBkb2N1bWVudGF0aW9uLCBsb2dnaW5nLCBjb25zdGFudCBjaGFuZ2VzIHRoYXQgZG9uJ3QgY2hhbmdlIGhvdyB0aGluZ3Mgd29yaywgdW5yZWFjaGFibGUgY29kZSwgb3IgdGVhcmRvd24gY2FsbGJhY2tzLiAgSXQncyBgV29ydGhGdXp6aW5nPXRydWVgIGlmIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlxuXG5IbW0sIHRoaXMgKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYy4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vZmlsZW1hcC5jYCwgYW5kIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAuIEknbSByZW1vdmluZyB0aGUgYEZHUF9OT0ZTYCBhbmQgY2hhbmdpbmcgaG93IHRoZSBgR0ZQYCBmbGFncyBhcmUgaGFuZGxlZC4gSSBzZWUgbWFjcm9zIGJlaW5nIHNoaWZ0ZWQgaW4gdmFsdWVzLiBJbiBzcXVhc2hmcywgaXQgbG9va3MgbGlrZSBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIGFuZCBgbWVtYWxsb2Nfbm9mc19yZXN0b3JlKClgIGFyZSBiZWluZyBhZGRlZC4gVGhpcyBsb29rcyBsaWtlIGl0J3MgY2hhbmdpbmcgaG93IG1lbW9yeSBhbGxvY2F0aW9uIGlzIHNjb3BlZCBhbmQgdGhlIGJlaGF2aW9yIG9mIEdGUCBmbGFncy4gSXQncyBtb2RpZnlpbmcgbWVtb3J5IGFsbG9jYXRpb24hIFNvLCBpcyB0aGlzICpqdXN0KiBpbnRlcm5hbCBjbGVhbnVwLCBvciBpcyBpdCBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGV4ZWN1dGlvbiBmbG93P1xuXG5MZXQncyBicmVhayBpdCBkb3duOiBJcyB0aGlzIHBhdGNoIGFsdGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGluIHBsYWNlcyBsaWtlIGBudGZzX3dvZl9jb2xsZWN0X2Rlc3RgLCBvciBpbnRyb2R1Y2luZyBgbWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmVgIGluIGEga2V5IGZ1bmN0aW9uIGxpa2UgYHNxdWFzaGZzX2NvcHlfY2FjaGVgPyBBYnNvbHV0ZWx5ISBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6IGJlY2F1c2UgdGhpcyBpcyByZWFjaGFibGUuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBtZWV0cyBub25lIG9mIHRoZSA2IGV4Y2x1c2lvbiBjYXRlZ29yaWVzLiAxLiBObywgaXQncyBtb2RpZnlpbmcgQyBjb2RlLiAyLiBObywgbm90IGp1c3QgbG9nZ2luZy4gMy4gTm8sIG5vdCBqdXN0IG1hY3JvczogSSdtIGVsaW1pbmF0aW5nIGBGR1BfTk9GU2AgaW4gbWVtb3J5IGFsbG9jYXRpb24gQVBJcywgaXQncyBtb3JlIHRoYW4gYSBjb25zdGFudCBjaGFuZ2UuIDQuIE5vLCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUgaW4gYSBRRU1VIGVudmlyb25tZW50LiA1LiBOb3BlLCBub3QgUENJL0dQVS9TbWFydE5JQyBkcml2ZXJzLiA2LiBOb3BlLCBub3QgdGVhcmRvd24gY2FsbGJhY2tzLlxuXG5Pa2F5LCBsZXQncyBwbGF5IGRldmlsJ3MgYWR2b2NhdGU6IElzIHRoaXMgYSBzaW1wbGUgcmVmYWN0b3JpbmcgdG8gY2xlYW4gdXAgdGhlIGBGR1BfTk9GU2AgZmxhZyBhY3Jvc3MgcGFnZWNhY2hlIGFuZCBjYWxsZXJzLCByZXBsYWNpbmcgaXQgd2l0aCBzY29wZWQgYWxsb2NhdG9ycywgYW5kIG5vdCByZWFsbHkgY2hhbmdpbmcgaG93IHRoZSBrZXJuZWwgd29ya3M/IE9yIGlzIGl0IGEgZnVuZGFtZW50YWwgbW9kaWZpY2F0aW9uIHRvIHBhZ2UgY2FjaGUgZm9saW8gZmxhZ3MsIGFuZCByZWNsYWltP1xuXG5Mb29raW5nIGF0IGl0IGNsb3NlbHksIHRoaXMgaXNuJ3QganVzdCBhYm91dCByZW1vdmluZyB0aGUgZmxhZzsgaXQncyBhYm91dCBhbHRlcmluZyBob3cgR0ZQIGZsYWdzIGFuZCBhbGxvY2F0aW9uIHNjb3BlcyB3b3JrIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtICphbmQqIHRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZSBpdC4gSW4gYG50ZnNfd29mX2NvbGxlY3RfZGVzdGAsIG5vdyB3ZSdyZSB1c2luZyB0aGUgYG1hcHBpbmdfZ2ZwX21hc2soKWAgYXJndW1lbnQsIGluc3RlYWQgb2YgYEdGUF9OT0ZTYC4gSW4gc3F1YXNoZnMsIHRoZSBjb2RlIGlzIHVzaW5nIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgYW5kIGBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKWAgbm93LiBUaGUgdmFsdWVzIG9mIGZsYWdzIGxpa2UgYEZHUF9OT1dBSVRgIGhhdmUgY2hhbmdlZCFcblxuVGhlIHByb21wdCdzIGNyaXRlcmlvbiBpcyBzdHJpY3Q6IGlmIEkgbW9kaWZ5IGNvcmUgbG9naWMsIGl0J3Mgd29ydGggZnV6emluZyEgU3BlY2lmaWNhbGx5LCBpZiBJIG1vZGlmeSBNTSBjb2RlIGFuZCBGaWxlc3lzdGVtIGNvZGUsIGl0J3Mgd29ydGggZnV6emluZy4gUmVjbGFpbSBiZWhhdmlvciBpcyBjaGFuZ2luZywgYW5kIHRoYXQncyBjcml0aWNhbCBpbiBsb2NrZGVwIGFuZCBkZWFkbG9jayBwcmV2ZW50aW9uLlxuXG5JIGFsc28gbmVlZCB0byB2ZXJpZnkgY29uZmlnIHN5bWJvbHMuIGBFUk9GU19GU2AsIGBFWFQ0X0ZTYCwgYE5GU19GU2AsIGBOVEZTX0ZTYCwgYFNRVUFTSEZTYCBhcmUgcmVsZXZhbnQuIFRoZW4sIHRoZSBjb3JlIE1NIGNvZGUgaXMgYWx3YXlzIGVuYWJsZWQgb3IgYSBzdGFuZGFyZCBjb25maWcuIEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBidXQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIEkgaGF2ZSBteSBhbnN3ZXIhXG5cblRoaXMgY2xlYXJseSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGluY2x1ZGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMuIEl0J3Mgbm90ICpqdXN0KiBjb3NtZXRpYyBvciB1bnJlYWNoYWJsZSBjb2RlLiBJdCdzIGFib3V0IGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCByZWNsYWltZWQsIGFuZCB0aGF0ICphYnNvbHV0ZWx5KiBtYWtlcyB0aGlzIHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSB3aXRoIGxvY2tkZXAgYW5kIG1lbW9yeSBwcmVzc3VyZS4gVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjE0LjM5Mjg5MzEwNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTE0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVST0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Vyb2ZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL0tjb25maWctMi1cXG5mcy9lcm9mcy9LY29uZmlnOjM6Y29uZmlnIEVST0ZTX0ZTXFxuZnMvZXJvZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTQ5LVxcbmZzL2Vyb2ZzL0tjb25maWc6NTA6Y29uZmlnIEVST0ZTX0ZTX0RFQlVHXFxuZnMvZXJvZnMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJFUk9GUyBkZWJ1Z2dpbmcgZmVhdHVyZVxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctNTktXFxuZnMvZXJvZnMvS2NvbmZpZzo2MDpjb25maWcgRVJPRlNfRlNfWEFUVFJcXG5mcy9lcm9mcy9LY29uZmlnLTYxLVxcdGJvb2wgXFxcIkVST0ZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTcwLVxcbmZzL2Vyb2ZzL0tjb25maWc6NzE6Y29uZmlnIEVST0ZTX0ZTX1BPU0lYX0FDTFxcbmZzL2Vyb2ZzL0tjb25maWctNzItXFx0Ym9vbCBcXFwiRVJPRlMgQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTg0LVxcbmZzL2Vyb2ZzL0tjb25maWc6ODU6Y29uZmlnIEVST0ZTX0ZTX1NFQ1VSSVRZXFxuZnMvZXJvZnMvS2NvbmZpZy04Ni1cXHRib29sIFxcXCJFUk9GUyBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTk3LVxcbmZzL2Vyb2ZzL0tjb25maWc6OTg6Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXFxuZnMvZXJvZnMvS2NvbmZpZy05OS1cXHRib29sIFxcXCJGaWxlLWJhY2tlZCBFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTExMS1cXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMTMtXFx0Ym9vbCBcXFwiRVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiRVJPRlMgTFpNQSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTMzLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTM0OmNvbmZpZyBFUk9GU19GU19aSVBfTFpNQV9ERUZBVUxUX01BWF9TVFJFQU1TXFxuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXFx0aW50IFxcXCJFUk9GUyBMWk1BIGRlZmF1bHQgbWF4aW11bSBkZWNvbXByZXNzaW9uIHN0cmVhbXNcXFwiIGlmIFNNUFxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTAtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNTE6Y29uZmlnIEVST0ZTX0ZTX1pJUF9ERUZMQVRFXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiRVJPRlMgREVGTEFURSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTYxLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTYyOmNvbmZpZyBFUk9GU19GU19aSVBfWlNURFxcbmZzL2Vyb2ZzL0tjb25maWctMTYzLVxcdGJvb2wgXFxcIkVST0ZTIFpzdGFuZGFyZCBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTcyLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTczOmNvbmZpZyBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJFUk9GUyBoYXJkd2FyZSBkZWNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE4Ni1cXG5mcy9lcm9mcy9LY29uZmlnOjE4Nzpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEXFxuZnMvZXJvZnMvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiRVJPRlMgcGVyLWNwdSBkZWNvbXByZXNzaW9uIGt0aHJlYWQgd29ya2Vyc1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTk1LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTk2OmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURfSElQUklcXG5mcy9lcm9mcy9LY29uZmlnLTE5Ny1cXHRib29sIFxcXCJFUk9GUyBoaWdoIHByaW9yaXR5IHBlci1DUFUga3RocmVhZCB3b3JrZXJzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0yMDUtXFxuZnMvZXJvZnMvS2NvbmZpZzoyMDY6Y29uZmlnIEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVcXG5mcy9lcm9mcy9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJFUk9GUyBwYWdlIGNhY2hlIHNoYXJlIHN1cHBvcnQgKGV4cGVyaW1lbnRhbClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjE0LjQ0MDYxMDcxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDE1OTcxMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCBpbiBgZnMvZXJvZnMvaW50ZXJuYWwuaGAqKlxuXG5SaWdodCwgc28gdGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdXNhZ2Ugb2YgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCB3aXRoaW4gdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGBmcy9lcm9mcy9pbnRlcm5hbC5oYCBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCBhY3R1YWxseSAqZG9lcyouIElzIGl0IGludm9sdmVkIGluIGNhY2hlIG1hbmFnZW1lbnQsIHBlcmhhcHM/IE9yIG1heWJlIGl0J3MgcmVsYXRlZCB0byBtZXRhZGF0YSBoYW5kbGluZz9cblxuT25jZSBJJ3ZlIGdvdCB0aGF0IHN0cmFpZ2h0IGluIG15IGhlYWQsIEknbGwgbW92ZSBvbiB0byBhIGNyaXRpY2FsIGFzcGVjdCBvZiB1bmRlcnN0YW5kaW5nIGFueSBmdW5jdGlvbjogaXRzIHVzZSBjYXNlcy4gVGhlcmVmb3JlLCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29kZSBjYWxscyBgZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXRgLiBJJ2xsIHdhbnQgdG8gc2VlIHRoZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBjb2RlIHRoYXQgbWFrZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGl0cyBwdXJwb3NlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBvdGhlciBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhpcyBvbmUuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBFUk9GUyBvcGVyYXRpb25zIHRoYXQgaGVhdmlseSByZWx5IG9uIGl0P1xuXG5cbiIsIklucHV0VG9rZW5zIjoyODIwNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjE3Ljg1NjU4Mzc2OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMzQxNzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcm9mc19ncmFiX2ZvbGlvX25vd2FpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9pbnRlcm5hbC5oPTMyMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBlcm9mc19pbm9kZV9kYXRhbGF5b3V0KHVuc2lnbmVkIGludCBpZm10KVxcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaC0zMjUtLyogcmVjbGFpbWluZyBpcyBuZXZlciB0cmlnZ2VyZWQgd2hlbiBhbGxvY2F0aW5nIG5ldyBmb2xpb3MuICovXFxuZnMvZXJvZnMvaW50ZXJuYWwuaDozMjY6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmVyb2ZzX2dyYWJfZm9saW9fbm93YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICphcyxcXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTMyNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcGdvZmZfdCBpbmRleClcXG4tLVxcbmZzL2Vyb2ZzL3pkYXRhLmM9MTgxND1zdGF0aWMgdm9pZCB6X2Vyb2ZzX3BjbHVzdGVyX3JlYWRtb3JlKHN0cnVjdCB6X2Vyb2ZzX2Zyb250ZW5kICpmLFxcbi0tXFxuZnMvZXJvZnMvemRhdGEuYy0xODUwLVxcbmZzL2Vyb2ZzL3pkYXRhLmM6MTg1MTpcXHRcXHRmb2xpbyA9IGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0KGYtXFx1MDAzZXNoYXJlZGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGluZGV4KTtcXG5mcy9lcm9mcy96ZGF0YS5jLTE4NTItXFx0XFx0aWYgKCFJU19FUlJfT1JfTlVMTChmb2xpbykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6MTkuMzcwMDA2MTgzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NTA4MDE0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBFUk9GUyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgel9lcm9mc19wY2x1c3Rlcl9yZWFkbW9yZWAgaXMgb25seSByZWxldmFudCB3aGVuIEVST0ZTIGlzIGNvbmZpZ3VyZWQgd2l0aCBlaXRoZXIgYEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVgIG9yIGBFUk9GU19GU19aSVBgLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uIGFuZCBpbXBhY3QuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgRVJPRlMgYW5kIGl0cyBvcHRpbWl6YXRpb25zLCB0aGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgbm93IG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbW9kdWxlIGlzIGFjdHVhbGx5IGRvaW5nLlxuXG5UbyBnZXQgYSBiZXR0ZXIgaWRlYSBvZiBob3cgRVJPRlMgaXMgY29uZmlndXJlZCwgYW5kIHdoZXRoZXIgaXQgY291bGQgcHJvdmlkZSBhbnkgaW5mb3JtYXRpb24sIGl0IGxvb2tzIGxpa2UgY2hlY2tpbmcgdGhlIE5URlMgY29uZmlncyBpbiB0aGUgZmlsZSBzeXN0ZW0gd291bGQgYmUgYSB1c2VmdWwgc3RlcCB0byBiZXR0ZXIgdW5kZXJzdGFuZCBpdC4gVGhlcmVmb3JlLCBJIHdpbGwgbm93IGdvIGFuZCBjaGVjayB0aGUgYGZzL250ZnMvTWFrZWZpbGVgIGFuZCBgZnMvbnRmcy9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IE5URlMgY29uZmlndXJhdGlvbnMsIGFuZCBwb3NzaWJseSByZXZlYWwgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbXBsb3llZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3OTIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NzoyNy4wMjA4MDk4MjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTcwMDA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy0xMi1cXG5mcy9udGZzL0tjb25maWc6MTM6Y29uZmlnIE5URlNfRlNfV09GX0NPTVBSRVNTSU9OXFxuZnMvbnRmcy9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIk5URlMgV2luZG93cyBzeXN0ZW0gY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy0yMy1cXG5mcy9udGZzL0tjb25maWc6MjQ6Y29uZmlnIE5URlNfREVCVUdcXG5mcy9udGZzL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00NS1cXG5mcy9udGZzL0tjb25maWc6NDY6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuZnMvbnRmcy9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjI3LjMzNjUxNzEwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDQ5NzM4NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipRdWljayBOVEZTIENvbmZpZ3VyYXRpb24gU2NhbioqXG5cblJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gb24gdG9wIG9mIHRoZSBOVEZTIGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgc3RhdHVzIG9mIGBOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTmAuIFRoYXQgb25lIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd3JpdGUtb25jZSwgZmlsZS1zeXN0ZW0tYmFzZWQgY29tcHJlc3Npb24gaXMgaGFuZGxlZC4gQW5kIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBpZiBgTlRGU19GU19SV2AgaXMgc3RpbGwgYXJvdW5kLCBvciBpZiBpdCdzIGJlZW4gc3VwZXJzZWRlZCBieSBzb21ldGhpbmcgZWxzZS4gQmVzdCB0byBqdXN0IGp1bXAgaW50byBgZnMvbnRmcy9LY29uZmlnYCBhbmQgdmVyaWZ5LiBOb3RoaW5nIHdvcnNlIHRoYW4gbWFraW5nIGFzc3VtcHRpb25zIHdoZW4gYSBxdWljayBLY29uZmlnIGNoZWNrIHdpbGwgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzI5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6MzAuNzg2MjU3NDE2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cXG4gICA4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIG50ZnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTlxcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTlRGUyBXaW5kb3dzIHN5c3RlbSBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIEVuYWJsZSByZWFkIHN1cHBvcnQgZm9yIFdpbmRvd3Mgc3lzdGVtLWNvbXByZXNzZWQgZmlsZXMuXFxuICAxODpcXHRcXHQgIFdpbmRvd3MgbW9yZSBhZ2dyZXNzaXZlbHkgY29tcHJlc3NlcyBzeXN0ZW0gZmlsZXMgc3VjaCBhcyBiaW5hcmllc1xcbiAgMTk6XFx0XFx0ICBhbmQgRExMcyB1c2luZyBzeXN0ZW0gY29tcHJlc3Npb24uIEl0IGlzIG9wdGltaXplZCBmb3IgZmlsZXMgdGhhdFxcbiAgMjA6XFx0XFx0ICBhcmUgcmFyZWx5IG1vZGlmaWVkLlxcbiAgMjE6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBidWlsZHMgdGhlIGRlY29tcHJlc3Npb24gc3VwcG9ydCBpbnRvIHRoZSBOVEZTXFxuICAyMjpcXHRcXHQgIG1vZHVsZS5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5URlNfREVCVUdcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIk5URlMgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxcbiAgMjk6XFx0XFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXFxuICAzMDpcXHRcXHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cXG4gIDMxOlxcdFxcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXFxuICAzMjpcXHRcXHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXFxuICAzMzpcXHRcXHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxcbiAgMzQ6XFx0XFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXFxuICAzNTpcXHRcXHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XFxuICAzNjpcXHRcXHQgIGVjaG8gMSBcXHUwMDNlIC9wcm9jL3N5cy9mcy9udGZzLWRlYnVnXFxuICAzNzpcXHRcXHQgIFJlcGxhY2luZyB0aGUgXFxcIjFcXFwiIHdpdGggXFxcIjBcXFwiIHdvdWxkIGRpc2FibGUgZGVidWcgbWVzc2FnZXMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgSWYgeW91IGxlYXZlIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZCwgdGhpcyByZXN1bHRzIGluIGxpdHRsZVxcbiAgNDA6XFx0XFx0ICBvdmVyaGVhZCwgYnV0IGVuYWJsaW5nIGRlYnVnIG1lc3NhZ2VzIHJlc3VsdHMgaW4gdmVyeSBzaWduaWZpY2FudFxcbiAgNDE6XFx0XFx0ICBzbG93ZG93biBvZiB0aGUgc3lzdGVtLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcXG4gIDQ0OlxcdFxcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuICA0NzpcXHRcXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICA0OTpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICA1MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjMwLjc4NjQ1Nzg1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQyMzYxMTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU3F1YXNoRlMgQ29uZmlndXJhdGlvbiBIdW50KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdGhpcyBzb3J0ZWQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBTcXVhc2hGUyBhbmQgaG93IGl0J3MgYmVpbmcgaGFuZGxlZCBpbiB0aGUgc3lzdGVtLiBUaGUgYGZzL3NxdWFzaGZzL0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhvc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCdzIHRoZSBnby10byBzcG90IGZvciBmaWd1cmluZyBvdXQgd2hhdCdzIGVuYWJsZWQsIGRpc2FibGVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlciB3aXRoaW4gdGhlIGJyb2FkZXIgYnVpbGQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhvc2UgY29uZmlncyB0aG9yb3VnaGx5IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0Nzo0OS4yMTAwNzE2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTg4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNRVUFTSEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NxdWFzaGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NxdWFzaGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zcXVhc2hmcy9LY29uZmlnOjI6Y29uZmlnIFNRVUFTSEZTXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTcXVhc2hGUyA0LjAgLSBTcXVhc2hlZCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZz0yOT1jaG9pY2VcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctNDAtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzo0MTpjb25maWcgU1FVQVNIRlNfRklMRV9DQUNIRVxcbmZzL3NxdWFzaGZzL0tjb25maWctNDItXFx0Ym9vbCBcXFwiRGVjb21wcmVzcyBmaWxlIGRhdGEgaW50byBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyXFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy00Ni1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjQ3OmNvbmZpZyBTUVVBU0hGU19GSUxFX0RJUkVDVFxcbmZzL3NxdWFzaGZzL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGVjb21wcmVzcyBmaWxlcyBkaXJlY3RseSBpbnRvIHRoZSBwYWdlIGNhY2hlXFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZz01NT1lbmRjaG9pY2VcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTU2LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6NTc6Y29uZmlnIFNRVUFTSEZTX0RFQ09NUF9TSU5HTEVcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTU4LVxcdGRlcGVuZHMgb24gU1FVQVNIRlNcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctNjAtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzo2MTpjb25maWcgU1FVQVNIRlNfREVDT01QX01VTFRJXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy02Mi1cXHRkZXBlbmRzIG9uIFNRVUFTSEZTXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTY0LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6NjU6Y29uZmlnIFNRVUFTSEZTX0RFQ09NUF9NVUxUSV9QRVJDUFVcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTY2LVxcdGRlcGVuZHMgb24gU1FVQVNIRlNcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctNjgtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzo2OTpjb25maWcgU1FVQVNIRlNfQ0hPSUNFX0RFQ09NUF9CWV9NT1VOVFxcbmZzL3NxdWFzaGZzL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiU2VsZWN0IHRoZSBwYXJhbGxlbCBkZWNvbXByZXNzaW9uIG1vZGUgZHVyaW5nIG1vdW50XFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZz04Mj1jaG9pY2VcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctOTItXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzo5Mzpjb25maWcgU1FVQVNIRlNfQ09NUElMRV9ERUNPTVBfU0lOR0xFXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy05NC1cXHRib29sIFxcXCJTaW5nbGUgdGhyZWFkZWQgY29tcHJlc3Npb25cXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTEwMC1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjEwMTpjb25maWcgU1FVQVNIRlNfQ09NUElMRV9ERUNPTVBfTVVMVElcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJVc2UgbXVsdGlwbGUgZGVjb21wcmVzc29ycyBmb3IgcGFyYWxsZWwgSS9PXFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMTUtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxMTY6Y29uZmlnIFNRVUFTSEZTX0NPTVBJTEVfREVDT01QX01VTFRJX1BFUkNQVVxcbmZzL3NxdWFzaGZzL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIlVzZSBwZXJjcHUgbXVsdGlwbGUgZGVjb21wcmVzc29ycyBmb3IgcGFyYWxsZWwgSS9PXFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZz0xMjc9ZW5kY2hvaWNlXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMjgtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxMjk6Y29uZmlnIFNRVUFTSEZTX01PVU5UX0RFQ09NUF9USFJFQURTXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiQWRkIHRoZSBtb3VudCBwYXJhbWV0ZXIgJ3RocmVhZHM9JyBmb3Igc3F1YXNoZnNcXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE0MS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE0Mjpjb25maWcgU1FVQVNIRlNfWEFUVFJcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE0My1cXHRib29sIFxcXCJTcXVhc2hmcyBYQVRUUiBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNTEtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxNTI6Y29uZmlnIFNRVUFTSEZTX0NPTVBfQ0FDSEVfRlVMTFxcbmZzL3NxdWFzaGZzL0tjb25maWctMTUzLVxcdGJvb2wgXFxcIkVuYWJsZSBmdWxsIGNhY2hpbmcgb2YgY29tcHJlc3NlZCBibG9ja3NcXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE3Mi1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE3Mzpjb25maWcgU1FVQVNIRlNfWkxJQlxcbmZzL3NxdWFzaGZzL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkluY2x1ZGUgc3VwcG9ydCBmb3IgWkxJQiBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctMTg1LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6MTg2OmNvbmZpZyBTUVVBU0hGU19MWjRcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJJbmNsdWRlIHN1cHBvcnQgZm9yIExaNCBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjAwLVxcbmZzL3NxdWFzaGZzL0tjb25maWc6MjAxOmNvbmZpZyBTUVVBU0hGU19MWk9cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTIwMi1cXHRib29sIFxcXCJJbmNsdWRlIHN1cHBvcnQgZm9yIExaTyBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjE1LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6MjE2OmNvbmZpZyBTUVVBU0hGU19YWlxcbmZzL3NxdWFzaGZzL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIkluY2x1ZGUgc3VwcG9ydCBmb3IgWFogY29tcHJlc3NlZCBmaWxlIHN5c3RlbXNcXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTIzMC1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjIzMTpjb25maWcgU1FVQVNIRlNfWlNURFxcbmZzL3NxdWFzaGZzL0tjb25maWctMjMyLVxcdGJvb2wgXFxcIkluY2x1ZGUgc3VwcG9ydCBmb3IgWlNURCBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjQ0LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6MjQ1OmNvbmZpZyBTUVVBU0hGU180S19ERVZCTEtfU0laRVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjQ2LVxcdGJvb2wgXFxcIlVzZSA0SyBkZXZpY2UgYmxvY2sgc2l6ZT9cXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI2Ni1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjI2Nzpjb25maWcgU1FVQVNIRlNfRU1CRURERURcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI2OC1cXHRib29sIFxcXCJBZGRpdGlvbmFsIG9wdGlvbiBmb3IgbWVtb3J5LWNvbnN0cmFpbmVkIHN5c3RlbXNcXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI3NC1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjI3NTpjb25maWcgU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjc2LVxcdGludCBcXFwiTnVtYmVyIG9mIGZyYWdtZW50cyBjYWNoZWRcXFwiIGlmIFNRVUFTSEZTX0VNQkVEREVEXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjQ5LjI1NTc3NjA1OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzU4MzkxNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYWN0dWFsbHkgZW5hYmxpbmcgdGhlIGBzcXVhc2hmc19jb3B5X2NhY2hlYCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9zcXVhc2hmcy9maWxlLmNgLiBUaGF0J3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIEknbSBjaGFzaW5nIGRvd24gaG93IGEgcGFydGljdWxhciBmZWF0dXJlLCBlc3BlY2lhbGx5IG9uZSByZWxhdGVkIHRvIGZpbGUgaGFuZGxpbmcsIGlzIGNvbnRyb2xsZWQgYXQgYnVpbGQgdGltZS4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIOKAkyB0aGUgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIOKAkyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGUgY29kZSB1dGlsaXppbmcgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIGlzIGFjdHVhbGx5IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRpbWUgdG8gc2VlIHdoaWNoIGNvbmZpZyBvcHRpb25zIHVsdGltYXRlbHkgZGVjaWRlIGlmIHRoYXQgY29kZSBnZXRzIGxpbmtlZCBvciBub3QuIEhvcGVmdWxseSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBtYXliZSBhIHNpbmdsZSBgQ09ORklHX1NRVUFTSEZTXypgIHZhcmlhYmxlLCBvciBwZXJoYXBzIGEgbW9yZSBpbnZvbHZlZCBkZXBlbmRlbmN5IGNoYWluLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTM2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6NTQuNjE0MTY5ODk5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAxMzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcXVhc2hmc19jb3B5X2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NxdWFzaGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NxdWFzaGZzL2ZpbGUuYz0zNzQ9c3RhdGljIGJvb2wgc3F1YXNoZnNfZmlsbF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9zcXVhc2hmcy9maWxlLmMtMzkxLS8qIENvcHkgZGF0YSBpbnRvIHBhZ2UgY2FjaGUgICovXFxuZnMvc3F1YXNoZnMvZmlsZS5jOjM5Mjp2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5mcy9zcXVhc2hmcy9maWxlLmMtMzkzLVxcdFxcdHN0cnVjdCBzcXVhc2hmc19jYWNoZV9lbnRyeSAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsXFxuLS1cXG5mcy9zcXVhc2hmcy9maWxlLmM9NDM5PXN0YXRpYyBpbnQgc3F1YXNoZnNfcmVhZHBhZ2VfZnJhZ21lbnQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGV4cGVjdGVkKVxcbi0tXFxuZnMvc3F1YXNoZnMvZmlsZS5jLTQ1MS1cXHRlbHNlXFxuZnMvc3F1YXNoZnMvZmlsZS5jOjQ1MjpcXHRcXHRzcXVhc2hmc19jb3B5X2NhY2hlKGZvbGlvLCBidWZmZXIsIGV4cGVjdGVkLFxcbmZzL3NxdWFzaGZzL2ZpbGUuYy00NTMtXFx0XFx0XFx0c3F1YXNoZnNfaShpbm9kZSktXFx1MDAzZWZyYWdtZW50X29mZnNldCk7XFxuLS1cXG5mcy9zcXVhc2hmcy9maWxlLmM9NDU5PXN0YXRpYyBpbnQgc3F1YXNoZnNfcmVhZHBhZ2Vfc3BhcnNlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBleHBlY3RlZClcXG5mcy9zcXVhc2hmcy9maWxlLmMtNDYwLXtcXG5mcy9zcXVhc2hmcy9maWxlLmM6NDYxOlxcdHNxdWFzaGZzX2NvcHlfY2FjaGUoZm9saW8sIE5VTEwsIGV4cGVjdGVkLCAwKTtcXG5mcy9zcXVhc2hmcy9maWxlLmMtNDYyLVxcdHJldHVybiAwO1xcbi0tXFxuZnMvc3F1YXNoZnMvZmlsZV9jYWNoZS5jPTIxPWludCBzcXVhc2hmc19yZWFkcGFnZV9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgYmxvY2ssIGludCBic2l6ZSwgaW50IGV4cGVjdGVkKVxcbi0tXFxuZnMvc3F1YXNoZnMvZmlsZV9jYWNoZS5jLTMxLVxcdGVsc2VcXG5mcy9zcXVhc2hmcy9maWxlX2NhY2hlLmM6MzI6XFx0XFx0c3F1YXNoZnNfY29weV9jYWNoZShmb2xpbywgYnVmZmVyLCBleHBlY3RlZCwgMCk7XFxuZnMvc3F1YXNoZnMvZmlsZV9jYWNoZS5jLTMzLVxcbi0tXFxuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaD03Mj1leHRlcm4gX19sZTY0ICpzcXVhc2hmc19yZWFkX2ZyYWdtZW50X2luZGV4X3RhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqLFxcbi0tXFxuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaC03NS0vKiBmaWxlLmMgKi9cXG5mcy9zcXVhc2hmcy9zcXVhc2hmcy5oOjc2OnZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKiwgc3RydWN0IHNxdWFzaGZzX2NhY2hlX2VudHJ5ICosXFxuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaC03Ny1cXHRcXHRzaXplX3QgYnl0ZXMsIHNpemVfdCBvZmZzZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0Nzo1NC42NjAxODYxNTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM1NjAwOTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGZzL3NxdWFzaGZzL01ha2VmaWxlYDpcblxuKipBbmFseXppbmcgdGhlIFNxdWFzaGZzIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9zcXVhc2hmcy9NYWtlZmlsZWAuIEdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiBmaWxlIHN5c3RlbXMgYW5kIGJ1aWxkIHByb2Nlc3NlcywgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHdoYXQgSSBleHBlY3QgdG8gc2VlLiBJIGFudGljaXBhdGUgdGhpcyBNYWtlZmlsZSB3aWxsIG1hbmFnZSB0aGUgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgb2YgdGhlIFNxdWFzaGZzIGtlcm5lbCBtb2R1bGUsIGl0cyB1dGlsaXRpZXMsIGFuZCBwb3RlbnRpYWxseSBzb21lIHRlc3RzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBlbGVtZW50czogdGhlIG1vZHVsZSBuYW1lIGRlZmluaXRpb24sIHNvdXJjZSBmaWxlIGxpc3RzLCBvYmplY3QgZmlsZSBnZW5lcmF0aW9uLCBkZXBlbmRlbmN5IHJ1bGVzLCBjb21waWxhdGlvbiBmbGFncywgbGlua2VyIG9wdGlvbnMsIGluc3RhbGxhdGlvbiB0YXJnZXRzLCBhbmQgYW55IGNyb3NzLWNvbXBpbGF0aW9uIGNvbnNpZGVyYXRpb25zLiBJJ2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbnkgY2xldmVyIHRyaWNrcyBvciBvcHRpbWl6YXRpb25zIHRoZXkndmUgaW1wbGVtZW50ZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgYnVpbGQgc3RydWN0dXJlLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCwgb3Igc3BvdCBhbnkgdW51c3VhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJ20gYWxzbyBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgc3lzdGVtLiBBcmUgdGhleSB1c2luZyB0aGUgc3RhbmRhcmQga2VybmVsIG1ha2UgcnVsZXMsIG9yIGhhdmUgdGhleSBpbnRyb2R1Y2VkIGN1c3RvbSBsb2dpYz8gRmluYWxseSwgSSBuZWVkIHRvIG5vdGUgYW55IHNwZWNpZmljIGZsYWdzIG9yIHRhcmdldHMgdGhhdCBJIGNvdWxkIHV0aWxpemUgZm9yIHF1aWNrIHJlYnVpbGRzIG9yIHVuaXQgdGVzdHMgaW4gbXkgc3BlY2lmaWMgdXNlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6NTkuMDE2MTk4MTkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3NxdWFzaGZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IHNxdWFzaGZzIHJvdXRpbmVzLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfU1FVQVNIRlMpICs9IHNxdWFzaGZzLm9cXG4gICA3OlxcdHNxdWFzaGZzLXkgKz0gYmxvY2subyBjYWNoZS5vIGRpci5vIGV4cG9ydC5vIGZpbGUubyBmcmFnbWVudC5vIGlkLm8gaW5vZGUub1xcbiAgIDg6XFx0c3F1YXNoZnMteSArPSBuYW1laS5vIHN1cGVyLm8gc3ltbGluay5vIGRlY29tcHJlc3Nvci5vIHBhZ2VfYWN0b3Iub1xcbiAgIDk6XFx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfRklMRV9DQUNIRSkgKz0gZmlsZV9jYWNoZS5vXFxuICAxMDpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19GSUxFX0RJUkVDVCkgKz0gZmlsZV9kaXJlY3Qub1xcbiAgMTE6XFx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfREVDT01QX1NJTkdMRSkgKz0gZGVjb21wcmVzc29yX3NpbmdsZS5vXFxuICAxMjpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19ERUNPTVBfTVVMVEkpICs9IGRlY29tcHJlc3Nvcl9tdWx0aS5vXFxuICAxMzpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19ERUNPTVBfTVVMVElfUEVSQ1BVKSArPSBkZWNvbXByZXNzb3JfbXVsdGlfcGVyY3B1Lm9cXG4gIDE0OlxcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX1hBVFRSKSArPSB4YXR0ci5vIHhhdHRyX2lkLm9cXG4gIDE1OlxcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0xaNCkgKz0gbHo0X3dyYXBwZXIub1xcbiAgMTY6XFx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfTFpPKSArPSBsem9fd3JhcHBlci5vXFxuICAxNzpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19YWikgKz0geHpfd3JhcHBlci5vXFxuICAxODpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19aTElCKSArPSB6bGliX3dyYXBwZXIub1xcbiAgMTk6XFx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfWlNURCkgKz0genN0ZF93cmFwcGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6NTkuMDE2MjU3OTExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTQzNDMzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gRmlsZW1hcCBhbmQgRm9saW8gSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGZvY3VzIHN5bWJvbHMgYW5kIGhvdyB0aGV5J3JlIGRlY2xhcmVkIGFuZCBsaW5rZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY2hhbmdlcyBhbmQgdGhlaXIgaW1wYWN0IG9uIGNlcnRhaW4gZnVuY3Rpb25zLCBuYW1lbHkgYF9fZmlsZW1hcF9nZXRfZm9saW9gIGFuZCBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCByZXNpZGluZyBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGNoZWNrLiBJcyBgX19maWxlbWFwX2dldF9mb2xpb2AgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlY2xhcmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgZnVsbHkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYG1tL2ZpbGVtYXAuY2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ4OjAxLjA3MDYwMzg1M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNzMwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19maWxlbWFwX2dldF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9maWxlbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZmlsZW1hcC5jPTE4OTk9dm9pZCAqZmlsZW1hcF9nZXRfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgpXFxuLS1cXG5tbS9maWxlbWFwLmMtMTkzMC0vKipcXG5tbS9maWxlbWFwLmM6MTkzMTogKiBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wgLSBGaW5kIGFuZCBnZXQgYSByZWZlcmVuY2UgdG8gYSBmb2xpby5cXG5tbS9maWxlbWFwLmMtMTkzMi0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoLlxcbi0tXFxubW0vZmlsZW1hcC5jLTE5NDYtICovXFxubW0vZmlsZW1hcC5jOjE5NDc6c3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vZmlsZW1hcC5jLTE5NDgtXFx0XFx0cGdvZmZfdCBpbmRleCwgZmdmX3QgZmdwX2ZsYWdzLCBnZnBfdCBnZnAsIHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDczLX1cXG5tbS9maWxlbWFwLmM6MjA3NDpFWFBPUlRfU1lNQk9MKF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCk7XFxubW0vZmlsZW1hcC5jLTIwNzUtXFxuLS1cXG5tbS9maWxlbWFwLmM9MzU1Mz12bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9maWxlbWFwLmMtMzYwNC1cXHRcXHR9XFxubW0vZmlsZW1hcC5jOjM2MDU6XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbm1tL2ZpbGVtYXAuYy0zNjA2LVxcdFxcdFxcdFxcdFxcdCAgRkdQX0NSRUFUfEZHUF9GT1JfTU1BUCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6MDEuMTE3OTgxNzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc0NzA3Mjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZpbGUgU3lzdGVtIERhdGEgQ29ycnVwdGlvbiBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgZmlsZSBzeXN0ZW0gZGF0YSBjb3JydXB0aW9uIGNvdWxkIGNyZWVwIGluLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGZpbGUgc3lzdGVtcyB0aGF0IGhhbmRsZSBkYXRhIGRpcmVjdGx5LCBpbiBwYXJ0aWN1bGFyIGlubGluZSBkYXRhIGFuZCBjYWNoZSBtYW5hZ2VtZW50LiBJIHN0YXJ0IGJ5IG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZSBleHBvcnRlZCBzeW1ib2wgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAsIGFuZCB0aGUgaW5saW5lIHdyYXBwZXIgYF9fZmlsZW1hcF9nZXRfZm9saW9gIOKAkyB0aGVzZSBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgdmlzaWJsZSBleHRlcm5hbGx5LiBJIGtub3cgdGhvc2UgYXJlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAsIEkgd2FudCB0byBiZSBhd2FyZSBvZiBob3cgdGhleSdyZSB1c2VkLlxuXG5OZXh0LCBJIHNlZSBgc3F1YXNoZnNfY29weV9jYWNoZWAgaW4gYGZzL3NxdWFzaGZzL2ZpbGUuY2AgaXMgbm9uLXN0YXRpYywgbWVhbmluZyBpdCdzIGV4dGVybmFsbHkgdmlzaWJsZSB3aXRoaW4gdGhhdCBtb2R1bGUuIFNhbWUgd2l0aCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBpbiBgZnMvZXh0NC9pbmxpbmUuY2AuIFRoZXNlIGp1bXAgb3V0IGFzIGZ1bmN0aW9ucyBJIHNob3VsZCBkZWZpbml0ZWx5IHNjcnV0aW5pemUuIEFueSBub24tc3RhdGljIGZ1bmN0aW9uIGNvdWxkIGhhdmUgaXRzIGRhdGEgbWFuaXB1bGF0ZWQgYnkgYW5vdGhlciBtb2R1bGUuXG5cblRoZW4sIHRoZXJlJ3MgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRgIGluIGBmcy9leHQ0L2lubGluZS5jYC4gSXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGV4dGVybmFsbHkgdmlzaWJsZSwgYnV0IHRoYXQgZG9lc24ndCBtZWFuIGl0J3Mgc2FmZS4gSXQncyBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4sIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdpdGhpbiB0aGUgZmlsZSwgb3IgYW55IGV4cG9ydGVkIHN5bWJvbHMsIHRoYXQgbWlnaHQgY2FsbCBpdCwgb3Igb3RoZXJ3aXNlIGV4cG9zZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gYGZzL2V4dDQvaW5saW5lLmNgIGFuZCBzcGVjaWZpY2FsbHkgdHJhY2UgdGhlIGNhbGxlcnMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSB3YXkgdG8gdHJpZ2dlciBpdCBmcm9tIG91dHNpZGUgaXRzIGZpbGUgc2NvcGUuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYW5hbHlzaXMgdG8gdW5jb3ZlciBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6MDQuODY1MDU3NjZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njk2NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lubGluZS5jPTU0ND1pbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTcwLVxcbmZzL2V4dDQvaW5saW5lLmM6NTcxOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9leHQ0L2lubGluZS5jLTU3Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz02OTM9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNzI0LVxcdFxcdFxcdC8qIFJldHJ5IGluc2lkZSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NzI1OlxcdFxcdFxcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcXG5mcy9leHQ0L2lubGluZS5jLTcyNi1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTc4MD1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTc4NS1cXHRpZiAocG9zICsgbGVuIFxcdTAwM2UgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSlcXG5mcy9leHQ0L2lubGluZS5jOjc4NjpcXHRcXHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy03ODctXFx0cmV0dXJuIGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ4OjA0LjkxMDc2MDk0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA0MzExMTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmxpbmUgRGF0YSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGFgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIHRoZXkgY291bGQgcG90ZW50aWFsbHkgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGVpciBpbW1lZGlhdGUgc2NvcGUsIHdoaWNoIGlzIHJlbGV2YW50IGlmIHdlJ3JlIGludmVzdGlnYXRpbmcgaG93IGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhcHByb2FjaCBpbmxpbmUgZGF0YS4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IG9wcG9ydHVuaXRpZXMgdG8gY29uc29saWRhdGUgb3IgYmV0dGVyIHVuZGVyc3RhbmQgdGhlc2UgaW1wbGVtZW50YXRpb25zLlxuXG5UbyB0aGF0IGVuZCwgSSB0aGluayBhIGxvb2sgYXQgYG50ZnNfd29mX2NvbGxlY3RfZGVzdGAgaW4gYGZzL250ZnMvd29mLmNgIHdvdWxkIGJlIHdvcnRod2hpbGUuIFNlZWluZyBob3cgTlRGUyBoYW5kbGVzIGl0cyBXcml0ZS1Pbmx5LUZpbHRlciAoV09GKSBhbmQgaW5saW5lIGRhdGEgY291bGQgcmV2ZWFsIHBvdGVudGlhbCBpbnNpZ2h0cywgY29tcGFyaXNvbnMsIG9yIGV2ZW4gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIGludmVzdGlnYXRpb24uIEl0IG1pZ2h0IGlsbHVtaW5hdGUgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzLiBMZXQncyBzZWUgd2hhdCB0aGF0IG1vZHVsZSBoYXMgdG8gb2ZmZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6MjQuOTUzODc1MzIyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE0ODU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX3dvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvbnRmcy5oPTIwNj1pbnQgbnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmZzL250ZnMvbnRmcy5oOjIwNzp2b2lkIG50ZnNfd29mX2ZyZWVfd29ya3NwYWNlcyh2b2lkKTtcXG5mcy9udGZzL250ZnMuaC0yMDgtI2VuZGlmXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjY4Mz1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9udGZzX2ZzKHZvaWQpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjY5NC0jaWZkZWYgQ09ORklHX05URlNfRlNfV09GX0NPTVBSRVNTSU9OXFxuZnMvbnRmcy9zdXBlci5jOjI2OTU6XFx0bnRmc193b2ZfZnJlZV93b3Jrc3BhY2VzKCk7XFxuZnMvbnRmcy9zdXBlci5jLTI2OTYtI2VuZGlmXFxuLS1cXG5mcy9udGZzL3dvZi5jPTIzPXN0YXRpYyBjb25zdCBfX2xlMTYgV09GX05BTUVbXSA9IHtcXG4tLVxcbmZzL250ZnMvd29mLmMtMzctXFxuZnMvbnRmcy93b2YuYzozODpzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIHtcXG5mcy9udGZzL3dvZi5jLTM5LVxcdHN0cnVjdCBtdXRleCAqbG9jaztcXG4tLVxcbmZzL250ZnMvd29mLmMtNDctXFxuZnMvbnRmcy93b2YuYzo0ODpzdGF0aWMgREVGSU5FX01VVEVYKG50ZnNfd29mX3hwcmVzczRrX2xvY2spO1xcbmZzL250ZnMvd29mLmM6NDk6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl94cHJlc3M4a19sb2NrKTtcXG5mcy9udGZzL3dvZi5jOjUwOnN0YXRpYyBERUZJTkVfTVVURVgobnRmc193b2ZfeHByZXNzMTZrX2xvY2spO1xcbmZzL250ZnMvd29mLmM6NTE6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl9sengzMmtfbG9jayk7XFxuZnMvbnRmcy93b2YuYy01Mi1cXG5mcy9udGZzL3dvZi5jOjUzOnN0YXRpYyBzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIG50ZnNfd29mX3hwcmVzczRrX3dvcmtzcGFjZSA9IHtcXG5mcy9udGZzL3dvZi5jOjU0OlxcdC5sb2NrID0gXFx1MDAyNm50ZnNfd29mX3hwcmVzczRrX2xvY2ssXFxuZnMvbnRmcy93b2YuYy01NS1cXHQuY29kZWMgPSBcXHUwMDI2bnRmc194cHJlc3M0a19jb2RlY19vcHMsXFxuLS1cXG5mcy9udGZzL3dvZi5jLTU4LVxcbmZzL250ZnMvd29mLmM6NTk6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgbnRmc193b2ZfeHByZXNzOGtfd29ya3NwYWNlID0ge1xcbmZzL250ZnMvd29mLmM6NjA6XFx0LmxvY2sgPSBcXHUwMDI2bnRmc193b2ZfeHByZXNzOGtfbG9jayxcXG5mcy9udGZzL3dvZi5jLTYxLVxcdC5jb2RlYyA9IFxcdTAwMjZudGZzX3hwcmVzczhrX2NvZGVjX29wcyxcXG4tLVxcbmZzL250ZnMvd29mLmMtNjQtXFxuZnMvbnRmcy93b2YuYzo2NTpzdGF0aWMgc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSBudGZzX3dvZl94cHJlc3MxNmtfd29ya3NwYWNlID0ge1xcbmZzL250ZnMvd29mLmM6NjY6XFx0LmxvY2sgPSBcXHUwMDI2bnRmc193b2ZfeHByZXNzMTZrX2xvY2ssXFxuZnMvbnRmcy93b2YuYy02Ny1cXHQuY29kZWMgPSBcXHUwMDI2bnRmc194cHJlc3MxNmtfY29kZWNfb3BzLFxcbi0tXFxuZnMvbnRmcy93b2YuYy03MC1cXG5mcy9udGZzL3dvZi5jOjcxOnN0YXRpYyBzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIG50ZnNfd29mX2x6eDMya193b3Jrc3BhY2UgPSB7XFxuZnMvbnRmcy93b2YuYzo3MjpcXHQubG9jayA9IFxcdTAwMjZudGZzX3dvZl9sengzMmtfbG9jayxcXG5mcy9udGZzL3dvZi5jLTczLVxcdC5jb2RlYyA9IFxcdTAwMjZudGZzX2x6eDMya19jb2RlY19vcHMsXFxuLS1cXG5mcy9udGZzL3dvZi5jLTc2LVxcbmZzL250ZnMvd29mLmM6Nzc6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKmNvbnN0IG50ZnNfd29mX3dvcmtzcGFjZXNbXSA9IHtcXG5mcy9udGZzL3dvZi5jOjc4OlxcdFxcdTAwMjZudGZzX3dvZl94cHJlc3M0a193b3Jrc3BhY2UsXFxuZnMvbnRmcy93b2YuYzo3OTpcXHRcXHUwMDI2bnRmc193b2ZfeHByZXNzOGtfd29ya3NwYWNlLFxcbmZzL250ZnMvd29mLmM6ODA6XFx0XFx1MDAyNm50ZnNfd29mX3hwcmVzczE2a193b3Jrc3BhY2UsXFxuZnMvbnRmcy93b2YuYzo4MTpcXHRcXHUwMDI2bnRmc193b2ZfbHp4MzJrX3dvcmtzcGFjZSxcXG5mcy9udGZzL3dvZi5jLTgyLX07XFxuZnMvbnRmcy93b2YuYy04My1cXG5mcy9udGZzL3dvZi5jOjg0OnN0YXRpYyBzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICpudGZzX3dvZl93b3Jrc3BhY2UodTggYmxvY2tfc2l6ZV9iaXRzKVxcbmZzL250ZnMvd29mLmMtODUte1xcbi0tXFxuZnMvbnRmcy93b2YuYy04Ny1cXHRjYXNlIDEyOlxcbmZzL250ZnMvd29mLmM6ODg6XFx0XFx0cmV0dXJuIFxcdTAwMjZudGZzX3dvZl94cHJlc3M0a193b3Jrc3BhY2U7XFxuZnMvbnRmcy93b2YuYy04OS1cXHRjYXNlIDEzOlxcbmZzL250ZnMvd29mLmM6OTA6XFx0XFx0cmV0dXJuIFxcdTAwMjZudGZzX3dvZl94cHJlc3M4a193b3Jrc3BhY2U7XFxuZnMvbnRmcy93b2YuYy05MS1cXHRjYXNlIDE0OlxcbmZzL250ZnMvd29mLmM6OTI6XFx0XFx0cmV0dXJuIFxcdTAwMjZudGZzX3dvZl94cHJlc3MxNmtfd29ya3NwYWNlO1xcbmZzL250ZnMvd29mLmMtOTMtXFx0Y2FzZSAxNTpcXG5mcy9udGZzL3dvZi5jOjk0OlxcdFxcdHJldHVybiBcXHUwMDI2bnRmc193b2ZfbHp4MzJrX3dvcmtzcGFjZTtcXG5mcy9udGZzL3dvZi5jLTk1LVxcdGRlZmF1bHQ6XFxuLS1cXG5mcy9udGZzL3dvZi5jLTk5LVxcbmZzL250ZnMvd29mLmM6MTAwOnN0YXRpYyBpbnQgbnRmc193b2Zfd29ya3NwYWNlX3ByZXBhcmUoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MpXFxuZnMvbnRmcy93b2YuYy0xMDEte1xcbi0tXFxuZnMvbnRmcy93b2YuYy0xMjgtXFxuZnMvbnRmcy93b2YuYzoxMjk6dm9pZCBudGZzX3dvZl9mcmVlX3dvcmtzcGFjZXModm9pZClcXG5mcy9udGZzL3dvZi5jLTEzMC17XFxuLS1cXG5mcy9udGZzL3dvZi5jLTEzMi1cXG5mcy9udGZzL3dvZi5jOjEzMzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShudGZzX3dvZl93b3Jrc3BhY2VzKTsgaSsrKSB7XFxuZnMvbnRmcy93b2YuYzoxMzQ6XFx0XFx0c3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MgPSBudGZzX3dvZl93b3Jrc3BhY2VzW2ldO1xcbmZzL250ZnMvd29mLmMtMTM1LVxcbi0tXFxuZnMvbnRmcy93b2YuYz0zNjU9c3RhdGljIGludCBudGZzX3JlYWRfd29mX2NodW5rKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbi0tXFxuZnMvbnRmcy93b2YuYy00MTktXFxuZnMvbnRmcy93b2YuYzo0MjA6c3RydWN0IG50ZnNfd29mX2Rlc3Qge1xcbmZzL250ZnMvd29mLmMtNDIxLVxcdHN0cnVjdCBmb2xpbyAqZm9saW9zW05URlNfV09GX01BWF9QQUdFU107XFxuLS1cXG5mcy9udGZzL3dvZi5jLTQyNi1cXG5mcy9udGZzL3dvZi5jOjQyNzpzdGF0aWMgdm9pZCBudGZzX3dvZl9yZWxlYXNlX2Rlc3Qoc3RydWN0IG50ZnNfd29mX2Rlc3QgKmRlc3QsXFxuZnMvbnRmcy93b2YuYy00MjgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8gKnRhcmdldCwgYm9vbCBzdWNjZXNzKVxcbi0tXFxuZnMvbnRmcy93b2YuYy00NDctXFxuZnMvbnRmcy93b2YuYzo0NDg6c3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvbnRmcy93b2YuYy00NDktXFx0XFx0XFx0XFx0IHN0cnVjdCBmb2xpbyAqdGFyZ2V0LCBsb2ZmX3QgY2h1bmtfc3RhcnQsXFxuZnMvbnRmcy93b2YuYzo0NTA6XFx0XFx0XFx0XFx0IGxvZmZfdCBjaHVua19lbmQsIHN0cnVjdCBudGZzX3dvZl9kZXN0ICpkZXN0KVxcbmZzL250ZnMvd29mLmMtNDUxLXtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTEyLVxcbmZzL250ZnMvd29mLmM6NTEzOnN0YXRpYyBpbnQgbnRmc193b2ZfZGVjb2RlKHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKndzLCBjb25zdCB2b2lkICpzcmMsXFxuZnMvbnRmcy93b2YuYy01MTQtXFx0XFx0XFx0ICAgdTMyIHNyY19sZW4sIHZvaWQgKmRzdCwgdTMyIGRzdF9sZW4pXFxuLS1cXG5mcy9udGZzL3dvZi5jLTUyMy1cXG5mcy9udGZzL3dvZi5jOjUyNDpzdGF0aWMgaW50IG50ZnNfd29mX2RlY29kZV9wYWdlX2RpcmVjdChzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cyxcXG5mcy9udGZzL3dvZi5jLTUyNS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZvbGlvICp0YXJnZXQsIGxvZmZfdCBjaHVua19zdGFydCxcXG4tLVxcbmZzL250ZnMvd29mLmMtNTQwLVxcdGFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuZnMvbnRmcy93b2YuYzo1NDE6XFx0ZXJyID0gbnRmc193b2ZfZGVjb2RlKHdzLCBzcmMsIHNyY19sZW4sICh1OCAqKWFkZHIgKyBwYWdlX29mZnNldCxcXG5mcy9udGZzL3dvZi5jLTU0Mi1cXHRcXHRcXHQgICAgICBkc3RfbGVuKTtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTQ4LVxcbmZzL250ZnMvd29mLmM6NTQ5OnN0YXRpYyBpbnQgbnRmc193b2ZfZGVjb2RlX2ZvbGlvc19kaXJlY3Qoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsXFxuZnMvbnRmcy93b2YuYy01NTAtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbnRmcy93b2YuYy01NTYtXFx0dW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY2h1bmtfc3RhcnQpO1xcbmZzL250ZnMvd29mLmM6NTU3OlxcdHN0cnVjdCBudGZzX3dvZl9kZXN0IGRlc3Q7XFxuZnMvbnRmcy93b2YuYy01NTgtXFx0dm9pZCAqYWRkcjtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTYxLVxcbmZzL250ZnMvd29mLmM6NTYyOlxcdGVyciA9IG50ZnNfd29mX2NvbGxlY3RfZGVzdChtYXBwaW5nLCB0YXJnZXQsIGNodW5rX3N0YXJ0LCBjaHVua19lbmQsXFxuZnMvbnRmcy93b2YuYy01NjMtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkZXN0KTtcXG5mcy9udGZzL3dvZi5jLTU2NC1cXHRpZiAoZXJyKSB7XFxuZnMvbnRmcy93b2YuYzo1NjU6XFx0XFx0bnRmc193b2ZfcmVsZWFzZV9kZXN0KFxcdTAwMjZkZXN0LCB0YXJnZXQsIGZhbHNlKTtcXG5mcy9udGZzL3dvZi5jLTU2Ni1cXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTcyLVxcdGlmICghYWRkcikge1xcbmZzL250ZnMvd29mLmM6NTczOlxcdFxcdG50ZnNfd29mX3JlbGVhc2VfZGVzdChcXHUwMDI2ZGVzdCwgdGFyZ2V0LCBmYWxzZSk7XFxuZnMvbnRmcy93b2YuYy01NzQtXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLS1cXG5mcy9udGZzL3dvZi5jLTU3Ni1cXG5mcy9udGZzL3dvZi5jOjU3NzpcXHRlcnIgPSBudGZzX3dvZl9kZWNvZGUod3MsIHNyYywgc3JjX2xlbiwgKHU4ICopYWRkciArIHBhZ2Vfb2Zmc2V0LFxcbmZzL250ZnMvd29mLmMtNTc4LVxcdFxcdFxcdCAgICAgIGRzdF9sZW4pO1xcbi0tXFxuZnMvbnRmcy93b2YuYy01ODAtXFx0aWYgKGVycikge1xcbmZzL250ZnMvd29mLmM6NTgxOlxcdFxcdG50ZnNfd29mX3JlbGVhc2VfZGVzdChcXHUwMDI2ZGVzdCwgdGFyZ2V0LCBmYWxzZSk7XFxuZnMvbnRmcy93b2YuYy01ODItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZnMvbnRmcy93b2YuYy01ODMtXFx0fVxcbmZzL250ZnMvd29mLmM6NTg0OlxcdG50ZnNfd29mX3JlbGVhc2VfZGVzdChcXHUwMDI2ZGVzdCwgdGFyZ2V0LCB0cnVlKTtcXG5mcy9udGZzL3dvZi5jLTU4NS1cXHRyZXR1cm4gMDtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTg3LVxcbmZzL250ZnMvd29mLmM6NTg4OnN0YXRpYyBpbnQgbnRmc193b2ZfdHJ5X2RpcmVjdChzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cyxcXG5mcy9udGZzL3dvZi5jLTU4OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9udGZzL3dvZi5jLTU5Ni1cXHRpZiAoZHN0X2xlbiBcXHUwMDNjPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldClcXG5mcy9udGZzL3dvZi5jOjU5NzpcXHRcXHRyZXR1cm4gbnRmc193b2ZfZGVjb2RlX3BhZ2VfZGlyZWN0KHdzLCB0YXJnZXQsIGNodW5rX3N0YXJ0LCBzcmMsXFxuZnMvbnRmcy93b2YuYy01OTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3JjX2xlbiwgZHN0X2xlbik7XFxuZnMvbnRmcy93b2YuYy01OTktXFxuZnMvbnRmcy93b2YuYzo2MDA6XFx0cmV0dXJuIG50ZnNfd29mX2RlY29kZV9mb2xpb3NfZGlyZWN0KHdzLCBtYXBwaW5nLCB0YXJnZXQsIGNodW5rX3N0YXJ0LFxcbmZzL250ZnMvd29mLmMtNjAxLVxcdFxcdFxcdFxcdFxcdCAgICAgY2h1bmtfZW5kLCBzcmMsIHNyY19sZW4sIGRzdF9sZW4pO1xcbi0tXFxuZnMvbnRmcy93b2YuYz02MDQ9aW50IG50ZnNfcmVhZF93b2ZfY29tcHJlc3NlZF9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvbnRmcy93b2YuYy02MDktXFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cXHUwMDNldm9sO1xcbmZzL250ZnMvd29mLmM6NjEwOlxcdHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKndzO1xcbmZzL250ZnMvd29mLmMtNjExLVxcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChWRlNfSShuaSkpO1xcbi0tXFxuZnMvbnRmcy93b2YuYy02MTgtXFxuZnMvbnRmcy93b2YuYzo2MTk6XFx0d3MgPSBudGZzX3dvZl93b3Jrc3BhY2UobmktXFx1MDAzZWl0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZV9iaXRzKTtcXG5mcy9udGZzL3dvZi5jLTYyMC1cXHRpZiAoIXdzKSB7XFxuLS1cXG5mcy9udGZzL3dvZi5jLTY1NC1cXHRtdXRleF9sb2NrKHdzLVxcdTAwM2Vsb2NrKTtcXG5mcy9udGZzL3dvZi5jOjY1NTpcXHRlcnIgPSBudGZzX3dvZl93b3Jrc3BhY2VfcHJlcGFyZSh3cyk7XFxuZnMvbnRmcy93b2YuYy02NTYtXFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMvd29mLmMtNjg1LVxcdFxcdGNodW5rX2VuZCA9IGNodW5rX2ZpbGVfb2Zmc2V0ICsgZGVjb21wX3NpemU7XFxuZnMvbnRmcy93b2YuYzo2ODY6XFx0XFx0ZXJyID0gbnRmc193b2ZfdHJ5X2RpcmVjdCh3cywgbWFwcGluZywgZm9saW8sIGNodW5rX2ZpbGVfb2Zmc2V0LFxcbmZzL250ZnMvd29mLmMtNjg3LVxcdFxcdFxcdFxcdFxcdCAgY2h1bmtfZW5kLCBjaHVua19tZW0sIGNodW5rX3NpemUsXFxuLS1cXG5mcy9udGZzL3dvZi5jLTY5My1cXG5mcy9udGZzL3dvZi5jOjY5NDpcXHRcXHRlcnIgPSBudGZzX3dvZl9kZWNvZGUod3MsIGNodW5rX21lbSwgY2h1bmtfc2l6ZSwgd3MtXFx1MDAzZW91dHB1dCxcXG5mcy9udGZzL3dvZi5jLTY5NS1cXHRcXHRcXHRcXHQgICAgICBkZWNvbXBfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ4OjI1LjAwMjAyODJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY3NTQ1MjgxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRmlsZSBTeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2tgLCBhIHB1YmxpYyBmdW5jdGlvbiBpbiB0aGUgTlRGUyBtb2R1bGUsIGlzIGF0IHRoZSBoZWFydCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIHNvIEkndmUgY3Jvc3MtcmVmZXJlbmNlZCBpdCBhZ2FpbnN0IG90aGVyIHBvdGVudGlhbGx5IGFmZmVjdGVkIGNvZGUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmV2aWV3IGFsbCB0aGUgY29kZSB0aGF0IHdhcyBjaGFuZ2VkOlxuXG4qICAgYGZzL2Vyb2ZzL2ludGVybmFsLmhgIGxvb2tzIHJlbGV2YW50IGR1ZSB0byB0aGUgYHpfZXJvZnNfcGNsdXN0ZXJfcmVhZG1vcmVgIC8gYHpfZXJvZnNfcmVhZGFoZWFkYFxuKiAgIGBmcy9leHQ0L2lubGluZS5jYCBhbmQgZnVuY3Rpb25zIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgbWlnaHQgYmUgYSBjb25jZXJuLlxuKiAgIGBmcy9uZnMvZGlyLmNgIHdoZXJlIGBuZnNfcmVhZGRpcl9mb2xpb19nZXRfbmV4dGAgY2FsbHMgYG5mc19yZWFkZGlyX2ZvbGlvX2ZpbGxlcmAgLyBgbmZzX3JlYWRkaXJgXG4qICAgYGZzL250ZnMvaW5vZGUuY2Agd2l0aCB0aGUgZnVuY3Rpb25zIGBfX250ZnNfaW5vZGVfcmVzaWRlbnRfYXR0cl9wd3JpdGVgIC8gYG50ZnNfZmlsZV93cml0ZV9pdGVyYFxuKiAgIGBmcy9udGZzL3dvZi5jYCB3aXRoIGBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2tgIHdoaWNoIGlzIG15IGluaXRpYWwgcG9pbnRcbiogICBgZnMvc3F1YXNoZnMvZmlsZS5jYCBhbmQgZnVuY3Rpb25zIGBzcXVhc2hmc19jb3B5X2NhY2hlYCwgYHNxdWFzaGZzX3JlYWRfZm9saW9gXG4qICAgYG1tL2ZpbGVtYXAuY2AgYW5kIHRoZSBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBmdW5jdGlvblxuKiAgIGBtbS9yZWFkYWhlYWQuY2Agd2l0aCB0aGUgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCwgYHBhZ2VfY2FjaGVfcmFfb3JkZXJgXG5cbk5vdywgSSBuZWVkIHRvIG5hcnJvdyBkb3duIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0YXJnZXRlZCBhbmFseXNpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMgYW5kIGZ1bmN0aW9ucyBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgb25lczpcblxuKiAgIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgIC0gQ29yZSBmaWxlbWFwIGZ1bmN0aW9uIGlzIGludGVyZXN0aW5nLlxuKiAgIGBzcXVhc2hmc19jb3B5X2NhY2hlYCAtIFBhcnQgb2Ygc3F1YXNoZnMgZmlsZSBoYW5kbGluZy5cbiogICBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCAtIERlYWxpbmcgd2l0aCBpbmxpbmUgZGF0YSB3aXRoaW4gZXh0NC5cbiogICBgbnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrYCAtIFRoZSBpbml0aWFsIHBvaW50IG9mIGludGVyZXN0IHJlbGF0ZWQgdG8gTlRGUy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzOlxuXG4qICAgYEVST0ZTX0ZTYCAtIGZvciBFUk9GUy5cbiogICBgRVhUNF9GU2AgLSBmb3IgZXh0NC5cbiogICBgTkZTX0ZTYCAtIGZvciBORlMuXG4qICAgYE5URlNfRlNgIC0gZm9yIE5URlMsIG5hdHVyYWxseS5cbiogICBgTlRGU19GU19XT0ZfQ09NUFJFU1NJT05gIC0gdGhpcyBpcyBsaWtlbHkgKmNydWNpYWwqIHRvIGVuYWJsZSBOVEZTJ3MgV09GIGNvbXByZXNzaW9uLlxuKiAgIGBTUVVBU0hGU2AgLSBmb3IgU3F1YXNoRlMuXG5cbkkndmUgY29uZmlybWVkIHRoYXQgYE5URlNfRlNfV09GX0NPTVBSRVNTSU9OYCBkZXBlbmRzIG9uIGBOVEZTX0ZTYCBhcyBleHBlY3RlZC4gVGhlIG90aGVycyBhcmUgc3RhbmRhcmQgYW5kIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0IGNvbnRhaW5zOlxuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBBbGwgb2YgdGhlIGNvbmZpZ3MgSSBtZW50aW9uZWQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IHRoZSBsaXN0IG9mIGtleSBmdW5jdGlvbnMgSSBpZGVudGlmaWVkLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggcmVtb3ZlcyBgRkdQX05PRlNgIGZyb20gcGFnZWNhY2hlIEFQSXMgYW5kIHVwZGF0ZXMgZm9saW8gYWxsb2NhdGlvbi9yZWNsYWltIHNjb3BlcyBhY3Jvc3MgY29yZSBtbSBhbmQgZmlsZXN5c3RlbXMsIGltcGFjdGluZyByZWNsYWltIGNvbnRleHRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBpbiBjb3JlIHBhdGhzLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBBYnNvbHV0ZWx5LiBUaGlzIHNvdW5kcyBsaWtlIGFuIGFyZWEgcmlwZSBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gY2hhbmdlcyBpbiBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIHBhdGhzLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTAzNSwiT3V0cHV0VG9rZW5zIjoyMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6NTEuNzU2NTU4NDc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzNTcwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVST0ZTX0ZTXCIsXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJORlNfRlNcIixcbiAgICBcIk5URlNfRlNcIixcbiAgICBcIk5URlNfRlNfV09GX0NPTVBSRVNTSU9OXCIsXG4gICAgXCJTUVVBU0hGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbFwiLFxuICAgIFwic3F1YXNoZnNfY29weV9jYWNoZVwiLFxuICAgIFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsXG4gICAgXCJudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBGR1BfTk9GUyBmbGFnIGZyb20gY29yZSBwYWdlIGNhY2hlIEFQSXMgKF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCkgYW5kIGFkanVzdHMgZm9saW8gYWxsb2NhdGlvbiBmbGFncyBhbmQgcmVjbGFpbSBjb250ZXh0IGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBzcXVhc2hmcywgZXJvZnMsIG50ZnMsIGFuZCBuZnMpLiBJdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgYW5kIGludHJvZHVjZXMgc2NvcGVkIE5PRlMgY29udGV4dHMgKG1lbWFsbG9jX25vZnNfc2F2ZS9yZXN0b3JlKSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBJL08gYW5kIGNhY2hpbmcgcGF0aHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBtZW1vcnkgcmVjbGFpbSBhbmQgbG9ja2luZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTlRGU19GU1wiLFxuICAgIFwiTlRGU19GU19XT0ZfQ09NUFJFU1NJT05cIixcbiAgICBcIlNRVUFTSEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19maWxlbWFwX2dldF9mb2xpb19tcG9sXCIsXG4gICAgXCJzcXVhc2hmc19jb3B5X2NhY2hlXCIsXG4gICAgXCJleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFcIixcbiAgICBcIm50ZnNfcmVhZF93b2ZfY29tcHJlc3NlZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIEZHUF9OT0ZTIGZsYWcgZnJvbSBjb3JlIHBhZ2UgY2FjaGUgQVBJcyAoX19maWxlbWFwX2dldF9mb2xpb19tcG9sKSBhbmQgYWRqdXN0cyBmb2xpbyBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIGNvbnRleHQgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIHNxdWFzaGZzLCBlcm9mcywgbnRmcywgYW5kIG5mcykuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgaW50cm9kdWNlcyBzY29wZWQgTk9GUyBjb250ZXh0cyAobWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmUpIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIEkvTyBhbmQgY2FjaGluZyBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIG1lbW9yeSByZWNsYWltIGFuZCBsb2NraW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6NTEuODI5OTIxNTUxWiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTM3MTk1MTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ4OjUxLjgzMDM3NDAyMloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM1MzcxNDkzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBkZXByZWNhdGVkIEZHUF9OT0ZTIGZsYWcgZnJvbSB0aGUgcGFnZSBjYWNoZSBmb2xpbyBhY3F1aXNpdGlvbiBBUElzIGFuZCBhZGp1c3RzIGNhbGwgc2l0ZXMgYWNyb3NzIHZhcmlvdXMgZmlsZXN5c3RlbXMgKEVST0ZTLCBFWFQ0LCBORlMsIE5URlMsIFNxdWFzaEZTKSB0byByZWx5IG9uIG1hcHBpbmcgR0ZQIG1hc2tzIG9yIHNjb3BlZCBtZW1hbGxvY19ub2ZzX3NhdmUoKS9tZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSBjb250ZXh0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGFsbG9jYXRpb24gcmVjbGFpbSBmbGFncyAoR0ZQL0ZHUCBmbGFncykgYW5kIGZpbGVzeXN0ZW0gcmVjdXJzaW9uL2RlYWRsb2NrIHByZXZlbnRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbnRyb2wgZmxvdyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKGUuZy4sIHJlY2xhaW0gcmVjdXJzaW9uIG9yIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTI0MzU2ZDdhYzY1ZTBmOWJkZWRmNjczMWY2YWEzODIyZDkwNzQ3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbmluZGV4IDY1OTc0ZTU3YWViZmIuLjg0YjNjZGM4ZTg4ZjEgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICplcm9mc19ncmFiX2ZvbGlvX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXMsXG4gXHRcdFx0XHRcdFx0ICAgIHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIF9fZmlsZW1hcF9nZXRfZm9saW8oYXMsIGluZGV4LFxuLVx0XHRcdEZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULFxuK1x0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRyZWFkYWhlYWRfZ2ZwX21hc2soYXMpIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi4xODg0YWJiMDk2MTQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTYwMSw5ICs2MDEsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0LyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeVxuLVx0ICogc3RhcnRlZCAqL1xuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4rXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcbkBAIC03MzQsNyArNzMyLDcgQEAgaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbiBcdH1cbiBcbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuK1x0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLFxuIFx0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xuaW5kZXggNDkzOTQxMjNiZDA5Ni4uZTM0MTI1YThhMmUyOCAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtNDQ3LDcgKzQ0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKm5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbitcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jXG5pbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5jXG4rKysgYi9mcy9udGZzL2lub2RlLmNcbkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLFxuIFx0bWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC1cdTAwM2VudGZzX2lubyk7XG4gXG4gXHQvKiBLZWVwIHRoZSBmaXJzdCBwYWdlIGNsZWFuIGFuZCB1cHRvZGF0ZSAqL1xuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4rXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4gXHRcdFx0XHQgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvd29mLmMgYi9mcy9udGZzL3dvZi5jXG5pbmRleCA4Zjg0YzIyMTJlZWVjLi5jOTgxYjRhM2I2OTU5IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy93b2YuY1xuKysrIGIvZnMvbnRmcy93b2YuY1xuQEAgLTQ2NCwxMCArNDY0LDkgQEAgc3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0Zm9saW8gPSB0YXJnZXQ7XG4gXHRcdFx0aXNfdGFyZ2V0ID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8oXG4tXHRcdFx0XHRtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMgfCBGR1BfTk9XQUlULFxuLVx0XHRcdFx0R0ZQX05PRlMpO1xuK1x0XHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbitcdFx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxuK1x0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdFx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0XHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0XHRpc190YXJnZXQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9maWxlLmMgYi9mcy9zcXVhc2hmcy9maWxlLmNcbmluZGV4IGQ4MzU5NGNlOTFkMjMuLjM0YzU1MGEyNjZiY2YgMTAwNjQ0XG4tLS0gYS9mcy9zcXVhc2hmcy9maWxlLmNcbisrKyBiL2ZzL3NxdWFzaGZzL2ZpbGUuY1xuQEAgLTM5OCw2ICszOTgsNyBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzcXVhc2hmc19zYl9pbmZvICptc2JsayA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuIFx0aW50IGksIG1hc2sgPSAoMSBcdTAwM2NcdTAwM2MgKG1zYmxrLVx1MDAzZWJsb2NrX2xvZyAtIFBBR0VfU0hJRlQpKSAtIDE7XG4gXHRpbnQgc3RhcnRfaW5kZXggPSBmb2xpby1cdTAwM2VpbmRleCBcdTAwMjYgfm1hc2ssIGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4IHwgbWFzaztcbitcdHVuc2lnbmVkIGludCBub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4gXG4gXHQvKlxuIFx0ICogTG9vcCBjb3B5aW5nIGRhdGFibG9jayBpbnRvIHBhZ2VzLiAgQXMgdGhlIGRhdGFibG9jayBsaWtlbHkgY292ZXJzXG5AQCAtNDE1LDcgKzQxNiw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRwdXNoX2ZvbGlvID0gKGkgPT0gZm9saW8tXHUwMDNlaW5kZXgpID8gZm9saW8gOlxuIFx0XHRcdF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaSxcbi1cdFx0XHRcdFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXG4rXHRcdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXG4gXHRcdGlmIChJU19FUlIocHVzaF9mb2xpbykpXG5AQCAtNDMwLDYgKzQzMSw4IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRpZiAoaSAhPSBmb2xpby1cdTAwM2VpbmRleClcbiBcdFx0XHRmb2xpb19wdXQocHVzaF9mb2xpbyk7XG4gXHR9XG4rXG4rXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mcyk7XG4gfVxuIFxuIC8qIFJlYWQgZGF0YWJsb2NrIHN0b3JlZCBwYWNrZWQgaW5zaWRlIGEgZnJhZ21lbnQgKHRhaWwtZW5kIHBhY2tlZCBibG9jaykgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAwYWRmYTY2MDU2NTNkLi5iZmY4YjcyNjRmYjAyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtNjk3LDcgKzY5Nyw2IEBAIHBnb2ZmX3QgcGFnZV9jYWNoZV9wcmV2X21pc3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gICogICBmb2xpbyBpcyBhbHJlYWR5IGluIGNhY2hlLiAgSWYgdGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQsIHVubG9jayBpdFxuICAqICAgYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGNhbiBkbyB0aGUgc2FtZSBkYW5jZS5cbiAgKiAqICVGR1BfV1JJVEUgLSBUaGUgZm9saW8gd2lsbCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBjYWxsZXIuXG4tICogKiAlRkdQX05PRlMgLSBfX0dGUF9GUyB3aWxsIGdldCBjbGVhcmVkIGluIGdmcC5cbiAgKiAqICVGR1BfTk9XQUlUIC0gRG9uJ3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suXG4gICogKiAlRkdQX1NUQUJMRSAtIFdhaXQgZm9yIHRoZSBmb2xpbyB0byBiZSBzdGFibGUgKGZpbmlzaGVkIHdyaXRlYmFjaylcbiAgKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU9cbkBAIC03MTAsMTEgKzcwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7XG4gI2RlZmluZSBGR1BfTE9DS1x0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwMilcbiAjZGVmaW5lIEZHUF9DUkVBVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwNClcbiAjZGVmaW5lIEZHUF9XUklURVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcbi0jZGVmaW5lIEZHUF9OT0ZTXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuLSNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbi0jZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcbi0jZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4tI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxuKyNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcbisjZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbisjZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4rI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuICNkZWZpbmUgRkdGX0dFVF9PUkRFUihmZ2YpXHQoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgXHUwMDNlXHUwMDNlIDI2KVx0LyogdG9wIDYgYml0cyAqL1xuIFxuICNkZWZpbmUgRkdQX1dSSVRFQkVHSU5cdFx0KEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSlcbkBAIC05MjksNyArOTI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ3JhYl9jYWNoZV9wYWdlX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbitcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuaW5kZXggZDdjNmE5NDJhYTdlMC4uZjc2YmUxMTQxYjA2NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG5AQCAtMzcyLDEzICszNzIsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX25vaW9fcmVzdG9yZSh1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gfVxuIFxuIC8qKlxuLSAqIG1lbWFsbG9jX25vZnNfc2F2ZSAtIE1hcmtzIGltcGxpY2l0IEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4rICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb25zIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4tICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc29cbi0gKiB0aGV5IGFyZSBzYWZlIGZvciB0aGUgRlMgY3JpdGljYWwgc2VjdGlvbiBmcm9tIHRoZSBhbGxvY2F0aW9uIHJlY3Vyc2lvblxuLSAqIHBvaW50IG9mIHZpZXcuIFVzZSBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUgdG8gZW5kIHRoZSBzY29wZSB3aXRoIGZsYWdzXG4tICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cbisgKiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBjYWxsaW5nXG4rICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBjYWxsaW5nIGludG8gZmlsZXN5c3RlbXNcbisgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsXG4rICogYnV0IChmb3IgZXhhbXBsZSkgaW5vZGVzIHdpbGwgbm90IGJlLlxuKyAqXG4rICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2tcbisgKiB3aGljaCB3b3VsZCBiZSBuZWVkZWQgYnkgRlMgcmVjbGFpbS4gIFdoaWxlIHdlIGNvdWxkIHRoZW9yZXRpY2FsbHlcbisgKiBjYWxsIGludG8gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSBpbiB0aGlzIGNhc2UsIGl0IGNhbiBiZSBhIGRlZXAgY2FsbFxuKyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuXG4rICpcbisgKiBGaWxlc3lzdGVtcyBvZnRlbiBjaG9vc2UgdG8gaW5jb3Jwb3JhdGUgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gYXMgcGFydFxuKyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbFxuKyAqIHNlbnNlLCBpdCBoYXMgbXVjaCB0aGUgc2FtZSBlZmZlY3QgYXMgbmVzdGVkIGpvdXJuYWwgdHJhbnNhY3Rpb25zXG4rICogYXJlIGVpdGhlciBwcm9oaWJpdGVkIG9yIGV4cGVuc2l2ZS5cbisgKlxuKyAqIEFsc28gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSB3aGlsZSBob2xkaW5nXG4rICogYSBmaWxlIGZvbGlvIGxvY2tlZC4gIEhpZ2ggb3JkZXIgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgdGhvc2UgcmVxdWVzdGVkXG4rICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uXG4gICpcbiAgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgdXNlZCBmcm9tIGFueSBjb250ZXh0LlxuICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuXG5AQCAtMzg5LDEwICs0MDIsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2Nfbm9mc19zYXZlKHZvaWQpXG4gfVxuIFxuIC8qKlxuLSAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZHMgdGhlIGltcGxpY2l0IEdGUF9OT0ZTIHNjb3BlLlxuKyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZCBmaWxlc3lzdGVtIHJlY2xhaW0gc2NvcGUuXG4gICogQGZsYWdzOiBGbGFncyB0byByZXN0b3JlLlxuICAqXG4tICogRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19ub2ZzX3NhdmUgZnVuY3Rpb24uXG4rICogRW5kcyB0aGUgaW1wbGljaXQgbWVtb3J5IGFsbG9jYXRpb24gc2NvcGUgc3RhcnRlZCBieVxuKyAqIG1lbWFsbG9jX25vZnNfc2F2ZSgpLiAgVGhpcyBtYXkgbm90IGVuYWJsZSBhY2Nlc3MgdG8gZmlsZXN5c3RlbSByZWNsYWltXG4rICogaWYgaXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRpbWUgbWVtYWxsb2Nfbm9mc19zYXZlKCkgd2FzIGNhbGxlZC5cbiAgKiBBbHdheXMgbWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIGZsYWdzIGlzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGVcbiAgKiBwYWlyaW5nIG1lbWFsbG9jX25vZnNfc2F2ZSBjYWxsLlxuICAqL1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNmFmZWM2MzY4ODFmYi4uZTY1ODAyOTFmMjE4NSAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTk5NCw4ICsxOTk0LDYgQEAgc3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICgoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfV1JJVEUpIFx1MDAyNlx1MDAyNiBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpXG4gXHRcdFx0Z2ZwIHw9IF9fR0ZQX1dSSVRFO1xuLVx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfTk9GUylcbi1cdFx0XHRnZnAgXHUwMDI2PSB+X19HRlBfRlM7XG4gXHRcdGlmIChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9OT1dBSVQpIHtcbiBcdFx0XHRnZnAgXHUwMDI2PSB+R0ZQX0tFUk5FTDtcbiBcdFx0XHRnZnAgfD0gR0ZQX05PV0FJVDtcbmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jXG5pbmRleCA2ZTU1NjMyOTAyODdlLi45YzExNmQ0YmE5NjNhIDEwMDY0NFxuLS0tIGEvbW0vcmVhZGFoZWFkLmNcbisrKyBiL21tL3JlYWRhaGVhZC5jXG5AQCAtMjI3LDE3ICsyMjcsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4gXHRnZnBfdCBnZnBfbWFzayA9IHJlYWRhaGVhZF9nZnBfbWFzayhtYXBwaW5nKTtcbiBcdHVuc2lnbmVkIGxvbmcgbWFyayA9IFVMT05HX01BWCwgaSA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgbWluX25ycGFnZXMgPSBtYXBwaW5nX21pbl9mb2xpb19ucnBhZ2VzKG1hcHBpbmcpO1xuLVxuLVx0Lypcbi1cdCAqIFBhcnR3YXkgdGhyb3VnaCB0aGUgcmVhZGFoZWFkIG9wZXJhdGlvbiwgd2Ugd2lsbCBoYXZlIGFkZGVkXG4tXHQgKiBsb2NrZWQgcGFnZXMgdG8gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aWxsIG5vdCB5ZXQgaGF2ZSBzdWJtaXR0ZWRcbi1cdCAqIHRoZW0gZm9yIEkvTy4gIEFkZGluZyBhbm90aGVyIHBhZ2UgbWF5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LFxuLVx0ICogd2hpY2ggY2FuIHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0uICBUZWxsaW5nIHRoZSBWTSB3ZSdyZSBpblxuLVx0ICogdGhlIG1pZGRsZSBvZiBhIGZpbGVzeXN0ZW0gb3BlcmF0aW9uIHdpbGwgY2F1c2UgaXQgdG8gbm90XG4tXHQgKiB0b3VjaCBmaWxlLWJhY2tlZCBwYWdlcywgcHJldmVudGluZyBhIGRlYWRsb2NrLiAgTW9zdCAoYWxsPylcbi1cdCAqIGZpbGVzeXN0ZW1zIGFscmVhZHkgc3BlY2lmeSBfX0dGUF9OT0ZTIGluIHRoZWlyIG1hcHBpbmcnc1xuLVx0ICogZ2ZwX21hc2ssIGJ1dCBsZXQncyBiZSBleHBsaWNpdCBoZXJlLlxuLVx0ICovXG4rXHQvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqL1xuIFx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2spO1xuQEAgLTUxMiw3ICs1MDIsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiBcbiBcdHJhLVx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xuIFxuLVx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xuK1x0LyogQWxsb2NhdGluZyB3aXRoIGxvY2tlZCBmb2xpb3MgKi9cbiBcdG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0ODo1MS44MzAzNzQ4NDJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNzE0NjYyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIHRoZSBgRkdQX05PRlNgIEZsYWcgYW5kIEl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByaXBwaW5nIG91dCB0aGUgYEZHUF9OT0ZTYCBmbGFnIGZyb20gYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCBhbmQgdGhlbiB1cGRhdGluZyBhbGwgdGhlIHBsYWNlcyB0aGF0IHVzZWQgaXQuIEl0IGxvb2tzIGxpa2UgaXQncyBhIHNpZ25pZmljYW50IHJlZmFjdG9yLCBidXQgdGhlIG92ZXJhbGwgZ29hbCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBhdm9pZGluZyBGUyByZWNsYWltIGRlYWRsb2NrcyBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24uIEknbSBnb2luZyB0aHJvdWdoIHRoZSBjaGFuZ2VzIG1ldGhvZGljYWxseS5cblxuRmlyc3QsIEknbSBub3RpbmcgdGhlIHNwZWNpZmljIGFyZWFzIGJlaW5nIHRvdWNoZWQ6IGBlcm9mcy9pbnRlcm5hbC5oYCwgYGV4dDQvaW5saW5lLmNgLCBgbmZzL2Rpci5jYCwgYG50ZnMvaW5vZGUuY2AsIGBudGZzL3dvZi5jYCwgYHNxdWFzaGZzL2ZpbGUuY2AsIGBwYWdlbWFwLmhgLCBgc2NoZWQvbW0uaGAsIGBmaWxlbWFwLmNgLCBhbmQgYHJlYWRhaGVhZC5jYC4gRWFjaCBvZiB0aGVzZSBmaWxlcyBpcyBiZWluZyBhZGp1c3RlZCB0byBlaXRoZXIgcmVtb3ZlIHRoZSBgRkdQX05PRlNgIGZsYWcgZGlyZWN0bHkgb3IgcmVwbGFjZSBpdCB3aXRoIGEgbW9yZSBhcHByb3ByaWF0ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBvZnRlbiBpbnZvbHZpbmcgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBhbmQgYG1lbWFsbG9jX25vZnNfcmVzdG9yZSgpYC5cblxuU3BlY2lmaWNhbGx5LCBpbiBgZXJvZnNgLCBJIHNlZSBgZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXRgIHJlbW92aW5nIHRoZSBmbGFnLCB3aGljaCBpcyBnb29kIGJlY2F1c2UgaXQgYWxyZWFkeSB1c2VzIGEgbWFzayB0aGF0IGV4Y2x1ZGVzIGBfX0dGUF9SRUNMQUlNYC4gVGhlbiwgYGV4dDRgIGlzIGNsZWFuaW5nIHVwIGBpbmxpbmUuY2AsIHNhbWUgd2l0aCBgbmZzYCwgYW5kIGBudGZzYC4gVGhlIGBzcXVhc2hmc2AgY2hhbmdlIGlzIGtleTsgdGhleSdyZSBleHBsaWNpdGx5IHdyYXBwaW5nIHRoZSBgc3F1YXNoZnNfY29weV9jYWNoZSgpYCBjYWxsIHdpdGggdGhvc2UgYG1lbWFsbG9jX25vZnNfLi4uYCBjYWxscywgd2hpY2ggaXMgZXhhY3RseSB0aGUga2luZCBvZiBhcHByb2FjaCBJIHdvdWxkIGV4cGVjdCB0byBzZWUgZm9yIHByb3BlciBGUyByZWNsYWltIHByb3RlY3Rpb24uIEknbSB0YWtpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGlzIHBhdHRlcm4sIEkgbWlnaHQgYmUgdXNpbmcgaXQgbXlzZWxmLiBUaGUgaGVhZGVyIGZpbGVzIGFyZSBiZWluZyBjbGVhbmVkIHVwIGFuZCB0aGUgZmxhZyBpdHNlbGYgaXMgYmVpbmcgcmVtb3ZlZCBhbmQgcmVudW1iZXJlZCwgYW5kIEknbSB1cGRhdGluZyBteSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoZSBmbGFncyBhcmUuIFRoZSBgbW0vZmlsZW1hcC5jYCBjaGFuZ2UgbWFrZXMgc2Vuc2U6IGl0J3MgcmVtb3ZpbmcgYSBjaGVjayByZWxhdGVkIHRvIHRoZSBmbGFnLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBzdHVmZiwgaG9uZXN0bHksIGxvb2tzIHByZXR0eSBjbGVhbi5cblxuTm93LCBteSBrZXkgY29uY2VybjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlza3M/IEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgS0FTQU4gaXNzdWVzLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBjcmVhdGUgYSBzY2VuYXJpbyB3aGVyZSB3ZSdyZSBsZWFraW5nIGluZm9ybWF0aW9uIG9yIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24uIEkgY2FuJ3Qgc2VlIGFueXRoaW5nIG9idmlvdXMgdGhhdCB3b3VsZCBjYXVzZSBhIHByb2JsZW0gd2l0aCBzdHJ1Y3QgcGFkZGluZy4gSSdtIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIGNvZGUsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBsZW5ndGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBicmFuY2hpbmcuIFRoZSBwYXRjaCBpcyBzb2xlbHkgZm9jdXNlZCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyAoR0ZQIGZsYWdzKSBhbmQgcGFnZSBjYWNoZSBmb2xpbyByZXRyaWV2YWwgZmxhZ3MgKEZHUCBmbGFncykgYW5kIEZTIHJlY2xhaW0gZGVhZGxvY2sgYXZvaWRhbmNlLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGl0IGxvb2tzIGxpa2UgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBvZiB0aG9zZSBjb25jZXJucy4gSSdtIGFsc28gY29uZmlybWluZyBpdCB3b3VsZG4ndCBpbXBhY3QgdGhvc2UgS0FTQU4vTE9DS0RFUCBkb21haW5zLlxuXG5JJ20gbm93IHJ1bm5pbmcgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEgaW4gbXkgaGVhZDogS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLiBDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcnM/IE5vLiBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLiBCb3VuZHMgY2hlY2tzL3VuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBoZXJlLlxuXG5CYXNlZCBvbiBhbGwgb2YgdGhpcywgSSdtIGNvbWZvcnRhYmxlIHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlLiBJJ20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwOCwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0OToyNy4yMDE4NDUwNDhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGRlcHJlY2F0ZWQgRkdQX05PRlMgZmxhZyBmcm9tIHRoZSBwYWdlIGNhY2hlIGZvbGlvIGFjcXVpc2l0aW9uIEFQSXMgYW5kIGFkanVzdHMgY2FsbCBzaXRlcyBhY3Jvc3MgdmFyaW91cyBmaWxlc3lzdGVtcyAoRVJPRlMsIEVYVDQsIE5GUywgTlRGUywgU3F1YXNoRlMpIHRvIHJlbHkgb24gbWFwcGluZyBHRlAgbWFza3Mgb3Igc2NvcGVkIG1lbWFsbG9jX25vZnNfc2F2ZSgpL21lbWFsbG9jX25vZnNfcmVzdG9yZSgpIGNvbnRleHRzLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgYWxsb2NhdGlvbiByZWNsYWltIGZsYWdzIChHRlAvRkdQIGZsYWdzKSBhbmQgZmlsZXN5c3RlbSByZWN1cnNpb24vZGVhZGxvY2sgcHJldmVudGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29udHJvbCBmbG93IGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoZS5nLiwgcmVjbGFpbSByZWN1cnNpb24gb3IgbG9ja2luZyBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBkZXByZWNhdGVkIEZHUF9OT0ZTIGZsYWcgZnJvbSB0aGUgcGFnZSBjYWNoZSBmb2xpbyBhY3F1aXNpdGlvbiBBUElzIGFuZCBhZGp1c3RzIGNhbGwgc2l0ZXMgYWNyb3NzIHZhcmlvdXMgZmlsZXN5c3RlbXMgKEVST0ZTLCBFWFQ0LCBORlMsIE5URlMsIFNxdWFzaEZTKSB0byByZWx5IG9uIG1hcHBpbmcgR0ZQIG1hc2tzIG9yIHNjb3BlZCBtZW1hbGxvY19ub2ZzX3NhdmUoKS9tZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSBjb250ZXh0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGFsbG9jYXRpb24gcmVjbGFpbSBmbGFncyAoR0ZQL0ZHUCBmbGFncykgYW5kIGZpbGVzeXN0ZW0gcmVjdXJzaW9uL2RlYWRsb2NrIHByZXZlbnRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbnRyb2wgZmxvdyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKGUuZy4sIHJlY2xhaW0gcmVjdXJzaW9uIG9yIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt77l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-30 04:28:33 +0000 UTC FinishedAt: 2026-08-30 04:49:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EXT4_FS", "NFS_FS", "NTFS_FS", "NTFS_FS_WOF_COMPRESSION", "SQUASHFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EROFS_FS", "EXT4_FS", "NFS_FS", "NTFS_FS", "NTFS_FS_WOF_COMPRESSION", "SQUASHFS" ], "series_id": "30b4b362-31a6-46cf-a7d0-8df2be654a16" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__filemap_get_folio_mpol", "squashfs_copy_cache", "ext4_generic_write_inline_data", "ntfs_read_wof_compressed_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDssCiAgICAmIzM0O05URlNfRlMmIzM0OywKICAgICYjMzQ7TlRGU19GU19XT0ZfQ09NUFJFU1NJT04mIzM0OywKICAgICYjMzQ7U1FVQVNIRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wmIzM0OywKICAgICYjMzQ7c3F1YXNoZnNfY29weV9jYWNoZSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7bnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZGVwcmVjYXRlZCBGR1BfTk9GUyBmbGFnIGZyb20gdGhlIHBhZ2UgY2FjaGUgZm9saW8gYWNxdWlzaXRpb24gQVBJcyBhbmQgYWRqdXN0cyBjYWxsIHNpdGVzIGFjcm9zcyB2YXJpb3VzIGZpbGVzeXN0ZW1zIChFUk9GUywgRVhUNCwgTkZTLCBOVEZTLCBTcXVhc2hGUykgdG8gcmVseSBvbiBtYXBwaW5nIEdGUCBtYXNrcyBvciBzY29wZWQgbWVtYWxsb2Nfbm9mc19zYXZlKCkvbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgY29udGV4dHMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgYWxsb2NhdGlvbiByZWNsYWltIGZsYWdzIChHRlAvRkdQIGZsYWdzKSBhbmQgZmlsZXN5c3RlbSByZWN1cnNpb24vZGVhZGxvY2sgcHJldmVudGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29udHJvbCBmbG93IGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoZS5nLiwgcmVjbGFpbSByZWN1cnNpb24gb3IgbG9ja2luZyBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgRkdQX05PRlMgZmxhZyBmcm9tIGNvcmUgcGFnZSBjYWNoZSBBUElzIChfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wpIGFuZCBhZGp1c3RzIGZvbGlvIGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJlY2xhaW0gY29udGV4dCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgc3F1YXNoZnMsIGVyb2ZzLCBudGZzLCBhbmQgbmZzKS4gSXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBpbnRyb2R1Y2VzIHNjb3BlZCBOT0ZTIGNvbnRleHRzIChtZW1hbGxvY19ub2ZzX3NhdmUvcmVzdG9yZSkgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gSS9PIGFuZCBjYWNoaW5nIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbWVtb3J5IHJlY2xhaW0gYW5kIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTI0MzU2ZDdhYzY1ZTBmOWJkZWRmNjczMWY2YWEzODIyZDkwNzQ3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjQyOjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL2ludGVybmFsLmggYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5pbmRleCA2NTk3NGU1N2FlYmZiLi44NGIzY2RjOGU4OGYxIDEwMDY0NFxuLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvaW50ZXJuYWwuaFxuQEAgLTMyNyw3ICYjNDM7MzI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmVyb2ZzX2dyYWJfZm9saW9fbm93YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICphcyxcbiBcdFx0XHRcdFx0XHQgICAgcGdvZmZfdCBpbmRleClcbiB7XG4gXHRyZXR1cm4gX19maWxlbWFwX2dldF9mb2xpbyhhcywgaW5kZXgsXG4tXHRcdFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXG4mIzQzO1x0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRyZWFkYWhlYWRfZ2ZwX21hc2soYXMpIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi4xODg0YWJiMDk2MTQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTYwMSw5ICYjNDM7NjAxLDcgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdC8qIFdlIGNhbm5vdCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYXMgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHlcbi1cdCAqIHN0YXJ0ZWQgKi9cbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuJiM0MztcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTixcbiBcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuQEAgLTczNCw3ICYjNDM7NzMyLDcgQEAgaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbiBcdH1cbiBcbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuJiM0MztcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTixcbiBcdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IDQ5Mzk0MTIzYmQwOTYuLmUzNDEyNWE4YTJlMjggMTAwNjQ0XG4tLS0gYS9mcy9uZnMvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy9kaXIuY1xuQEAgLTQ0Nyw3ICYjNDM7NDQ3LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqbmZzX3JlYWRkaXJfZm9saW9fZ2V0X25leHQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxuLVx0XHRcdEZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULFxuJiM0MztcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jXG5pbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2lub2RlLmNcbkBAIC0zNjc2LDcgJiM0MzszNjc2LDcgQEAgc3RhdGljIHM2NCBfX250ZnNfaW5vZGVfcmVzaWRlbnRfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSxcbiBcdG1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtXHUwMDNlbnRmc19pbm8pO1xuIFxuIFx0LyogS2VlcCB0aGUgZmlyc3QgcGFnZSBjbGVhbiBhbmQgdXB0b2RhdGUgKi9cbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuJiM0MztcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTixcbiBcdFx0XHRcdCAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuIFx0aWYgKElTX0VSUihmb2xpbykpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy93b2YuYyBiL2ZzL250ZnMvd29mLmNcbmluZGV4IDhmODRjMjIxMmVlZWMuLmM5ODFiNGEzYjY5NTkgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL3dvZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL3dvZi5jXG5AQCAtNDY0LDEwICYjNDM7NDY0LDkgQEAgc3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0Zm9saW8gPSB0YXJnZXQ7XG4gXHRcdFx0aXNfdGFyZ2V0ID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8oXG4tXHRcdFx0XHRtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMgfCBGR1BfTk9XQUlULFxuLVx0XHRcdFx0R0ZQX05PRlMpO1xuJiM0MztcdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG4mIzQzO1x0XHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4mIzQzO1x0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdFx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0XHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0XHRpc190YXJnZXQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9maWxlLmMgYi9mcy9zcXVhc2hmcy9maWxlLmNcbmluZGV4IGQ4MzU5NGNlOTFkMjMuLjM0YzU1MGEyNjZiY2YgMTAwNjQ0XG4tLS0gYS9mcy9zcXVhc2hmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NxdWFzaGZzL2ZpbGUuY1xuQEAgLTM5OCw2ICYjNDM7Mzk4LDcgQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRzdHJ1Y3Qgc3F1YXNoZnNfc2JfaW5mbyAqbXNibGsgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbztcbiBcdGludCBpLCBtYXNrID0gKDEgXHUwMDNjXHUwMDNjIChtc2Jsay1cdTAwM2VibG9ja19sb2cgLSBQQUdFX1NISUZUKSkgLSAxO1xuIFx0aW50IHN0YXJ0X2luZGV4ID0gZm9saW8tXHUwMDNlaW5kZXggXHUwMDI2IH5tYXNrLCBlbmRfaW5kZXggPSBzdGFydF9pbmRleCB8IG1hc2s7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcbiBcdC8qXG4gXHQgKiBMb29wIGNvcHlpbmcgZGF0YWJsb2NrIGludG8gcGFnZXMuICBBcyB0aGUgZGF0YWJsb2NrIGxpa2VseSBjb3ZlcnNcbkBAIC00MTUsNyAmIzQzOzQxNiw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRwdXNoX2ZvbGlvID0gKGkgPT0gZm9saW8tXHUwMDNlaW5kZXgpID8gZm9saW8gOlxuIFx0XHRcdF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaSxcbi1cdFx0XHRcdFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXG4mIzQzO1x0XHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuIFxuIFx0XHRpZiAoSVNfRVJSKHB1c2hfZm9saW8pKVxuQEAgLTQzMCw2ICYjNDM7NDMxLDggQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGlmIChpICE9IGZvbGlvLVx1MDAzZWluZGV4KVxuIFx0XHRcdGZvbGlvX3B1dChwdXNoX2ZvbGlvKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnMpO1xuIH1cbiBcbiAvKiBSZWFkIGRhdGFibG9jayBzdG9yZWQgcGFja2VkIGluc2lkZSBhIGZyYWdtZW50ICh0YWlsLWVuZCBwYWNrZWQgYmxvY2spICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuaW5kZXggMGFkZmE2NjA1NjUzZC4uYmZmOGI3MjY0ZmIwMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTY5Nyw3ICYjNDM7Njk3LDYgQEAgcGdvZmZfdCBwYWdlX2NhY2hlX3ByZXZfbWlzcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiAgKiAgIGZvbGlvIGlzIGFscmVhZHkgaW4gY2FjaGUuICBJZiB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZCwgdW5sb2NrIGl0XG4gICogICBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgY2FuIGRvIHRoZSBzYW1lIGRhbmNlLlxuICAqICogJUZHUF9XUklURSAtIFRoZSBmb2xpbyB3aWxsIGJlIHdyaXR0ZW4gdG8gYnkgdGhlIGNhbGxlci5cbi0gKiAqICVGR1BfTk9GUyAtIF9fR0ZQX0ZTIHdpbGwgZ2V0IGNsZWFyZWQgaW4gZ2ZwLlxuICAqICogJUZHUF9OT1dBSVQgLSBEb24mIzM5O3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suXG4gICogKiAlRkdQX1NUQUJMRSAtIFdhaXQgZm9yIHRoZSBmb2xpbyB0byBiZSBzdGFibGUgKGZpbmlzaGVkIHdyaXRlYmFjaylcbiAgKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU9cbkBAIC03MTAsMTEgJiM0Mzs3MDksMTAgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZnZl90O1xuICNkZWZpbmUgRkdQX0xPQ0tcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDIpXG4gI2RlZmluZSBGR1BfQ1JFQVRcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDQpXG4gI2RlZmluZSBGR1BfV1JJVEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDgpXG4tI2RlZmluZSBGR1BfTk9GU1x0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcbi0jZGVmaW5lIEZHUF9OT1dBSVRcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMjApXG4tI2RlZmluZSBGR1BfRk9SX01NQVBcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4tI2RlZmluZSBGR1BfU1RBQkxFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuLSNkZWZpbmUgRkdQX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMClcbiYjNDM7I2RlZmluZSBGR1BfTk9XQUlUXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuJiM0MzsjZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbiYjNDM7I2RlZmluZSBGR1BfU1RBQkxFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKVxuJiM0MzsjZGVmaW5lIEZHUF9ET05UQ0FDSEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4gI2RlZmluZSBGR0ZfR0VUX09SREVSKGZnZilcdCgoKF9fZm9yY2UgdW5zaWduZWQpZmdmKSBcdTAwM2VcdTAwM2UgMjYpXHQvKiB0b3AgNiBiaXRzICovXG4gXG4gI2RlZmluZSBGR1BfV1JJVEVCRUdJTlx0XHQoRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfU1RBQkxFKVxuQEAgLTkyOSw3ICYjNDM7OTI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ3JhYl9jYWNoZV9wYWdlX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbiYjNDM7XHRcdFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxuIFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbmluZGV4IGQ3YzZhOTQyYWE3ZTAuLmY3NmJlMTE0MWIwNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuQEAgLTM3MiwxMyAmIzQzOzM3MiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2Nfbm9pb19yZXN0b3JlKHVuc2lnbmVkIGludCBmbGFncylcbiB9XG4gXG4gLyoqXG4tICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gTWFya3MgaW1wbGljaXQgR0ZQX05PRlMgYWxsb2NhdGlvbiBzY29wZS5cbiYjNDM7ICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb25zIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4tICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc29cbi0gKiB0aGV5IGFyZSBzYWZlIGZvciB0aGUgRlMgY3JpdGljYWwgc2VjdGlvbiBmcm9tIHRoZSBhbGxvY2F0aW9uIHJlY3Vyc2lvblxuLSAqIHBvaW50IG9mIHZpZXcuIFVzZSBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUgdG8gZW5kIHRoZSBzY29wZSB3aXRoIGZsYWdzXG4tICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cbiYjNDM7ICogQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgY2FsbGluZ1xuJiM0MzsgKiBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGNhbGxpbmcgaW50byBmaWxlc3lzdGVtc1xuJiM0MzsgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsXG4mIzQzOyAqIGJ1dCAoZm9yIGV4YW1wbGUpIGlub2RlcyB3aWxsIG5vdCBiZS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2tcbiYjNDM7ICogd2hpY2ggd291bGQgYmUgbmVlZGVkIGJ5IEZTIHJlY2xhaW0uICBXaGlsZSB3ZSBjb3VsZCB0aGVvcmV0aWNhbGx5XG4mIzQzOyAqIGNhbGwgaW50byBhIGRpZmZlcmVudCBmaWxlc3lzdGVtIGluIHRoaXMgY2FzZSwgaXQgY2FuIGJlIGEgZGVlcCBjYWxsXG4mIzQzOyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuXG4mIzQzOyAqXG4mIzQzOyAqIEZpbGVzeXN0ZW1zIG9mdGVuIGNob29zZSB0byBpbmNvcnBvcmF0ZSBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBhcyBwYXJ0XG4mIzQzOyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbFxuJiM0MzsgKiBzZW5zZSwgaXQgaGFzIG11Y2ggdGhlIHNhbWUgZWZmZWN0IGFzIG5lc3RlZCBqb3VybmFsIHRyYW5zYWN0aW9uc1xuJiM0MzsgKiBhcmUgZWl0aGVyIHByb2hpYml0ZWQgb3IgZXhwZW5zaXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBBbHNvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUgaG9sZGluZ1xuJiM0MzsgKiBhIGZpbGUgZm9saW8gbG9ja2VkLiAgSGlnaCBvcmRlciBhbGxvY2F0aW9ucyAoc3VjaCBhcyB0aG9zZSByZXF1ZXN0ZWRcbiYjNDM7ICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uXG4gICpcbiAgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgdXNlZCBmcm9tIGFueSBjb250ZXh0LlxuICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuXG5AQCAtMzg5LDEwICYjNDM7NDAyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1lbWFsbG9jX25vZnNfc2F2ZSh2b2lkKVxuIH1cbiBcbiAvKipcbi0gKiBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUgLSBFbmRzIHRoZSBpbXBsaWNpdCBHRlBfTk9GUyBzY29wZS5cbiYjNDM7ICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlIC0gRW5kIGZpbGVzeXN0ZW0gcmVjbGFpbSBzY29wZS5cbiAgKiBAZmxhZ3M6IEZsYWdzIHRvIHJlc3RvcmUuXG4gICpcbi0gKiBFbmRzIHRoZSBpbXBsaWNpdCBHRlBfTk9GUyBzY29wZSBzdGFydGVkIGJ5IG1lbWFsbG9jX25vZnNfc2F2ZSBmdW5jdGlvbi5cbiYjNDM7ICogRW5kcyB0aGUgaW1wbGljaXQgbWVtb3J5IGFsbG9jYXRpb24gc2NvcGUgc3RhcnRlZCBieVxuJiM0MzsgKiBtZW1hbGxvY19ub2ZzX3NhdmUoKS4gIFRoaXMgbWF5IG5vdCBlbmFibGUgYWNjZXNzIHRvIGZpbGVzeXN0ZW0gcmVjbGFpbVxuJiM0MzsgKiBpZiBpdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBhdCB0aGUgdGltZSBtZW1hbGxvY19ub2ZzX3NhdmUoKSB3YXMgY2FsbGVkLlxuICAqIEFsd2F5cyBtYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4gZmxhZ3MgaXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZVxuICAqIHBhaXJpbmcgbWVtYWxsb2Nfbm9mc19zYXZlIGNhbGwuXG4gICovXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi5lNjU4MDI5MWYyMTg1IDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0xOTk0LDggJiM0MzsxOTk0LDYgQEAgc3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICgoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfV1JJVEUpIFx1MDAyNlx1MDAyNiBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpXG4gXHRcdFx0Z2ZwIHw9IF9fR0ZQX1dSSVRFO1xuLVx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfTk9GUylcbi1cdFx0XHRnZnAgXHUwMDI2PSB+X19HRlBfRlM7XG4gXHRcdGlmIChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9OT1dBSVQpIHtcbiBcdFx0XHRnZnAgXHUwMDI2PSB+R0ZQX0tFUk5FTDtcbiBcdFx0XHRnZnAgfD0gR0ZQX05PV0FJVDtcbmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jXG5pbmRleCA2ZTU1NjMyOTAyODdlLi45YzExNmQ0YmE5NjNhIDEwMDY0NFxuLS0tIGEvbW0vcmVhZGFoZWFkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JlYWRhaGVhZC5jXG5AQCAtMjI3LDE3ICYjNDM7MjI3LDcgQEAgdm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuIFx0Z2ZwX3QgZ2ZwX21hc2sgPSByZWFkYWhlYWRfZ2ZwX21hc2sobWFwcGluZyk7XG4gXHR1bnNpZ25lZCBsb25nIG1hcmsgPSBVTE9OR19NQVgsIGkgPSAwO1xuIFx0dW5zaWduZWQgaW50IG1pbl9ucnBhZ2VzID0gbWFwcGluZ19taW5fZm9saW9fbnJwYWdlcyhtYXBwaW5nKTtcbi1cbi1cdC8qXG4tXHQgKiBQYXJ0d2F5IHRocm91Z2ggdGhlIHJlYWRhaGVhZCBvcGVyYXRpb24sIHdlIHdpbGwgaGF2ZSBhZGRlZFxuLVx0ICogbG9ja2VkIHBhZ2VzIHRvIHRoZSBwYWdlIGNhY2hlLCBidXQgd2lsbCBub3QgeWV0IGhhdmUgc3VibWl0dGVkXG4tXHQgKiB0aGVtIGZvciBJL08uICBBZGRpbmcgYW5vdGhlciBwYWdlIG1heSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSxcbi1cdCAqIHdoaWNoIGNhbiB0cmlnZ2VyIG1lbW9yeSByZWNsYWltLiAgVGVsbGluZyB0aGUgVk0gd2UmIzM5O3JlIGluXG4tXHQgKiB0aGUgbWlkZGxlIG9mIGEgZmlsZXN5c3RlbSBvcGVyYXRpb24gd2lsbCBjYXVzZSBpdCB0byBub3Rcbi1cdCAqIHRvdWNoIGZpbGUtYmFja2VkIHBhZ2VzLCBwcmV2ZW50aW5nIGEgZGVhZGxvY2suICBNb3N0IChhbGw/KVxuLVx0ICogZmlsZXN5c3RlbXMgYWxyZWFkeSBzcGVjaWZ5IF9fR0ZQX05PRlMgaW4gdGhlaXIgbWFwcGluZyYjMzk7c1xuLVx0ICogZ2ZwX21hc2ssIGJ1dCBsZXQmIzM5O3MgYmUgZXhwbGljaXQgaGVyZS5cbi1cdCAqL1xuJiM0MztcdC8qIEFsbG9jYXRpbmcgd2l0aCBsb2NrZWQgZm9saW9zICovXG4gXHR1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZtYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7XG5AQCAtNTEyLDcgJiM0Mzs1MDIsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiBcbiBcdHJhLVx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xuIFxuLVx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xuJiM0MztcdC8qIEFsbG9jYXRpbmcgd2l0aCBsb2NrZWQgZm9saW9zICovXG4gXHRub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDssCiAgICAmIzM0O05URlNfRlMmIzM0OywKICAgICYjMzQ7TlRGU19GU19XT0ZfQ09NUFJFU1NJT04mIzM0OywKICAgICYjMzQ7U1FVQVNIRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wmIzM0OywKICAgICYjMzQ7c3F1YXNoZnNfY29weV9jYWNoZSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7bnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIEZHUF9OT0ZTIGZsYWcgZnJvbSBjb3JlIHBhZ2UgY2FjaGUgQVBJcyAoX19maWxlbWFwX2dldF9mb2xpb19tcG9sKSBhbmQgYWRqdXN0cyBmb2xpbyBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIGNvbnRleHQgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIHNxdWFzaGZzLCBlcm9mcywgbnRmcywgYW5kIG5mcykuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgaW50cm9kdWNlcyBzY29wZWQgTk9GUyBjb250ZXh0cyAobWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmUpIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIEkvTyBhbmQgY2FjaGluZyBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIG1lbW9yeSByZWNsYWltIGFuZCBsb2NraW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUyNDM1NmQ3YWM2NWUwZjliZGVkZjY3MzFmNmFhMzgyMmQ5MDc0N2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAzMCAwNDo0Mjo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Vyb2ZzL2ludGVybmFsLmggYi9mcy9lcm9mcy9pbnRlcm5hbC5oCmluZGV4IDY1OTc0ZTU3YWViZmIuLjg0YjNjZGM4ZTg4ZjEgMTAwNjQ0Ci0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXJvZnMvaW50ZXJuYWwuaApAQCAtMzI3LDcgJiM0MzszMjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmFzLAogCQkJCQkJICAgIHBnb2ZmX3QgaW5kZXgpCiB7CiAJcmV0dXJuIF9fZmlsZW1hcF9nZXRfZm9saW8oYXMsIGluZGV4LAotCQkJRkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsCiYjNDM7CQkJRkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULAogCQkJcmVhZGFoZWFkX2dmcF9tYXNrKGFzKSAmYW1wOyB+X19HRlBfUkVDTEFJTSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IGNlZWU2OWE2NjQ4MmIuLjE4ODRhYmIwOTYxNDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuYwpAQCAtNjAxLDkgJiM0Mzs2MDEsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIFdlIGNhbm5vdCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYXMgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkKLQkgKiBzdGFydGVkICovCi0JZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsCiYjNDM7CWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiwKIAkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCWlmIChJU19FUlIoZm9saW8pKSB7CiAJCXJldCA9IFBUUl9FUlIoZm9saW8pOwpAQCAtNzM0LDcgJiM0Mzs3MzIsNyBAQCBpbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlnb3RvIG91dF9yZWxlYXNlX2JoOwogCX0KIAotCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLAomIzQzOwlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sCiAJCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCWlmIChJU19FUlIoZm9saW8pKSB7CiAJCXJldCA9IFBUUl9FUlIoZm9saW8pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDQ5Mzk0MTIzYmQwOTYuLmUzNDEyNWE4YTJlMjggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvZGlyLmMKQEAgLTQ0Nyw3ICYjNDM7NDQ3LDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqbmZzX3JlYWRkaXJfZm9saW9fZ2V0X25leHQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAogCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwKLQkJCUZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULAomIzQzOwkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCwKIAkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCWlmIChJU19FUlIoZm9saW8pKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9pbm9kZS5jCkBAIC0zNjc2LDcgJiM0MzszNjc2LDcgQEAgc3RhdGljIHM2NCBfX250ZnNfaW5vZGVfcmVzaWRlbnRfYXR0cl9wd3JpdGUoc3RydWN0IGlub2RlICp2aSwKIAltYXJrX21mdF9yZWNvcmRfZGlydHkoY3R4LSZndDtudGZzX2lubyk7CiAKIAkvKiBLZWVwIHRoZSBmaXJzdCBwYWdlIGNsZWFuIGFuZCB1cHRvZGF0ZSAqLwotCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLAomIzQzOwlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sCiAJCQkJICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJaWYgKElTX0VSUihmb2xpbykpIHsKIAkJZXJyID0gUFRSX0VSUihmb2xpbyk7CmRpZmYgLS1naXQgYS9mcy9udGZzL3dvZi5jIGIvZnMvbnRmcy93b2YuYwppbmRleCA4Zjg0YzIyMTJlZWVjLi5jOTgxYjRhM2I2OTU5IDEwMDY0NAotLS0gYS9mcy9udGZzL3dvZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMvd29mLmMKQEAgLTQ2NCwxMCAmIzQzOzQ2NCw5IEBAIHN0YXRpYyBpbnQgbnRmc193b2ZfY29sbGVjdF9kZXN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJZm9saW8gPSB0YXJnZXQ7CiAJCQlpc190YXJnZXQgPSB0cnVlOwogCQl9IGVsc2UgewotCQkJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKAotCQkJCW1hcHBpbmcsIGluZGV4LAotCQkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMgfCBGR1BfTk9XQUlULAotCQkJCUdGUF9OT0ZTKTsKJiM0MzsJCQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsCiYjNDM7CQkJCQlGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsCiYjNDM7CQkJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAkJCWlmIChJU19FUlIoZm9saW8pKQogCQkJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKIAkJCWlzX3RhcmdldCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvZmlsZS5jIGIvZnMvc3F1YXNoZnMvZmlsZS5jCmluZGV4IGQ4MzU5NGNlOTFkMjMuLjM0YzU1MGEyNjZiY2YgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zcXVhc2hmcy9maWxlLmMKQEAgLTM5OCw2ICYjNDM7Mzk4LDcgQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKm1zYmxrID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfZnNfaW5mbzsKIAlpbnQgaSwgbWFzayA9ICgxICZsdDsmbHQ7IChtc2Jsay0mZ3Q7YmxvY2tfbG9nIC0gUEFHRV9TSElGVCkpIC0gMTsKIAlpbnQgc3RhcnRfaW5kZXggPSBmb2xpby0mZ3Q7aW5kZXggJmFtcDsgfm1hc2ssIGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4IHwgbWFzazsKJiM0MzsJdW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTsKIAogCS8qCiAJICogTG9vcCBjb3B5aW5nIGRhdGFibG9jayBpbnRvIHBhZ2VzLiAgQXMgdGhlIGRhdGFibG9jayBsaWtlbHkgY292ZXJzCkBAIC00MTUsNyAmIzQzOzQxNiw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJCXB1c2hfZm9saW8gPSAoaSA9PSBmb2xpby0mZ3Q7aW5kZXgpID8gZm9saW8gOgogCQkJX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpLAotCQkJCQlGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCwKJiM0MzsJCQkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCwKIAkJCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAKIAkJaWYgKElTX0VSUihwdXNoX2ZvbGlvKSkKQEAgLTQzMCw2ICYjNDM7NDMxLDggQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWlmIChpICE9IGZvbGlvLSZndDtpbmRleCkKIAkJCWZvbGlvX3B1dChwdXNoX2ZvbGlvKTsKIAl9CiYjNDM7CiYjNDM7CW1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzKTsKIH0KIAogLyogUmVhZCBkYXRhYmxvY2sgc3RvcmVkIHBhY2tlZCBpbnNpZGUgYSBmcmFnbWVudCAodGFpbC1lbmQgcGFja2VkIGJsb2NrKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAwYWRmYTY2MDU2NTNkLi5iZmY4YjcyNjRmYjAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtNjk3LDcgJiM0Mzs2OTcsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogICogICBmb2xpbyBpcyBhbHJlYWR5IGluIGNhY2hlLiAgSWYgdGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQsIHVubG9jayBpdAogICogICBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgY2FuIGRvIHRoZSBzYW1lIGRhbmNlLgogICogKiAlRkdQX1dSSVRFIC0gVGhlIGZvbGlvIHdpbGwgYmUgd3JpdHRlbiB0byBieSB0aGUgY2FsbGVyLgotICogKiAlRkdQX05PRlMgLSBfX0dGUF9GUyB3aWxsIGdldCBjbGVhcmVkIGluIGdmcC4KICAqICogJUZHUF9OT1dBSVQgLSBEb24mIzM5O3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suCiAgKiAqICVGR1BfU1RBQkxFIC0gV2FpdCBmb3IgdGhlIGZvbGlvIHRvIGJlIHN0YWJsZSAoZmluaXNoZWQgd3JpdGViYWNrKQogICogKiAlRkdQX0RPTlRDQUNIRSAtIFVuY2FjaGVkIGJ1ZmZlcmVkIElPCkBAIC03MTAsMTEgJiM0Mzs3MDksMTAgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZnZl90OwogI2RlZmluZSBGR1BfTE9DSwkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDIpCiAjZGVmaW5lIEZHUF9DUkVBVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDQpCiAjZGVmaW5lIEZHUF9XUklURQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDgpCi0jZGVmaW5lIEZHUF9OT0ZTCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMCkKLSNkZWZpbmUgRkdQX05PV0FJVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMjApCi0jZGVmaW5lIEZHUF9GT1JfTU1BUAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApCi0jZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKQotI2RlZmluZSBGR1BfRE9OVENBQ0hFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMCkKJiM0MzsjZGVmaW5lIEZHUF9OT1dBSVQJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKQomIzQzOyNkZWZpbmUgRkdQX0ZPUl9NTUFQCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMCkKJiM0MzsjZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKQomIzQzOyNkZWZpbmUgRkdQX0RPTlRDQUNIRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApCiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKQkoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgJmd0OyZndDsgMjYpCS8qIHRvcCA2IGJpdHMgKi8KIAogI2RlZmluZSBGR1BfV1JJVEVCRUdJTgkJKEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSkKQEAgLTkyOSw3ICYjNDM7OTI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ3JhYl9jYWNoZV9wYWdlX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlwZ29mZl90IGluZGV4KQogewogCXJldHVybiBwYWdlY2FjaGVfZ2V0X3BhZ2UobWFwcGluZywgaW5kZXgsCi0JCQlGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCwKJiM0MzsJCQlGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsCiAJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oCmluZGV4IGQ3YzZhOTQyYWE3ZTAuLmY3NmJlMTE0MWIwNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgKQEAgLTM3MiwxMyAmIzQzOzM3MiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtYWxsb2Nfbm9pb19yZXN0b3JlKHVuc2lnbmVkIGludCBmbGFncykKIH0KIAogLyoqCi0gKiBtZW1hbGxvY19ub2ZzX3NhdmUgLSBNYXJrcyBpbXBsaWNpdCBHRlBfTk9GUyBhbGxvY2F0aW9uIHNjb3BlLgomIzQzOyAqIG1lbWFsbG9jX25vZnNfc2F2ZSAtIFByZXZlbnQgcmVjdXJzaW9uIGludG8gdGhlIGZpbGVzeXN0ZW0uCiAgKgotICogVGhpcyBmdW5jdGlvbnMgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgR0ZQX05PRlMgYWxsb2NhdGlvbiBzY29wZS4KLSAqIEFsbCBmdXJ0aGVyIGFsbG9jYXRpb25zIHdpbGwgaW1wbGljaXRseSBkcm9wIF9fR0ZQX0ZTIGZsYWcgYW5kIHNvCi0gKiB0aGV5IGFyZSBzYWZlIGZvciB0aGUgRlMgY3JpdGljYWwgc2VjdGlvbiBmcm9tIHRoZSBhbGxvY2F0aW9uIHJlY3Vyc2lvbgotICogcG9pbnQgb2Ygdmlldy4gVXNlIG1lbWFsbG9jX25vZnNfcmVzdG9yZSB0byBlbmQgdGhlIHNjb3BlIHdpdGggZmxhZ3MKLSAqIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uCiYjNDM7ICogQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgY2FsbGluZwomIzQzOyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSgpIHdpbGwgYmUgcHJldmVudGVkIGZyb20gY2FsbGluZyBpbnRvIGZpbGVzeXN0ZW1zCiYjNDM7ICogdG8gcmVjbGFpbSBtZW1vcnkuICBDbGVhbiBwYWdlIGNhY2hlIG1lbW9yeSBjYW4gc3RpbGwgYmUgcmVjbGFpbWVkLAomIzQzOyAqIGJ1dCAoZm9yIGV4YW1wbGUpIGlub2RlcyB3aWxsIG5vdCBiZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBwcmltYXJ5IHJlYXNvbiB0byBkbyB0aGlzIGlzIHRoYXQgdGhlIGNhbGxlciBoYXMgdGFrZW4gYSBsb2NrCiYjNDM7ICogd2hpY2ggd291bGQgYmUgbmVlZGVkIGJ5IEZTIHJlY2xhaW0uICBXaGlsZSB3ZSBjb3VsZCB0aGVvcmV0aWNhbGx5CiYjNDM7ICogY2FsbCBpbnRvIGEgZGlmZmVyZW50IGZpbGVzeXN0ZW0gaW4gdGhpcyBjYXNlLCBpdCBjYW4gYmUgYSBkZWVwIGNhbGwKJiM0MzsgKiBzdGFjayBzbyBpdCBpcyBiZXR0ZXIgdG8gYXZvaWQgYWxsIGZpbGVzeXN0ZW1zLgomIzQzOyAqCiYjNDM7ICogRmlsZXN5c3RlbXMgb2Z0ZW4gY2hvb3NlIHRvIGluY29ycG9yYXRlIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGFzIHBhcnQKJiM0MzsgKiBvZiBzdGFydGluZyBhIGpvdXJuYWwgdHJhbnNhY3Rpb24uICBXaGlsZSBub3QgYSBsb2NrIGluIHRoZSBub3JtYWwKJiM0MzsgKiBzZW5zZSwgaXQgaGFzIG11Y2ggdGhlIHNhbWUgZWZmZWN0IGFzIG5lc3RlZCBqb3VybmFsIHRyYW5zYWN0aW9ucwomIzQzOyAqIGFyZSBlaXRoZXIgcHJvaGliaXRlZCBvciBleHBlbnNpdmUuCiYjNDM7ICoKJiM0MzsgKiBBbHNvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUgaG9sZGluZwomIzQzOyAqIGEgZmlsZSBmb2xpbyBsb2NrZWQuICBIaWdoIG9yZGVyIGFsbG9jYXRpb25zIChzdWNoIGFzIHRob3NlIHJlcXVlc3RlZAomIzQzOyAqIGJ5IHNsYWIpIGNhbiB0cmlnZ2VyIGNvbXBhY3Rpb24gd2hpY2ggd2lsbCBhdHRlbXB0IHRvIGxvY2sgdGhlIGZvbGlvLgogICoKICAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gaXMgc2FmZSB0byBiZSB1c2VkIGZyb20gYW55IGNvbnRleHQuCiAgKiBSZXR1cm46IFRoZSBzYXZlZCBmbGFncyB0byBiZSBwYXNzZWQgdG8gbWVtYWxsb2Nfbm9mc19yZXN0b3JlLgpAQCAtMzg5LDEwICYjNDM7NDAyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1lbWFsbG9jX25vZnNfc2F2ZSh2b2lkKQogfQogCiAvKioKLSAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZHMgdGhlIGltcGxpY2l0IEdGUF9OT0ZTIHNjb3BlLgomIzQzOyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZCBmaWxlc3lzdGVtIHJlY2xhaW0gc2NvcGUuCiAgKiBAZmxhZ3M6IEZsYWdzIHRvIHJlc3RvcmUuCiAgKgotICogRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19ub2ZzX3NhdmUgZnVuY3Rpb24uCiYjNDM7ICogRW5kcyB0aGUgaW1wbGljaXQgbWVtb3J5IGFsbG9jYXRpb24gc2NvcGUgc3RhcnRlZCBieQomIzQzOyAqIG1lbWFsbG9jX25vZnNfc2F2ZSgpLiAgVGhpcyBtYXkgbm90IGVuYWJsZSBhY2Nlc3MgdG8gZmlsZXN5c3RlbSByZWNsYWltCiYjNDM7ICogaWYgaXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRpbWUgbWVtYWxsb2Nfbm9mc19zYXZlKCkgd2FzIGNhbGxlZC4KICAqIEFsd2F5cyBtYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4gZmxhZ3MgaXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZQogICogcGFpcmluZyBtZW1hbGxvY19ub2ZzX3NhdmUgY2FsbC4KICAqLwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZhZmVjNjM2ODgxZmIuLmU2NTgwMjkxZjIxODUgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE5OTQsOCAmIzQzOzE5OTQsNiBAQCBzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAogCQlpZiAoKGZncF9mbGFncyAmYW1wOyBGR1BfV1JJVEUpICZhbXA7JmFtcDsgbWFwcGluZ19jYW5fd3JpdGViYWNrKG1hcHBpbmcpKQogCQkJZ2ZwIHw9IF9fR0ZQX1dSSVRFOwotCQlpZiAoZmdwX2ZsYWdzICZhbXA7IEZHUF9OT0ZTKQotCQkJZ2ZwICZhbXA7PSB+X19HRlBfRlM7CiAJCWlmIChmZ3BfZmxhZ3MgJmFtcDsgRkdQX05PV0FJVCkgewogCQkJZ2ZwICZhbXA7PSB+R0ZQX0tFUk5FTDsKIAkJCWdmcCB8PSBHRlBfTk9XQUlUOwpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCA2ZTU1NjMyOTAyODdlLi45YzExNmQ0YmE5NjNhIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9yZWFkYWhlYWQuYwpAQCAtMjI3LDE3ICYjNDM7MjI3LDcgQEAgdm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLAogCWdmcF90IGdmcF9tYXNrID0gcmVhZGFoZWFkX2dmcF9tYXNrKG1hcHBpbmcpOwogCXVuc2lnbmVkIGxvbmcgbWFyayA9IFVMT05HX01BWCwgaSA9IDA7CiAJdW5zaWduZWQgaW50IG1pbl9ucnBhZ2VzID0gbWFwcGluZ19taW5fZm9saW9fbnJwYWdlcyhtYXBwaW5nKTsKLQotCS8qCi0JICogUGFydHdheSB0aHJvdWdoIHRoZSByZWFkYWhlYWQgb3BlcmF0aW9uLCB3ZSB3aWxsIGhhdmUgYWRkZWQKLQkgKiBsb2NrZWQgcGFnZXMgdG8gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aWxsIG5vdCB5ZXQgaGF2ZSBzdWJtaXR0ZWQKLQkgKiB0aGVtIGZvciBJL08uICBBZGRpbmcgYW5vdGhlciBwYWdlIG1heSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSwKLQkgKiB3aGljaCBjYW4gdHJpZ2dlciBtZW1vcnkgcmVjbGFpbS4gIFRlbGxpbmcgdGhlIFZNIHdlJiMzOTtyZSBpbgotCSAqIHRoZSBtaWRkbGUgb2YgYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiB3aWxsIGNhdXNlIGl0IHRvIG5vdAotCSAqIHRvdWNoIGZpbGUtYmFja2VkIHBhZ2VzLCBwcmV2ZW50aW5nIGEgZGVhZGxvY2suICBNb3N0IChhbGw/KQotCSAqIGZpbGVzeXN0ZW1zIGFscmVhZHkgc3BlY2lmeSBfX0dGUF9OT0ZTIGluIHRoZWlyIG1hcHBpbmcmIzM5O3MKLQkgKiBnZnBfbWFzaywgYnV0IGxldCYjMzk7cyBiZSBleHBsaWNpdCBoZXJlLgotCSAqLwomIzQzOwkvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqLwogCXVuc2lnbmVkIGludCBub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bWFwcGluZy0mZ3Q7aW52YWxpZGF0ZV9sb2NrKTsKQEAgLTUxMiw3ICYjNDM7NTAyLDcgQEAgdm9pZCBwYWdlX2NhY2hlX3JhX29yZGVyKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsCiAKIAlyYS0mZ3Q7b3JkZXIgPSBuZXdfb3JkZXI7CiAKLQkvKiBTZWUgY29tbWVudCBpbiBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZCgpICovCiYjNDM7CS8qIEFsbG9jYXRpbmcgd2l0aCBsb2NrZWQgZm9saW9zICovCiAJbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpOwogCWZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTsKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTExCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggZG9lcy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBzeXN0ZW1hdGljYWxseSByZW1vdmluZyB0aGUgYEZHUF9OT0ZTYCBmbGFnIGZyb20gdmFyaW91cyBwYWdlIGNhY2hlLXJlbGF0ZWQgZnVuY3Rpb24gY2FsbHMgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtczogYGVyb2ZzYCwgYGV4dDRgLCBgbmZzYCwgYG50ZnNgLCBgc3F1YXNoZnNgLCBhbmQgc29tZSBjb3JlIGBtbWAgYW5kIGBpbmNsdWRlYCBoZWFkZXJzLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgY2xlYW5pbmcgdXAgdGhlIHdheSBOT0ZTIChObyBGaWxlc3lzdGVtKSBtZW1vcnkgYWxsb2NhdGlvbiBpcyBoYW5kbGVkLiBJIHNlZSB0aGlzIGhhcHBlbmluZyB0aHJvdWdoIGEgY29uc2lzdGVudCByZW1vdmFsIG9mIHRoZSBmbGFnIGFuZCB1c2luZyBuZXcgbWV0aG9kcyBzdWNoIGFzIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgYW5kIGBtYXBwaW5nX2dmcF9tYXNrKClgIG9yIHNjb3BlZCBOT0ZTIGNvbnRleHQgaW5zdGVhZC4KClRoZSBgRkdQX05PRlNgIGZsYWcgd2FzIHVzZWQgdG8gc3RyaXAgYF9fR0ZQX0ZTYCBmcm9tIGFsbG9jYXRpb24gZmxhZ3MuIE5vdywgaXQgYXBwZWFycyB0aGUga2VybmVsIGlzIG1vdmluZyB0b3dhcmRzIGEgbW9yZSBtb2Rlcm4gYXBwcm9hY2gsIHdoaWNoIGlzIGdvb2Qg4oCTIGNsZWFuZXIgYW5kIHBvdGVudGlhbGx5IHNhZmVyLiBUaGV5JiMzOTtyZSB1cGRhdGluZyB0aGUgZmxhZyBkZWZpbml0aW9ucyBpbiBgcGFnZW1hcC5oYCBhbmQgcmVtb3ZpbmcgdGhlIGhhbmRsaW5nIG9mIGBGR1BfTk9GU2AgaW4gYG1tL2ZpbGVtYXAuY2AuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzIGEgcHVyZWx5IGludGVybmFsIHJlZmFjdG9yaW5nLCBvciBkb2VzIGl0IGludHJvZHVjZSBjaGFuZ2VzIHRoYXQgbWlnaHQgYmUgZXhwbG9pdGFibGU/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0ICpsb29rcyogbGlrZSBhIGNsZWFudXAsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBjaGFuZ2VzIGluIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIHRoYXQgY291bGQgdHJpZ2dlciBzb21ldGhpbmcgaW50ZXJlc3RpbmcuCgpCZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIHNob3VsZCByZWZyZXNoIG15IG1lbW9yeSBvZiB0aGUga2VybmVsIG1haW50YWluZXIgZ3VpZGVsaW5lcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyBXb3J0aEZ1enppbmcuIExldCYjMzk7cyBzZWUuLi4gdGhlIHJ1bGVzIG1lbnRpb24gdGhhdCBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBhbmQgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBhcmVuJiMzOTt0IHR5cGljYWxseSB3b3J0aCBmdXp6aW5nLCBub3IgYXJlIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMmIzM5OyB0ZWFyZG93bi4KClNvLCBpcyB0aGlzIGZ1bmN0aW9uYWwgb3IganVzdCBhIHJlZmFjdG9yaW5nPyBMZXQmIzM5O3Mgem9vbSBpbiBvbiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgYW5kIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLiBXaGF0IGFyZSB0aG9zZSBmdW5jdGlvbnMgZG9pbmcgaW4gYGV4dDRgPyBIbW0sIHRoZSBjb21tZW50IHNheXMgd2UgY2FuJiMzOTt0IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5IHN0YXJ0ZWQuIFNvLCBiZWZvcmUgY2FsbGluZyB0aG9zZSBmdW5jdGlvbnMsIGlzIHRoZXJlIGEgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBjYWxsLCBvciBpcyBgUEZfTUVNQUxMT0NfTk9GU2AgYWxyZWFkeSBzZXQ/IEl0IGxvb2tzIGxpa2UgYGV4dDRfam91cm5hbF9zdGFydGAgcHJvYmFibHkgdGFrZXMgY2FyZSBvZiB0aGF0LiBJIHNob3VsZCBncmVwIGZvciBgbWVtYWxsb2Nfbm9mc19zYXZlYCB3aXRoaW4gdGhlIGBmcy9leHQ0YCBvciBgZnMvamJkMmAgZGlyZWN0b3J5IHRvIGNvbmZpcm0uIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gdGhpcyBwYXRjaCAqaXMqIHByb2JhYmx5IGEgcmVmYWN0b3JpbmcsIGJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qIHRoYXQgdGhlIGV4aXN0aW5nIGxvZ2ljIGlzIHRha2luZyBOT0ZTIGludG8gYWNjb3VudCBiZWZvcmUgSSBydWxlIGl0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1hbGxvY19ub2ZzX3NhdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZnMvYnRyZnMvYWNsLmM9NTg9aW50IF9fYnRyZnNfc2V0X2FjbChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9idHJmcy9hY2wuYy04NS1cdFx0ICovXG5mcy9idHJmcy9hY2wuYzo4NjpcdFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9hY2wuYy04Ny1cdFx0dmFsdWUgPSBwb3NpeF9hY2xfdG9feGF0dHIoXHUwMDI2aW5pdF91c2VyX25zLCBhY2wsIFx1MDAyNnNpemUsIEdGUF9LRVJORUwpO1xuLS1cbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM9NzkxPXN0cnVjdCBsaXN0X2hlYWQgKmJ0cmZzX2dldF93b3Jrc3BhY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGludCB0eXBlLCBpbnQgbGV2ZWwpXG4tLVxuZnMvYnRyZnMvY29tcHJlc3Npb24uYy04MzctXHQgKi9cbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6ODM4Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9jb21wcmVzc2lvbi5jLTgzOS1cdHdvcmtzcGFjZSA9IGFsbG9jX3dvcmtzcGFjZShmc19pbmZvLCB0eXBlLCBsZXZlbCk7XG4tLVxuZnMvYnRyZnMvZGlzay1pby5jPTgxNz1zdHJ1Y3QgYnRyZnNfcm9vdCAqYnRyZnNfY3JlYXRlX3RyZWUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsXG4tLVxuZnMvYnRyZnMvZGlzay1pby5jLTgzMC1cdCAqL1xuZnMvYnRyZnMvZGlzay1pby5jOjgzMTpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvZGlzay1pby5jLTgzMi1cdHJvb3QgPSBidHJmc19hbGxvY19yb290KGZzX2luZm8sIG9iamVjdGlkLCBHRlBfS0VSTkVMKTtcbi0tXG5mcy9idHJmcy9kaXNrLWlvLmM9NDc1MD1zdGF0aWMgdm9pZCBidHJmc19kZXN0cm95X2RlbGFsbG9jX2lub2RlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdClcbi0tXG5mcy9idHJmcy9kaXNrLWlvLmMtNDc3Mi1cbmZzL2J0cmZzL2Rpc2staW8uYzo0NzczOlx0XHRcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvZGlzay1pby5jLTQ3NzQtXHRcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi0tXG5mcy9idHJmcy9kaXNrLWlvLmM9NDg2Mz1zdGF0aWMgdm9pZCBidHJmc19jbGVhbnVwX2JnX2lvKHN0cnVjdCBidHJmc19ibG9ja19ncm91cCAqY2FjaGUpXG4tLVxuZnMvYnRyZnMvZGlzay1pby5jLTQ4NzAtXG5mcy9idHJmcy9kaXNrLWlvLmM6NDg3MTpcdFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9kaXNrLWlvLmMtNDg3Mi1cdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi0tXG5mcy9idHJmcy9maWxlLWl0ZW0uYz04Mzk9aW50IGJ0cmZzX2NzdW1fb25lX2JpbyhzdHJ1Y3QgYnRyZnNfYmlvICpiYmlvLCBib29sIGFzeW5jKVxuLS1cbmZzL2J0cmZzL2ZpbGUtaXRlbS5jLTg0Ny1cbmZzL2J0cmZzL2ZpbGUtaXRlbS5jOjg0ODpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvZmlsZS1pdGVtLmMtODQ5LVx0c3VtcyA9IGt2emFsbG9jKGJ0cmZzX29yZGVyZWRfc3VtX3NpemUoZnNfaW5mbywgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSksXG4tLVxuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jPTgzPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fbG9va3VwX2ZyZWVfc3BhY2VfaW5vZGUoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsXG4tLVxuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jLTExOC1cdCAqL1xuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jOjExOTpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jLTEyMC1cdGlub2RlID0gYnRyZnNfaWdldF9wYXRoKGxvY2F0aW9uLm9iamVjdGlkLCByb290LCBwYXRoKTtcbi0tXG5mcy9idHJmcy9mcmVlLXNwYWNlLXRyZWUuYz0xNTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgKmFsbG9jX2JpdG1hcCh1MzIgYml0bWFwX3NpemUpXG4tLVxuZnMvYnRyZnMvZnJlZS1zcGFjZS10cmVlLmMtMTY5LVx0ICovXG5mcy9idHJmcy9mcmVlLXNwYWNlLXRyZWUuYzoxNzA6XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtdHJlZS5jLTE3MS1cdHJldCA9IGt2emFsbG9jKGJpdG1hcF9yb3VuZGVkX3NpemUsIEdGUF9LRVJORUwpO1xuLS1cbmZzL2J0cmZzL2lub2RlLmM9MTI2PXN0YXRpYyBpbnQgZGF0YV9yZWxvY19wcmludF93YXJuaW5nX2lub2RlKHU2NCBpbnVtLCB1NjQgb2Zmc2V0LCB1NjQgbnVtX2J5dGVzLFxuLS1cbmZzL2J0cmZzL2lub2RlLmMtMTYyLVxuZnMvYnRyZnMvaW5vZGUuYzoxNjM6XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL2lub2RlLmMtMTY0LVx0aXBhdGggPSBpbml0X2lwYXRoKDQwOTYsIGxvY2FsX3Jvb3QsIFx1MDAyNndhcm4tXHUwMDNlcGF0aCk7XG4tLVxuZnMvYnRyZnMvaW5vZGUuYz0xNTY1PXN0YXRpYyBib29sIHJ1bl9kZWxhbGxvY19jb21wcmVzc2VkKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXG4tLVxuZnMvYnRyZnMvaW5vZGUuYy0xNTc4LVxuZnMvYnRyZnMvaW5vZGUuYzoxNTc5Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9pbm9kZS5jLTE1ODAtXHRjdHggPSBrdm1hbGxvY19mbGV4KCpjdHgsIGNodW5rcywgbnVtX2NodW5rcyk7XG4tLVxuZnMvYnRyZnMvc2NydWIuYz00ODI9c3RhdGljIGludCBzY3J1Yl9wcmludF93YXJuaW5nX2lub2RlKHU2NCBpbnVtLCB1NjQgb2Zmc2V0LCB1NjQgbnVtX2J5dGVzLFxuLS1cbmZzL2J0cmZzL3NjcnViLmMtNTI3LVx0ICovXG5mcy9idHJmcy9zY3J1Yi5jOjUyODpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvc2NydWIuYy01MjktXHRpcGF0aCA9IGluaXRfaXBhdGgoNDA5NiwgbG9jYWxfcm9vdCwgc3dhcm4tXHUwMDNlcGF0aCk7XG4tLVxuZnMvYnRyZnMvc2NydWIuYz0zMDQzPWludCBidHJmc19zY3J1Yl9kZXYoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIHU2NCBkZXZpZCwgdTY0IHN0YXJ0LFxuLS1cbmZzL2J0cmZzL3NjcnViLmMtMzEzNC1cdCAqL1xuZnMvYnRyZnMvc2NydWIuYzozMTM1Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9zY3J1Yi5jLTMxMzYtXHRpZiAoIWlzX2Rldl9yZXBsYWNlKSB7XG4tLVxuZnMvYnRyZnMvc3lzZnMuYz0xODE4PXZvaWQgYnRyZnNfc3lzZnNfYWRkX2Jsb2NrX2dyb3VwX3R5cGUoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwICpjYWNoZSlcbi0tXG5mcy9idHJmcy9zeXNmcy5jLTE4MzMtXHQgKi9cbmZzL2J0cmZzL3N5c2ZzLmM6MTgzNDpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvc3lzZnMuYy0xODM1LVxuLS1cbmZzL2J0cmZzL3N5c2ZzLmM9MjEzND1pbnQgYnRyZnNfc3lzZnNfYWRkX2RldmljZShzdHJ1Y3QgYnRyZnNfZGV2aWNlICpkZXZpY2UpXG4tLVxuZnMvYnRyZnMvc3lzZnMuYy0yMTQ5LVxuZnMvYnRyZnMvc3lzZnMuYzoyMTUwOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy9zeXNmcy5jLTIxNTEtXG4tLVxuZnMvYnRyZnMvdHJhbnNhY3Rpb24uYz0xNjYxPXN0YXRpYyBub2lubGluZSBpbnQgY3JlYXRlX3BlbmRpbmdfc25hcHNob3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsXG4tLVxuZnMvYnRyZnMvdHJhbnNhY3Rpb24uYy0xNjk2LVx0ICovXG5mcy9idHJmcy90cmFuc2FjdGlvbi5jOjE2OTc6XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy90cmFuc2FjdGlvbi5jLTE2OTgtXHRwZW5kaW5nLVx1MDAzZWVycm9yID0gZnNjcnlwdF9zZXR1cF9maWxlbmFtZShcdTAwMjZwYXJlbnRfaW5vZGUtXHUwMDNldmZzX2lub2RlLFxuLS1cbmZzL2J0cmZzL3RyZWUtbG9nLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgYnRyZnNfaW5vZGUgKmJ0cmZzX2lnZXRfbG9nZ2luZyh1NjQgb2JqZWN0aWQsIHN0cnVjdCBidHJmc19yb290ICpyb290KVxuLS1cbmZzL2J0cmZzL3RyZWUtbG9nLmMtMjYzLVx0ICovXG5mcy9idHJmcy90cmVlLWxvZy5jOjI2NDpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvdHJlZS1sb2cuYy0yNjUtXHRpbm9kZSA9IGJ0cmZzX2lnZXQob2JqZWN0aWQsIHJvb3QpO1xuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYz03NTk9c3RhdGljIG5vaW5saW5lIHN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZV9saXN0X2FkZChjb25zdCBjaGFyICpwYXRoLFxuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYy04NDAtXG5mcy9idHJmcy92b2x1bWVzLmM6ODQxOlx0XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3ZvbHVtZXMuYy04NDItXHRcdGRldmljZSA9IGJ0cmZzX2FsbG9jX2RldmljZShOVUxMLCBcdTAwMjZkZXZpZCxcbi0tXG5mcy9idHJmcy92b2x1bWVzLmM9NzQ3MT1zdGF0aWMgc3RydWN0IGJ0cmZzX2RldmljZSAqYWRkX21pc3NpbmdfZGV2KHN0cnVjdCBidHJmc19mc19kZXZpY2VzICpmc19kZXZpY2VzLFxuLS1cbmZzL2J0cmZzL3ZvbHVtZXMuYy03NDgzLVxuZnMvYnRyZnMvdm9sdW1lcy5jOjc0ODQ6XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3ZvbHVtZXMuYy03NDg1LVx0ZGV2aWNlID0gYnRyZnNfYWxsb2NfZGV2aWNlKE5VTEwsIFx1MDAyNmRldmlkLCBkZXZfdXVpZCwgTlVMTCk7XG4tLVxuZnMvYnRyZnMveGF0dHIuYz00ODM9c3RhdGljIGludCBidHJmc19pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvYnRyZnMveGF0dHIuYy00OTUtXHQgKi9cbmZzL2J0cmZzL3hhdHRyLmM6NDk2Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy94YXR0ci5jLTQ5Ny1cdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXHUwMDNlbmFtZSAhPSBOVUxMOyB4YXR0ciYjNDM7JiM0MzspIHtcbi0tXG5mcy9idHJmcy96b25lZC5jPTgzMD1zdGF0aWMgaW50IHNiX2xvZ19sb2NhdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmVzLFxuLS1cbmZzL2J0cmZzL3pvbmVkLmMtODU3LVxuZnMvYnRyZnMvem9uZWQuYzo4NTg6XHRcdFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvem9uZWQuYy04NTktXHRcdFx0cmV0ID0gYmxrZGV2X3pvbmVfbWdtdChiZGV2LCBSRVFfT1BfWk9ORV9SRVNFVCxcbi0tXG5mcy9idHJmcy96b25lZC5jPTk3NT1pbnQgYnRyZnNfYWR2YW5jZV9zYl9sb2coc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlLCBpbnQgbWlycm9yKVxuLS1cbmZzL2J0cmZzL3pvbmVkLmMtMTAwOS1cbmZzL2J0cmZzL3pvbmVkLmM6MTAxMDpcdFx0XHRcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3pvbmVkLmMtMTAxMS1cdFx0XHRcdHJldCA9IGJsa2Rldl96b25lX21nbXQoZGV2aWNlLVx1MDAzZWJkZXYsXG4tLVxuZnMvYnRyZnMvem9uZWQuYz0xMDMwPWludCBidHJmc19yZXNldF9zYl9sb2dfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG1pcnJvcilcbi0tXG5mcy9idHJmcy96b25lZC5jLTEwNDgtXG5mcy9idHJmcy96b25lZC5jOjEwNDk6XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy96b25lZC5jLTEwNTAtXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxuLS1cbmZzL2J0cmZzL3pvbmVkLmM9MTE2ND1pbnQgYnRyZnNfcmVzZXRfZGV2aWNlX3pvbmUoc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlLCB1NjQgcGh5c2ljYWwsXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0xMTcwLVx0KmJ5dGVzID0gMDtcbmZzL2J0cmZzL3pvbmVkLmM6MTE3MTpcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3pvbmVkLmMtMTE3Mi1cdHJldCA9IGJsa2Rldl96b25lX21nbXQoZGV2aWNlLVx1MDAzZWJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxuLS1cbmZzL2J0cmZzL3pvbmVkLmM9MTMyND1zdGF0aWMgaW50IGJ0cmZzX2xvYWRfem9uZV9pbmZvKHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLCBpbnQgem9uZV9pZHgsXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0xMzgyLVxuZnMvYnRyZnMvem9uZWQuYzoxMzgzOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy96b25lZC5jLTEzODQtXHRyZXQgPSBidHJmc19nZXRfZGV2X3pvbmUoZGV2aWNlLCBpbmZvLVx1MDAzZXBoeXNpY2FsLCBcdTAwMjZ6b25lKTtcbi0tXG5mcy9idHJmcy96b25lZC5jPTIzMjE9c3RhdGljIGludCByZWFkX3pvbmVfaW5mbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywgdTY0IGxvZ2ljYWwsXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0yMzQxLVxuZnMvYnRyZnMvem9uZWQuYzoyMzQyOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy96b25lZC5jLTIzNDMtXHRubWlycm9ycyA9IChpbnQpYmlvYy1cdTAwM2VudW1fc3RyaXBlcztcbi0tXG5mcy9idHJmcy96b25lZC5jPTI1MTE9c3RhdGljIGludCBjYWxsX3pvbmVfZmluaXNoKHN0cnVjdCBidHJmc19ibG9ja19ncm91cCAqYmxvY2tfZ3JvdXAsXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0yNTI3LVxuZnMvYnRyZnMvem9uZWQuYzoyNTI4Olx0XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9idHJmcy96b25lZC5jLTI1MjktXHRcdHJldCA9IGJsa2Rldl96b25lX21nbXQoZGV2aWNlLVx1MDAzZWJkZXYsIFJFUV9PUF9aT05FX0ZJTklTSCxcbi0tXG5mcy9idHJmcy96b25lZC5jPTMxMTI9aW50IGJ0cmZzX3Jlc2V0X3VudXNlZF9ibG9ja19ncm91cHMoc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNwYWNlX2luZm8sIHU2NCBudW1fYnl0ZXMpXG4tLVxuZnMvYnRyZnMvem9uZWQuYy0zMTc2LVxuZnMvYnRyZnMvem9uZWQuYzozMTc3Olx0XHRcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2J0cmZzL3pvbmVkLmMtMzE3OC1cdFx0XHRyZXQgPSBibGtkZXZfem9uZV9tZ210KHN0cmlwZS1cdTAwM2VkZXYtXHUwMDNlYmRldiwgUkVRX09QX1pPTkVfUkVTRVQsXG4tLVxuZnMvYnRyZnMvenN0ZC5jPTI4NT1zdHJ1Y3QgbGlzdF9oZWFkICp6c3RkX2dldF93b3Jrc3BhY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGludCBsZXZlbClcbi0tXG5mcy9idHJmcy96c3RkLmMtMzAxLVxuZnMvYnRyZnMvenN0ZC5jOjMwMjpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvYnRyZnMvenN0ZC5jLTMwMy1cdHdzID0genN0ZF9hbGxvY193b3Jrc3BhY2UoZnNfaW5mbywgbGV2ZWwpO1xuLS1cbmZzL2NhY2hlZmlsZXMvaW8uYz03NT1zdGF0aWMgaW50IGNhY2hlZmlsZXNfcmVhZChzdHJ1Y3QgbmV0ZnNfY2FjaGVfcmVzb3VyY2VzICpjcmVzLFxuLS1cbmZzL2NhY2hlZmlsZXMvaW8uYy0xNTctXHR0cmFjZV9jYWNoZWZpbGVzX3JlYWQob2JqZWN0LCBmaWxlX2lub2RlKGZpbGUpLCBraS1cdTAwM2Vpb2NiLmtpX3BvcywgbGVuIC0gc2tpcHBlZCk7XG5mcy9jYWNoZWZpbGVzL2lvLmM6MTU4Olx0b2xkX25vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2NhY2hlZmlsZXMvaW8uYy0xNTktXHRyZXQgPSBjYWNoZWZpbGVzX2luamVjdF9yZWFkX2Vycm9yKCk7XG4tLVxuZnMvY2FjaGVmaWxlcy9pby5jPTI4MT1pbnQgX19jYWNoZWZpbGVzX3dyaXRlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuLS1cbmZzL2NhY2hlZmlsZXMvaW8uYy0zMjgtXHR0cmFjZV9jYWNoZWZpbGVzX3dyaXRlKG9iamVjdCwgZmlsZV9pbm9kZShmaWxlKSwga2ktXHUwMDNlaW9jYi5raV9wb3MsIGxlbik7XG5mcy9jYWNoZWZpbGVzL2lvLmM6MzI5Olx0b2xkX25vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2NhY2hlZmlsZXMvaW8uYy0zMzAtXHRyZXQgPSBjYWNoZWZpbGVzX2luamVjdF93cml0ZV9lcnJvcigpO1xuLS1cbmZzL2NlcGgvbWRzX2NsaWVudC5jPTQwMTE9c3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5KHN0cnVjdCBjZXBoX21kc19zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3QgY2VwaF9tc2cgKm1zZylcbi0tXG5mcy9jZXBoL21kc19jbGllbnQuYy00MTY4LVx0ICovXG5mcy9jZXBoL21kc19jbGllbnQuYzo0MTY5Olx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvY2VwaC9tZHNfY2xpZW50LmMtNDE3MC1cbi0tXG5mcy9leHQ0L2V4dDQuaD0xODg1PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfd3JpdGVwYWdlc19kb3duX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODg3LVx0cGVyY3B1X2Rvd25fcmVhZChcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX3dyaXRlcGFnZXNfcndzZW0pO1xuZnMvZXh0NC9leHQ0Lmg6MTg4ODpcdHJldHVybiBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2V4dDQvZXh0NC5oLTE4ODktfVxuLS1cbmZzL2V4dDQvZXh0NC5oPTE4OTc9c3RhdGljIGlubGluZSBpbnQgZXh0NF93cml0ZXBhZ2VzX2Rvd25fd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L2V4dDQuaC0xODk5LVx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc193cml0ZXBhZ2VzX3J3c2VtKTtcbmZzL2V4dDQvZXh0NC5oOjE5MDA6XHRyZXR1cm4gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9leHQ0L2V4dDQuaC0xOTAxLX1cbi0tXG5mcy9leHQ0L2V4dDQuaD0xOTA5PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfZmNfbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvZXh0NC5oLTE5MTEtXHRtdXRleF9sb2NrKFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZmNfbG9jayk7XG5mcy9leHQ0L2V4dDQuaDoxOTEyOlx0cmV0dXJuIG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvZXh0NC9leHQ0LmgtMTkxMy19XG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuYz0zMz1zdGF0aWMgaGFuZGxlX3QgKmV4dDRfZ2V0X25vam91cm5hbCh2b2lkKVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmMtNDctXHRcdCAqL1xuZnMvZXh0NC9leHQ0X2piZDIuYzo0ODpcdFx0aGFuZGxlLVx1MDAzZXNhdmVkX2FsbG9jX2NvbnRleHQgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2V4dDQvZXh0NF9qYmQyLmMtNDktXHRcdGN1cnJlbnQtXHUwMDNlam91cm5hbF9pbmZvID0gaGFuZGxlO1xuLS1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYz02MD1zdGF0aWMgaW50IG1leHRfZm9saW9fZG91YmxlX2xvY2soc3RydWN0IGlub2RlICppbm9kZTEsIHN0cnVjdCBpbm9kZSAqaW5vZGUyLFxuLS1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYy03Ny1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYzo3ODpcdGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtNzktXHRmZ3BfZmxhZ3MgfD0gZmdmX3NldF9vcmRlcihsZW4pO1xuLS1cbmZzL2YyZnMvZjJmcy5oPTMwNDc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmYyZnNfZ3JhYl9jYWNoZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9mMmZzL2YyZnMuaC0zMDcwLVxuZnMvZjJmcy9mMmZzLmg6MzA3MTpcdGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9mMmZzL2YyZnMuaC0zMDcyLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBGR1BfV1JJVEVCRUdJTixcbi0tXG5mcy9mMmZzL3NlZ21lbnQuYz0xOTg3PXN0YXRpYyBpbnQgX19mMmZzX2lzc3VlX2Rpc2NhcmRfem9uZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZjJmcy9zZWdtZW50LmMtMjAyMi1cdFx0XHR0cmFjZV9mMmZzX2lzc3VlX3Jlc2V0X3pvbmUoYmRldiwgYmxrc3RhcnQpO1xuZnMvZjJmcy9zZWdtZW50LmM6MjAyMzpcdFx0XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9mMmZzL3NlZ21lbnQuYy0yMDI0LVx0XHRcdHJldCA9IGJsa2Rldl96b25lX21nbXQoYmRldiwgUkVRX09QX1pPTkVfUkVTRVQsXG4tLVxuZnMvZjJmcy9zZWdtZW50LmM9NTI4NT1zdGF0aWMgaW50IGNoZWNrX3pvbmVfd3JpdGVfcG9pbnRlcihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZjJmcy9zZWdtZW50LmMtNTM0NS1cbmZzL2YyZnMvc2VnbWVudC5jOjUzNDY6XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9mMmZzL3NlZ21lbnQuYy01MzQ3LVx0cmV0ID0gYmxrZGV2X3pvbmVfbWdtdChmZGV2LVx1MDAzZWJkZXYsIFJFUV9PUF9aT05FX0ZJTklTSCxcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTU1Nz1zdGF0aWMgdm9pZCB2aXJ0aW9fZnNfcmVxdWVzdF9kaXNwYXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTU5Mi1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM6NTkzOlx0XHRmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvZnVzZS92aXJ0aW9fZnMuYy01OTQtXHRcdHJldCA9IHZpcnRpb19mc19lbnF1ZXVlX3JlcShmc3ZxLCByZXEsIHRydWUsIEdGUF9LRVJORUwpO1xuLS1cbmZzL2piZDIvam91cm5hbC5jPTE1OT1zdGF0aWMgaW50IGtqb3VybmFsZDIodm9pZCAqYXJnKVxuLS1cbmZzL2piZDIvam91cm5hbC5jLTE4MS1cdCAqL1xuZnMvamJkMi9qb3VybmFsLmM6MTgyOlx0bWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9qYmQyL2pvdXJuYWwuYy0xODMtXG4tLVxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTMxMj1zdGF0aWMgaW50IHN0YXJ0X3RoaXNfaGFuZGxlKGpvdXJuYWxfdCAqam91cm5hbCwgaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtNDQ5LVx0ICovXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM6NDUwOlx0aGFuZGxlLVx1MDAzZXNhdmVkX2FsbG9jX2NvbnRleHQgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy00NTEtXHRyZXR1cm4gMDtcbi0tXG5mcy9uYW1laS5jPTY1NDM9aW50IHBhZ2Vfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLCBpbnQgbGVuKVxuLS1cbmZzL25hbWVpLmMtNjU1NC1cdGlmIChub2ZzKVxuZnMvbmFtZWkuYzo2NTU1Olx0XHRmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvbmFtZWkuYy02NTU2LVx0ZXJyID0gYW9wcy1cdTAwM2V3cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCAwLCBsZW4tMSwgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4tLVxuZnMvbmZzL2ZsZXhmaWxlbGF5b3V0L2ZsZXhmaWxlbGF5b3V0LmM9NDQ2PWZmX2xheW91dF9hbGxvY19sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxoLFxuLS1cbmZzL25mcy9mbGV4ZmlsZWxheW91dC9mbGV4ZmlsZWxheW91dC5jLTU5MS1cdFx0XHRlbHNlIHtcbmZzL25mcy9mbGV4ZmlsZWxheW91dC9mbGV4ZmlsZWxheW91dC5jOjU5MjpcdFx0XHRcdHVuc2lnbmVkIGludCBub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXQuYy01OTMtXG4tLVxuZnMvbmZzL25mczRzdGF0ZS5jPTI1NDI9c3RhdGljIHZvaWQgbmZzNF9zdGF0ZV9tYW5hZ2VyKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApXG4tLVxuZnMvbmZzL25mczRzdGF0ZS5jLTI1NTItXHQgKi9cbmZzL25mcy9uZnM0c3RhdGUuYzoyNTUzOlx0bWVtZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL25mcy9uZnM0c3RhdGUuYy0yNTU0LVxuLS1cbmZzL25mcy9uZnM0c3RhdGUuYy0yNjYxLVx0XHRcdFx0ICAgICAgXHUwMDI2Y2xwLVx1MDAzZWNsX3N0YXRlKSkge1xuZnMvbmZzL25mczRzdGF0ZS5jOjI2NjI6XHRcdFx0bWVtZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL25mcy9uZnM0c3RhdGUuYy0yNjYzLVx0XHRcdGNvbnRpbnVlO1xuLS1cbmZzL250ZnMvbGNuYWxsb2MuYz0xODM9c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19jbHVzdGVyX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBzNjQgc3RhcnRfdmNuLFxuLS1cbmZzL250ZnMvbGNuYWxsb2MuYy0yMTctXG5mcy9udGZzL2xjbmFsbG9jLmM6MjE4Olx0bWVtYWxsb2NfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL250ZnMvbGNuYWxsb2MuYy0yMTktXG4tLVxuZnMvbnRmcy9sY25hbGxvYy5jPTg0Mj1zNjQgX19udGZzX2NsdXN0ZXJfZnJlZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGNvbnN0IHM2NCBzdGFydF92Y24sIHM2NCBjb3VudCxcbi0tXG5mcy9udGZzL2xjbmFsbG9jLmMtODcwLVx0aWYgKGxpa2VseSghaXNfcm9sbGJhY2spKSB7XG5mcy9udGZzL2xjbmFsbG9jLmM6ODcxOlx0XHRtZW1hbGxvY19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvbnRmcy9sY25hbGxvYy5jLTg3Mi1cdFx0ZG93bl93cml0ZShcdTAwMjZ2b2wtXHUwMDNlbGNuYm1wX2xvY2spO1xuLS1cbmZzL250ZnMvbGNuYWxsb2MuaD0xMjA9c3RhdGljIGlubGluZSBpbnQgbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCxcbi0tXG5mcy9udGZzL2xjbmFsbG9jLmgtMTI1LVxuZnMvbnRmcy9sY25hbGxvYy5oOjEyNjpcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9udGZzL2xjbmFsbG9jLmgtMTI3LVx0ZG93bl93cml0ZShcdTAwMjZ2b2wtXHUwMDNlbGNuYm1wX2xvY2spO1xuLS1cbmZzL250ZnMvbWZ0LmM9MjAxMz1pbnQgbnRmc19tZnRfcmVjb3JkX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBpbnQgbW9kZSxcbi0tXG5mcy9udGZzL21mdC5jLTIwNDMtXG5mcy9udGZzL21mdC5jOjIwNDQ6XHRtZW1hbGxvY19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvbnRmcy9tZnQuYy0yMDQ1LVxuLS1cbmZzL250ZnMvbWZ0LmM9MjUwOT1pbnQgbnRmc19tZnRfcmVjb3JkX2ZyZWUoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL21mdC5jLTI1NjYtXHQvKiBDbGVhciB0aGUgYml0IGluIHRoZSAkTUZULyRCSVRNQVAgY29ycmVzcG9uZGluZyB0byB0aGlzIHJlY29yZC4gKi9cbmZzL250ZnMvbWZ0LmM6MjU2NzpcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9udGZzL21mdC5jLTI1NjgtXHRpZiAoYmFzZV9uaS1cdTAwM2VtZnRfbm8gIT0gRklMRV9NRlQpXG4tLVxuZnMvbnRmcy9tZnQuYy0yNTgyLWJpdG1hcF9yb2xsYmFjazpcbmZzL250ZnMvbWZ0LmM6MjU4MzpcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9udGZzL21mdC5jLTI1ODQtXHRpZiAoYmFzZV9uaS1cdTAwM2VtZnRfbm8gIT0gRklMRV9NRlQpXG4tLVxuZnMvbnRmcy93b2YuYz0xNDc9c3RhdGljIGludCBudGZzX2JkZXZfcmVhZF9mcm9tX3JsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxuLS1cbmZzL250ZnMvd29mLmMtMTY1LVxuZnMvbnRmcy93b2YuYzoxNjY6XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9udGZzL3dvZi5jLTE2Ny1cdGRvd25fcmVhZChcdTAwMjZydW5saXN0LVx1MDAzZWxvY2spO1xuLS1cbmZzL250ZnMvd29mLmM9NTQ5PXN0YXRpYyBpbnQgbnRmc193b2ZfZGVjb2RlX2ZvbGlvc19kaXJlY3Qoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsXG4tLVxuZnMvbnRmcy93b2YuYy01NjgtXG5mcy9udGZzL3dvZi5jOjU2OTpcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL250ZnMvd29mLmMtNTcwLVx0YWRkciA9IHZtYXAoZGVzdC5wYWdlcywgZGVzdC5ucl9wYWdlcywgVk1fTUFQLCBQQUdFX0tFUk5FTCk7XG4tLVxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYz0xNTc5PXN0YXRpYyB2b2lkIG8ybmV0X3N0YXJ0X2Nvbm5lY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMTU5NC1cdCAqL1xuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxNTk1Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE1OTYtXHQvKiBpZiB3ZSYjMzk7cmUgZ3JlYXRlciB3ZSBpbml0aWF0ZSB0eCwgb3RoZXJ3aXNlIHdlIGFjY2VwdCAqL1xuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmM9MTg1MD1zdGF0aWMgaW50IG8ybmV0X2FjY2VwdF9vbmUoc3RydWN0IHNvY2tldCAqc29jaywgaW50ICptb3JlKVxuLS1cbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMTg2Ny1cdCAqL1xuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxODY4Olx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE4NjktXG4tLVxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmM9NDYyPWludCBvY2ZzMl9nbG9iYWxfd3JpdGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbi0tXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy00NjktXHRkb3duX3dyaXRlKFx1MDAyNmRxb3B0LVx1MDAzZWRxaW9fc2VtKTtcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jOjQ3MDpcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy00NzEtXHRlcnIgPSBvY2ZzMl9xaW5mb19sb2NrKGluZm8sIDEpO1xuLS1cbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jPTYxNz1zdGF0aWMgaW50IG9jZnMyX3N5bmNfZHF1b3RfaGVscGVyKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy02NDEtXHRkb3duX3dyaXRlKFx1MDAyNnNiX2Rxb3B0KHNiKS1cdTAwM2VkcWlvX3NlbSk7XG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo2NDI6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtNjQzLVx0c3RhdHVzID0gb2NmczJfc3luY19kcXVvdChkcXVvdCk7XG4tLVxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmM9NjgzPXN0YXRpYyBpbnQgb2NmczJfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy02OTktXHRkb3duX3dyaXRlKFx1MDAyNnNiX2Rxb3B0KGRxdW90LVx1MDAzZWRxX3NiKS1cdTAwM2VkcWlvX3NlbSk7XG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo3MDA6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtNzAxLVx0c3RhdHVzID0gb2NmczJfbG9jYWxfd3JpdGVfZHF1b3QoZHF1b3QpO1xuLS1cbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jPTkzOT1zdGF0aWMgaW50IG9jZnMyX21hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy05ODAtXHRkb3duX3dyaXRlKFx1MDAyNnNiX2Rxb3B0KHNiKS1cdTAwM2VkcWlvX3NlbSk7XG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo5ODE6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtOTgyLVx0c3RhdHVzID0gb2NmczJfc3luY19kcXVvdChkcXVvdCk7XG4tLVxuZnMvb2NmczIvcXVvdGFfbG9jYWwuYz00NTc9c3RhdGljIGludCBvY2ZzMl9yZWNvdmVyX2xvY2FsX3F1b3RhX2ZpbGUoc3RydWN0IGlub2RlICpscWlub2RlLFxuLS1cbmZzL29jZnMyL3F1b3RhX2xvY2FsLmMtNTIzLVx0XHRcdGRvd25fd3JpdGUoXHUwMDI2c2JfZHFvcHQoc2IpLVx1MDAzZWRxaW9fc2VtKTtcbmZzL29jZnMyL3F1b3RhX2xvY2FsLmM6NTI0Olx0XHRcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9vY2ZzMi9xdW90YV9sb2NhbC5jLTUyNS1cdFx0XHRzcGluX2xvY2soXHUwMDI2ZHF1b3QtXHUwMDNlZHFfZHFiX2xvY2spO1xuLS1cbmZzL3F1b3RhL2RxdW90LmM9NDgwPWludCBkcXVvdF9hY3F1aXJlKHN0cnVjdCBkcXVvdCAqZHF1b3QpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYy00ODYtXHRtdXRleF9sb2NrKFx1MDAyNmRxdW90LVx1MDAzZWRxX2xvY2spO1xuZnMvcXVvdGEvZHF1b3QuYzo0ODc6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvZHF1b3QuYy00ODgtXHRpZiAoIXRlc3RfYml0KERRX1JFQURfQiwgXHUwMDI2ZHF1b3QtXHUwMDNlZHFfZmxhZ3MpKSB7XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz01Mjc9aW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuLS1cbmZzL3F1b3RhL2RxdW90LmMtNTMzLVx0bXV0ZXhfbG9jayhcdTAwMjZkcXVvdC1cdTAwM2VkcV9sb2NrKTtcbmZzL3F1b3RhL2RxdW90LmM6NTM0Olx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3F1b3RhL2RxdW90LmMtNTM1LVx0aWYgKCFjbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCkpXG4tLVxuZnMvcXVvdGEvZHF1b3QuYz01NTM9aW50IGRxdW90X3JlbGVhc2Uoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTU1OS1cdG11dGV4X2xvY2soXHUwMDI2ZHF1b3QtXHUwMDNlZHFfbG9jayk7XG5mcy9xdW90YS9kcXVvdC5jOjU2MDpcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9xdW90YS9kcXVvdC5jLTU2MS1cdC8qIENoZWNrIHdoZXRoZXIgd2UgYXJlIG5vdCByYWNpbmcgd2l0aCBzb21lIG90aGVyIGRxZ2V0KCkgKi9cbi0tXG5mcy9xdW90YS9xdW90YV92MS5jPTE1OT1zdGF0aWMgaW50IHYxX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuLS1cbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTY2LVx0ZG93bl9yZWFkKFx1MDAyNmRxb3B0LVx1MDAzZWRxaW9fc2VtKTtcbmZzL3F1b3RhL3F1b3RhX3YxLmM6MTY3Olx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTY4LVx0cmV0ID0gc2ItXHUwMDNlc19vcC1cdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVx1MDAyNmRxYmxrLFxuLS1cbmZzL3F1b3RhL3F1b3RhX3YxLmM9MTg5PXN0YXRpYyBpbnQgdjFfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxuLS1cbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTk2LVx0ZG93bl93cml0ZShcdTAwMjZkcW9wdC1cdTAwM2VkcWlvX3NlbSk7XG5mcy9xdW90YS9xdW90YV92MS5jOjE5NzpcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9xdW90YS9xdW90YV92MS5jLTE5OC1cdHJldCA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlcXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKilcdTAwMjZkcWJsayxcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTkwPXN0YXRpYyBpbnQgdjJfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYy0xMDItXHRkb3duX3JlYWQoXHUwMDI2ZHFvcHQtXHUwMDNlZHFpb19zZW0pO1xuZnMvcXVvdGEvcXVvdGFfdjIuYzoxMDM6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0xMDQtXHRyZXQgPSB2Ml9yZWFkX2hlYWRlcihzYiwgdHlwZSwgXHUwMDI2ZHFoZWFkKTtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTE5Nz1zdGF0aWMgaW50IHYyX3dyaXRlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jLTIwNi1cdGRvd25fd3JpdGUoXHUwMDI2ZHFvcHQtXHUwMDNlZHFpb19zZW0pO1xuZnMvcXVvdGEvcXVvdGFfdjIuYzoyMDc6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMDgtXHRzcGluX2xvY2soXHUwMDI2ZHFfZGF0YV9sb2NrKTtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTMzNj1zdGF0aWMgaW50IHYyX3JlYWRfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jLTM0Mi1cdGRvd25fcmVhZChcdTAwMjZkcW9wdC1cdTAwM2VkcWlvX3NlbSk7XG5mcy9xdW90YS9xdW90YV92Mi5jOjM0MzpcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy9xdW90YS9xdW90YV92Mi5jLTM0NC1cdHJldCA9IHF0cmVlX3JlYWRfZHF1b3QoXG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYz0zNTI9c3RhdGljIGludCB2Ml93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxuLS1cbmZzL3F1b3RhL3F1b3RhX3YyLmMtMzcwLVx0fVxuZnMvcXVvdGEvcXVvdGFfdjIuYzozNzE6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0zNzItXHRyZXQgPSBxdHJlZV93cml0ZV9kcXVvdChcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTM4Mz1zdGF0aWMgaW50IHYyX3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdClcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jLTM4OS1cdGRvd25fd3JpdGUoXHUwMDI2ZHFvcHQtXHUwMDNlZHFpb19zZW0pO1xuZnMvcXVvdGEvcXVvdGFfdjIuYzozOTA6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy0zOTEtXHRyZXQgPSBxdHJlZV9yZWxlYXNlX2RxdW90KHNiX2RxaW5mbyhkcXVvdC1cdTAwM2VkcV9zYiwgZHF1b3QtXHUwMDNlZHFfaWQudHlwZSktXHUwMDNlZHFpX3ByaXYsIGRxdW90KTtcbi0tXG5mcy9xdW90YS9xdW90YV92Mi5jPTQwND1zdGF0aWMgaW50IHYyX2dldF9uZXh0X2lkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkICpxaWQpXG4tLVxuZnMvcXVvdGEvcXVvdGFfdjIuYy00MTAtXHRkb3duX3JlYWQoXHUwMDI2ZHFvcHQtXHUwMDNlZHFpb19zZW0pO1xuZnMvcXVvdGEvcXVvdGFfdjIuYzo0MTE6XHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMvcXVvdGEvcXVvdGFfdjIuYy00MTItXHRyZXQgPSBxdHJlZV9nZXRfbmV4dF9pZChzYl9kcWluZm8oc2IsIHFpZC1cdTAwM2V0eXBlKS1cdTAwM2VkcWlfcHJpdiwgcWlkKTtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg9ODQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX3NlcnZlcl9sb2NrKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcilcbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaC04NDUte1xuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oOjg0NjpcdHVuc2lnbmVkIGludCBub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaC04NDctXG4tLVxuZnMvc3F1YXNoZnMvZmlsZS5jPTM5Mj12b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9zcXVhc2hmcy9maWxlLmMtNDAwLVx0aW50IHN0YXJ0X2luZGV4ID0gZm9saW8tXHUwMDNlaW5kZXggXHUwMDI2IH5tYXNrLCBlbmRfaW5kZXggPSBzdGFydF9pbmRleCB8IG1hc2s7XG5mcy9zcXVhc2hmcy9maWxlLmM6NDAxOlx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3NxdWFzaGZzL2ZpbGUuYy00MDItXG4tLVxuZnMveGZzL3NjcnViL3hmaWxlLmM9MTA4PXhmaWxlX2xvYWQoXG4tLVxuZnMveGZzL3NjcnViL3hmaWxlLmMtMTIzLVxuZnMveGZzL3NjcnViL3hmaWxlLmM6MTI0Olx0cGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMvc2NydWIveGZpbGUuYy0xMjUtXHR3aGlsZSAoY291bnQgXHUwMDNlIDApIHtcbi0tXG5mcy94ZnMvc2NydWIveGZpbGUuYz0xNzE9eGZpbGVfc3RvcmUoXG4tLVxuZnMveGZzL3NjcnViL3hmaWxlLmMtMTkzLVxuZnMveGZzL3NjcnViL3hmaWxlLmM6MTk0Olx0cGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMvc2NydWIveGZpbGUuYy0xOTUtXHR3aGlsZSAoY291bnQgXHUwMDNlIDApIHtcbi0tXG5mcy94ZnMvc2NydWIveGZpbGUuYz0yNDc9eGZpbGVfZ2V0X2ZvbGlvKFxuLS1cbmZzL3hmcy9zY3J1Yi94ZmlsZS5jLTI2OS1cbmZzL3hmcy9zY3J1Yi94ZmlsZS5jOjI3MDpcdHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMveGZzL3NjcnViL3hmaWxlLmMtMjcxLVx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgMCwgXHUwMDI2Zm9saW8sXG4tLVxuZnMveGZzL3hmc19hb3BzLmM9MTA3PXhmc19lbmRfaW9lbmRfd3JpdGUoXG4tLVxuZnMveGZzL3hmc19hb3BzLmMtMTIyLVx0ICovXG5mcy94ZnMveGZzX2FvcHMuYzoxMjM6XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3hmcy94ZnNfYW9wcy5jLTEyNC1cbi0tXG5mcy94ZnMveGZzX2FvcHMuYz01Mjk9eGZzX3dyaXRlYmFja19zdWJtaXQoXG4tLVxuZnMveGZzL3hmc19hb3BzLmMtNTQ0LVxuZnMveGZzL3hmc19hb3BzLmM6NTQ1Olx0XHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbmZzL3hmcy94ZnNfYW9wcy5jLTU0Ni1cdFx0ZXJyb3IgPSB4ZnNfcmVmbGlua19jb252ZXJ0X2NvdyhYRlNfSShpb2VuZC1cdTAwM2Vpb19pbm9kZSksXG4tLVxuZnMveGZzL3hmc19kcXVvdC5jPTg0Nj14ZnNfcW1fZHFnZXRfY2FjaGVfaW5zZXJ0KFxuLS1cbmZzL3hmcy94ZnNfZHF1b3QuYy04NTYtXG5mcy94ZnMveGZzX2RxdW90LmM6ODU3Olx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMveGZzL3hmc19kcXVvdC5jLTg1OC1cdG11dGV4X2xvY2soXHUwMDI2cWktXHUwMDNlcWlfdHJlZV9sb2NrKTtcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYz02MDg9eGZzX3pvbmVkX2Rpb193cml0ZV9lbmRfaW8oXG4tLVxuZnMveGZzL3hmc19maWxlLmMtNjI5LVxuZnMveGZzL3hmc19maWxlLmM6NjMwOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMveGZzX2ZpbGUuYy02MzEtXHRlcnJvciA9IHhmc19kaW9fZW5kaW9fc2V0X2lzaXplKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcywgc2l6ZSk7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9NjM4PXhmc19kaW9fd3JpdGVfZW5kX2lvKFxuLS1cbmZzL3hmcy94ZnNfZmlsZS5jLTY3MS1cdCAqL1xuZnMveGZzL3hmc19maWxlLmM6NjcyOlx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMveGZzX2ZpbGUuYy02NzMtXG4tLVxuZnMveGZzL3hmc19pY2FjaGUuYz0xOTU1PXhmc19pbm9kZWdjX3dvcmtlcihcbi0tXG5mcy94ZnMveGZzX2ljYWNoZS5jLTE5ODMtXHQgKi9cbmZzL3hmcy94ZnNfaWNhY2hlLmM6MTk4NDpcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xuZnMveGZzL3hmc19pY2FjaGUuYy0xOTg1LVxuLS1cbmZzL3hmcy94ZnNfbG9nX2NpbC5jPTEzNzU9eGxvZ19jaWxfcHVzaF93b3JrKFxuLS1cbmZzL3hmcy94ZnNfbG9nX2NpbC5jLTEzNzcte1xuZnMveGZzL3hmc19sb2dfY2lsLmM6MTM3ODpcdHVuc2lnbmVkIGludFx0XHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5mcy94ZnMveGZzX2xvZ19jaWwuYy0xMzc5LVx0c3RydWN0IHhmc19jaWxfY3R4XHQqY3R4ID1cbi0tXG5mcy94ZnMveGZzX2xvZ19wcml2Lmg9NjM5PXhsb2dfdmFsaWRfbHNuKFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMzAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIEZsYWdzIGluIEZpbGUgU3lzdGVtcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZyBzaXR1YXRpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGhvdyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncywgcGFydGljdWxhcmx5IGluIGNvbnRleHRzIHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyB0cmlnZ2VyaW5nIHJlY3Vyc2l2ZSByZWNsYWltIG9yIG90aGVyIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGJlaGF2aW9ycywgYmVjYXVzZSBJIG5lZWQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgbXkgbW9kaWZpY2F0aW9ucyBpbXBhY3QgdGhlIGNvZGUgYmFzZS4KCkZpcnN0IHVwLCBgZXJvZnNgLiBUaGUgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCBmdW5jdGlvbiBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFRoZSB1c2Ugb2YgYHJlYWRhaGVhZF9nZnBfbWFzayhhcykgJmFtcDsgfl9fR0ZQX1JFQ0xBSU1gIGFscmVhZHkgcHJldmVudHMgdGhlIGFsbG9jYXRpb24gZnJvbSBkaXJlY3RseSByZWNsYWltaW5nLCB3aGljaCBpcyBnb29kLiBUaGF0IHdhcyBhIGdvb2Qgc3RhcnQuCgpOZXh0LCBJIGxvb2tlZCBhdCBgZXh0NGAuIFRoZSBmdW5jdGlvbnMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRgIGFuZCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBhcmUgY2FsbGVkIHdpdGhpbiBhIEpCRDIgdHJhbnNhY3Rpb24gaGFuZGxlLiBUaGlzIGlzIGltcG9ydGFudCwgYmVjYXVzZSB3aXRoaW4gdGhhdCBoYW5kbGUgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBpcyBjYWxsZWQgdmlhIGBzdGFydF90aGlzX2hhbmRsZSgpYC4gVGhpcyBtZWFucyB0aGF0IGFsbG9jYXRpb25zIHdpdGhpbiB0aGUgZXh0ZW50IGNvbnZlcnNpb24gcHJvY2VzcyBhcmUgYWxyZWFkeSBndWFyZGVkIGFnYWluc3QgcmVjdXJzaW9uLiBUaGF0JiMzOTtzIGEgcG9pbnQgaW4gdGhlICYjMzQ7c2FmZSYjMzQ7IGNvbHVtbi4KCk1vdmluZyBvbiB0byBgbmZzYCwgSSBub3RpY2VkIHRoYXQgYG5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0YCB1c2VzIGBGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVRgIGFuZCBgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKWAuIEJ1dCB3YWl0LCBpbiB0aGUgZGVlcGVyIGNhbGwsIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCB0aGUgYEZHUF9OT1dBSVRgIGZsYWcgaXMgZXhwbGljaXRseSBoYW5kbGVkLCBjbGVhcmluZyBgR0ZQX0tFUk5FTGAgYW5kIHNldHRpbmcgYEdGUF9OT1dBSVRgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgYEdGUF9OT1dBSVRgIGl0c2VsZiAqZG9lc24mIzM5O3QqIGhhdmUgYF9fR0ZQX0ZTYCBvciBgX19HRlBfRElSRUNUX1JFQ0xBSU1gIHNldCwgc28gd2UgYXJlIGFsc28gc2FmZSBoZXJlLCBhbmQgd2UgY2FuIGJlIHN1cmUgb2YgdGhpcyBiZWhhdmlvci4KCk5vdywgYG50ZnNgLiBUaGUgZnVuY3Rpb24gYF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZWAgaGFzIGNhbGxlcnMgZWl0aGVyIGluc2lkZSBhbiBOVEZTIGxvY2svdHJhbnNhY3Rpb24gd2hlcmUgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBpcyBhY3RpdmUgKm9yKiB1c2VzIGBtYXBwaW5nX2dmcF9tYXNrYC4gV2UgYXJlIGNvdmVyZWQgZWl0aGVyIHdheS4gQW5kIGBudGZzX3dvZl9jb2xsZWN0X2Rlc3RgIHBhc3NlcyBgRkdQX05PV0FJVGAsIHdoaWNoIGNvcnJlY3RseSBzZXRzIGBHRlBfTk9XQUlUYC4KCkxvb2tpbmcgYXQgYHNxdWFzaGZzYCwgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIGV4cGxpY2l0bHkgdXNlcyBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIGFuZCBgbWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnMpYCBhcm91bmQgYSBsb29wLiBFeHBsaWNpdCBpcyBhbHdheXMgZ29vZC4gVGhhdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbnRleHQuCgpGaW5hbGx5LCBpbiBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLCBgZ3JhYl9jYWNoZV9wYWdlX25vd2FpdGAgdXNlcyBgRkdQX05PV0FJVGAsIHNvIGBnZnBgIGJlY29tZXMgYEdGUF9OT1dBSVRgIGFueXdheS4gVGhlIGtleSB0YWtlYXdheSBmcm9tIHRoaXMgc2VlbXMgdG8gYmUgdGhhdCBgRkdQX05PV0FJVGAgaXMgY29ycmVjdGx5IGhhbmRsZWQuCgpUaGUgZmluYWwgcGllY2Ugb2YgdGhpcyBpcyB0aGF0IGBGR1BfTk9GU2Agd2FzIGNvbXBsZXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwhIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgcmVmZXJlbmNlcyB0byBpdC4gSSB3aWxsIHNlYXJjaCB0aGUgY29kZSB0byB2ZXJpZnkgdGhpcyByZW1vdmFsIHdhcyBjb21wbGV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGR1BfTk9GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mMmZzL2RhdGEuYz0zODQ0PXN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZjJmcy9kYXRhLmMtMzkwMi1cdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbmZzL2YyZnMvZGF0YS5jOjM5MDM6XHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCB8IEZHUF9OT0ZTLFxuZnMvZjJmcy9kYXRhLmMtMzkwNC1cdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBTdWRkZW4gSW5zaWdodCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdG8gbG9vayBhdCBgZnMvZjJmcy9kYXRhLmNgIGluIHRoZSBGMkZTIGZpbGUgc3lzdGVtIGNvZGUuLi4gc3BlY2lmaWNhbGx5LCBJIHdvbmRlciB3aHkgYGZzL2YyZnMvZGF0YS5jYCBpcyB1c2luZyB0aGUgYEZHUF9OT0ZTYCBmbGFnPyBUaGF0JiMzOTtzIGFuIHVudXN1YWwgY29udGV4dCwgYW5kIGl0JiMzOTtzIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBzY3J1dGluaXplIGxpbmUgMzkwMCBpbiBgZnMvZjJmcy9kYXRhLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZjJmcy9kYXRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4OTU6XHQjZW5kaWZcbjM4OTY6XHRcbjM4OTc6XHRyZXBlYXQ6XG4zODk4Olx0XHQvKlxuMzg5OTpcdFx0ICogRG8gbm90IHVzZSBGR1BfU1RBQkxFIHRvIGF2b2lkIGRlYWRsb2NrLlxuMzkwMDpcdFx0ICogV2lsbCB3YWl0IHRoYXQgYmVsb3cgd2l0aCBvdXIgSU8gY29udHJvbC5cbjM5MDE6XHRcdCAqL1xuMzkwMjpcdFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxuMzkwMzpcdFx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcbjM5MDQ6XHRcdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuMzkwNTpcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbjM5MDY6XHRcdFx0ZXJyID0gUFRSX0VSUihmb2xpbyk7XG4zOTA3Olx0XHRcdGdvdG8gZmFpbDtcbjM5MDg6XHRcdH1cbjM5MDk6XHRcbjM5MTA6XHRcdC8qIFRPRE86IGNsdXN0ZXIgY2FuIGJlIGNvbXByZXNzZWQgZHVlIHRvIHJhY2Ugd2l0aCAud3JpdGVwYWdlICovXG4zOTExOlx0XG4zOTEyOlx0XHQqZm9saW9wID0gZm9saW87XG4zOTEzOlx0XG4zOTE0Olx0XHRpZiAoZjJmc19pc19hdG9taWNfZmlsZShpbm9kZSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNzMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBGMkZTIENvZGViYXNlIC0gQSBRdWljayBEZXRvdXIqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBkZWVwIGluIGBmcy9mMmZzL2RhdGEuY2AgYW5kIEkmIzM5O20gc2VlaW5nIGBGR1BfTk9GU2AgYmVpbmcgdXNlZC4uLiBpbnRlcmVzdGluZy4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFzaGVzIHRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgYnlwYXNzaW5nIHRoZSBmaWxlIHN5c3RlbS4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbiBjYWxsIG1lbnRpb25lZCBpcyBgZjJmc19maWxlbWFwX2dldF9mb2xpb2AuIExldCBtZSBqdW1wIG92ZXIgdG8gYGZzL2YyZnMvZjJmcy5oYCByaWdodCBub3cuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvYCBoYW5kbGVzIGRhdGEgcmV0cmlldmFsIGFuZCB3aGF0IGNvbnN0cmFpbnRzIGFyZSBpbiBwbGFjZSB3aXRoIGBGR1BfTk9GU2AuIEl0JiMzOTtzIGEgcXVpY2sgcmFiYml0IGhvbGUgYnV0IG5lY2Vzc2FyeSB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2YyZnMvY29tcHJlc3MuYz0xMDg4PXN0YXRpYyBpbnQgcHJlcGFyZV9jb21wcmVzc19vdmVyd3JpdGUoc3RydWN0IGNvbXByZXNzX2N0eCAqY2MsXG4tLVxuZnMvZjJmcy9jb21wcmVzcy5jLTExMDktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjYy1cdTAwM2VjbHVzdGVyX3NpemU7IGkmIzQzOyYjNDM7KSB7XG5mcy9mMmZzL2NvbXByZXNzLmM6MTExMDpcdFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIHN0YXJ0X2lkeCAmIzQzOyBpLFxuZnMvZjJmcy9jb21wcmVzcy5jLTExMTEtXHRcdFx0XHRmZ3BfZmxhZywgR0ZQX05PRlMpO1xuLS1cbmZzL2YyZnMvY29tcHJlc3MuYz0xOTU0PWJvb2wgZjJmc19sb2FkX2NvbXByZXNzZWRfZm9saW8oc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2YyZnMvY29tcHJlc3MuYy0xOTYyLVxuZnMvZjJmcy9jb21wcmVzcy5jOjE5NjM6XHRjZm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKENPTVBSRVNTX01BUFBJTkcoc2JpKSxcbmZzL2YyZnMvY29tcHJlc3MuYy0xOTY0LVx0XHRcdFx0YmxrYWRkciwgRkdQX0xPQ0sgfCBGR1BfTk9XQUlULCBHRlBfTk9GUyk7XG4tLVxuZnMvZjJmcy9kYXRhLmM9MTM2MT1zdHJ1Y3QgZm9saW8gKmYyZnNfZmluZF9kYXRhX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxuZnMvZjJmcy9kYXRhLmMtMTM2Ni1cbmZzL2YyZnMvZGF0YS5jOjEzNjc6XHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsIEZHUF9BQ0NFU1NFRCwgMCk7XG5mcy9mMmZzL2RhdGEuYy0xMzY4LVx0aWYgKElTX0VSUihmb2xpbykpXG4tLVxuZnMvZjJmcy9kYXRhLmM9Mzg0ND1zdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmZzL2YyZnMvZGF0YS5jLTM5MDEtXHQgKi9cbmZzL2YyZnMvZGF0YS5jOjM5MDI6XHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG5mcy9mMmZzL2RhdGEuYy0zOTAzLVx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcbi0tXG5mcy9mMmZzL2YyZnMuaD0zMDQ3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmMmZzX2dyYWJfY2FjaGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZjJmcy9mMmZzLmgtMzA3OC1cbmZzL2YyZnMvZjJmcy5oOjMwNzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmYyZnNfZmlsZW1hcF9nZXRfZm9saW8oXG5mcy9mMmZzL2YyZnMuaC0zMDgwLVx0XHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsXG4tLVxuZnMvZjJmcy9nYy5jPTEyMjA9c3RhdGljIGludCByYV9kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpXG4tLVxuZnMvZjJmcy9nYy5jLTEyOTMtXG5mcy9mMmZzL2djLmM6MTI5NDpcdGVmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8oTUVUQV9NQVBQSU5HKHNiaSksIGRuLmRhdGFfYmxrYWRkcixcbmZzL2YyZnMvZ2MuYy0xMjk1LVx0XHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCwgR0ZQX05PRlMpO1xuLS1cbmZzL2YyZnMvZ2MuYz0xMzMyPXN0YXRpYyBpbnQgbW92ZV9kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJsb2NrX3QgYmlkeCxcbi0tXG5mcy9mMmZzL2djLmMtMTQ1Ni1cbmZzL2YyZnMvZ2MuYzoxNDU3Olx0ZWZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhNRVRBX01BUFBJTkcoZmlvLnNiaSksIG5ld2FkZHIsXG5mcy9mMmZzL2djLmMtMTQ1OC1cdFx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQsIEdGUF9OT0ZTKTtcbi0tXG5mcy9mMmZzL25vZGUuYz0xNjUzPXN0YXRpYyB2b2lkIGZsdXNoX2lubGluZV9kYXRhKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgbmlkX3QgaW5vKVxuLS1cbmZzL2YyZnMvbm9kZS5jLTE2NjMtXG5mcy9mMmZzL25vZGUuYzoxNjY0Olx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKGlub2RlLVx1MDAzZWlfbWFwcGluZywgMCxcbmZzL2YyZnMvbm9kZS5jLTE2NjUtXHRcdFx0XHRcdEZHUF9MT0NLfEZHUF9OT1dBSVQsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gZjJmc19maWxlbWFwX2dldF9mb2xpbyoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGYyZnNfZmlsZW1hcF9nZXRfZm9saW9gLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2YyZnMvZjJmcy5oYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBmb2xpby1iYXNlZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGYyZnMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyByb2xlIGluIG1hcHBpbmcgZmlsZSBkYXRhIHRvIGZvbGlvcywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGVmZmljaWVudCBJL08sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBGMkZTJiMzOTtzIGRlc2lnbiBmb3IgZmxhc2ggbWVtb3J5LiBJ4oCZbSB0aGlua2luZyBhYm91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgcGFnZSBjYWNoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIGZvbGlvIEFQSSwgYW5kIGhvdyBmMmZzIGhhbmRsZXMgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gYW5kIGFsbG9jYXRpb24gd2l0aGluIGl0cyBibG9jay1vcmllbnRlZCBzdHJ1Y3R1cmUuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgbG9ja2luZyBzZW1hbnRpY3MgaW52b2x2ZWQsIGFuZCBob3cgdGhhdCBpbXBhY3RzIGNvbmN1cnJlbmN5LiBMZXQmIzM5O3Mgc2VlIGhvdyBgZjJmc19maWxlbWFwX2dldF9mb2xpb2AgaGFuZGxlcyB0aGUgZGV0YWlscywgc3VjaCBhcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZjJmcy9mMmZzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwNzU6XHRcbjMwNzY6XHRcdHJldHVybiBmb2xpbztcbjMwNzc6XHR9XG4zMDc4Olx0XG4zMDc5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmYyZnNfZmlsZW1hcF9nZXRfZm9saW8oXG4zMDgwOlx0XHRcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCxcbjMwODE6XHRcdFx0XHRcdGZnZl90IGZncF9mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXG4zMDgyOlx0e1xuMzA4MzpcdFx0aWYgKHRpbWVfdG9faW5qZWN0KEYyRlNfTV9TQihtYXBwaW5nKSwgRkFVTFRfUEFHRV9HRVQpKVxuMzA4NDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjMwODU6XHRcbjMwODY6XHRcdHJldHVybiBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsIGdmcF9tYXNrKTtcbjMwODc6XHR9XG4zMDg4Olx0XG4zMDg5Olx0c3RhdGljIGlubGluZSB2b2lkIGYyZnNfZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgdW5sb2NrKVxuMzA5MDpcdHtcbjMwOTE6XHRcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4zMDkyOlx0XHRcdHJldHVybjtcbjMwOTM6XHRcbjMwOTQ6XHRcdGlmICh1bmxvY2spIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBGMkZTIENvbXBpbGF0aW9uIElzc3VlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBmZWVscyBvZmYuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzLiBJIHdhcyBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgYW5kIG5vdGljZWQgc29tZSBjaGFuZ2VzIHRvIHRoZSBgZmdmX3RgIGZsYWdzLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGBGR1BfTk9GU2AuIExldCBtZSBxdWlja2x5IGNvbXBhcmUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXI6CgpgYGBjCi0jZGVmaW5lIEZHUF9OT0ZTCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMCkKLSNkZWZpbmUgRkdQX05PV0FJVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMjApCi0jZGVmaW5lIEZHUF9GT1JfTU1BUAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApCi0jZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKQotI2RlZmluZSBGR1BfRE9OVENBQ0hFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMCkKJiM0MzsjZGVmaW5lIEZHUF9OT1dBSVQJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKQomIzQzOyNkZWZpbmUgRkdQX0ZPUl9NTUFQCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMCkKJiM0MzsjZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKQomIzQzOyNkZWZpbmUgRkdQX0RPTlRDQUNIRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApCmBgYAoKTm93LCB0aGUgY29uY2VybiBpcyB0aGF0IGlmIGEgZmlsZSBsaWtlIGBmMmZzL2RhdGEuY2AgKndhc24mIzM5O3QqIHVwZGF0ZWQgd2l0aCB0aGlzIHBhdGNoLCB0aGVyZSBjb3VsZCBiZSBhIGNvbXBpbGF0aW9uIGlzc3VlLiBNYXliZSBpdCYjMzk7cyBhIGNvbmZsaWN0IG9yIHRoZXJlJiMzOTtzIGluLXRyZWUgY29kZSB0aGF0IHN0aWxsIHJlbGllcyBvbiBgRkdQX05PRlNgIGJ1dCBpc24mIzM5O3QgZGVmaW5lZCBhbnltb3JlLiBEb2VzIHRoaXMgY29kZSBzdGlsbCBjb21waWxlPyBUaGlzIGlzIGEgcHJvYmxlbSEgTGV0IG1lIGRvdWJsZS1jaGVjayBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVwLCBgRkdQX05PRlNgIGlzIGdvbmUuIEJ1dCB3YWl0LCBJJiMzOTttIHN1cmUgSSBzYXcgYEZHUF9OT0ZTYCBpbiBgZnMvZjJmcy9kYXRhLmM6MzkwM2Agd2hlbiBJIHJhbiBgZ3JlcHBlcmAgdGhlIG90aGVyIGRheT8KClRoaXMgZG9lc24mIzM5O3QgbWFrZSBhbnkgc2Vuc2UuIFdoeSB3b3VsZCBgZ3JlcHBlcmAgcGljayB0aGF0IHVwPyBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBmcy9mMmZzL2RhdGEuY2AgaXMgYWN0dWFsbHkgdXNpbmcgYEZHUF9OT0ZTYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZjJmcy9kYXRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5MDA6XHRcdCAqIFdpbGwgd2FpdCB0aGF0IGJlbG93IHdpdGggb3VyIElPIGNvbnRyb2wuXG4zOTAxOlx0XHQgKi9cbjM5MDI6XHRcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbjM5MDM6XHRcdFx0XHRcdEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMsXG4zOTA0Olx0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbjM5MDU6XHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4zOTA2Olx0XHRcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xuMzkwNzpcdFx0XHRnb3RvIGZhaWw7XG4zOTA4Olx0XHR9XG4zOTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgZXhwZXJpZW5jaW5nIGl0OgoKKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgRjJGUyBDb21waWxhdGlvbiBGbGFnIElzc3VlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoZSBzeXN0ZW0mIzM5O3MgdGVsbGluZyBtZSBgRkdQX05PRlNgIGlzIHVuZGVmaW5lZCB3aGVuIHdlJiMzOTtyZSBjb21waWxpbmcgZm9yIEYyRlMuIFRoYXQmIzM5O3MuLi4gdW5leHBlY3RlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHNlZW1zIG9mZiDigJMgdGhpcyBzaG91bGQgYmUgZGVmaW5lZCBhcyBhIGNvbnNlcXVlbmNlIG9mIEYyRlMgY29tcGlsYXRpb24uIEkmIzM5O20gZ2V0dGluZyBhIGJhZCBmZWVsaW5nIGFib3V0IHRoaXMsIGlmIGBGR1BfTk9GU2AgaXMgdW5kZWZpbmVkIHRoZW4gdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGhlcmUuIFRoZSBkZWZpbml0aW9uIGlzIGNsZWFybHkgdXNlZCBkdXJpbmcgRjJGUyBjb21waWxhdGlvbi4KCldhaXQgYSBtaW51dGUsIGJlZm9yZSBJIHN0YXJ0IHJpcHBpbmcgdGhpbmdzIGFwYXJ0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhpcyBpc24mIzM5O3QgZGVmaW5lZCAqc29tZXdoZXJlKiBlbHNlIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0aGF0IEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHRoaW5raW5nIG9mLiBMZXQmIzM5O3MgdHJhY2UgaXQgYW5kIHZlcmlmeSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgZGVmaW5lZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNydWNpYWwgaW5jbHVkZSBvciBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCYjMzk7cyBvdmVycmlkaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gSSBuZWVkIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBjb21waWxlciBkaXJlY3RpdmVzLiBHb3R0YSBiZSB0aG9yb3VnaC4gVGhlcmUmIzM5O3MgcHJvYmFibHkgYSBsb2dpY2FsIGV4cGxhbmF0aW9uIGhlcmU7IGl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2YgZmluZGluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lXFxzJiM0MztGR1BfTk9GUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTY0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjc1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGBGR1BfTk9GU2AgaXMgdW5kZWZpbmVkLCB0aGF0JiMzOTtzIHdlaXJkLiAgTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29udGV4dC4gIEl0IHRvdWNoZXMgYSBidW5jaCBvZiBwbGFjZXM6IGBlcm9mc2AsIGBleHQ0YCwgYG5mc2AsIGBudGZzYCwgYHNxdWFzaGZzYCwgcGx1cyBzb21lIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgY2FjaGUgaGVhZGVycy4gIElzIHRoaXMganVzdCByZWZhY3RvcmluZywgb3IgaXMgdGhlcmUgZnVuY3Rpb25hbCBzdHVmZiBoZXJlIHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byBmb2xsb3cgdGhlIHJ1bGVzLCB0aG91Z2g6CgpUaGUgcHJvbXB0IHJlbWluZHMgbWUgYWJvdXQgdGhlIGNyaXRlcmlhLCBhbmQgSSBuZWVkIHRvIGJlICpyZWFsbHkqIGNhcmVmdWwuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0JiMzOTtzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IG9ubHkgY29udGFpbnMgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgaG93IHRoaW5ncyB3b3JrLCB1bnJlYWNoYWJsZSBjb2RlLCBvciB0ZWFyZG93biBjYWxsYmFja3MuICBJdCYjMzk7cyBgV29ydGhGdXp6aW5nPXRydWVgIGlmIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLgoKSG1tLCB0aGlzICpkb2VzKiBtb2RpZnkgY29yZSBrZXJuZWwgbG9naWMuIEkgc2VlIGNoYW5nZXMgaW4gYG1tL2ZpbGVtYXAuY2AsIGFuZCBpbiBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLiBJJiMzOTttIHJlbW92aW5nIHRoZSBgRkdQX05PRlNgIGFuZCBjaGFuZ2luZyBob3cgdGhlIGBHRlBgIGZsYWdzIGFyZSBoYW5kbGVkLiBJIHNlZSBtYWNyb3MgYmVpbmcgc2hpZnRlZCBpbiB2YWx1ZXMuIEluIHNxdWFzaGZzLCBpdCBsb29rcyBsaWtlIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgYW5kIGBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKWAgYXJlIGJlaW5nIGFkZGVkLiBUaGlzIGxvb2tzIGxpa2UgaXQmIzM5O3MgY2hhbmdpbmcgaG93IG1lbW9yeSBhbGxvY2F0aW9uIGlzIHNjb3BlZCBhbmQgdGhlIGJlaGF2aW9yIG9mIEdGUCBmbGFncy4gSXQmIzM5O3MgbW9kaWZ5aW5nIG1lbW9yeSBhbGxvY2F0aW9uISBTbywgaXMgdGhpcyAqanVzdCogaW50ZXJuYWwgY2xlYW51cCwgb3IgaXMgaXQgZnVuZGFtZW50YWxseSBhbHRlcmluZyBleGVjdXRpb24gZmxvdz8KCkxldCYjMzk7cyBicmVhayBpdCBkb3duOiBJcyB0aGlzIHBhdGNoIGFsdGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGluIHBsYWNlcyBsaWtlIGBudGZzX3dvZl9jb2xsZWN0X2Rlc3RgLCBvciBpbnRyb2R1Y2luZyBgbWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmVgIGluIGEga2V5IGZ1bmN0aW9uIGxpa2UgYHNxdWFzaGZzX2NvcHlfY2FjaGVgPyBBYnNvbHV0ZWx5ISBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6IGJlY2F1c2UgdGhpcyBpcyByZWFjaGFibGUuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgbm9uZSBvZiB0aGUgNiBleGNsdXNpb24gY2F0ZWdvcmllcy4gMS4gTm8sIGl0JiMzOTtzIG1vZGlmeWluZyBDIGNvZGUuIDIuIE5vLCBub3QganVzdCBsb2dnaW5nLiAzLiBObywgbm90IGp1c3QgbWFjcm9zOiBJJiMzOTttIGVsaW1pbmF0aW5nIGBGR1BfTk9GU2AgaW4gbWVtb3J5IGFsbG9jYXRpb24gQVBJcywgaXQmIzM5O3MgbW9yZSB0aGFuIGEgY29uc3RhbnQgY2hhbmdlLiA0LiBObywgdGhpcyBjb2RlICppcyogcmVhY2hhYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudC4gNS4gTm9wZSwgbm90IFBDSS9HUFUvU21hcnROSUMgZHJpdmVycy4gNi4gTm9wZSwgbm90IHRlYXJkb3duIGNhbGxiYWNrcy4KCk9rYXksIGxldCYjMzk7cyBwbGF5IGRldmlsJiMzOTtzIGFkdm9jYXRlOiBJcyB0aGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIHRvIGNsZWFuIHVwIHRoZSBgRkdQX05PRlNgIGZsYWcgYWNyb3NzIHBhZ2VjYWNoZSBhbmQgY2FsbGVycywgcmVwbGFjaW5nIGl0IHdpdGggc2NvcGVkIGFsbG9jYXRvcnMsIGFuZCBub3QgcmVhbGx5IGNoYW5naW5nIGhvdyB0aGUga2VybmVsIHdvcmtzPyBPciBpcyBpdCBhIGZ1bmRhbWVudGFsIG1vZGlmaWNhdGlvbiB0byBwYWdlIGNhY2hlIGZvbGlvIGZsYWdzLCBhbmQgcmVjbGFpbT8KCkxvb2tpbmcgYXQgaXQgY2xvc2VseSwgdGhpcyBpc24mIzM5O3QganVzdCBhYm91dCByZW1vdmluZyB0aGUgZmxhZzsgaXQmIzM5O3MgYWJvdXQgYWx0ZXJpbmcgaG93IEdGUCBmbGFncyBhbmQgYWxsb2NhdGlvbiBzY29wZXMgd29yayB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAqYW5kKiB0aGUgZmlsZXN5c3RlbXMgdGhhdCB1c2UgaXQuIEluIGBudGZzX3dvZl9jb2xsZWN0X2Rlc3RgLCBub3cgd2UmIzM5O3JlIHVzaW5nIHRoZSBgbWFwcGluZ19nZnBfbWFzaygpYCBhcmd1bWVudCwgaW5zdGVhZCBvZiBgR0ZQX05PRlNgLiBJbiBzcXVhc2hmcywgdGhlIGNvZGUgaXMgdXNpbmcgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBhbmQgYG1lbWFsbG9jX25vZnNfcmVzdG9yZSgpYCBub3cuIFRoZSB2YWx1ZXMgb2YgZmxhZ3MgbGlrZSBgRkdQX05PV0FJVGAgaGF2ZSBjaGFuZ2VkIQoKVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpb24gaXMgc3RyaWN0OiBpZiBJIG1vZGlmeSBjb3JlIGxvZ2ljLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nISBTcGVjaWZpY2FsbHksIGlmIEkgbW9kaWZ5IE1NIGNvZGUgYW5kIEZpbGVzeXN0ZW0gY29kZSwgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gUmVjbGFpbSBiZWhhdmlvciBpcyBjaGFuZ2luZywgYW5kIHRoYXQmIzM5O3MgY3JpdGljYWwgaW4gbG9ja2RlcCBhbmQgZGVhZGxvY2sgcHJldmVudGlvbi4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSBjb25maWcgc3ltYm9scy4gYEVST0ZTX0ZTYCwgYEVYVDRfRlNgLCBgTkZTX0ZTYCwgYE5URlNfRlNgLCBgU1FVQVNIRlNgIGFyZSByZWxldmFudC4gVGhlbiwgdGhlIGNvcmUgTU0gY29kZSBpcyBhbHdheXMgZW5hYmxlZCBvciBhIHN0YW5kYXJkIGNvbmZpZy4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIGJ1dCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgSSBoYXZlIG15IGFuc3dlciEKClRoaXMgY2xlYXJseSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGluY2x1ZGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMuIEl0JiMzOTtzIG5vdCAqanVzdCogY29zbWV0aWMgb3IgdW5yZWFjaGFibGUgY29kZS4gSXQmIzM5O3MgYWJvdXQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIHJlY2xhaW1lZCwgYW5kIHRoYXQgKmFic29sdXRlbHkqIG1ha2VzIHRoaXMgd29ydGggZnV6emluZywgcGFydGljdWxhcmx5IHdpdGggbG9ja2RlcCBhbmQgbWVtb3J5IHByZXNzdXJlLiBUaGVyZWZvcmUsIFdvcnRoRnV6emluZz10cnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVJPRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9lcm9mcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9lcm9mcy9LY29uZmlnLTItXG5mcy9lcm9mcy9LY29uZmlnOjM6Y29uZmlnIEVST0ZTX0ZTXG5mcy9lcm9mcy9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTQ5LVxuZnMvZXJvZnMvS2NvbmZpZzo1MDpjb25maWcgRVJPRlNfRlNfREVCVUdcbmZzL2Vyb2ZzL0tjb25maWctNTEtXHRib29sIFwmIzM0O0VST0ZTIGRlYnVnZ2luZyBmZWF0dXJlXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy01OS1cbmZzL2Vyb2ZzL0tjb25maWc6NjA6Y29uZmlnIEVST0ZTX0ZTX1hBVFRSXG5mcy9lcm9mcy9LY29uZmlnLTYxLVx0Ym9vbCBcJiMzNDtFUk9GUyBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy03MC1cbmZzL2Vyb2ZzL0tjb25maWc6NzE6Y29uZmlnIEVST0ZTX0ZTX1BPU0lYX0FDTFxuZnMvZXJvZnMvS2NvbmZpZy03Mi1cdGJvb2wgXCYjMzQ7RVJPRlMgQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTg0LVxuZnMvZXJvZnMvS2NvbmZpZzo4NTpjb25maWcgRVJPRlNfRlNfU0VDVVJJVFlcbmZzL2Vyb2ZzL0tjb25maWctODYtXHRib29sIFwmIzM0O0VST0ZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOTctXG5mcy9lcm9mcy9LY29uZmlnOjk4OmNvbmZpZyBFUk9GU19GU19CQUNLRURfQllfRklMRVxuZnMvZXJvZnMvS2NvbmZpZy05OS1cdGJvb2wgXCYjMzQ7RmlsZS1iYWNrZWQgRVJPRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMTEtXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXG5mcy9lcm9mcy9LY29uZmlnLTExMy1cdGJvb2wgXCYjMzQ7RVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXG5mcy9lcm9mcy9LY29uZmlnOjEyMjpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFcbmZzL2Vyb2ZzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtFUk9GUyBMWk1BIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xMzMtXG5mcy9lcm9mcy9LY29uZmlnOjEzNDpjb25maWcgRVJPRlNfRlNfWklQX0xaTUFfREVGQVVMVF9NQVhfU1RSRUFNU1xuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXHRpbnQgXCYjMzQ7RVJPRlMgTFpNQSBkZWZhdWx0IG1heGltdW0gZGVjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7IGlmIFNNUFxuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTUwLVxuZnMvZXJvZnMvS2NvbmZpZzoxNTE6Y29uZmlnIEVST0ZTX0ZTX1pJUF9ERUZMQVRFXG5mcy9lcm9mcy9LY29uZmlnLTE1Mi1cdGJvb2wgXCYjMzQ7RVJPRlMgREVGTEFURSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTYxLVxuZnMvZXJvZnMvS2NvbmZpZzoxNjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9aU1REXG5mcy9lcm9mcy9LY29uZmlnLTE2My1cdGJvb2wgXCYjMzQ7RVJPRlMgWnN0YW5kYXJkIGNvbXByZXNzZWQgZGF0YSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xNzItXG5mcy9lcm9mcy9LY29uZmlnOjE3Mzpjb25maWcgRVJPRlNfRlNfWklQX0FDQ0VMXG5mcy9lcm9mcy9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7RVJPRlMgaGFyZHdhcmUgZGVjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXJvZnMvS2NvbmZpZy0xODYtXG5mcy9lcm9mcy9LY29uZmlnOjE4Nzpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEXG5mcy9lcm9mcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7RVJPRlMgcGVyLWNwdSBkZWNvbXByZXNzaW9uIGt0aHJlYWQgd29ya2Vyc1wmIzM0O1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctMTk1LVxuZnMvZXJvZnMvS2NvbmZpZzoxOTY6Y29uZmlnIEVST0ZTX0ZTX1BDUFVfS1RIUkVBRF9ISVBSSVxuZnMvZXJvZnMvS2NvbmZpZy0xOTctXHRib29sIFwmIzM0O0VST0ZTIGhpZ2ggcHJpb3JpdHkgcGVyLUNQVSBrdGhyZWFkIHdvcmtlcnNcJiMzNDtcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTIwNS1cbmZzL2Vyb2ZzL0tjb25maWc6MjA2OmNvbmZpZyBFUk9GU19GU19QQUdFX0NBQ0hFX1NIQVJFXG5mcy9lcm9mcy9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7RVJPRlMgcGFnZSBjYWNoZSBzaGFyZSBzdXBwb3J0IChleHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjA3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCBpbiBgZnMvZXJvZnMvaW50ZXJuYWwuaGAqKgoKUmlnaHQsIHNvIHRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHVzYWdlIG9mIGBlcm9mc19ncmFiX2ZvbGlvX25vd2FpdGAgd2l0aGluIHRoZSBFUk9GUyBmaWxlc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgbG9jYXRlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoZSBgZnMvZXJvZnMvaW50ZXJuYWwuaGAgaGVhZGVyIGZpbGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBlcm9mc19ncmFiX2ZvbGlvX25vd2FpdGAgYWN0dWFsbHkgKmRvZXMqLiBJcyBpdCBpbnZvbHZlZCBpbiBjYWNoZSBtYW5hZ2VtZW50LCBwZXJoYXBzPyBPciBtYXliZSBpdCYjMzk7cyByZWxhdGVkIHRvIG1ldGFkYXRhIGhhbmRsaW5nPwoKT25jZSBJJiMzOTt2ZSBnb3QgdGhhdCBzdHJhaWdodCBpbiBteSBoZWFkLCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGEgY3JpdGljYWwgYXNwZWN0IG9mIHVuZGVyc3RhbmRpbmcgYW55IGZ1bmN0aW9uOiBpdHMgdXNlIGNhc2VzLiBUaGVyZWZvcmUsIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb2RlIGNhbGxzIGBlcm9mc19ncmFiX2ZvbGlvX25vd2FpdGAuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIHRoZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBjb2RlIHRoYXQgbWFrZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3RoZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgb25lLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgRVJPRlMgb3BlcmF0aW9ucyB0aGF0IGhlYXZpbHkgcmVseSBvbiBpdD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXJvZnMvaW50ZXJuYWwuaD0zMjA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZXJvZnNfaW5vZGVfZGF0YWxheW91dCh1bnNpZ25lZCBpbnQgaWZtdClcbi0tXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTMyNS0vKiByZWNsYWltaW5nIGlzIG5ldmVyIHRyaWdnZXJlZCB3aGVuIGFsbG9jYXRpbmcgbmV3IGZvbGlvcy4gKi9cbmZzL2Vyb2ZzL2ludGVybmFsLmg6MzI2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICplcm9mc19ncmFiX2ZvbGlvX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXMsXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTMyNy1cdFx0XHRcdFx0XHQgICAgcGdvZmZfdCBpbmRleClcbi0tXG5mcy9lcm9mcy96ZGF0YS5jPTE4MTQ9c3RhdGljIHZvaWQgel9lcm9mc19wY2x1c3Rlcl9yZWFkbW9yZShzdHJ1Y3Qgel9lcm9mc19mcm9udGVuZCAqZixcbi0tXG5mcy9lcm9mcy96ZGF0YS5jLTE4NTAtXG5mcy9lcm9mcy96ZGF0YS5jOjE4NTE6XHRcdGZvbGlvID0gZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXQoZi1cdTAwM2VzaGFyZWRpbm9kZS1cdTAwM2VpX21hcHBpbmcsIGluZGV4KTtcbmZzL2Vyb2ZzL3pkYXRhLmMtMTg1Mi1cdFx0aWYgKCFJU19FUlJfT1JfTlVMTChmb2xpbykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3OTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEVST0ZTIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBgel9lcm9mc19wY2x1c3Rlcl9yZWFkbW9yZWAgaXMgb25seSByZWxldmFudCB3aGVuIEVST0ZTIGlzIGNvbmZpZ3VyZWQgd2l0aCBlaXRoZXIgYEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVgIG9yIGBFUk9GU19GU19aSVBgLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhbmQgaXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gbG9vayB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBhbmQgaW1wYWN0LiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIEVST0ZTIGFuZCBpdHMgb3B0aW1pemF0aW9ucywgdGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIG5vdyBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZHVsZSBpcyBhY3R1YWxseSBkb2luZy4KClRvIGdldCBhIGJldHRlciBpZGVhIG9mIGhvdyBFUk9GUyBpcyBjb25maWd1cmVkLCBhbmQgd2hldGhlciBpdCBjb3VsZCBwcm92aWRlIGFueSBpbmZvcm1hdGlvbiwgaXQgbG9va3MgbGlrZSBjaGVja2luZyB0aGUgTlRGUyBjb25maWdzIGluIHRoZSBmaWxlIHN5c3RlbSB3b3VsZCBiZSBhIHVzZWZ1bCBzdGVwIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0LiBUaGVyZWZvcmUsIEkgd2lsbCBub3cgZ28gYW5kIGNoZWNrIHRoZSBgZnMvbnRmcy9NYWtlZmlsZWAgYW5kIGBmcy9udGZzL0tjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgTlRGUyBjb25maWd1cmF0aW9ucywgYW5kIHBvc3NpYmx5IHJldmVhbCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVtcGxveWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xuZnMvbnRmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9udGZzL0tjb25maWctMTItXG5mcy9udGZzL0tjb25maWc6MTM6Y29uZmlnIE5URlNfRlNfV09GX0NPTVBSRVNTSU9OXG5mcy9udGZzL0tjb25maWctMTQtXHRib29sIFwmIzM0O05URlMgV2luZG93cyBzeXN0ZW0gY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0yMy1cbmZzL250ZnMvS2NvbmZpZzoyNDpjb25maWcgTlRGU19ERUJVR1xuZnMvbnRmcy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTQ1LVxuZnMvbnRmcy9LY29uZmlnOjQ2OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqUXVpY2sgTlRGUyBDb25maWd1cmF0aW9uIFNjYW4qKgoKUmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRvcCBvZiB0aGUgTlRGUyBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgTlRGU19GU19XT0ZfQ09NUFJFU1NJT05gLiBUaGF0IG9uZSBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdyaXRlLW9uY2UsIGZpbGUtc3lzdGVtLWJhc2VkIGNvbXByZXNzaW9uIGlzIGhhbmRsZWQuIEFuZCBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgYE5URlNfRlNfUldgIGlzIHN0aWxsIGFyb3VuZCwgb3IgaWYgaXQmIzM5O3MgYmVlbiBzdXBlcnNlZGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBCZXN0IHRvIGp1c3QganVtcCBpbnRvIGBmcy9udGZzL0tjb25maWdgIGFuZCB2ZXJpZnkuIE5vdGhpbmcgd29yc2UgdGhhbiBtYWtpbmcgYXNzdW1wdGlvbnMgd2hlbiBhIHF1aWNrIEtjb25maWcgY2hlY2sgd2lsbCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxuICAgODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDExOlx0XHQgIG50ZnMuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5URlNfRlNfV09GX0NPTVBSRVNTSU9OXG4gIDE0Olx0XHRib29sIFwmIzM0O05URlMgV2luZG93cyBzeXN0ZW0gY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIEVuYWJsZSByZWFkIHN1cHBvcnQgZm9yIFdpbmRvd3Mgc3lzdGVtLWNvbXByZXNzZWQgZmlsZXMuXG4gIDE4Olx0XHQgIFdpbmRvd3MgbW9yZSBhZ2dyZXNzaXZlbHkgY29tcHJlc3NlcyBzeXN0ZW0gZmlsZXMgc3VjaCBhcyBiaW5hcmllc1xuICAxOTpcdFx0ICBhbmQgRExMcyB1c2luZyBzeXN0ZW0gY29tcHJlc3Npb24uIEl0IGlzIG9wdGltaXplZCBmb3IgZmlsZXMgdGhhdFxuICAyMDpcdFx0ICBhcmUgcmFyZWx5IG1vZGlmaWVkLlxuICAyMTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBidWlsZHMgdGhlIGRlY29tcHJlc3Npb24gc3VwcG9ydCBpbnRvIHRoZSBOVEZTXG4gIDIyOlx0XHQgIG1vZHVsZS5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTlRGU19ERUJVR1xuICAyNTpcdFx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4gIDI2Olx0XHRkZXBlbmRzIG9uIE5URlNfRlNcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxuICAyOTpcdFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXG4gIDMwOlx0XHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cbiAgMzE6XHRcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXG4gIDMyOlx0XHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXG4gIDMzOlx0XHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxuICAzNDpcdFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXG4gIDM1Olx0XHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XG4gIDM2Olx0XHQgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcbiAgMzc6XHRcdCAgUmVwbGFjaW5nIHRoZSBcJiMzNDsxXCYjMzQ7IHdpdGggXCYjMzQ7MFwmIzM0OyB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxuICAzODpcdFxuICAzOTpcdFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXG4gIDQwOlx0XHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XG4gIDQxOlx0XHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcbiAgNDQ6XHRcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbiAgNDc6XHRcdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDQ5Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDUwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjkzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqU3F1YXNoRlMgQ29uZmlndXJhdGlvbiBIdW50KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc29ydGVkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIFNxdWFzaEZTIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZCBpbiB0aGUgc3lzdGVtLiBUaGUgYGZzL3NxdWFzaGZzL0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhvc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gc3BvdCBmb3IgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyIHdpdGhpbiB0aGUgYnJvYWRlciBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhvc2UgY29uZmlncyB0aG9yb3VnaGx5IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1FVQVNIRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zcXVhc2hmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zcXVhc2hmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zcXVhc2hmcy9LY29uZmlnOjI6Y29uZmlnIFNRVUFTSEZTXG5mcy9zcXVhc2hmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTcXVhc2hGUyA0LjAgLSBTcXVhc2hlZCBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZz0yOT1jaG9pY2Vcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTQwLVxuZnMvc3F1YXNoZnMvS2NvbmZpZzo0MTpjb25maWcgU1FVQVNIRlNfRklMRV9DQUNIRVxuZnMvc3F1YXNoZnMvS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7RGVjb21wcmVzcyBmaWxlIGRhdGEgaW50byBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy00Ni1cbmZzL3NxdWFzaGZzL0tjb25maWc6NDc6Y29uZmlnIFNRVUFTSEZTX0ZJTEVfRElSRUNUXG5mcy9zcXVhc2hmcy9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEZWNvbXByZXNzIGZpbGVzIGRpcmVjdGx5IGludG8gdGhlIHBhZ2UgY2FjaGVcJiMzNDtcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnPTU1PWVuZGNob2ljZVxuZnMvc3F1YXNoZnMvS2NvbmZpZy01Ni1cbmZzL3NxdWFzaGZzL0tjb25maWc6NTc6Y29uZmlnIFNRVUFTSEZTX0RFQ09NUF9TSU5HTEVcbmZzL3NxdWFzaGZzL0tjb25maWctNTgtXHRkZXBlbmRzIG9uIFNRVUFTSEZTXG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy02MC1cbmZzL3NxdWFzaGZzL0tjb25maWc6NjE6Y29uZmlnIFNRVUFTSEZTX0RFQ09NUF9NVUxUSVxuZnMvc3F1YXNoZnMvS2NvbmZpZy02Mi1cdGRlcGVuZHMgb24gU1FVQVNIRlNcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTY0LVxuZnMvc3F1YXNoZnMvS2NvbmZpZzo2NTpjb25maWcgU1FVQVNIRlNfREVDT01QX01VTFRJX1BFUkNQVVxuZnMvc3F1YXNoZnMvS2NvbmZpZy02Ni1cdGRlcGVuZHMgb24gU1FVQVNIRlNcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTY4LVxuZnMvc3F1YXNoZnMvS2NvbmZpZzo2OTpjb25maWcgU1FVQVNIRlNfQ0hPSUNFX0RFQ09NUF9CWV9NT1VOVFxuZnMvc3F1YXNoZnMvS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7U2VsZWN0IHRoZSBwYXJhbGxlbCBkZWNvbXByZXNzaW9uIG1vZGUgZHVyaW5nIG1vdW50XCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZz04Mj1jaG9pY2Vcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTkyLVxuZnMvc3F1YXNoZnMvS2NvbmZpZzo5Mzpjb25maWcgU1FVQVNIRlNfQ09NUElMRV9ERUNPTVBfU0lOR0xFXG5mcy9zcXVhc2hmcy9LY29uZmlnLTk0LVx0Ym9vbCBcJiMzNDtTaW5nbGUgdGhyZWFkZWQgY29tcHJlc3Npb25cJiMzNDtcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTEwMC1cbmZzL3NxdWFzaGZzL0tjb25maWc6MTAxOmNvbmZpZyBTUVVBU0hGU19DT01QSUxFX0RFQ09NUF9NVUxUSVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O1VzZSBtdWx0aXBsZSBkZWNvbXByZXNzb3JzIGZvciBwYXJhbGxlbCBJL09cJiMzNDtcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTExNS1cbmZzL3NxdWFzaGZzL0tjb25maWc6MTE2OmNvbmZpZyBTUVVBU0hGU19DT01QSUxFX0RFQ09NUF9NVUxUSV9QRVJDUFVcbmZzL3NxdWFzaGZzL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtVc2UgcGVyY3B1IG11bHRpcGxlIGRlY29tcHJlc3NvcnMgZm9yIHBhcmFsbGVsIEkvT1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWc9MTI3PWVuZGNob2ljZVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMjgtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjEyOTpjb25maWcgU1FVQVNIRlNfTU9VTlRfREVDT01QX1RIUkVBRFNcbmZzL3NxdWFzaGZzL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtBZGQgdGhlIG1vdW50IHBhcmFtZXRlciAmIzM5O3RocmVhZHM9JiMzOTsgZm9yIHNxdWFzaGZzXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNDEtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE0Mjpjb25maWcgU1FVQVNIRlNfWEFUVFJcbmZzL3NxdWFzaGZzL0tjb25maWctMTQzLVx0Ym9vbCBcJiMzNDtTcXVhc2hmcyBYQVRUUiBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNTEtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE1Mjpjb25maWcgU1FVQVNIRlNfQ09NUF9DQUNIRV9GVUxMXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIGZ1bGwgY2FjaGluZyBvZiBjb21wcmVzc2VkIGJsb2Nrc1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWctMTcyLVxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxNzM6Y29uZmlnIFNRVUFTSEZTX1pMSUJcbmZzL3NxdWFzaGZzL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIHN1cHBvcnQgZm9yIFpMSUIgY29tcHJlc3NlZCBmaWxlIHN5c3RlbXNcJiMzNDtcbi0tXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE4NS1cbmZzL3NxdWFzaGZzL0tjb25maWc6MTg2OmNvbmZpZyBTUVVBU0hGU19MWjRcbmZzL3NxdWFzaGZzL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIHN1cHBvcnQgZm9yIExaNCBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWctMjAwLVxuZnMvc3F1YXNoZnMvS2NvbmZpZzoyMDE6Y29uZmlnIFNRVUFTSEZTX0xaT1xuZnMvc3F1YXNoZnMvS2NvbmZpZy0yMDItXHRib29sIFwmIzM0O0luY2x1ZGUgc3VwcG9ydCBmb3IgTFpPIGNvbXByZXNzZWQgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yMTUtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjIxNjpjb25maWcgU1FVQVNIRlNfWFpcbmZzL3NxdWFzaGZzL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIHN1cHBvcnQgZm9yIFhaIGNvbXByZXNzZWQgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yMzAtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjIzMTpjb25maWcgU1FVQVNIRlNfWlNURFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yMzItXHRib29sIFwmIzM0O0luY2x1ZGUgc3VwcG9ydCBmb3IgWlNURCBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWctMjQ0LVxuZnMvc3F1YXNoZnMvS2NvbmZpZzoyNDU6Y29uZmlnIFNRVUFTSEZTXzRLX0RFVkJMS19TSVpFXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI0Ni1cdGJvb2wgXCYjMzQ7VXNlIDRLIGRldmljZSBibG9jayBzaXplP1wmIzM0O1xuLS1cbmZzL3NxdWFzaGZzL0tjb25maWctMjY2LVxuZnMvc3F1YXNoZnMvS2NvbmZpZzoyNjc6Y29uZmlnIFNRVUFTSEZTX0VNQkVEREVEXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI2OC1cdGJvb2wgXCYjMzQ7QWRkaXRpb25hbCBvcHRpb24gZm9yIG1lbW9yeS1jb25zdHJhaW5lZCBzeXN0ZW1zXCYjMzQ7XG4tLVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yNzQtXG5mcy9zcXVhc2hmcy9LY29uZmlnOjI3NTpjb25maWcgU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRVxuZnMvc3F1YXNoZnMvS2NvbmZpZy0yNzYtXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGZyYWdtZW50cyBjYWNoZWRcJiMzNDsgaWYgU1FVQVNIRlNfRU1CRURERURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5MzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhY3R1YWxseSBlbmFibGluZyB0aGUgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL3NxdWFzaGZzL2ZpbGUuY2AuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIEkmIzM5O20gY2hhc2luZyBkb3duIGhvdyBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgZXNwZWNpYWxseSBvbmUgcmVsYXRlZCB0byBmaWxlIGhhbmRsaW5nLCBpcyBjb250cm9sbGVkIGF0IGJ1aWxkIHRpbWUuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBzY2FuIHRocm91Z2ggdGhlIGNvZGUsIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMg4oCTIHRoZSBgI2lmZGVmYCBvciBzaW1pbGFyIGNvbnN0cnVjdHMg4oCTIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoZSBjb2RlIHV0aWxpemluZyBgc3F1YXNoZnNfY29weV9jYWNoZWAgaXMgYWN0dWFsbHkgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGtlcm5lbCBpbWFnZS4gVGltZSB0byBzZWUgd2hpY2ggY29uZmlnIG9wdGlvbnMgdWx0aW1hdGVseSBkZWNpZGUgaWYgdGhhdCBjb2RlIGdldHMgbGlua2VkIG9yIG5vdC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBtYXliZSBhIHNpbmdsZSBgQ09ORklHX1NRVUFTSEZTXypgIHZhcmlhYmxlLCBvciBwZXJoYXBzIGEgbW9yZSBpbnZvbHZlZCBkZXBlbmRlbmN5IGNoYWluLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcXVhc2hmc19jb3B5X2NhY2hlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc3F1YXNoZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3F1YXNoZnMvZmlsZS5jPTM3ND1zdGF0aWMgYm9vbCBzcXVhc2hmc19maWxsX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9zcXVhc2hmcy9maWxlLmMtMzkxLS8qIENvcHkgZGF0YSBpbnRvIHBhZ2UgY2FjaGUgICovXG5mcy9zcXVhc2hmcy9maWxlLmM6MzkyOnZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvc3F1YXNoZnMvZmlsZS5jLTM5My1cdFx0c3RydWN0IHNxdWFzaGZzX2NhY2hlX2VudHJ5ICpidWZmZXIsIHNpemVfdCBieXRlcyxcbi0tXG5mcy9zcXVhc2hmcy9maWxlLmM9NDM5PXN0YXRpYyBpbnQgc3F1YXNoZnNfcmVhZHBhZ2VfZnJhZ21lbnQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGV4cGVjdGVkKVxuLS1cbmZzL3NxdWFzaGZzL2ZpbGUuYy00NTEtXHRlbHNlXG5mcy9zcXVhc2hmcy9maWxlLmM6NDUyOlx0XHRzcXVhc2hmc19jb3B5X2NhY2hlKGZvbGlvLCBidWZmZXIsIGV4cGVjdGVkLFxuZnMvc3F1YXNoZnMvZmlsZS5jLTQ1My1cdFx0XHRzcXVhc2hmc19pKGlub2RlKS1cdTAwM2VmcmFnbWVudF9vZmZzZXQpO1xuLS1cbmZzL3NxdWFzaGZzL2ZpbGUuYz00NTk9c3RhdGljIGludCBzcXVhc2hmc19yZWFkcGFnZV9zcGFyc2Uoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGV4cGVjdGVkKVxuZnMvc3F1YXNoZnMvZmlsZS5jLTQ2MC17XG5mcy9zcXVhc2hmcy9maWxlLmM6NDYxOlx0c3F1YXNoZnNfY29weV9jYWNoZShmb2xpbywgTlVMTCwgZXhwZWN0ZWQsIDApO1xuZnMvc3F1YXNoZnMvZmlsZS5jLTQ2Mi1cdHJldHVybiAwO1xuLS1cbmZzL3NxdWFzaGZzL2ZpbGVfY2FjaGUuYz0yMT1pbnQgc3F1YXNoZnNfcmVhZHBhZ2VfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbywgdTY0IGJsb2NrLCBpbnQgYnNpemUsIGludCBleHBlY3RlZClcbi0tXG5mcy9zcXVhc2hmcy9maWxlX2NhY2hlLmMtMzEtXHRlbHNlXG5mcy9zcXVhc2hmcy9maWxlX2NhY2hlLmM6MzI6XHRcdHNxdWFzaGZzX2NvcHlfY2FjaGUoZm9saW8sIGJ1ZmZlciwgZXhwZWN0ZWQsIDApO1xuZnMvc3F1YXNoZnMvZmlsZV9jYWNoZS5jLTMzLVxuLS1cbmZzL3NxdWFzaGZzL3NxdWFzaGZzLmg9NzI9ZXh0ZXJuIF9fbGU2NCAqc3F1YXNoZnNfcmVhZF9mcmFnbWVudF9pbmRleF90YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKixcbi0tXG5mcy9zcXVhc2hmcy9zcXVhc2hmcy5oLTc1LS8qIGZpbGUuYyAqL1xuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaDo3Njp2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICosIHN0cnVjdCBzcXVhc2hmc19jYWNoZV9lbnRyeSAqLFxuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaC03Ny1cdFx0c2l6ZV90IGJ5dGVzLCBzaXplX3Qgb2Zmc2V0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4MDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGBmcy9zcXVhc2hmcy9NYWtlZmlsZWA6CgoqKkFuYWx5emluZyB0aGUgU3F1YXNoZnMgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9zcXVhc2hmcy9NYWtlZmlsZWAuIEdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiBmaWxlIHN5c3RlbXMgYW5kIGJ1aWxkIHByb2Nlc3NlcywgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB3aGF0IEkgZXhwZWN0IHRvIHNlZS4gSSBhbnRpY2lwYXRlIHRoaXMgTWFrZWZpbGUgd2lsbCBtYW5hZ2UgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIHRoZSBTcXVhc2hmcyBrZXJuZWwgbW9kdWxlLCBpdHMgdXRpbGl0aWVzLCBhbmQgcG90ZW50aWFsbHkgc29tZSB0ZXN0cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Iga2V5IGVsZW1lbnRzOiB0aGUgbW9kdWxlIG5hbWUgZGVmaW5pdGlvbiwgc291cmNlIGZpbGUgbGlzdHMsIG9iamVjdCBmaWxlIGdlbmVyYXRpb24sIGRlcGVuZGVuY3kgcnVsZXMsIGNvbXBpbGF0aW9uIGZsYWdzLCBsaW5rZXIgb3B0aW9ucywgaW5zdGFsbGF0aW9uIHRhcmdldHMsIGFuZCBhbnkgY3Jvc3MtY29tcGlsYXRpb24gY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbnkgY2xldmVyIHRyaWNrcyBvciBvcHRpbWl6YXRpb25zIHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGJ1aWxkIHN0cnVjdHVyZSwgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIG9yIHNwb3QgYW55IHVudXN1YWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBhbHNvIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgbWFrZSBydWxlcywgb3IgaGF2ZSB0aGV5IGludHJvZHVjZWQgY3VzdG9tIGxvZ2ljPyBGaW5hbGx5LCBJIG5lZWQgdG8gbm90ZSBhbnkgc3BlY2lmaWMgZmxhZ3Mgb3IgdGFyZ2V0cyB0aGF0IEkgY291bGQgdXRpbGl6ZSBmb3IgcXVpY2sgcmVidWlsZHMgb3IgdW5pdCB0ZXN0cyBpbiBteSBzcGVjaWZpYyB1c2UgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zcXVhc2hmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IHNxdWFzaGZzIHJvdXRpbmVzLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfU1FVQVNIRlMpICYjNDM7PSBzcXVhc2hmcy5vXG4gICA3Olx0c3F1YXNoZnMteSAmIzQzOz0gYmxvY2subyBjYWNoZS5vIGRpci5vIGV4cG9ydC5vIGZpbGUubyBmcmFnbWVudC5vIGlkLm8gaW5vZGUub1xuICAgODpcdHNxdWFzaGZzLXkgJiM0Mzs9IG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm8gZGVjb21wcmVzc29yLm8gcGFnZV9hY3Rvci5vXG4gICA5Olx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfRklMRV9DQUNIRSkgJiM0Mzs9IGZpbGVfY2FjaGUub1xuICAxMDpcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0ZJTEVfRElSRUNUKSAmIzQzOz0gZmlsZV9kaXJlY3Qub1xuICAxMTpcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9TSU5HTEUpICYjNDM7PSBkZWNvbXByZXNzb3Jfc2luZ2xlLm9cbiAgMTI6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19ERUNPTVBfTVVMVEkpICYjNDM7PSBkZWNvbXByZXNzb3JfbXVsdGkub1xuICAxMzpcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9NVUxUSV9QRVJDUFUpICYjNDM7PSBkZWNvbXByZXNzb3JfbXVsdGlfcGVyY3B1Lm9cbiAgMTQ6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19YQVRUUikgJiM0Mzs9IHhhdHRyLm8geGF0dHJfaWQub1xuICAxNTpcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0xaNCkgJiM0Mzs9IGx6NF93cmFwcGVyLm9cbiAgMTY6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19MWk8pICYjNDM7PSBsem9fd3JhcHBlci5vXG4gIDE3Olx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfWFopICYjNDM7PSB4el93cmFwcGVyLm9cbiAgMTg6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19aTElCKSAmIzQzOz0gemxpYl93cmFwcGVyLm9cbiAgMTk6XHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19aU1REKSAmIzQzOz0genN0ZF93cmFwcGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBGaWxlbWFwIGFuZCBGb2xpbyBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBmb2N1cyBzeW1ib2xzIGFuZCBob3cgdGhleSYjMzk7cmUgZGVjbGFyZWQgYW5kIGxpbmtlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY2hhbmdlcyBhbmQgdGhlaXIgaW1wYWN0IG9uIGNlcnRhaW4gZnVuY3Rpb25zLCBuYW1lbHkgYF9fZmlsZW1hcF9nZXRfZm9saW9gIGFuZCBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCByZXNpZGluZyBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGNoZWNrLiBJcyBgX19maWxlbWFwX2dldF9mb2xpb2AgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlY2xhcmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgZnVsbHkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYG1tL2ZpbGVtYXAuY2AgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19maWxlbWFwX2dldF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTg5OT12b2lkICpmaWxlbWFwX2dldF9lbnRyeShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleClcbi0tXG5tbS9maWxlbWFwLmMtMTkzMC0vKipcbm1tL2ZpbGVtYXAuYzoxOTMxOiAqIF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCAtIEZpbmQgYW5kIGdldCBhIHJlZmVyZW5jZSB0byBhIGZvbGlvLlxubW0vZmlsZW1hcC5jLTE5MzItICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzX3NwYWNlIHRvIHNlYXJjaC5cbi0tXG5tbS9maWxlbWFwLmMtMTk0Ni0gKi9cbm1tL2ZpbGVtYXAuYzoxOTQ3OnN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxubW0vZmlsZW1hcC5jLTE5NDgtXHRcdHBnb2ZmX3QgaW5kZXgsIGZnZl90IGZncF9mbGFncywgZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpXG4tLVxubW0vZmlsZW1hcC5jLTIwNzMtfVxubW0vZmlsZW1hcC5jOjIwNzQ6RVhQT1JUX1NZTUJPTChfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wpO1xubW0vZmlsZW1hcC5jLTIwNzUtXG4tLVxubW0vZmlsZW1hcC5jPTM1NTM9dm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2ZpbGVtYXAuYy0zNjA0LVx0XHR9XG5tbS9maWxlbWFwLmM6MzYwNTpcdFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxubW0vZmlsZW1hcC5jLTM2MDYtXHRcdFx0XHRcdCAgRkdQX0NSRUFUfEZHUF9GT1JfTU1BUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGaWxlIFN5c3RlbSBEYXRhIENvcnJ1cHRpb24gRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgZmlsZSBzeXN0ZW0gZGF0YSBjb3JydXB0aW9uIGNvdWxkIGNyZWVwIGluLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGZpbGUgc3lzdGVtcyB0aGF0IGhhbmRsZSBkYXRhIGRpcmVjdGx5LCBpbiBwYXJ0aWN1bGFyIGlubGluZSBkYXRhIGFuZCBjYWNoZSBtYW5hZ2VtZW50LiBJIHN0YXJ0IGJ5IG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZSBleHBvcnRlZCBzeW1ib2wgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAsIGFuZCB0aGUgaW5saW5lIHdyYXBwZXIgYF9fZmlsZW1hcF9nZXRfZm9saW9gIOKAkyB0aGVzZSBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgdmlzaWJsZSBleHRlcm5hbGx5LiBJIGtub3cgdGhvc2UgYXJlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAsIEkgd2FudCB0byBiZSBhd2FyZSBvZiBob3cgdGhleSYjMzk7cmUgdXNlZC4KCk5leHQsIEkgc2VlIGBzcXVhc2hmc19jb3B5X2NhY2hlYCBpbiBgZnMvc3F1YXNoZnMvZmlsZS5jYCBpcyBub24tc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIGV4dGVybmFsbHkgdmlzaWJsZSB3aXRoaW4gdGhhdCBtb2R1bGUuIFNhbWUgd2l0aCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBpbiBgZnMvZXh0NC9pbmxpbmUuY2AuIFRoZXNlIGp1bXAgb3V0IGFzIGZ1bmN0aW9ucyBJIHNob3VsZCBkZWZpbml0ZWx5IHNjcnV0aW5pemUuIEFueSBub24tc3RhdGljIGZ1bmN0aW9uIGNvdWxkIGhhdmUgaXRzIGRhdGEgbWFuaXB1bGF0ZWQgYnkgYW5vdGhlciBtb2R1bGUuCgpUaGVuLCB0aGVyZSYjMzk7cyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBJdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBleHRlcm5hbGx5IHZpc2libGUsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IG1lYW4gaXQmIzM5O3Mgc2FmZS4gSXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBub24tc3RhdGljIGVudHJ5IHBvaW50cyB3aXRoaW4gdGhlIGZpbGUsIG9yIGFueSBleHBvcnRlZCBzeW1ib2xzLCB0aGF0IG1pZ2h0IGNhbGwgaXQsIG9yIG90aGVyd2lzZSBleHBvc2UgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgZnMvZXh0NC9pbmxpbmUuY2AgYW5kIHNwZWNpZmljYWxseSB0cmFjZSB0aGUgY2FsbGVycyBvZiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gdHJpZ2dlciBpdCBmcm9tIG91dHNpZGUgaXRzIGZpbGUgc2NvcGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGFuYWx5c2lzIHRvIHVuY292ZXIgYW55IHN1YnRsZSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmM9NTQ0PWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTcwLVxuZnMvZXh0NC9pbmxpbmUuYzo1NzE6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy01NzItXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz02OTM9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTcyNC1cdFx0XHQvKiBSZXRyeSBpbnNpZGUgKi9cbmZzL2V4dDQvaW5saW5lLmM6NzI1Olx0XHRcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcbmZzL2V4dDQvaW5saW5lLmMtNzI2LVx0XHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz03ODA9aW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNzg1LVx0aWYgKHBvcyAmIzQzOyBsZW4gXHUwMDNlIGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jOjc4NjpcdFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xuZnMvZXh0NC9pbmxpbmUuYy03ODctXHRyZXR1cm4gZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUyMTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIElubGluZSBEYXRhIEhhbmRsaW5nKioKCk9rYXksIHNvIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGFgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIHRoZXkgY291bGQgcG90ZW50aWFsbHkgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGVpciBpbW1lZGlhdGUgc2NvcGUsIHdoaWNoIGlzIHJlbGV2YW50IGlmIHdlJiMzOTtyZSBpbnZlc3RpZ2F0aW5nIGhvdyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMgYXBwcm9hY2ggaW5saW5lIGRhdGEuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgb3Bwb3J0dW5pdGllcyB0byBjb25zb2xpZGF0ZSBvciBiZXR0ZXIgdW5kZXJzdGFuZCB0aGVzZSBpbXBsZW1lbnRhdGlvbnMuCgpUbyB0aGF0IGVuZCwgSSB0aGluayBhIGxvb2sgYXQgYG50ZnNfd29mX2NvbGxlY3RfZGVzdGAgaW4gYGZzL250ZnMvd29mLmNgIHdvdWxkIGJlIHdvcnRod2hpbGUuIFNlZWluZyBob3cgTlRGUyBoYW5kbGVzIGl0cyBXcml0ZS1Pbmx5LUZpbHRlciAoV09GKSBhbmQgaW5saW5lIGRhdGEgY291bGQgcmV2ZWFsIHBvdGVudGlhbCBpbnNpZ2h0cywgY29tcGFyaXNvbnMsIG9yIGV2ZW4gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIGludmVzdGlnYXRpb24uIEl0IG1pZ2h0IGlsbHVtaW5hdGUgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBtb2R1bGUgaGFzIHRvIG9mZmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX3dvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9udGZzLmg9MjA2PWludCBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG5mcy9udGZzL250ZnMuaDoyMDc6dm9pZCBudGZzX3dvZl9mcmVlX3dvcmtzcGFjZXModm9pZCk7XG5mcy9udGZzL250ZnMuaC0yMDgtI2VuZGlmXG4tLVxuZnMvbnRmcy9zdXBlci5jPTI2ODM9c3RhdGljIHZvaWQgX19leGl0IGV4aXRfbnRmc19mcyh2b2lkKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0yNjk0LSNpZmRlZiBDT05GSUdfTlRGU19GU19XT0ZfQ09NUFJFU1NJT05cbmZzL250ZnMvc3VwZXIuYzoyNjk1Olx0bnRmc193b2ZfZnJlZV93b3Jrc3BhY2VzKCk7XG5mcy9udGZzL3N1cGVyLmMtMjY5Ni0jZW5kaWZcbi0tXG5mcy9udGZzL3dvZi5jPTIzPXN0YXRpYyBjb25zdCBfX2xlMTYgV09GX05BTUVbXSA9IHtcbi0tXG5mcy9udGZzL3dvZi5jLTM3LVxuZnMvbnRmcy93b2YuYzozODpzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIHtcbmZzL250ZnMvd29mLmMtMzktXHRzdHJ1Y3QgbXV0ZXggKmxvY2s7XG4tLVxuZnMvbnRmcy93b2YuYy00Ny1cbmZzL250ZnMvd29mLmM6NDg6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl94cHJlc3M0a19sb2NrKTtcbmZzL250ZnMvd29mLmM6NDk6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl94cHJlc3M4a19sb2NrKTtcbmZzL250ZnMvd29mLmM6NTA6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl94cHJlc3MxNmtfbG9jayk7XG5mcy9udGZzL3dvZi5jOjUxOnN0YXRpYyBERUZJTkVfTVVURVgobnRmc193b2ZfbHp4MzJrX2xvY2spO1xuZnMvbnRmcy93b2YuYy01Mi1cbmZzL250ZnMvd29mLmM6NTM6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgbnRmc193b2ZfeHByZXNzNGtfd29ya3NwYWNlID0ge1xuZnMvbnRmcy93b2YuYzo1NDpcdC5sb2NrID0gXHUwMDI2bnRmc193b2ZfeHByZXNzNGtfbG9jayxcbmZzL250ZnMvd29mLmMtNTUtXHQuY29kZWMgPSBcdTAwMjZudGZzX3hwcmVzczRrX2NvZGVjX29wcyxcbi0tXG5mcy9udGZzL3dvZi5jLTU4LVxuZnMvbnRmcy93b2YuYzo1OTpzdGF0aWMgc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSBudGZzX3dvZl94cHJlc3M4a193b3Jrc3BhY2UgPSB7XG5mcy9udGZzL3dvZi5jOjYwOlx0LmxvY2sgPSBcdTAwMjZudGZzX3dvZl94cHJlc3M4a19sb2NrLFxuZnMvbnRmcy93b2YuYy02MS1cdC5jb2RlYyA9IFx1MDAyNm50ZnNfeHByZXNzOGtfY29kZWNfb3BzLFxuLS1cbmZzL250ZnMvd29mLmMtNjQtXG5mcy9udGZzL3dvZi5jOjY1OnN0YXRpYyBzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIG50ZnNfd29mX3hwcmVzczE2a193b3Jrc3BhY2UgPSB7XG5mcy9udGZzL3dvZi5jOjY2Olx0LmxvY2sgPSBcdTAwMjZudGZzX3dvZl94cHJlc3MxNmtfbG9jayxcbmZzL250ZnMvd29mLmMtNjctXHQuY29kZWMgPSBcdTAwMjZudGZzX3hwcmVzczE2a19jb2RlY19vcHMsXG4tLVxuZnMvbnRmcy93b2YuYy03MC1cbmZzL250ZnMvd29mLmM6NzE6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgbnRmc193b2ZfbHp4MzJrX3dvcmtzcGFjZSA9IHtcbmZzL250ZnMvd29mLmM6NzI6XHQubG9jayA9IFx1MDAyNm50ZnNfd29mX2x6eDMya19sb2NrLFxuZnMvbnRmcy93b2YuYy03My1cdC5jb2RlYyA9IFx1MDAyNm50ZnNfbHp4MzJrX2NvZGVjX29wcyxcbi0tXG5mcy9udGZzL3dvZi5jLTc2LVxuZnMvbnRmcy93b2YuYzo3NzpzdGF0aWMgc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqY29uc3QgbnRmc193b2Zfd29ya3NwYWNlc1tdID0ge1xuZnMvbnRmcy93b2YuYzo3ODpcdFx1MDAyNm50ZnNfd29mX3hwcmVzczRrX3dvcmtzcGFjZSxcbmZzL250ZnMvd29mLmM6Nzk6XHRcdTAwMjZudGZzX3dvZl94cHJlc3M4a193b3Jrc3BhY2UsXG5mcy9udGZzL3dvZi5jOjgwOlx0XHUwMDI2bnRmc193b2ZfeHByZXNzMTZrX3dvcmtzcGFjZSxcbmZzL250ZnMvd29mLmM6ODE6XHRcdTAwMjZudGZzX3dvZl9sengzMmtfd29ya3NwYWNlLFxuZnMvbnRmcy93b2YuYy04Mi19O1xuZnMvbnRmcy93b2YuYy04My1cbmZzL250ZnMvd29mLmM6ODQ6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKm50ZnNfd29mX3dvcmtzcGFjZSh1OCBibG9ja19zaXplX2JpdHMpXG5mcy9udGZzL3dvZi5jLTg1LXtcbi0tXG5mcy9udGZzL3dvZi5jLTg3LVx0Y2FzZSAxMjpcbmZzL250ZnMvd29mLmM6ODg6XHRcdHJldHVybiBcdTAwMjZudGZzX3dvZl94cHJlc3M0a193b3Jrc3BhY2U7XG5mcy9udGZzL3dvZi5jLTg5LVx0Y2FzZSAxMzpcbmZzL250ZnMvd29mLmM6OTA6XHRcdHJldHVybiBcdTAwMjZudGZzX3dvZl94cHJlc3M4a193b3Jrc3BhY2U7XG5mcy9udGZzL3dvZi5jLTkxLVx0Y2FzZSAxNDpcbmZzL250ZnMvd29mLmM6OTI6XHRcdHJldHVybiBcdTAwMjZudGZzX3dvZl94cHJlc3MxNmtfd29ya3NwYWNlO1xuZnMvbnRmcy93b2YuYy05My1cdGNhc2UgMTU6XG5mcy9udGZzL3dvZi5jOjk0Olx0XHRyZXR1cm4gXHUwMDI2bnRmc193b2ZfbHp4MzJrX3dvcmtzcGFjZTtcbmZzL250ZnMvd29mLmMtOTUtXHRkZWZhdWx0OlxuLS1cbmZzL250ZnMvd29mLmMtOTktXG5mcy9udGZzL3dvZi5jOjEwMDpzdGF0aWMgaW50IG50ZnNfd29mX3dvcmtzcGFjZV9wcmVwYXJlKHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKndzKVxuZnMvbnRmcy93b2YuYy0xMDEte1xuLS1cbmZzL250ZnMvd29mLmMtMTI4LVxuZnMvbnRmcy93b2YuYzoxMjk6dm9pZCBudGZzX3dvZl9mcmVlX3dvcmtzcGFjZXModm9pZClcbmZzL250ZnMvd29mLmMtMTMwLXtcbi0tXG5mcy9udGZzL3dvZi5jLTEzMi1cbmZzL250ZnMvd29mLmM6MTMzOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShudGZzX3dvZl93b3Jrc3BhY2VzKTsgaSYjNDM7JiM0MzspIHtcbmZzL250ZnMvd29mLmM6MTM0Olx0XHRzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cyA9IG50ZnNfd29mX3dvcmtzcGFjZXNbaV07XG5mcy9udGZzL3dvZi5jLTEzNS1cbi0tXG5mcy9udGZzL3dvZi5jPTM2NT1zdGF0aWMgaW50IG50ZnNfcmVhZF93b2ZfY2h1bmsoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsXG4tLVxuZnMvbnRmcy93b2YuYy00MTktXG5mcy9udGZzL3dvZi5jOjQyMDpzdHJ1Y3QgbnRmc193b2ZfZGVzdCB7XG5mcy9udGZzL3dvZi5jLTQyMS1cdHN0cnVjdCBmb2xpbyAqZm9saW9zW05URlNfV09GX01BWF9QQUdFU107XG4tLVxuZnMvbnRmcy93b2YuYy00MjYtXG5mcy9udGZzL3dvZi5jOjQyNzpzdGF0aWMgdm9pZCBudGZzX3dvZl9yZWxlYXNlX2Rlc3Qoc3RydWN0IG50ZnNfd29mX2Rlc3QgKmRlc3QsXG5mcy9udGZzL3dvZi5jLTQyOC1cdFx0XHRcdCAgc3RydWN0IGZvbGlvICp0YXJnZXQsIGJvb2wgc3VjY2Vzcylcbi0tXG5mcy9udGZzL3dvZi5jLTQ0Ny1cbmZzL250ZnMvd29mLmM6NDQ4OnN0YXRpYyBpbnQgbnRmc193b2ZfY29sbGVjdF9kZXN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvbnRmcy93b2YuYy00NDktXHRcdFx0XHQgc3RydWN0IGZvbGlvICp0YXJnZXQsIGxvZmZfdCBjaHVua19zdGFydCxcbmZzL250ZnMvd29mLmM6NDUwOlx0XHRcdFx0IGxvZmZfdCBjaHVua19lbmQsIHN0cnVjdCBudGZzX3dvZl9kZXN0ICpkZXN0KVxuZnMvbnRmcy93b2YuYy00NTEte1xuLS1cbmZzL250ZnMvd29mLmMtNTEyLVxuZnMvbnRmcy93b2YuYzo1MTM6c3RhdGljIGludCBudGZzX3dvZl9kZWNvZGUoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsIGNvbnN0IHZvaWQgKnNyYyxcbmZzL250ZnMvd29mLmMtNTE0LVx0XHRcdCAgIHUzMiBzcmNfbGVuLCB2b2lkICpkc3QsIHUzMiBkc3RfbGVuKVxuLS1cbmZzL250ZnMvd29mLmMtNTIzLVxuZnMvbnRmcy93b2YuYzo1MjQ6c3RhdGljIGludCBudGZzX3dvZl9kZWNvZGVfcGFnZV9kaXJlY3Qoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsXG5mcy9udGZzL3dvZi5jLTUyNS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZm9saW8gKnRhcmdldCwgbG9mZl90IGNodW5rX3N0YXJ0LFxuLS1cbmZzL250ZnMvd29mLmMtNTQwLVx0YWRkciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbmZzL250ZnMvd29mLmM6NTQxOlx0ZXJyID0gbnRmc193b2ZfZGVjb2RlKHdzLCBzcmMsIHNyY19sZW4sICh1OCAqKWFkZHIgJiM0MzsgcGFnZV9vZmZzZXQsXG5mcy9udGZzL3dvZi5jLTU0Mi1cdFx0XHQgICAgICBkc3RfbGVuKTtcbi0tXG5mcy9udGZzL3dvZi5jLTU0OC1cbmZzL250ZnMvd29mLmM6NTQ5OnN0YXRpYyBpbnQgbnRmc193b2ZfZGVjb2RlX2ZvbGlvc19kaXJlY3Qoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsXG5mcy9udGZzL3dvZi5jLTU1MC1cdFx0XHRcdFx0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL250ZnMvd29mLmMtNTU2LVx0dW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY2h1bmtfc3RhcnQpO1xuZnMvbnRmcy93b2YuYzo1NTc6XHRzdHJ1Y3QgbnRmc193b2ZfZGVzdCBkZXN0O1xuZnMvbnRmcy93b2YuYy01NTgtXHR2b2lkICphZGRyO1xuLS1cbmZzL250ZnMvd29mLmMtNTYxLVxuZnMvbnRmcy93b2YuYzo1NjI6XHRlcnIgPSBudGZzX3dvZl9jb2xsZWN0X2Rlc3QobWFwcGluZywgdGFyZ2V0LCBjaHVua19zdGFydCwgY2h1bmtfZW5kLFxuZnMvbnRmcy93b2YuYy01NjMtXHRcdFx0XHQgICAgXHUwMDI2ZGVzdCk7XG5mcy9udGZzL3dvZi5jLTU2NC1cdGlmIChlcnIpIHtcbmZzL250ZnMvd29mLmM6NTY1Olx0XHRudGZzX3dvZl9yZWxlYXNlX2Rlc3QoXHUwMDI2ZGVzdCwgdGFyZ2V0LCBmYWxzZSk7XG5mcy9udGZzL3dvZi5jLTU2Ni1cdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuZnMvbnRmcy93b2YuYy01NzItXHRpZiAoIWFkZHIpIHtcbmZzL250ZnMvd29mLmM6NTczOlx0XHRudGZzX3dvZl9yZWxlYXNlX2Rlc3QoXHUwMDI2ZGVzdCwgdGFyZ2V0LCBmYWxzZSk7XG5mcy9udGZzL3dvZi5jLTU3NC1cdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuZnMvbnRmcy93b2YuYy01NzYtXG5mcy9udGZzL3dvZi5jOjU3NzpcdGVyciA9IG50ZnNfd29mX2RlY29kZSh3cywgc3JjLCBzcmNfbGVuLCAodTggKilhZGRyICYjNDM7IHBhZ2Vfb2Zmc2V0LFxuZnMvbnRmcy93b2YuYy01NzgtXHRcdFx0ICAgICAgZHN0X2xlbik7XG4tLVxuZnMvbnRmcy93b2YuYy01ODAtXHRpZiAoZXJyKSB7XG5mcy9udGZzL3dvZi5jOjU4MTpcdFx0bnRmc193b2ZfcmVsZWFzZV9kZXN0KFx1MDAyNmRlc3QsIHRhcmdldCwgZmFsc2UpO1xuZnMvbnRmcy93b2YuYy01ODItXHRcdHJldHVybiAtRUlOVkFMO1xuZnMvbnRmcy93b2YuYy01ODMtXHR9XG5mcy9udGZzL3dvZi5jOjU4NDpcdG50ZnNfd29mX3JlbGVhc2VfZGVzdChcdTAwMjZkZXN0LCB0YXJnZXQsIHRydWUpO1xuZnMvbnRmcy93b2YuYy01ODUtXHRyZXR1cm4gMDtcbi0tXG5mcy9udGZzL3dvZi5jLTU4Ny1cbmZzL250ZnMvd29mLmM6NTg4OnN0YXRpYyBpbnQgbnRmc193b2ZfdHJ5X2RpcmVjdChzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cyxcbmZzL250ZnMvd29mLmMtNTg5LVx0XHRcdCAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9udGZzL3dvZi5jLTU5Ni1cdGlmIChkc3RfbGVuIFx1MDAzYz0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQpXG5mcy9udGZzL3dvZi5jOjU5NzpcdFx0cmV0dXJuIG50ZnNfd29mX2RlY29kZV9wYWdlX2RpcmVjdCh3cywgdGFyZ2V0LCBjaHVua19zdGFydCwgc3JjLFxuZnMvbnRmcy93b2YuYy01OTgtXHRcdFx0XHRcdFx0ICAgc3JjX2xlbiwgZHN0X2xlbik7XG5mcy9udGZzL3dvZi5jLTU5OS1cbmZzL250ZnMvd29mLmM6NjAwOlx0cmV0dXJuIG50ZnNfd29mX2RlY29kZV9mb2xpb3NfZGlyZWN0KHdzLCBtYXBwaW5nLCB0YXJnZXQsIGNodW5rX3N0YXJ0LFxuZnMvbnRmcy93b2YuYy02MDEtXHRcdFx0XHRcdCAgICAgY2h1bmtfZW5kLCBzcmMsIHNyY19sZW4sIGRzdF9sZW4pO1xuLS1cbmZzL250ZnMvd29mLmM9NjA0PWludCBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9udGZzL3dvZi5jLTYwOS1cdHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sID0gbmktXHUwMDNldm9sO1xuZnMvbnRmcy93b2YuYzo2MTA6XHRzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cztcbmZzL250ZnMvd29mLmMtNjExLVx0bG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKFZGU19JKG5pKSk7XG4tLVxuZnMvbnRmcy93b2YuYy02MTgtXG5mcy9udGZzL3dvZi5jOjYxOTpcdHdzID0gbnRmc193b2Zfd29ya3NwYWNlKG5pLVx1MDAzZWl0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZV9iaXRzKTtcbmZzL250ZnMvd29mLmMtNjIwLVx0aWYgKCF3cykge1xuLS1cbmZzL250ZnMvd29mLmMtNjU0LVx0bXV0ZXhfbG9jayh3cy1cdTAwM2Vsb2NrKTtcbmZzL250ZnMvd29mLmM6NjU1Olx0ZXJyID0gbnRmc193b2Zfd29ya3NwYWNlX3ByZXBhcmUod3MpO1xuZnMvbnRmcy93b2YuYy02NTYtXHRpZiAoZXJyKVxuLS1cbmZzL250ZnMvd29mLmMtNjg1LVx0XHRjaHVua19lbmQgPSBjaHVua19maWxlX29mZnNldCAmIzQzOyBkZWNvbXBfc2l6ZTtcbmZzL250ZnMvd29mLmM6Njg2Olx0XHRlcnIgPSBudGZzX3dvZl90cnlfZGlyZWN0KHdzLCBtYXBwaW5nLCBmb2xpbywgY2h1bmtfZmlsZV9vZmZzZXQsXG5mcy9udGZzL3dvZi5jLTY4Ny1cdFx0XHRcdFx0ICBjaHVua19lbmQsIGNodW5rX21lbSwgY2h1bmtfc2l6ZSxcbi0tXG5mcy9udGZzL3dvZi5jLTY5My1cbmZzL250ZnMvd29mLmM6Njk0Olx0XHRlcnIgPSBudGZzX3dvZl9kZWNvZGUod3MsIGNodW5rX21lbSwgY2h1bmtfc2l6ZSwgd3MtXHUwMDNlb3V0cHV0LFxuZnMvbnRmcy93b2YuYy02OTUtXHRcdFx0XHQgICAgICBkZWNvbXBfc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDM1CgkJCQkJCQlvdXRwdXQ6IDIyNgoJCQkJCQkJdGhvdWdodHM6IDc0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGaWxlIFN5c3RlbSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgbnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrYCwgYSBwdWJsaWMgZnVuY3Rpb24gaW4gdGhlIE5URlMgbW9kdWxlLCBpcyBhdCB0aGUgaGVhcnQgb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLCBzbyBJJiMzOTt2ZSBjcm9zcy1yZWZlcmVuY2VkIGl0IGFnYWluc3Qgb3RoZXIgcG90ZW50aWFsbHkgYWZmZWN0ZWQgY29kZS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmV2aWV3IGFsbCB0aGUgY29kZSB0aGF0IHdhcyBjaGFuZ2VkOgoKKiAgIGBmcy9lcm9mcy9pbnRlcm5hbC5oYCBsb29rcyByZWxldmFudCBkdWUgdG8gdGhlIGB6X2Vyb2ZzX3BjbHVzdGVyX3JlYWRtb3JlYCAvIGB6X2Vyb2ZzX3JlYWRhaGVhZGAKKiAgIGBmcy9leHQ0L2lubGluZS5jYCBhbmQgZnVuY3Rpb25zIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgbWlnaHQgYmUgYSBjb25jZXJuLgoqICAgYGZzL25mcy9kaXIuY2Agd2hlcmUgYG5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0YCBjYWxscyBgbmZzX3JlYWRkaXJfZm9saW9fZmlsbGVyYCAvIGBuZnNfcmVhZGRpcmAKKiAgIGBmcy9udGZzL2lub2RlLmNgIHdpdGggdGhlIGZ1bmN0aW9ucyBgX19udGZzX2lub2RlX3Jlc2lkZW50X2F0dHJfcHdyaXRlYCAvIGBudGZzX2ZpbGVfd3JpdGVfaXRlcmAKKiAgIGBmcy9udGZzL3dvZi5jYCB3aXRoIGBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2tgIHdoaWNoIGlzIG15IGluaXRpYWwgcG9pbnQKKiAgIGBmcy9zcXVhc2hmcy9maWxlLmNgIGFuZCBmdW5jdGlvbnMgYHNxdWFzaGZzX2NvcHlfY2FjaGVgLCBgc3F1YXNoZnNfcmVhZF9mb2xpb2AKKiAgIGBtbS9maWxlbWFwLmNgIGFuZCB0aGUgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAgZnVuY3Rpb24KKiAgIGBtbS9yZWFkYWhlYWQuY2Agd2l0aCB0aGUgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCwgYHBhZ2VfY2FjaGVfcmFfb3JkZXJgCgpOb3csIEkgbmVlZCB0byBuYXJyb3cgZG93biB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGFyZ2V0ZWQgYW5hbHlzaXMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cyBhbmQgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBvbmVzOgoKKiAgIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgIC0gQ29yZSBmaWxlbWFwIGZ1bmN0aW9uIGlzIGludGVyZXN0aW5nLgoqICAgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIC0gUGFydCBvZiBzcXVhc2hmcyBmaWxlIGhhbmRsaW5nLgoqICAgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAgLSBEZWFsaW5nIHdpdGggaW5saW5lIGRhdGEgd2l0aGluIGV4dDQuCiogICBgbnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrYCAtIFRoZSBpbml0aWFsIHBvaW50IG9mIGludGVyZXN0IHJlbGF0ZWQgdG8gTlRGUy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpczoKCiogICBgRVJPRlNfRlNgIC0gZm9yIEVST0ZTLgoqICAgYEVYVDRfRlNgIC0gZm9yIGV4dDQuCiogICBgTkZTX0ZTYCAtIGZvciBORlMuCiogICBgTlRGU19GU2AgLSBmb3IgTlRGUywgbmF0dXJhbGx5LgoqICAgYE5URlNfRlNfV09GX0NPTVBSRVNTSU9OYCAtIHRoaXMgaXMgbGlrZWx5ICpjcnVjaWFsKiB0byBlbmFibGUgTlRGUyYjMzk7cyBXT0YgY29tcHJlc3Npb24uCiogICBgU1FVQVNIRlNgIC0gZm9yIFNxdWFzaEZTLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYE5URlNfRlNfV09GX0NPTVBSRVNTSU9OYCBkZXBlbmRzIG9uIGBOVEZTX0ZTYCBhcyBleHBlY3RlZC4gVGhlIG90aGVycyBhcmUgc3RhbmRhcmQgYW5kIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbCBpcyBjb25maWd1cmVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBjb250YWluczoKCiogICBgRW5hYmxlQ29uZmlnc2A6IEFsbCBvZiB0aGUgY29uZmlncyBJIG1lbnRpb25lZC4KKiAgIGBGb2N1c1N5bWJvbHNgOiB0aGUgbGlzdCBvZiBrZXkgZnVuY3Rpb25zIEkgaWRlbnRpZmllZC4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggcmVtb3ZlcyBgRkdQX05PRlNgIGZyb20gcGFnZWNhY2hlIEFQSXMgYW5kIHVwZGF0ZXMgZm9saW8gYWxsb2NhdGlvbi9yZWNsYWltIHNjb3BlcyBhY3Jvc3MgY29yZSBtbSBhbmQgZmlsZXN5c3RlbXMsIGltcGFjdGluZyByZWNsYWltIGNvbnRleHRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBpbiBjb3JlIHBhdGhzLgoqICAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHkuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSByaXBlIGZvciBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgcmFjZSBjb25kaXRpb25zIGR1ZSB0byBjaGFuZ2VzIGluIGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJlY2xhaW0gcGF0aHMuCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VST0ZTX0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7TkZTX0ZTJiMzNDssCiAgICAmIzM0O05URlNfRlMmIzM0OywKICAgICYjMzQ7TlRGU19GU19XT0ZfQ09NUFJFU1NJT04mIzM0OywKICAgICYjMzQ7U1FVQVNIRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wmIzM0OywKICAgICYjMzQ7c3F1YXNoZnNfY29weV9jYWNoZSYjMzQ7LAogICAgJiMzNDtleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7bnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIEZHUF9OT0ZTIGZsYWcgZnJvbSBjb3JlIHBhZ2UgY2FjaGUgQVBJcyAoX19maWxlbWFwX2dldF9mb2xpb19tcG9sKSBhbmQgYWRqdXN0cyBmb2xpbyBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIGNvbnRleHQgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIHNxdWFzaGZzLCBlcm9mcywgbnRmcywgYW5kIG5mcykuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgaW50cm9kdWNlcyBzY29wZWQgTk9GUyBjb250ZXh0cyAobWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmUpIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIEkvTyBhbmQgY2FjaGluZyBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIG1lbW9yeSByZWNsYWltIGFuZCBsb2NraW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVJPRlNfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7TlRGU19GUyYjMzQ7LAogICAgJiMzNDtOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTiYjMzQ7LAogICAgJiMzNDtTUVVBU0hGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCYjMzQ7LAogICAgJiMzNDtzcXVhc2hmc19jb3B5X2NhY2hlJiMzNDssCiAgICAmIzM0O2V4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgRkdQX05PRlMgZmxhZyBmcm9tIGNvcmUgcGFnZSBjYWNoZSBBUElzIChfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wpIGFuZCBhZGp1c3RzIGZvbGlvIGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJlY2xhaW0gY29udGV4dCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgc3F1YXNoZnMsIGVyb2ZzLCBudGZzLCBhbmQgbmZzKS4gSXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBpbnRyb2R1Y2VzIHNjb3BlZCBOT0ZTIGNvbnRleHRzIChtZW1hbGxvY19ub2ZzX3NhdmUvcmVzdG9yZSkgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gSS9PIGFuZCBjYWNoaW5nIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbWVtb3J5IHJlY2xhaW0gYW5kIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA0OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZGVwcmVjYXRlZCBGR1BfTk9GUyBmbGFnIGZyb20gdGhlIHBhZ2UgY2FjaGUgZm9saW8gYWNxdWlzaXRpb24gQVBJcyBhbmQgYWRqdXN0cyBjYWxsIHNpdGVzIGFjcm9zcyB2YXJpb3VzIGZpbGVzeXN0ZW1zIChFUk9GUywgRVhUNCwgTkZTLCBOVEZTLCBTcXVhc2hGUykgdG8gcmVseSBvbiBtYXBwaW5nIEdGUCBtYXNrcyBvciBzY29wZWQgbWVtYWxsb2Nfbm9mc19zYXZlKCkvbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgY29udGV4dHMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgYWxsb2NhdGlvbiByZWNsYWltIGZsYWdzIChHRlAvRkdQIGZsYWdzKSBhbmQgZmlsZXN5c3RlbSByZWN1cnNpb24vZGVhZGxvY2sgcHJldmVudGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29udHJvbCBmbG93IGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoZS5nLiwgcmVjbGFpbSByZWN1cnNpb24gb3IgbG9ja2luZyBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTI0MzU2ZDdhYzY1ZTBmOWJkZWRmNjczMWY2YWEzODIyZDkwNzQ3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDMwIDA0OjQyOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmgKaW5kZXggNjU5NzRlNTdhZWJmYi4uODRiM2NkYzhlODhmMSAxMDA2NDQKLS0tIGEvZnMvZXJvZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9lcm9mcy9pbnRlcm5hbC5oCkBAIC0zMjcsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICplcm9mc19ncmFiX2ZvbGlvX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXMsCiAJCQkJCQkgICAgcGdvZmZfdCBpbmRleCkKIHsKIAlyZXR1cm4gX19maWxlbWFwX2dldF9mb2xpbyhhcywgaW5kZXgsCi0JCQlGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCwKJiM0MzsJCQlGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsCiAJCQlyZWFkYWhlYWRfZ2ZwX21hc2soYXMpICZhbXA7IH5fX0dGUF9SRUNMQUlNKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmMKaW5kZXggY2VlZTY5YTY2NDgyYi4uMTg4NGFiYjA5NjE0MCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbmxpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lubGluZS5jCkBAIC02MDEsOSAmIzQzOzYwMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeQotCSAqIHN0YXJ0ZWQgKi8KLQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUywKJiM0MzsJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLAogCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJaWYgKElTX0VSUihmb2xpbykpIHsKIAkJcmV0ID0gUFRSX0VSUihmb2xpbyk7CkBAIC03MzQsNyAmIzQzOzczMiw3IEBAIGludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCWdvdG8gb3V0X3JlbGVhc2VfYmg7CiAJfQogCi0JZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsCiYjNDM7CWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiwKIAkJCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJaWYgKElTX0VSUihmb2xpbykpIHsKIAkJcmV0ID0gUFRSX0VSUihmb2xpbyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggNDkzOTQxMjNiZDA5Ni4uZTM0MTI1YThhMmUyOCAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25mcy9kaXIuYwpAQCAtNDQ3LDcgJiM0Mzs0NDcsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpuZnNfcmVhZGRpcl9mb2xpb19nZXRfbmV4dChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LAotCQkJRkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsCiYjNDM7CQkJRkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULAogCQkJbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jCmluZGV4IDMyZWRiNDA0NTE3OGEuLjM2YTBkNmIyNmMwMmUgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2lub2RlLmMKQEAgLTM2NzYsNyAmIzQzOzM2NzYsNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLAogCW1hcmtfbWZ0X3JlY29yZF9kaXJ0eShjdHgtJmd0O250ZnNfaW5vKTsKIAogCS8qIEtlZXAgdGhlIGZpcnN0IHBhZ2UgY2xlYW4gYW5kIHVwdG9kYXRlICovCi0JZm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsCiYjNDM7CWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiwKIAkJCQkgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAlpZiAoSVNfRVJSKGZvbGlvKSkgewogCQllcnIgPSBQVFJfRVJSKGZvbGlvKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvd29mLmMgYi9mcy9udGZzL3dvZi5jCmluZGV4IDhmODRjMjIxMmVlZWMuLmM5ODFiNGEzYjY5NTkgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvd29mLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy93b2YuYwpAQCAtNDY0LDEwICYjNDM7NDY0LDkgQEAgc3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlmb2xpbyA9IHRhcmdldDsKIAkJCWlzX3RhcmdldCA9IHRydWU7CiAJCX0gZWxzZSB7Ci0JCQlmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8oCi0JCQkJbWFwcGluZywgaW5kZXgsCi0JCQkJRkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyB8IEZHUF9OT1dBSVQsCi0JCQkJR0ZQX05PRlMpOwomIzQzOwkJCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwKJiM0MzsJCQkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCwKJiM0MzsJCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCQkJaWYgKElTX0VSUihmb2xpbykpCiAJCQkJcmV0dXJuIFBUUl9FUlIoZm9saW8pOwogCQkJaXNfdGFyZ2V0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9maWxlLmMgYi9mcy9zcXVhc2hmcy9maWxlLmMKaW5kZXggZDgzNTk0Y2U5MWQyMy4uMzRjNTUwYTI2NmJjZiAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NxdWFzaGZzL2ZpbGUuYwpAQCAtMzk4LDYgJiM0MzszOTgsNyBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAlzdHJ1Y3Qgc3F1YXNoZnNfc2JfaW5mbyAqbXNibGsgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19mc19pbmZvOwogCWludCBpLCBtYXNrID0gKDEgJmx0OyZsdDsgKG1zYmxrLSZndDtibG9ja19sb2cgLSBQQUdFX1NISUZUKSkgLSAxOwogCWludCBzdGFydF9pbmRleCA9IGZvbGlvLSZndDtpbmRleCAmYW1wOyB+bWFzaywgZW5kX2luZGV4ID0gc3RhcnRfaW5kZXggfCBtYXNrOwomIzQzOwl1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpOwogCiAJLyoKIAkgKiBMb29wIGNvcHlpbmcgZGF0YWJsb2NrIGludG8gcGFnZXMuICBBcyB0aGUgZGF0YWJsb2NrIGxpa2VseSBjb3ZlcnMKQEAgLTQxNSw3ICYjNDM7NDE2LDcgQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIAkJcHVzaF9mb2xpbyA9IChpID09IGZvbGlvLSZndDtpbmRleCkgPyBmb2xpbyA6CiAJCQlfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGksCi0JCQkJCUZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULAomIzQzOwkJCQkJRkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULAogCQkJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAogCQlpZiAoSVNfRVJSKHB1c2hfZm9saW8pKQpAQCAtNDMwLDYgJiM0Mzs0MzEsOCBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJaWYgKGkgIT0gZm9saW8tJmd0O2luZGV4KQogCQkJZm9saW9fcHV0KHB1c2hfZm9saW8pOwogCX0KJiM0MzsKJiM0MzsJbWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnMpOwogfQogCiAvKiBSZWFkIGRhdGFibG9jayBzdG9yZWQgcGFja2VkIGluc2lkZSBhIGZyYWdtZW50ICh0YWlsLWVuZCBwYWNrZWQgYmxvY2spICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDBhZGZhNjYwNTY1M2QuLmJmZjhiNzI2NGZiMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCkBAIC02OTcsNyAmIzQzOzY5Nyw2IEBAIHBnb2ZmX3QgcGFnZV9jYWNoZV9wcmV2X21pc3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAgKiAgIGZvbGlvIGlzIGFscmVhZHkgaW4gY2FjaGUuICBJZiB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZCwgdW5sb2NrIGl0CiAgKiAgIGJlZm9yZSByZXR1cm5pbmcgc28gdGhlIGNhbGxlciBjYW4gZG8gdGhlIHNhbWUgZGFuY2UuCiAgKiAqICVGR1BfV1JJVEUgLSBUaGUgZm9saW8gd2lsbCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBjYWxsZXIuCi0gKiAqICVGR1BfTk9GUyAtIF9fR0ZQX0ZTIHdpbGwgZ2V0IGNsZWFyZWQgaW4gZ2ZwLgogICogKiAlRkdQX05PV0FJVCAtIERvbiYjMzk7dCBibG9jayBvbiB0aGUgZm9saW8gbG9jay4KICAqICogJUZHUF9TVEFCTEUgLSBXYWl0IGZvciB0aGUgZm9saW8gdG8gYmUgc3RhYmxlIChmaW5pc2hlZCB3cml0ZWJhY2spCiAgKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU8KQEAgLTcxMCwxMSAmIzQzOzcwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7CiAjZGVmaW5lIEZHUF9MT0NLCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwMikKICNkZWZpbmUgRkdQX0NSRUFUCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwNCkKICNkZWZpbmUgRkdQX1dSSVRFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOCkKLSNkZWZpbmUgRkdQX05PRlMJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKQotI2RlZmluZSBGR1BfTk9XQUlUCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMCkKLSNkZWZpbmUgRkdQX0ZPUl9NTUFQCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MCkKLSNkZWZpbmUgRkdQX1NUQUJMRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApCi0jZGVmaW5lIEZHUF9ET05UQ0FDSEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKQomIzQzOyNkZWZpbmUgRkdQX05PV0FJVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMTApCiYjNDM7I2RlZmluZSBGR1BfRk9SX01NQVAJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDIwKQomIzQzOyNkZWZpbmUgRkdQX1NUQUJMRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApCiYjNDM7I2RlZmluZSBGR1BfRE9OVENBQ0hFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA4MCkKICNkZWZpbmUgRkdGX0dFVF9PUkRFUihmZ2YpCSgoKF9fZm9yY2UgdW5zaWduZWQpZmdmKSAmZ3Q7Jmd0OyAyNikJLyogdG9wIDYgYml0cyAqLwogCiAjZGVmaW5lIEZHUF9XUklURUJFR0lOCQkoRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfU1RBQkxFKQpAQCAtOTI5LDcgJiM0Mzs5MjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpncmFiX2NhY2hlX3BhZ2Vfbm93YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXBnb2ZmX3QgaW5kZXgpCiB7CiAJcmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCwKLQkJCUZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULAomIzQzOwkJCUZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCwKIAkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgKaW5kZXggZDdjNmE5NDJhYTdlMC4uZjc2YmUxMTQxYjA2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaApAQCAtMzcyLDEzICYjNDM7MzcyLDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1hbGxvY19ub2lvX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKQogfQogCiAvKioKLSAqIG1lbWFsbG9jX25vZnNfc2F2ZSAtIE1hcmtzIGltcGxpY2l0IEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuCiYjNDM7ICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS4KICAqCi0gKiBUaGlzIGZ1bmN0aW9ucyBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBHRlBfTk9GUyBhbGxvY2F0aW9uIHNjb3BlLgotICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc28KLSAqIHRoZXkgYXJlIHNhZmUgZm9yIHRoZSBGUyBjcml0aWNhbCBzZWN0aW9uIGZyb20gdGhlIGFsbG9jYXRpb24gcmVjdXJzaW9uCi0gKiBwb2ludCBvZiB2aWV3LiBVc2UgbWVtYWxsb2Nfbm9mc19yZXN0b3JlIHRvIGVuZCB0aGUgc2NvcGUgd2l0aCBmbGFncwotICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4KJiM0MzsgKiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBjYWxsaW5nCiYjNDM7ICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBjYWxsaW5nIGludG8gZmlsZXN5c3RlbXMKJiM0MzsgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsCiYjNDM7ICogYnV0IChmb3IgZXhhbXBsZSkgaW5vZGVzIHdpbGwgbm90IGJlLgomIzQzOyAqCiYjNDM7ICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2sKJiM0MzsgKiB3aGljaCB3b3VsZCBiZSBuZWVkZWQgYnkgRlMgcmVjbGFpbS4gIFdoaWxlIHdlIGNvdWxkIHRoZW9yZXRpY2FsbHkKJiM0MzsgKiBjYWxsIGludG8gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSBpbiB0aGlzIGNhc2UsIGl0IGNhbiBiZSBhIGRlZXAgY2FsbAomIzQzOyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuCiYjNDM7ICoKJiM0MzsgKiBGaWxlc3lzdGVtcyBvZnRlbiBjaG9vc2UgdG8gaW5jb3Jwb3JhdGUgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gYXMgcGFydAomIzQzOyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbAomIzQzOyAqIHNlbnNlLCBpdCBoYXMgbXVjaCB0aGUgc2FtZSBlZmZlY3QgYXMgbmVzdGVkIGpvdXJuYWwgdHJhbnNhY3Rpb25zCiYjNDM7ICogYXJlIGVpdGhlciBwcm9oaWJpdGVkIG9yIGV4cGVuc2l2ZS4KJiM0MzsgKgomIzQzOyAqIEFsc28gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSB3aGlsZSBob2xkaW5nCiYjNDM7ICogYSBmaWxlIGZvbGlvIGxvY2tlZC4gIEhpZ2ggb3JkZXIgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgdGhvc2UgcmVxdWVzdGVkCiYjNDM7ICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uCiAgKgogICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiBpcyBzYWZlIHRvIGJlIHVzZWQgZnJvbSBhbnkgY29udGV4dC4KICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuCkBAIC0zODksMTAgJiM0Mzs0MDIsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2Nfbm9mc19zYXZlKHZvaWQpCiB9CiAKIC8qKgotICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlIC0gRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUuCiYjNDM7ICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlIC0gRW5kIGZpbGVzeXN0ZW0gcmVjbGFpbSBzY29wZS4KICAqIEBmbGFnczogRmxhZ3MgdG8gcmVzdG9yZS4KICAqCi0gKiBFbmRzIHRoZSBpbXBsaWNpdCBHRlBfTk9GUyBzY29wZSBzdGFydGVkIGJ5IG1lbWFsbG9jX25vZnNfc2F2ZSBmdW5jdGlvbi4KJiM0MzsgKiBFbmRzIHRoZSBpbXBsaWNpdCBtZW1vcnkgYWxsb2NhdGlvbiBzY29wZSBzdGFydGVkIGJ5CiYjNDM7ICogbWVtYWxsb2Nfbm9mc19zYXZlKCkuICBUaGlzIG1heSBub3QgZW5hYmxlIGFjY2VzcyB0byBmaWxlc3lzdGVtIHJlY2xhaW0KJiM0MzsgKiBpZiBpdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBhdCB0aGUgdGltZSBtZW1hbGxvY19ub2ZzX3NhdmUoKSB3YXMgY2FsbGVkLgogICogQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmbGFncyBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlCiAgKiBwYWlyaW5nIG1lbWFsbG9jX25vZnNfc2F2ZSBjYWxsLgogICovCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmFmZWM2MzY4ODFmYi4uZTY1ODAyOTFmMjE4NSAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuYwpAQCAtMTk5NCw4ICYjNDM7MTk5NCw2IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCiAJCWlmICgoZmdwX2ZsYWdzICZhbXA7IEZHUF9XUklURSkgJmFtcDsmYW1wOyBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpCiAJCQlnZnAgfD0gX19HRlBfV1JJVEU7Ci0JCWlmIChmZ3BfZmxhZ3MgJmFtcDsgRkdQX05PRlMpCi0JCQlnZnAgJmFtcDs9IH5fX0dGUF9GUzsKIAkJaWYgKGZncF9mbGFncyAmYW1wOyBGR1BfTk9XQUlUKSB7CiAJCQlnZnAgJmFtcDs9IH5HRlBfS0VSTkVMOwogCQkJZ2ZwIHw9IEdGUF9OT1dBSVQ7CmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IDZlNTU2MzI5MDI4N2UuLjljMTE2ZDRiYTk2M2EgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JlYWRhaGVhZC5jCkBAIC0yMjcsMTcgJiM0MzsyMjcsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsCiAJZ2ZwX3QgZ2ZwX21hc2sgPSByZWFkYWhlYWRfZ2ZwX21hc2sobWFwcGluZyk7CiAJdW5zaWduZWQgbG9uZyBtYXJrID0gVUxPTkdfTUFYLCBpID0gMDsKIAl1bnNpZ25lZCBpbnQgbWluX25ycGFnZXMgPSBtYXBwaW5nX21pbl9mb2xpb19ucnBhZ2VzKG1hcHBpbmcpOwotCi0JLyoKLQkgKiBQYXJ0d2F5IHRocm91Z2ggdGhlIHJlYWRhaGVhZCBvcGVyYXRpb24sIHdlIHdpbGwgaGF2ZSBhZGRlZAotCSAqIGxvY2tlZCBwYWdlcyB0byB0aGUgcGFnZSBjYWNoZSwgYnV0IHdpbGwgbm90IHlldCBoYXZlIHN1Ym1pdHRlZAotCSAqIHRoZW0gZm9yIEkvTy4gIEFkZGluZyBhbm90aGVyIHBhZ2UgbWF5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LAotCSAqIHdoaWNoIGNhbiB0cmlnZ2VyIG1lbW9yeSByZWNsYWltLiAgVGVsbGluZyB0aGUgVk0gd2UmIzM5O3JlIGluCi0JICogdGhlIG1pZGRsZSBvZiBhIGZpbGVzeXN0ZW0gb3BlcmF0aW9uIHdpbGwgY2F1c2UgaXQgdG8gbm90Ci0JICogdG91Y2ggZmlsZS1iYWNrZWQgcGFnZXMsIHByZXZlbnRpbmcgYSBkZWFkbG9jay4gIE1vc3QgKGFsbD8pCi0JICogZmlsZXN5c3RlbXMgYWxyZWFkeSBzcGVjaWZ5IF9fR0ZQX05PRlMgaW4gdGhlaXIgbWFwcGluZyYjMzk7cwotCSAqIGdmcF9tYXNrLCBidXQgbGV0JiMzOTtzIGJlIGV4cGxpY2l0IGhlcmUuCi0JICovCiYjNDM7CS8qIEFsbG9jYXRpbmcgd2l0aCBsb2NrZWQgZm9saW9zICovCiAJdW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDttYXBwaW5nLSZndDtpbnZhbGlkYXRlX2xvY2spOwpAQCAtNTEyLDcgJiM0Mzs1MDIsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCwKIAogCXJhLSZndDtvcmRlciA9IG5ld19vcmRlcjsKIAotCS8qIFNlZSBjb21tZW50IGluIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKCkgKi8KJiM0MzsJLyogQWxsb2NhdGluZyB3aXRoIGxvY2tlZCBmb2xpb3MgKi8KIAlub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7CiAJZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpOwogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA4CgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDg3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlbW92YWwgb2YgdGhlIGBGR1BfTk9GU2AgRmxhZyBhbmQgSXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHJpcHBpbmcgb3V0IHRoZSBgRkdQX05PRlNgIGZsYWcgZnJvbSBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGFuZCB0aGVuIHVwZGF0aW5nIGFsbCB0aGUgcGxhY2VzIHRoYXQgdXNlZCBpdC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHNpZ25pZmljYW50IHJlZmFjdG9yLCBidXQgdGhlIG92ZXJhbGwgZ29hbCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBhdm9pZGluZyBGUyByZWNsYWltIGRlYWRsb2NrcyBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24uIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgY2hhbmdlcyBtZXRob2RpY2FsbHkuCgpGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIHNwZWNpZmljIGFyZWFzIGJlaW5nIHRvdWNoZWQ6IGBlcm9mcy9pbnRlcm5hbC5oYCwgYGV4dDQvaW5saW5lLmNgLCBgbmZzL2Rpci5jYCwgYG50ZnMvaW5vZGUuY2AsIGBudGZzL3dvZi5jYCwgYHNxdWFzaGZzL2ZpbGUuY2AsIGBwYWdlbWFwLmhgLCBgc2NoZWQvbW0uaGAsIGBmaWxlbWFwLmNgLCBhbmQgYHJlYWRhaGVhZC5jYC4gRWFjaCBvZiB0aGVzZSBmaWxlcyBpcyBiZWluZyBhZGp1c3RlZCB0byBlaXRoZXIgcmVtb3ZlIHRoZSBgRkdQX05PRlNgIGZsYWcgZGlyZWN0bHkgb3IgcmVwbGFjZSBpdCB3aXRoIGEgbW9yZSBhcHByb3ByaWF0ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBvZnRlbiBpbnZvbHZpbmcgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBhbmQgYG1lbWFsbG9jX25vZnNfcmVzdG9yZSgpYC4KClNwZWNpZmljYWxseSwgaW4gYGVyb2ZzYCwgSSBzZWUgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCByZW1vdmluZyB0aGUgZmxhZywgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIGl0IGFscmVhZHkgdXNlcyBhIG1hc2sgdGhhdCBleGNsdWRlcyBgX19HRlBfUkVDTEFJTWAuIFRoZW4sIGBleHQ0YCBpcyBjbGVhbmluZyB1cCBgaW5saW5lLmNgLCBzYW1lIHdpdGggYG5mc2AsIGFuZCBgbnRmc2AuIFRoZSBgc3F1YXNoZnNgIGNoYW5nZSBpcyBrZXk7IHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgd3JhcHBpbmcgdGhlIGBzcXVhc2hmc19jb3B5X2NhY2hlKClgIGNhbGwgd2l0aCB0aG9zZSBgbWVtYWxsb2Nfbm9mc18uLi5gIGNhbGxzLCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGFwcHJvYWNoIEkgd291bGQgZXhwZWN0IHRvIHNlZSBmb3IgcHJvcGVyIEZTIHJlY2xhaW0gcHJvdGVjdGlvbi4gSSYjMzk7bSB0YWtpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGlzIHBhdHRlcm4sIEkgbWlnaHQgYmUgdXNpbmcgaXQgbXlzZWxmLiBUaGUgaGVhZGVyIGZpbGVzIGFyZSBiZWluZyBjbGVhbmVkIHVwIGFuZCB0aGUgZmxhZyBpdHNlbGYgaXMgYmVpbmcgcmVtb3ZlZCBhbmQgcmVudW1iZXJlZCwgYW5kIEkmIzM5O20gdXBkYXRpbmcgbXkgbWVudGFsIG1hcCBvZiB3aGVyZSB0aGUgZmxhZ3MgYXJlLiBUaGUgYG1tL2ZpbGVtYXAuY2AgY2hhbmdlIG1ha2VzIHNlbnNlOiBpdCYjMzk7cyByZW1vdmluZyBhIGNoZWNrIHJlbGF0ZWQgdG8gdGhlIGZsYWcuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHN0dWZmLCBob25lc3RseSwgbG9va3MgcHJldHR5IGNsZWFuLgoKTm93LCBteSBrZXkgY29uY2VybjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlza3M/IEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIEtBU0FOIGlzc3Vlcywgb3IgcG90ZW50aWFsIGRlYWRsb2Nrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBhIHNjZW5hcmlvIHdoZXJlIHdlJiMzOTtyZSBsZWFraW5nIGluZm9ybWF0aW9uIG9yIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24uIEkgY2FuJiMzOTt0IHNlZSBhbnl0aGluZyBvYnZpb3VzIHRoYXQgd291bGQgY2F1c2UgYSBwcm9ibGVtIHdpdGggc3RydWN0IHBhZGRpbmcuIEkmIzM5O20gY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYnVmZmVycywgbm8gY2hhbmdlcyB0byBkYXRhIGxlbmd0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIGJyYW5jaGluZy4gVGhlIHBhdGNoIGlzIHNvbGVseSBmb2N1c2VkIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIChHRlAgZmxhZ3MpIGFuZCBwYWdlIGNhY2hlIGZvbGlvIHJldHJpZXZhbCBmbGFncyAoRkdQIGZsYWdzKSBhbmQgRlMgcmVjbGFpbSBkZWFkbG9jayBhdm9pZGFuY2UsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBGcm9tIHdoYXQgSSBzZWUgaGVyZSwgaXQgbG9va3MgbGlrZSBpdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG9mIHRob3NlIGNvbmNlcm5zLiBJJiMzOTttIGFsc28gY29uZmlybWluZyBpdCB3b3VsZG4mIzM5O3QgaW1wYWN0IHRob3NlIEtBU0FOL0xPQ0tERVAgZG9tYWlucy4KCkkmIzM5O20gbm93IHJ1bm5pbmcgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEgaW4gbXkgaGVhZDogS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLiBDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcnM/IE5vLiBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLiBCb3VuZHMgY2hlY2tzL3VuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBoZXJlLgoKQmFzZWQgb24gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29tZm9ydGFibGUgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUuIEkmIzM5O20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZGVwcmVjYXRlZCBGR1BfTk9GUyBmbGFnIGZyb20gdGhlIHBhZ2UgY2FjaGUgZm9saW8gYWNxdWlzaXRpb24gQVBJcyBhbmQgYWRqdXN0cyBjYWxsIHNpdGVzIGFjcm9zcyB2YXJpb3VzIGZpbGVzeXN0ZW1zIChFUk9GUywgRVhUNCwgTkZTLCBOVEZTLCBTcXVhc2hGUykgdG8gcmVseSBvbiBtYXBwaW5nIEdGUCBtYXNrcyBvciBzY29wZWQgbWVtYWxsb2Nfbm9mc19zYXZlKCkvbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgY29udGV4dHMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgYWxsb2NhdGlvbiByZWNsYWltIGZsYWdzIChHRlAvRkdQIGZsYWdzKSBhbmQgZmlsZXN5c3RlbSByZWN1cnNpb24vZGVhZGxvY2sgcHJldmVudGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29udHJvbCBmbG93IGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoZS5nLiwgcmVjbGFpbSByZWN1cnNpb24gb3IgbG9ja2luZyBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGRlcHJlY2F0ZWQgRkdQX05PRlMgZmxhZyBmcm9tIHRoZSBwYWdlIGNhY2hlIGZvbGlvIGFjcXVpc2l0aW9uIEFQSXMgYW5kIGFkanVzdHMgY2FsbCBzaXRlcyBhY3Jvc3MgdmFyaW91cyBmaWxlc3lzdGVtcyAoRVJPRlMsIEVYVDQsIE5GUywgTlRGUywgU3F1YXNoRlMpIHRvIHJlbHkgb24gbWFwcGluZyBHRlAgbWFza3Mgb3Igc2NvcGVkIG1lbWFsbG9jX25vZnNfc2F2ZSgpL21lbWFsbG9jX25vZnNfcmVzdG9yZSgpIGNvbnRleHRzLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGFsbG9jYXRpb24gcmVjbGFpbSBmbGFncyAoR0ZQL0ZHUCBmbGFncykgYW5kIGZpbGVzeXN0ZW0gcmVjdXJzaW9uL2RlYWRsb2NrIHByZXZlbnRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbnRyb2wgZmxvdyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKGUuZy4sIHJlY2xhaW0gcmVjdXJzaW9uIG9yIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQyOjQzLjI5MDU0NDYzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMzkxMTM0MTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUk9GU19GU1wiLFxuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJOVEZTX0ZTXCIsXG4gICAgXCJOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTlwiLFxuICAgIFwiU1FVQVNIRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xcIixcbiAgICBcInNxdWFzaGZzX2NvcHlfY2FjaGVcIixcbiAgICBcImV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YVwiLFxuICAgIFwibnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBkZXByZWNhdGVkIEZHUF9OT0ZTIGZsYWcgZnJvbSB0aGUgcGFnZSBjYWNoZSBmb2xpbyBhY3F1aXNpdGlvbiBBUElzIGFuZCBhZGp1c3RzIGNhbGwgc2l0ZXMgYWNyb3NzIHZhcmlvdXMgZmlsZXN5c3RlbXMgKEVST0ZTLCBFWFQ0LCBORlMsIE5URlMsIFNxdWFzaEZTKSB0byByZWx5IG9uIG1hcHBpbmcgR0ZQIG1hc2tzIG9yIHNjb3BlZCBtZW1hbGxvY19ub2ZzX3NhdmUoKS9tZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSBjb250ZXh0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGFsbG9jYXRpb24gcmVjbGFpbSBmbGFncyAoR0ZQL0ZHUCBmbGFncykgYW5kIGZpbGVzeXN0ZW0gcmVjdXJzaW9uL2RlYWRsb2NrIHByZXZlbnRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbnRyb2wgZmxvdyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKGUuZy4sIHJlY2xhaW0gcmVjdXJzaW9uIG9yIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgRkdQX05PRlMgZmxhZyBmcm9tIGNvcmUgcGFnZSBjYWNoZSBBUElzIChfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wpIGFuZCBhZGp1c3RzIGZvbGlvIGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJlY2xhaW0gY29udGV4dCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlc3lzdGVtcyAoZXh0NCwgc3F1YXNoZnMsIGVyb2ZzLCBudGZzLCBhbmQgbmZzKS4gSXQgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBpbnRyb2R1Y2VzIHNjb3BlZCBOT0ZTIGNvbnRleHRzIChtZW1hbGxvY19ub2ZzX3NhdmUvcmVzdG9yZSkgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gSS9PIGFuZCBjYWNoaW5nIHBhdGhzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyBmb3IgbWVtb3J5IHJlY2xhaW0gYW5kIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0Mjo0My4yOTA1NDk0NTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzkzNDYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUyNDM1NmQ3YWM2NWUwZjliZGVkZjY3MzFmNmFhMzgyMmQ5MDc0N2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMzAgMDQ6NDI6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcXG5pbmRleCA2NTk3NGU1N2FlYmZiLi44NGIzY2RjOGU4OGYxIDEwMDY0NFxcbi0tLSBhL2ZzL2Vyb2ZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXFxuQEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmFzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGdvZmZfdCBpbmRleClcXG4ge1xcbiBcXHRyZXR1cm4gX19maWxlbWFwX2dldF9mb2xpbyhhcywgaW5kZXgsXFxuLVxcdFxcdFxcdEZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULFxcbitcXHRcXHRcXHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXFxuIFxcdFxcdFxcdHJlYWRhaGVhZF9nZnBfbWFzayhhcykgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXFxuaW5kZXggY2VlZTY5YTY2NDgyYi4uMTg4NGFiYjA5NjE0MCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXFxuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xcbkBAIC02MDEsOSArNjAxLDcgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeVxcbi1cXHQgKiBzdGFydGVkICovXFxuLVxcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxcbitcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXFxuIFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcXG5AQCAtNzM0LDcgKzczMiw3IEBAIGludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdGdvdG8gb3V0X3JlbGVhc2VfYmg7XFxuIFxcdH1cXG4gXFxuLVxcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxcbitcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXFxuIFxcdFxcdFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXFxuaW5kZXggNDkzOTQxMjNiZDA5Ni4uZTM0MTI1YThhMmUyOCAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvZGlyLmNcXG4rKysgYi9mcy9uZnMvZGlyLmNcXG5AQCAtNDQ3LDcgKzQ0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKm5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4gXFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbi1cXHRcXHRcXHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcXG4rXFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxcbiBcXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcXG4gXFx0aWYgKElTX0VSUihmb2xpbykpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmMgYi9mcy9udGZzL2lub2RlLmNcXG5pbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvaW5vZGUuY1xcbisrKyBiL2ZzL250ZnMvaW5vZGUuY1xcbkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLFxcbiBcXHRtYXJrX21mdF9yZWNvcmRfZGlydHkoY3R4LVxcdTAwM2VudGZzX2lubyk7XFxuIFxcbiBcXHQvKiBLZWVwIHRoZSBmaXJzdCBwYWdlIGNsZWFuIGFuZCB1cHRvZGF0ZSAqL1xcbi1cXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4gfCBGR1BfTk9GUyxcXG4rXFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLFxcbiBcXHRcXHRcXHRcXHQgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcXG4gXFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvd29mLmMgYi9mcy9udGZzL3dvZi5jXFxuaW5kZXggOGY4NGMyMjEyZWVlYy4uYzk4MWI0YTNiNjk1OSAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL3dvZi5jXFxuKysrIGIvZnMvbnRmcy93b2YuY1xcbkBAIC00NjQsMTAgKzQ2NCw5IEBAIHN0YXRpYyBpbnQgbnRmc193b2ZfY29sbGVjdF9kZXN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRmb2xpbyA9IHRhcmdldDtcXG4gXFx0XFx0XFx0aXNfdGFyZ2V0ID0gdHJ1ZTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKFxcbi1cXHRcXHRcXHRcXHRtYXBwaW5nLCBpbmRleCxcXG4tXFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyB8IEZHUF9OT1dBSVQsXFxuLVxcdFxcdFxcdFxcdEdGUF9OT0ZTKTtcXG4rXFx0XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbitcXHRcXHRcXHRcXHRcXHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXFxuK1xcdFxcdFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbiBcXHRcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbiBcXHRcXHRcXHRpc190YXJnZXQgPSBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvZmlsZS5jIGIvZnMvc3F1YXNoZnMvZmlsZS5jXFxuaW5kZXggZDgzNTk0Y2U5MWQyMy4uMzRjNTUwYTI2NmJjZiAxMDA2NDRcXG4tLS0gYS9mcy9zcXVhc2hmcy9maWxlLmNcXG4rKysgYi9mcy9zcXVhc2hmcy9maWxlLmNcXG5AQCAtMzk4LDYgKzM5OCw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRzdHJ1Y3Qgc3F1YXNoZnNfc2JfaW5mbyAqbXNibGsgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mc19pbmZvO1xcbiBcXHRpbnQgaSwgbWFzayA9ICgxIFxcdTAwM2NcXHUwMDNjIChtc2Jsay1cXHUwMDNlYmxvY2tfbG9nIC0gUEFHRV9TSElGVCkpIC0gMTtcXG4gXFx0aW50IHN0YXJ0X2luZGV4ID0gZm9saW8tXFx1MDAzZWluZGV4IFxcdTAwMjYgfm1hc2ssIGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4IHwgbWFzaztcXG4rXFx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIExvb3AgY29weWluZyBkYXRhYmxvY2sgaW50byBwYWdlcy4gIEFzIHRoZSBkYXRhYmxvY2sgbGlrZWx5IGNvdmVyc1xcbkBAIC00MTUsNyArNDE2LDcgQEAgdm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcbiBcXHRcXHRwdXNoX2ZvbGlvID0gKGkgPT0gZm9saW8tXFx1MDAzZWluZGV4KSA/IGZvbGlvIDpcXG4gXFx0XFx0XFx0X19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpLFxcbi1cXHRcXHRcXHRcXHRcXHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcXG4rXFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxcbiBcXHRcXHRcXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcXG4gXFxuIFxcdFxcdGlmIChJU19FUlIocHVzaF9mb2xpbykpXFxuQEAgLTQzMCw2ICs0MzEsOCBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0aWYgKGkgIT0gZm9saW8tXFx1MDAzZWluZGV4KVxcbiBcXHRcXHRcXHRmb2xpb19wdXQocHVzaF9mb2xpbyk7XFxuIFxcdH1cXG4rXFxuK1xcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzKTtcXG4gfVxcbiBcXG4gLyogUmVhZCBkYXRhYmxvY2sgc3RvcmVkIHBhY2tlZCBpbnNpZGUgYSBmcmFnbWVudCAodGFpbC1lbmQgcGFja2VkIGJsb2NrKSAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuaW5kZXggMGFkZmE2NjA1NjUzZC4uYmZmOGI3MjY0ZmIwMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTY5Nyw3ICs2OTcsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiAgKiAgIGZvbGlvIGlzIGFscmVhZHkgaW4gY2FjaGUuICBJZiB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZCwgdW5sb2NrIGl0XFxuICAqICAgYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGNhbiBkbyB0aGUgc2FtZSBkYW5jZS5cXG4gICogKiAlRkdQX1dSSVRFIC0gVGhlIGZvbGlvIHdpbGwgYmUgd3JpdHRlbiB0byBieSB0aGUgY2FsbGVyLlxcbi0gKiAqICVGR1BfTk9GUyAtIF9fR0ZQX0ZTIHdpbGwgZ2V0IGNsZWFyZWQgaW4gZ2ZwLlxcbiAgKiAqICVGR1BfTk9XQUlUIC0gRG9uJ3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suXFxuICAqICogJUZHUF9TVEFCTEUgLSBXYWl0IGZvciB0aGUgZm9saW8gdG8gYmUgc3RhYmxlIChmaW5pc2hlZCB3cml0ZWJhY2spXFxuICAqICogJUZHUF9ET05UQ0FDSEUgLSBVbmNhY2hlZCBidWZmZXJlZCBJT1xcbkBAIC03MTAsMTEgKzcwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7XFxuICNkZWZpbmUgRkdQX0xPQ0tcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwMilcXG4gI2RlZmluZSBGR1BfQ1JFQVRcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwNClcXG4gI2RlZmluZSBGR1BfV1JJVEVcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcXG4tI2RlZmluZSBGR1BfTk9GU1xcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxcbi0jZGVmaW5lIEZHUF9OT1dBSVRcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcXG4tI2RlZmluZSBGR1BfRk9SX01NQVBcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcXG4tI2RlZmluZSBGR1BfU1RBQkxFXFx0XFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXFxuLSNkZWZpbmUgRkdQX0RPTlRDQUNIRVxcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxcbisjZGVmaW5lIEZHUF9OT1dBSVRcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcXG4rI2RlZmluZSBGR1BfRk9SX01NQVBcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcXG4rI2RlZmluZSBGR1BfU1RBQkxFXFx0XFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXFxuKyNkZWZpbmUgRkdQX0RPTlRDQUNIRVxcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxcbiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKVxcdCgoKF9fZm9yY2UgdW5zaWduZWQpZmdmKSBcXHUwMDNlXFx1MDAzZSAyNilcXHQvKiB0b3AgNiBiaXRzICovXFxuIFxcbiAjZGVmaW5lIEZHUF9XUklURUJFR0lOXFx0XFx0KEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSlcXG5AQCAtOTI5LDcgKzkyNyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmdyYWJfY2FjaGVfcGFnZV9ub3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdHBnb2ZmX3QgaW5kZXgpXFxuIHtcXG4gXFx0cmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCxcXG4tXFx0XFx0XFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXFxuK1xcdFxcdFxcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcXG4gXFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxcbmluZGV4IGQ3YzZhOTQyYWE3ZTAuLmY3NmJlMTE0MWIwNjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXFxuQEAgLTM3MiwxMyArMzcyLDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1hbGxvY19ub2lvX3Jlc3RvcmUodW5zaWduZWQgaW50IGZsYWdzKVxcbiB9XFxuIFxcbiAvKipcXG4tICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gTWFya3MgaW1wbGljaXQgR0ZQX05PRlMgYWxsb2NhdGlvbiBzY29wZS5cXG4rICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS5cXG4gICpcXG4tICogVGhpcyBmdW5jdGlvbnMgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgR0ZQX05PRlMgYWxsb2NhdGlvbiBzY29wZS5cXG4tICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc29cXG4tICogdGhleSBhcmUgc2FmZSBmb3IgdGhlIEZTIGNyaXRpY2FsIHNlY3Rpb24gZnJvbSB0aGUgYWxsb2NhdGlvbiByZWN1cnNpb25cXG4tICogcG9pbnQgb2Ygdmlldy4gVXNlIG1lbWFsbG9jX25vZnNfcmVzdG9yZSB0byBlbmQgdGhlIHNjb3BlIHdpdGggZmxhZ3NcXG4tICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cXG4rICogQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgY2FsbGluZ1xcbisgKiBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGNhbGxpbmcgaW50byBmaWxlc3lzdGVtc1xcbisgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsXFxuKyAqIGJ1dCAoZm9yIGV4YW1wbGUpIGlub2RlcyB3aWxsIG5vdCBiZS5cXG4rICpcXG4rICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2tcXG4rICogd2hpY2ggd291bGQgYmUgbmVlZGVkIGJ5IEZTIHJlY2xhaW0uICBXaGlsZSB3ZSBjb3VsZCB0aGVvcmV0aWNhbGx5XFxuKyAqIGNhbGwgaW50byBhIGRpZmZlcmVudCBmaWxlc3lzdGVtIGluIHRoaXMgY2FzZSwgaXQgY2FuIGJlIGEgZGVlcCBjYWxsXFxuKyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuXFxuKyAqXFxuKyAqIEZpbGVzeXN0ZW1zIG9mdGVuIGNob29zZSB0byBpbmNvcnBvcmF0ZSBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBhcyBwYXJ0XFxuKyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbFxcbisgKiBzZW5zZSwgaXQgaGFzIG11Y2ggdGhlIHNhbWUgZWZmZWN0IGFzIG5lc3RlZCBqb3VybmFsIHRyYW5zYWN0aW9uc1xcbisgKiBhcmUgZWl0aGVyIHByb2hpYml0ZWQgb3IgZXhwZW5zaXZlLlxcbisgKlxcbisgKiBBbHNvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUgaG9sZGluZ1xcbisgKiBhIGZpbGUgZm9saW8gbG9ja2VkLiAgSGlnaCBvcmRlciBhbGxvY2F0aW9ucyAoc3VjaCBhcyB0aG9zZSByZXF1ZXN0ZWRcXG4rICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uXFxuICAqXFxuICAqIENvbnRleHQ6IFRoaXMgZnVuY3Rpb24gaXMgc2FmZSB0byBiZSB1c2VkIGZyb20gYW55IGNvbnRleHQuXFxuICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuXFxuQEAgLTM4OSwxMCArNDAyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1lbWFsbG9jX25vZnNfc2F2ZSh2b2lkKVxcbiB9XFxuIFxcbiAvKipcXG4tICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlIC0gRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUuXFxuKyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZCBmaWxlc3lzdGVtIHJlY2xhaW0gc2NvcGUuXFxuICAqIEBmbGFnczogRmxhZ3MgdG8gcmVzdG9yZS5cXG4gICpcXG4tICogRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19ub2ZzX3NhdmUgZnVuY3Rpb24uXFxuKyAqIEVuZHMgdGhlIGltcGxpY2l0IG1lbW9yeSBhbGxvY2F0aW9uIHNjb3BlIHN0YXJ0ZWQgYnlcXG4rICogbWVtYWxsb2Nfbm9mc19zYXZlKCkuICBUaGlzIG1heSBub3QgZW5hYmxlIGFjY2VzcyB0byBmaWxlc3lzdGVtIHJlY2xhaW1cXG4rICogaWYgaXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRpbWUgbWVtYWxsb2Nfbm9mc19zYXZlKCkgd2FzIGNhbGxlZC5cXG4gICogQWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmbGFncyBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlXFxuICAqIHBhaXJpbmcgbWVtYWxsb2Nfbm9mc19zYXZlIGNhbGwuXFxuICAqL1xcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcXG5pbmRleCA2YWZlYzYzNjg4MWZiLi5lNjU4MDI5MWYyMTg1IDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC0xOTk0LDggKzE5OTQsNiBAQCBzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFxuIFxcdFxcdGlmICgoZmdwX2ZsYWdzIFxcdTAwMjYgRkdQX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpXFxuIFxcdFxcdFxcdGdmcCB8PSBfX0dGUF9XUklURTtcXG4tXFx0XFx0aWYgKGZncF9mbGFncyBcXHUwMDI2IEZHUF9OT0ZTKVxcbi1cXHRcXHRcXHRnZnAgXFx1MDAyNj0gfl9fR0ZQX0ZTO1xcbiBcXHRcXHRpZiAoZmdwX2ZsYWdzIFxcdTAwMjYgRkdQX05PV0FJVCkge1xcbiBcXHRcXHRcXHRnZnAgXFx1MDAyNj0gfkdGUF9LRVJORUw7XFxuIFxcdFxcdFxcdGdmcCB8PSBHRlBfTk9XQUlUO1xcbmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jXFxuaW5kZXggNmU1NTYzMjkwMjg3ZS4uOWMxMTZkNGJhOTYzYSAxMDA2NDRcXG4tLS0gYS9tbS9yZWFkYWhlYWQuY1xcbisrKyBiL21tL3JlYWRhaGVhZC5jXFxuQEAgLTIyNywxNyArMjI3LDcgQEAgdm9pZCBwYWdlX2NhY2hlX3JhX3VuYm91bmRlZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbiBcXHRnZnBfdCBnZnBfbWFzayA9IHJlYWRhaGVhZF9nZnBfbWFzayhtYXBwaW5nKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBtYXJrID0gVUxPTkdfTUFYLCBpID0gMDtcXG4gXFx0dW5zaWduZWQgaW50IG1pbl9ucnBhZ2VzID0gbWFwcGluZ19taW5fZm9saW9fbnJwYWdlcyhtYXBwaW5nKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFBhcnR3YXkgdGhyb3VnaCB0aGUgcmVhZGFoZWFkIG9wZXJhdGlvbiwgd2Ugd2lsbCBoYXZlIGFkZGVkXFxuLVxcdCAqIGxvY2tlZCBwYWdlcyB0byB0aGUgcGFnZSBjYWNoZSwgYnV0IHdpbGwgbm90IHlldCBoYXZlIHN1Ym1pdHRlZFxcbi1cXHQgKiB0aGVtIGZvciBJL08uICBBZGRpbmcgYW5vdGhlciBwYWdlIG1heSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSxcXG4tXFx0ICogd2hpY2ggY2FuIHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0uICBUZWxsaW5nIHRoZSBWTSB3ZSdyZSBpblxcbi1cXHQgKiB0aGUgbWlkZGxlIG9mIGEgZmlsZXN5c3RlbSBvcGVyYXRpb24gd2lsbCBjYXVzZSBpdCB0byBub3RcXG4tXFx0ICogdG91Y2ggZmlsZS1iYWNrZWQgcGFnZXMsIHByZXZlbnRpbmcgYSBkZWFkbG9jay4gIE1vc3QgKGFsbD8pXFxuLVxcdCAqIGZpbGVzeXN0ZW1zIGFscmVhZHkgc3BlY2lmeSBfX0dGUF9OT0ZTIGluIHRoZWlyIG1hcHBpbmcnc1xcbi1cXHQgKiBnZnBfbWFzaywgYnV0IGxldCdzIGJlIGV4cGxpY2l0IGhlcmUuXFxuLVxcdCAqL1xcbitcXHQvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2bWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrKTtcXG5AQCAtNTEyLDcgKzUwMiw3IEBAIHZvaWQgcGFnZV9jYWNoZV9yYV9vcmRlcihzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbiBcXG4gXFx0cmEtXFx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xcbiBcXG4tXFx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xcbitcXHQvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqL1xcbiBcXHRub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuIFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDI6NDMuNzE1MTc3OTY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjgxMTQ3NDAzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTlRGU19GU1wiLFxuICAgIFwiTlRGU19GU19XT0ZfQ09NUFJFU1NJT05cIixcbiAgICBcIlNRVUFTSEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19maWxlbWFwX2dldF9mb2xpb19tcG9sXCIsXG4gICAgXCJzcXVhc2hmc19jb3B5X2NhY2hlXCIsXG4gICAgXCJleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFcIixcbiAgICBcIm50ZnNfcmVhZF93b2ZfY29tcHJlc3NlZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIEZHUF9OT0ZTIGZsYWcgZnJvbSBjb3JlIHBhZ2UgY2FjaGUgQVBJcyAoX19maWxlbWFwX2dldF9mb2xpb19tcG9sKSBhbmQgYWRqdXN0cyBmb2xpbyBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIGNvbnRleHQgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIHNxdWFzaGZzLCBlcm9mcywgbnRmcywgYW5kIG5mcykuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgaW50cm9kdWNlcyBzY29wZWQgTk9GUyBjb250ZXh0cyAobWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmUpIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIEkvTyBhbmQgY2FjaGluZyBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIG1lbW9yeSByZWNsYWltIGFuZCBsb2NraW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTI0MzU2ZDdhYzY1ZTBmOWJkZWRmNjczMWY2YWEzODIyZDkwNzQ3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbmluZGV4IDY1OTc0ZTU3YWViZmIuLjg0YjNjZGM4ZTg4ZjEgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICplcm9mc19ncmFiX2ZvbGlvX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXMsXG4gXHRcdFx0XHRcdFx0ICAgIHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIF9fZmlsZW1hcF9nZXRfZm9saW8oYXMsIGluZGV4LFxuLVx0XHRcdEZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULFxuK1x0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRyZWFkYWhlYWRfZ2ZwX21hc2soYXMpIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi4xODg0YWJiMDk2MTQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTYwMSw5ICs2MDEsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0LyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeVxuLVx0ICogc3RhcnRlZCAqL1xuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4rXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcbkBAIC03MzQsNyArNzMyLDcgQEAgaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbiBcdH1cbiBcbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuK1x0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLFxuIFx0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xuaW5kZXggNDkzOTQxMjNiZDA5Ni4uZTM0MTI1YThhMmUyOCAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtNDQ3LDcgKzQ0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKm5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbitcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jXG5pbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5jXG4rKysgYi9mcy9udGZzL2lub2RlLmNcbkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLFxuIFx0bWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC1cdTAwM2VudGZzX2lubyk7XG4gXG4gXHQvKiBLZWVwIHRoZSBmaXJzdCBwYWdlIGNsZWFuIGFuZCB1cHRvZGF0ZSAqL1xuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4rXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4gXHRcdFx0XHQgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvd29mLmMgYi9mcy9udGZzL3dvZi5jXG5pbmRleCA4Zjg0YzIyMTJlZWVjLi5jOTgxYjRhM2I2OTU5IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy93b2YuY1xuKysrIGIvZnMvbnRmcy93b2YuY1xuQEAgLTQ2NCwxMCArNDY0LDkgQEAgc3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0Zm9saW8gPSB0YXJnZXQ7XG4gXHRcdFx0aXNfdGFyZ2V0ID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8oXG4tXHRcdFx0XHRtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMgfCBGR1BfTk9XQUlULFxuLVx0XHRcdFx0R0ZQX05PRlMpO1xuK1x0XHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbitcdFx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxuK1x0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdFx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0XHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0XHRpc190YXJnZXQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9maWxlLmMgYi9mcy9zcXVhc2hmcy9maWxlLmNcbmluZGV4IGQ4MzU5NGNlOTFkMjMuLjM0YzU1MGEyNjZiY2YgMTAwNjQ0XG4tLS0gYS9mcy9zcXVhc2hmcy9maWxlLmNcbisrKyBiL2ZzL3NxdWFzaGZzL2ZpbGUuY1xuQEAgLTM5OCw2ICszOTgsNyBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzcXVhc2hmc19zYl9pbmZvICptc2JsayA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuIFx0aW50IGksIG1hc2sgPSAoMSBcdTAwM2NcdTAwM2MgKG1zYmxrLVx1MDAzZWJsb2NrX2xvZyAtIFBBR0VfU0hJRlQpKSAtIDE7XG4gXHRpbnQgc3RhcnRfaW5kZXggPSBmb2xpby1cdTAwM2VpbmRleCBcdTAwMjYgfm1hc2ssIGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4IHwgbWFzaztcbitcdHVuc2lnbmVkIGludCBub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4gXG4gXHQvKlxuIFx0ICogTG9vcCBjb3B5aW5nIGRhdGFibG9jayBpbnRvIHBhZ2VzLiAgQXMgdGhlIGRhdGFibG9jayBsaWtlbHkgY292ZXJzXG5AQCAtNDE1LDcgKzQxNiw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRwdXNoX2ZvbGlvID0gKGkgPT0gZm9saW8tXHUwMDNlaW5kZXgpID8gZm9saW8gOlxuIFx0XHRcdF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaSxcbi1cdFx0XHRcdFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXG4rXHRcdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXG4gXHRcdGlmIChJU19FUlIocHVzaF9mb2xpbykpXG5AQCAtNDMwLDYgKzQzMSw4IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRpZiAoaSAhPSBmb2xpby1cdTAwM2VpbmRleClcbiBcdFx0XHRmb2xpb19wdXQocHVzaF9mb2xpbyk7XG4gXHR9XG4rXG4rXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mcyk7XG4gfVxuIFxuIC8qIFJlYWQgZGF0YWJsb2NrIHN0b3JlZCBwYWNrZWQgaW5zaWRlIGEgZnJhZ21lbnQgKHRhaWwtZW5kIHBhY2tlZCBibG9jaykgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAwYWRmYTY2MDU2NTNkLi5iZmY4YjcyNjRmYjAyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtNjk3LDcgKzY5Nyw2IEBAIHBnb2ZmX3QgcGFnZV9jYWNoZV9wcmV2X21pc3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gICogICBmb2xpbyBpcyBhbHJlYWR5IGluIGNhY2hlLiAgSWYgdGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQsIHVubG9jayBpdFxuICAqICAgYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGNhbiBkbyB0aGUgc2FtZSBkYW5jZS5cbiAgKiAqICVGR1BfV1JJVEUgLSBUaGUgZm9saW8gd2lsbCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBjYWxsZXIuXG4tICogKiAlRkdQX05PRlMgLSBfX0dGUF9GUyB3aWxsIGdldCBjbGVhcmVkIGluIGdmcC5cbiAgKiAqICVGR1BfTk9XQUlUIC0gRG9uJ3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suXG4gICogKiAlRkdQX1NUQUJMRSAtIFdhaXQgZm9yIHRoZSBmb2xpbyB0byBiZSBzdGFibGUgKGZpbmlzaGVkIHdyaXRlYmFjaylcbiAgKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU9cbkBAIC03MTAsMTEgKzcwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7XG4gI2RlZmluZSBGR1BfTE9DS1x0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwMilcbiAjZGVmaW5lIEZHUF9DUkVBVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwNClcbiAjZGVmaW5lIEZHUF9XUklURVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcbi0jZGVmaW5lIEZHUF9OT0ZTXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuLSNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbi0jZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcbi0jZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4tI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxuKyNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcbisjZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbisjZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4rI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuICNkZWZpbmUgRkdGX0dFVF9PUkRFUihmZ2YpXHQoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgXHUwMDNlXHUwMDNlIDI2KVx0LyogdG9wIDYgYml0cyAqL1xuIFxuICNkZWZpbmUgRkdQX1dSSVRFQkVHSU5cdFx0KEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSlcbkBAIC05MjksNyArOTI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ3JhYl9jYWNoZV9wYWdlX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbitcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuaW5kZXggZDdjNmE5NDJhYTdlMC4uZjc2YmUxMTQxYjA2NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG5AQCAtMzcyLDEzICszNzIsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX25vaW9fcmVzdG9yZSh1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gfVxuIFxuIC8qKlxuLSAqIG1lbWFsbG9jX25vZnNfc2F2ZSAtIE1hcmtzIGltcGxpY2l0IEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4rICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb25zIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4tICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc29cbi0gKiB0aGV5IGFyZSBzYWZlIGZvciB0aGUgRlMgY3JpdGljYWwgc2VjdGlvbiBmcm9tIHRoZSBhbGxvY2F0aW9uIHJlY3Vyc2lvblxuLSAqIHBvaW50IG9mIHZpZXcuIFVzZSBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUgdG8gZW5kIHRoZSBzY29wZSB3aXRoIGZsYWdzXG4tICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cbisgKiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBjYWxsaW5nXG4rICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBjYWxsaW5nIGludG8gZmlsZXN5c3RlbXNcbisgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsXG4rICogYnV0IChmb3IgZXhhbXBsZSkgaW5vZGVzIHdpbGwgbm90IGJlLlxuKyAqXG4rICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2tcbisgKiB3aGljaCB3b3VsZCBiZSBuZWVkZWQgYnkgRlMgcmVjbGFpbS4gIFdoaWxlIHdlIGNvdWxkIHRoZW9yZXRpY2FsbHlcbisgKiBjYWxsIGludG8gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSBpbiB0aGlzIGNhc2UsIGl0IGNhbiBiZSBhIGRlZXAgY2FsbFxuKyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuXG4rICpcbisgKiBGaWxlc3lzdGVtcyBvZnRlbiBjaG9vc2UgdG8gaW5jb3Jwb3JhdGUgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gYXMgcGFydFxuKyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbFxuKyAqIHNlbnNlLCBpdCBoYXMgbXVjaCB0aGUgc2FtZSBlZmZlY3QgYXMgbmVzdGVkIGpvdXJuYWwgdHJhbnNhY3Rpb25zXG4rICogYXJlIGVpdGhlciBwcm9oaWJpdGVkIG9yIGV4cGVuc2l2ZS5cbisgKlxuKyAqIEFsc28gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSB3aGlsZSBob2xkaW5nXG4rICogYSBmaWxlIGZvbGlvIGxvY2tlZC4gIEhpZ2ggb3JkZXIgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgdGhvc2UgcmVxdWVzdGVkXG4rICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uXG4gICpcbiAgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgdXNlZCBmcm9tIGFueSBjb250ZXh0LlxuICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuXG5AQCAtMzg5LDEwICs0MDIsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2Nfbm9mc19zYXZlKHZvaWQpXG4gfVxuIFxuIC8qKlxuLSAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZHMgdGhlIGltcGxpY2l0IEdGUF9OT0ZTIHNjb3BlLlxuKyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZCBmaWxlc3lzdGVtIHJlY2xhaW0gc2NvcGUuXG4gICogQGZsYWdzOiBGbGFncyB0byByZXN0b3JlLlxuICAqXG4tICogRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19ub2ZzX3NhdmUgZnVuY3Rpb24uXG4rICogRW5kcyB0aGUgaW1wbGljaXQgbWVtb3J5IGFsbG9jYXRpb24gc2NvcGUgc3RhcnRlZCBieVxuKyAqIG1lbWFsbG9jX25vZnNfc2F2ZSgpLiAgVGhpcyBtYXkgbm90IGVuYWJsZSBhY2Nlc3MgdG8gZmlsZXN5c3RlbSByZWNsYWltXG4rICogaWYgaXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRpbWUgbWVtYWxsb2Nfbm9mc19zYXZlKCkgd2FzIGNhbGxlZC5cbiAgKiBBbHdheXMgbWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIGZsYWdzIGlzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGVcbiAgKiBwYWlyaW5nIG1lbWFsbG9jX25vZnNfc2F2ZSBjYWxsLlxuICAqL1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNmFmZWM2MzY4ODFmYi4uZTY1ODAyOTFmMjE4NSAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTk5NCw4ICsxOTk0LDYgQEAgc3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICgoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfV1JJVEUpIFx1MDAyNlx1MDAyNiBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpXG4gXHRcdFx0Z2ZwIHw9IF9fR0ZQX1dSSVRFO1xuLVx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfTk9GUylcbi1cdFx0XHRnZnAgXHUwMDI2PSB+X19HRlBfRlM7XG4gXHRcdGlmIChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9OT1dBSVQpIHtcbiBcdFx0XHRnZnAgXHUwMDI2PSB+R0ZQX0tFUk5FTDtcbiBcdFx0XHRnZnAgfD0gR0ZQX05PV0FJVDtcbmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jXG5pbmRleCA2ZTU1NjMyOTAyODdlLi45YzExNmQ0YmE5NjNhIDEwMDY0NFxuLS0tIGEvbW0vcmVhZGFoZWFkLmNcbisrKyBiL21tL3JlYWRhaGVhZC5jXG5AQCAtMjI3LDE3ICsyMjcsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4gXHRnZnBfdCBnZnBfbWFzayA9IHJlYWRhaGVhZF9nZnBfbWFzayhtYXBwaW5nKTtcbiBcdHVuc2lnbmVkIGxvbmcgbWFyayA9IFVMT05HX01BWCwgaSA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgbWluX25ycGFnZXMgPSBtYXBwaW5nX21pbl9mb2xpb19ucnBhZ2VzKG1hcHBpbmcpO1xuLVxuLVx0Lypcbi1cdCAqIFBhcnR3YXkgdGhyb3VnaCB0aGUgcmVhZGFoZWFkIG9wZXJhdGlvbiwgd2Ugd2lsbCBoYXZlIGFkZGVkXG4tXHQgKiBsb2NrZWQgcGFnZXMgdG8gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aWxsIG5vdCB5ZXQgaGF2ZSBzdWJtaXR0ZWRcbi1cdCAqIHRoZW0gZm9yIEkvTy4gIEFkZGluZyBhbm90aGVyIHBhZ2UgbWF5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LFxuLVx0ICogd2hpY2ggY2FuIHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0uICBUZWxsaW5nIHRoZSBWTSB3ZSdyZSBpblxuLVx0ICogdGhlIG1pZGRsZSBvZiBhIGZpbGVzeXN0ZW0gb3BlcmF0aW9uIHdpbGwgY2F1c2UgaXQgdG8gbm90XG4tXHQgKiB0b3VjaCBmaWxlLWJhY2tlZCBwYWdlcywgcHJldmVudGluZyBhIGRlYWRsb2NrLiAgTW9zdCAoYWxsPylcbi1cdCAqIGZpbGVzeXN0ZW1zIGFscmVhZHkgc3BlY2lmeSBfX0dGUF9OT0ZTIGluIHRoZWlyIG1hcHBpbmcnc1xuLVx0ICogZ2ZwX21hc2ssIGJ1dCBsZXQncyBiZSBleHBsaWNpdCBoZXJlLlxuLVx0ICovXG4rXHQvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqL1xuIFx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2spO1xuQEAgLTUxMiw3ICs1MDIsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiBcbiBcdHJhLVx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xuIFxuLVx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xuK1x0LyogQWxsb2NhdGluZyB3aXRoIGxvY2tlZCBmb2xpb3MgKi9cbiBcdG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0Mjo0My43MTUxNzk1MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODQ2NzI5NTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGRvZXMuIEl0IHNlZW1zIGxpa2UgaXQncyBzeXN0ZW1hdGljYWxseSByZW1vdmluZyB0aGUgYEZHUF9OT0ZTYCBmbGFnIGZyb20gdmFyaW91cyBwYWdlIGNhY2hlLXJlbGF0ZWQgZnVuY3Rpb24gY2FsbHMgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtczogYGVyb2ZzYCwgYGV4dDRgLCBgbmZzYCwgYG50ZnNgLCBgc3F1YXNoZnNgLCBhbmQgc29tZSBjb3JlIGBtbWAgYW5kIGBpbmNsdWRlYCBoZWFkZXJzLiBFc3NlbnRpYWxseSwgaXQncyBjbGVhbmluZyB1cCB0aGUgd2F5IE5PRlMgKE5vIEZpbGVzeXN0ZW0pIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQuIEkgc2VlIHRoaXMgaGFwcGVuaW5nIHRocm91Z2ggYSBjb25zaXN0ZW50IHJlbW92YWwgb2YgdGhlIGZsYWcgYW5kIHVzaW5nIG5ldyBtZXRob2RzIHN1Y2ggYXMgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBhbmQgYG1hcHBpbmdfZ2ZwX21hc2soKWAgb3Igc2NvcGVkIE5PRlMgY29udGV4dCBpbnN0ZWFkLlxuXG5UaGUgYEZHUF9OT0ZTYCBmbGFnIHdhcyB1c2VkIHRvIHN0cmlwIGBfX0dGUF9GU2AgZnJvbSBhbGxvY2F0aW9uIGZsYWdzLiBOb3csIGl0IGFwcGVhcnMgdGhlIGtlcm5lbCBpcyBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLCB3aGljaCBpcyBnb29kIOKAkyBjbGVhbmVyIGFuZCBwb3RlbnRpYWxseSBzYWZlci4gVGhleSdyZSB1cGRhdGluZyB0aGUgZmxhZyBkZWZpbml0aW9ucyBpbiBgcGFnZW1hcC5oYCBhbmQgcmVtb3ZpbmcgdGhlIGhhbmRsaW5nIG9mIGBGR1BfTk9GU2AgaW4gYG1tL2ZpbGVtYXAuY2AuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgYSBwdXJlbHkgaW50ZXJuYWwgcmVmYWN0b3JpbmcsIG9yIGRvZXMgaXQgaW50cm9kdWNlIGNoYW5nZXMgdGhhdCBtaWdodCBiZSBleHBsb2l0YWJsZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgKmxvb2tzKiBsaWtlIGEgY2xlYW51cCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGNoYW5nZXMgaW4gbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgdGhhdCBjb3VsZCB0cmlnZ2VyIHNvbWV0aGluZyBpbnRlcmVzdGluZy5cblxuQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBzaG91bGQgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhlIGtlcm5lbCBtYWludGFpbmVyIGd1aWRlbGluZXMgZm9yIGRldGVybWluaW5nIGlmIGEgcGF0Y2ggaXMgV29ydGhGdXp6aW5nLiBMZXQncyBzZWUuLi4gdGhlIHJ1bGVzIG1lbnRpb24gdGhhdCBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBhbmQgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBhcmVuJ3QgdHlwaWNhbGx5IHdvcnRoIGZ1enppbmcsIG5vciBhcmUgdW5yZWFjaGFibGUgY29kZSBwYXRocyBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycycgdGVhcmRvd24uXG5cblNvLCBpcyB0aGlzIGZ1bmN0aW9uYWwgb3IganVzdCBhIHJlZmFjdG9yaW5nPyBMZXQncyB6b29tIGluIG9uIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50YCBhbmQgYGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YWAuIFdoYXQgYXJlIHRob3NlIGZ1bmN0aW9ucyBkb2luZyBpbiBgZXh0NGA/IEhtbSwgdGhlIGNvbW1lbnQgc2F5cyB3ZSBjYW4ndCByZWN1cnNlIGludG8gdGhlIGZpbGVzeXN0ZW0gYmVjYXVzZSB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBzdGFydGVkLiBTbywgYmVmb3JlIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLCBpcyB0aGVyZSBhIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgY2FsbCwgb3IgaXMgYFBGX01FTUFMTE9DX05PRlNgIGFscmVhZHkgc2V0PyBJdCBsb29rcyBsaWtlIGBleHQ0X2pvdXJuYWxfc3RhcnRgIHByb2JhYmx5IHRha2VzIGNhcmUgb2YgdGhhdC4gSSBzaG91bGQgZ3JlcCBmb3IgYG1lbWFsbG9jX25vZnNfc2F2ZWAgd2l0aGluIHRoZSBgZnMvZXh0NGAgb3IgYGZzL2piZDJgIGRpcmVjdG9yeSB0byBjb25maXJtLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gdGhpcyBwYXRjaCAqaXMqIHByb2JhYmx5IGEgcmVmYWN0b3JpbmcsIGJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qIHRoYXQgdGhlIGV4aXN0aW5nIGxvZ2ljIGlzIHRha2luZyBOT0ZTIGludG8gYWNjb3VudCBiZWZvcmUgSSBydWxlIGl0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NDowMi4xODI0Nzg0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTg4Njg3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtYWxsb2Nfbm9mc19zYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUyOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZnMvYnRyZnMvYWNsLmM9NTg9aW50IF9fYnRyZnNfc2V0X2FjbChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2J0cmZzL2FjbC5jLTg1LVxcdFxcdCAqL1xcbmZzL2J0cmZzL2FjbC5jOjg2OlxcdFxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL2FjbC5jLTg3LVxcdFxcdHZhbHVlID0gcG9zaXhfYWNsX3RvX3hhdHRyKFxcdTAwMjZpbml0X3VzZXJfbnMsIGFjbCwgXFx1MDAyNnNpemUsIEdGUF9LRVJORUwpO1xcbi0tXFxuZnMvYnRyZnMvY29tcHJlc3Npb24uYz03OTE9c3RydWN0IGxpc3RfaGVhZCAqYnRyZnNfZ2V0X3dvcmtzcGFjZShzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywgaW50IHR5cGUsIGludCBsZXZlbClcXG4tLVxcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmMtODM3LVxcdCAqL1xcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmM6ODM4OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL2NvbXByZXNzaW9uLmMtODM5LVxcdHdvcmtzcGFjZSA9IGFsbG9jX3dvcmtzcGFjZShmc19pbmZvLCB0eXBlLCBsZXZlbCk7XFxuLS1cXG5mcy9idHJmcy9kaXNrLWlvLmM9ODE3PXN0cnVjdCBidHJmc19yb290ICpidHJmc19jcmVhdGVfdHJlZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucyxcXG4tLVxcbmZzL2J0cmZzL2Rpc2staW8uYy04MzAtXFx0ICovXFxuZnMvYnRyZnMvZGlzay1pby5jOjgzMTpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9kaXNrLWlvLmMtODMyLVxcdHJvb3QgPSBidHJmc19hbGxvY19yb290KGZzX2luZm8sIG9iamVjdGlkLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmZzL2J0cmZzL2Rpc2staW8uYz00NzUwPXN0YXRpYyB2b2lkIGJ0cmZzX2Rlc3Ryb3lfZGVsYWxsb2NfaW5vZGVzKHN0cnVjdCBidHJmc19yb290ICpyb290KVxcbi0tXFxuZnMvYnRyZnMvZGlzay1pby5jLTQ3NzItXFxuZnMvYnRyZnMvZGlzay1pby5jOjQ3NzM6XFx0XFx0XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvZGlzay1pby5jLTQ3NzQtXFx0XFx0XFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLS1cXG5mcy9idHJmcy9kaXNrLWlvLmM9NDg2Mz1zdGF0aWMgdm9pZCBidHJmc19jbGVhbnVwX2JnX2lvKHN0cnVjdCBidHJmc19ibG9ja19ncm91cCAqY2FjaGUpXFxuLS1cXG5mcy9idHJmcy9kaXNrLWlvLmMtNDg3MC1cXG5mcy9idHJmcy9kaXNrLWlvLmM6NDg3MTpcXHRcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9kaXNrLWlvLmMtNDg3Mi1cXHRcXHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4tLVxcbmZzL2J0cmZzL2ZpbGUtaXRlbS5jPTgzOT1pbnQgYnRyZnNfY3N1bV9vbmVfYmlvKHN0cnVjdCBidHJmc19iaW8gKmJiaW8sIGJvb2wgYXN5bmMpXFxuLS1cXG5mcy9idHJmcy9maWxlLWl0ZW0uYy04NDctXFxuZnMvYnRyZnMvZmlsZS1pdGVtLmM6ODQ4OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL2ZpbGUtaXRlbS5jLTg0OS1cXHRzdW1zID0ga3Z6YWxsb2MoYnRyZnNfb3JkZXJlZF9zdW1fc2l6ZShmc19pbmZvLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSksXFxuLS1cXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmM9ODM9c3RhdGljIHN0cnVjdCBpbm9kZSAqX19sb29rdXBfZnJlZV9zcGFjZV9pbm9kZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCxcXG4tLVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYy0xMTgtXFx0ICovXFxuZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jOjExOTpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMtMTIwLVxcdGlub2RlID0gYnRyZnNfaWdldF9wYXRoKGxvY2F0aW9uLm9iamVjdGlkLCByb290LCBwYXRoKTtcXG4tLVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtdHJlZS5jPTE1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyAqYWxsb2NfYml0bWFwKHUzMiBiaXRtYXBfc2l6ZSlcXG4tLVxcbmZzL2J0cmZzL2ZyZWUtc3BhY2UtdHJlZS5jLTE2OS1cXHQgKi9cXG5mcy9idHJmcy9mcmVlLXNwYWNlLXRyZWUuYzoxNzA6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvZnJlZS1zcGFjZS10cmVlLmMtMTcxLVxcdHJldCA9IGt2emFsbG9jKGJpdG1hcF9yb3VuZGVkX3NpemUsIEdGUF9LRVJORUwpO1xcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz0xMjY9c3RhdGljIGludCBkYXRhX3JlbG9jX3ByaW50X3dhcm5pbmdfaW5vZGUodTY0IGludW0sIHU2NCBvZmZzZXQsIHU2NCBudW1fYnl0ZXMsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jLTE2Mi1cXG5mcy9idHJmcy9pbm9kZS5jOjE2MzpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9pbm9kZS5jLTE2NC1cXHRpcGF0aCA9IGluaXRfaXBhdGgoNDA5NiwgbG9jYWxfcm9vdCwgXFx1MDAyNndhcm4tXFx1MDAzZXBhdGgpO1xcbi0tXFxuZnMvYnRyZnMvaW5vZGUuYz0xNTY1PXN0YXRpYyBib29sIHJ1bl9kZWxhbGxvY19jb21wcmVzc2VkKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jLTE1NzgtXFxuZnMvYnRyZnMvaW5vZGUuYzoxNTc5OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL2lub2RlLmMtMTU4MC1cXHRjdHggPSBrdm1hbGxvY19mbGV4KCpjdHgsIGNodW5rcywgbnVtX2NodW5rcyk7XFxuLS1cXG5mcy9idHJmcy9zY3J1Yi5jPTQ4Mj1zdGF0aWMgaW50IHNjcnViX3ByaW50X3dhcm5pbmdfaW5vZGUodTY0IGludW0sIHU2NCBvZmZzZXQsIHU2NCBudW1fYnl0ZXMsXFxuLS1cXG5mcy9idHJmcy9zY3J1Yi5jLTUyNy1cXHQgKi9cXG5mcy9idHJmcy9zY3J1Yi5jOjUyODpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9zY3J1Yi5jLTUyOS1cXHRpcGF0aCA9IGluaXRfaXBhdGgoNDA5NiwgbG9jYWxfcm9vdCwgc3dhcm4tXFx1MDAzZXBhdGgpO1xcbi0tXFxuZnMvYnRyZnMvc2NydWIuYz0zMDQzPWludCBidHJmc19zY3J1Yl9kZXYoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIHU2NCBkZXZpZCwgdTY0IHN0YXJ0LFxcbi0tXFxuZnMvYnRyZnMvc2NydWIuYy0zMTM0LVxcdCAqL1xcbmZzL2J0cmZzL3NjcnViLmM6MzEzNTpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy9zY3J1Yi5jLTMxMzYtXFx0aWYgKCFpc19kZXZfcmVwbGFjZSkge1xcbi0tXFxuZnMvYnRyZnMvc3lzZnMuYz0xODE4PXZvaWQgYnRyZnNfc3lzZnNfYWRkX2Jsb2NrX2dyb3VwX3R5cGUoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwICpjYWNoZSlcXG4tLVxcbmZzL2J0cmZzL3N5c2ZzLmMtMTgzMy1cXHQgKi9cXG5mcy9idHJmcy9zeXNmcy5jOjE4MzQ6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvc3lzZnMuYy0xODM1LVxcbi0tXFxuZnMvYnRyZnMvc3lzZnMuYz0yMTM0PWludCBidHJmc19zeXNmc19hZGRfZGV2aWNlKHN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZSlcXG4tLVxcbmZzL2J0cmZzL3N5c2ZzLmMtMjE0OS1cXG5mcy9idHJmcy9zeXNmcy5jOjIxNTA6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvc3lzZnMuYy0yMTUxLVxcbi0tXFxuZnMvYnRyZnMvdHJhbnNhY3Rpb24uYz0xNjYxPXN0YXRpYyBub2lubGluZSBpbnQgY3JlYXRlX3BlbmRpbmdfc25hcHNob3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsXFxuLS1cXG5mcy9idHJmcy90cmFuc2FjdGlvbi5jLTE2OTYtXFx0ICovXFxuZnMvYnRyZnMvdHJhbnNhY3Rpb24uYzoxNjk3OlxcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy90cmFuc2FjdGlvbi5jLTE2OTgtXFx0cGVuZGluZy1cXHUwMDNlZXJyb3IgPSBmc2NyeXB0X3NldHVwX2ZpbGVuYW1lKFxcdTAwMjZwYXJlbnRfaW5vZGUtXFx1MDAzZXZmc19pbm9kZSxcXG4tLVxcbmZzL2J0cmZzL3RyZWUtbG9nLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgYnRyZnNfaW5vZGUgKmJ0cmZzX2lnZXRfbG9nZ2luZyh1NjQgb2JqZWN0aWQsIHN0cnVjdCBidHJmc19yb290ICpyb290KVxcbi0tXFxuZnMvYnRyZnMvdHJlZS1sb2cuYy0yNjMtXFx0ICovXFxuZnMvYnRyZnMvdHJlZS1sb2cuYzoyNjQ6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvdHJlZS1sb2cuYy0yNjUtXFx0aW5vZGUgPSBidHJmc19pZ2V0KG9iamVjdGlkLCByb290KTtcXG4tLVxcbmZzL2J0cmZzL3ZvbHVtZXMuYz03NTk9c3RhdGljIG5vaW5saW5lIHN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZV9saXN0X2FkZChjb25zdCBjaGFyICpwYXRoLFxcbi0tXFxuZnMvYnRyZnMvdm9sdW1lcy5jLTg0MC1cXG5mcy9idHJmcy92b2x1bWVzLmM6ODQxOlxcdFxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3ZvbHVtZXMuYy04NDItXFx0XFx0ZGV2aWNlID0gYnRyZnNfYWxsb2NfZGV2aWNlKE5VTEwsIFxcdTAwMjZkZXZpZCxcXG4tLVxcbmZzL2J0cmZzL3ZvbHVtZXMuYz03NDcxPXN0YXRpYyBzdHJ1Y3QgYnRyZnNfZGV2aWNlICphZGRfbWlzc2luZ19kZXYoc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKmZzX2RldmljZXMsXFxuLS1cXG5mcy9idHJmcy92b2x1bWVzLmMtNzQ4My1cXG5mcy9idHJmcy92b2x1bWVzLmM6NzQ4NDpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy92b2x1bWVzLmMtNzQ4NS1cXHRkZXZpY2UgPSBidHJmc19hbGxvY19kZXZpY2UoTlVMTCwgXFx1MDAyNmRldmlkLCBkZXZfdXVpZCwgTlVMTCk7XFxuLS1cXG5mcy9idHJmcy94YXR0ci5jPTQ4Mz1zdGF0aWMgaW50IGJ0cmZzX2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2J0cmZzL3hhdHRyLmMtNDk1LVxcdCAqL1xcbmZzL2J0cmZzL3hhdHRyLmM6NDk2OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3hhdHRyLmMtNDk3LVxcdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXFx1MDAzZW5hbWUgIT0gTlVMTDsgeGF0dHIrKykge1xcbi0tXFxuZnMvYnRyZnMvem9uZWQuYz04MzA9c3RhdGljIGludCBzYl9sb2dfbG9jYXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJsa196b25lICp6b25lcyxcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmMtODU3LVxcbmZzL2J0cmZzL3pvbmVkLmM6ODU4OlxcdFxcdFxcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy96b25lZC5jLTg1OS1cXHRcXHRcXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxcbi0tXFxuZnMvYnRyZnMvem9uZWQuYz05NzU9aW50IGJ0cmZzX2FkdmFuY2Vfc2JfbG9nKHN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZSwgaW50IG1pcnJvcilcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmMtMTAwOS1cXG5mcy9idHJmcy96b25lZC5jOjEwMTA6XFx0XFx0XFx0XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3pvbmVkLmMtMTAxMS1cXHRcXHRcXHRcXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGRldmljZS1cXHUwMDNlYmRldixcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmM9MTAzMD1pbnQgYnRyZnNfcmVzZXRfc2JfbG9nX3pvbmVzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBtaXJyb3IpXFxuLS1cXG5mcy9idHJmcy96b25lZC5jLTEwNDgtXFxuZnMvYnRyZnMvem9uZWQuYzoxMDQ5OlxcdG5vZnNfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy96b25lZC5jLTEwNTAtXFx0cmV0ID0gYmxrZGV2X3pvbmVfbWdtdChiZGV2LCBSRVFfT1BfWk9ORV9SRVNFVCxcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmM9MTE2ND1pbnQgYnRyZnNfcmVzZXRfZGV2aWNlX3pvbmUoc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlLCB1NjQgcGh5c2ljYWwsXFxuLS1cXG5mcy9idHJmcy96b25lZC5jLTExNzAtXFx0KmJ5dGVzID0gMDtcXG5mcy9idHJmcy96b25lZC5jOjExNzE6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3pvbmVkLmMtMTE3Mi1cXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGRldmljZS1cXHUwMDNlYmRldiwgUkVRX09QX1pPTkVfUkVTRVQsXFxuLS1cXG5mcy9idHJmcy96b25lZC5jPTEzMjQ9c3RhdGljIGludCBidHJmc19sb2FkX3pvbmVfaW5mbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywgaW50IHpvbmVfaWR4LFxcbi0tXFxuZnMvYnRyZnMvem9uZWQuYy0xMzgyLVxcbmZzL2J0cmZzL3pvbmVkLmM6MTM4MzpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy96b25lZC5jLTEzODQtXFx0cmV0ID0gYnRyZnNfZ2V0X2Rldl96b25lKGRldmljZSwgaW5mby1cXHUwMDNlcGh5c2ljYWwsIFxcdTAwMjZ6b25lKTtcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmM9MjMyMT1zdGF0aWMgaW50IHJlYWRfem9uZV9pbmZvKHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLCB1NjQgbG9naWNhbCxcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmMtMjM0MS1cXG5mcy9idHJmcy96b25lZC5jOjIzNDI6XFx0bm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvem9uZWQuYy0yMzQzLVxcdG5taXJyb3JzID0gKGludCliaW9jLVxcdTAwM2VudW1fc3RyaXBlcztcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmM9MjUxMT1zdGF0aWMgaW50IGNhbGxfem9uZV9maW5pc2goc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwICpibG9ja19ncm91cCxcXG4tLVxcbmZzL2J0cmZzL3pvbmVkLmMtMjUyNy1cXG5mcy9idHJmcy96b25lZC5jOjI1Mjg6XFx0XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2J0cmZzL3pvbmVkLmMtMjUyOS1cXHRcXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGRldmljZS1cXHUwMDNlYmRldiwgUkVRX09QX1pPTkVfRklOSVNILFxcbi0tXFxuZnMvYnRyZnMvem9uZWQuYz0zMTEyPWludCBidHJmc19yZXNldF91bnVzZWRfYmxvY2tfZ3JvdXBzKHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvLCB1NjQgbnVtX2J5dGVzKVxcbi0tXFxuZnMvYnRyZnMvem9uZWQuYy0zMTc2LVxcbmZzL2J0cmZzL3pvbmVkLmM6MzE3NzpcXHRcXHRcXHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvYnRyZnMvem9uZWQuYy0zMTc4LVxcdFxcdFxcdHJldCA9IGJsa2Rldl96b25lX21nbXQoc3RyaXBlLVxcdTAwM2VkZXYtXFx1MDAzZWJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxcbi0tXFxuZnMvYnRyZnMvenN0ZC5jPTI4NT1zdHJ1Y3QgbGlzdF9oZWFkICp6c3RkX2dldF93b3Jrc3BhY2Uoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIGludCBsZXZlbClcXG4tLVxcbmZzL2J0cmZzL3pzdGQuYy0zMDEtXFxuZnMvYnRyZnMvenN0ZC5jOjMwMjpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9idHJmcy96c3RkLmMtMzAzLVxcdHdzID0genN0ZF9hbGxvY193b3Jrc3BhY2UoZnNfaW5mbywgbGV2ZWwpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9pby5jPTc1PXN0YXRpYyBpbnQgY2FjaGVmaWxlc19yZWFkKHN0cnVjdCBuZXRmc19jYWNoZV9yZXNvdXJjZXMgKmNyZXMsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL2lvLmMtMTU3LVxcdHRyYWNlX2NhY2hlZmlsZXNfcmVhZChvYmplY3QsIGZpbGVfaW5vZGUoZmlsZSksIGtpLVxcdTAwM2Vpb2NiLmtpX3BvcywgbGVuIC0gc2tpcHBlZCk7XFxuZnMvY2FjaGVmaWxlcy9pby5jOjE1ODpcXHRvbGRfbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2NhY2hlZmlsZXMvaW8uYy0xNTktXFx0cmV0ID0gY2FjaGVmaWxlc19pbmplY3RfcmVhZF9lcnJvcigpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9pby5jPTI4MT1pbnQgX19jYWNoZWZpbGVzX3dyaXRlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pby5jLTMyOC1cXHR0cmFjZV9jYWNoZWZpbGVzX3dyaXRlKG9iamVjdCwgZmlsZV9pbm9kZShmaWxlKSwga2ktXFx1MDAzZWlvY2Iua2lfcG9zLCBsZW4pO1xcbmZzL2NhY2hlZmlsZXMvaW8uYzozMjk6XFx0b2xkX25vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9jYWNoZWZpbGVzL2lvLmMtMzMwLVxcdHJldCA9IGNhY2hlZmlsZXNfaW5qZWN0X3dyaXRlX2Vycm9yKCk7XFxuLS1cXG5mcy9jZXBoL21kc19jbGllbnQuYz00MDExPXN0YXRpYyB2b2lkIGhhbmRsZV9yZXBseShzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IGNlcGhfbXNnICptc2cpXFxuLS1cXG5mcy9jZXBoL21kc19jbGllbnQuYy00MTY4LVxcdCAqL1xcbmZzL2NlcGgvbWRzX2NsaWVudC5jOjQxNjk6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2NlcGgvbWRzX2NsaWVudC5jLTQxNzAtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xODg1PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfd3JpdGVwYWdlc19kb3duX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE4ODctXFx0cGVyY3B1X2Rvd25fcmVhZChcXHUwMDI2RVhUNF9TQihzYiktXFx1MDAzZXNfd3JpdGVwYWdlc19yd3NlbSk7XFxuZnMvZXh0NC9leHQ0Lmg6MTg4ODpcXHRyZXR1cm4gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvZXh0NC9leHQ0LmgtMTg4OS19XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xODk3PXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfd3JpdGVwYWdlc19kb3duX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xODk5LVxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc193cml0ZXBhZ2VzX3J3c2VtKTtcXG5mcy9leHQ0L2V4dDQuaDoxOTAwOlxcdHJldHVybiBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9leHQ0L2V4dDQuaC0xOTAxLX1cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE5MDk9c3RhdGljIGlubGluZSBpbnQgZXh0NF9mY19sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xOTExLVxcdG11dGV4X2xvY2soXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX2ZjX2xvY2spO1xcbmZzL2V4dDQvZXh0NC5oOjE5MTI6XFx0cmV0dXJuIG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2V4dDQvZXh0NC5oLTE5MTMtfVxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuYz0zMz1zdGF0aWMgaGFuZGxlX3QgKmV4dDRfZ2V0X25vam91cm5hbCh2b2lkKVxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuYy00Ny1cXHRcXHQgKi9cXG5mcy9leHQ0L2V4dDRfamJkMi5jOjQ4OlxcdFxcdGhhbmRsZS1cXHUwMDNlc2F2ZWRfYWxsb2NfY29udGV4dCA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2V4dDQvZXh0NF9qYmQyLmMtNDktXFx0XFx0Y3VycmVudC1cXHUwMDNlam91cm5hbF9pbmZvID0gaGFuZGxlO1xcbi0tXFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jPTYwPXN0YXRpYyBpbnQgbWV4dF9mb2xpb19kb3VibGVfbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlMSwgc3RydWN0IGlub2RlICppbm9kZTIsXFxuLS1cXG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtNzctXFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jOjc4OlxcdGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jLTc5LVxcdGZncF9mbGFncyB8PSBmZ2Zfc2V0X29yZGVyKGxlbik7XFxuLS1cXG5mcy9mMmZzL2YyZnMuaD0zMDQ3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmMmZzX2dyYWJfY2FjaGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9mMmZzL2YyZnMuaC0zMDcwLVxcbmZzL2YyZnMvZjJmcy5oOjMwNzE6XFx0ZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9mMmZzL2YyZnMuaC0zMDcyLVxcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwgRkdQX1dSSVRFQkVHSU4sXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYz0xOTg3PXN0YXRpYyBpbnQgX19mMmZzX2lzc3VlX2Rpc2NhcmRfem9uZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy0yMDIyLVxcdFxcdFxcdHRyYWNlX2YyZnNfaXNzdWVfcmVzZXRfem9uZShiZGV2LCBibGtzdGFydCk7XFxuZnMvZjJmcy9zZWdtZW50LmM6MjAyMzpcXHRcXHRcXHRub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvZjJmcy9zZWdtZW50LmMtMjAyNC1cXHRcXHRcXHRyZXQgPSBibGtkZXZfem9uZV9tZ210KGJkZXYsIFJFUV9PUF9aT05FX1JFU0VULFxcbi0tXFxuZnMvZjJmcy9zZWdtZW50LmM9NTI4NT1zdGF0aWMgaW50IGNoZWNrX3pvbmVfd3JpdGVfcG9pbnRlcihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy01MzQ1LVxcbmZzL2YyZnMvc2VnbWVudC5jOjUzNDY6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL2YyZnMvc2VnbWVudC5jLTUzNDctXFx0cmV0ID0gYmxrZGV2X3pvbmVfbWdtdChmZGV2LVxcdTAwM2ViZGV2LCBSRVFfT1BfWk9ORV9GSU5JU0gsXFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTU1Nz1zdGF0aWMgdm9pZCB2aXJ0aW9fZnNfcmVxdWVzdF9kaXNwYXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtNTkyLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6NTkzOlxcdFxcdGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvZnVzZS92aXJ0aW9fZnMuYy01OTQtXFx0XFx0cmV0ID0gdmlydGlvX2ZzX2VucXVldWVfcmVxKGZzdnEsIHJlcSwgdHJ1ZSwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5mcy9qYmQyL2pvdXJuYWwuYz0xNTk9c3RhdGljIGludCBram91cm5hbGQyKHZvaWQgKmFyZylcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jLTE4MS1cXHQgKi9cXG5mcy9qYmQyL2pvdXJuYWwuYzoxODI6XFx0bWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvamJkMi9qb3VybmFsLmMtMTgzLVxcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTMxMj1zdGF0aWMgaW50IHN0YXJ0X3RoaXNfaGFuZGxlKGpvdXJuYWxfdCAqam91cm5hbCwgaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2piZDIvdHJhbnNhY3Rpb24uYy00NDktXFx0ICovXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjQ1MDpcXHRoYW5kbGUtXFx1MDAzZXNhdmVkX2FsbG9jX2NvbnRleHQgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtNDUxLVxcdHJldHVybiAwO1xcbi0tXFxuZnMvbmFtZWkuYz02NTQzPWludCBwYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbilcXG4tLVxcbmZzL25hbWVpLmMtNjU1NC1cXHRpZiAobm9mcylcXG5mcy9uYW1laS5jOjY1NTU6XFx0XFx0ZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9uYW1laS5jLTY1NTYtXFx0ZXJyID0gYW9wcy1cXHUwMDNld3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgMCwgbGVuLTEsIFxcdTAwMjZmb2xpbywgXFx1MDAyNmZzZGF0YSk7XFxuLS1cXG5mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXQuYz00NDY9ZmZfbGF5b3V0X2FsbG9jX2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbGgsXFxuLS1cXG5mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXQuYy01OTEtXFx0XFx0XFx0ZWxzZSB7XFxuZnMvbmZzL2ZsZXhmaWxlbGF5b3V0L2ZsZXhmaWxlbGF5b3V0LmM6NTkyOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBub2ZzX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvbmZzL2ZsZXhmaWxlbGF5b3V0L2ZsZXhmaWxlbGF5b3V0LmMtNTkzLVxcbi0tXFxuZnMvbmZzL25mczRzdGF0ZS5jPTI1NDI9c3RhdGljIHZvaWQgbmZzNF9zdGF0ZV9tYW5hZ2VyKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApXFxuLS1cXG5mcy9uZnMvbmZzNHN0YXRlLmMtMjU1Mi1cXHQgKi9cXG5mcy9uZnMvbmZzNHN0YXRlLmM6MjU1MzpcXHRtZW1mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL25mcy9uZnM0c3RhdGUuYy0yNTU0LVxcbi0tXFxuZnMvbmZzL25mczRzdGF0ZS5jLTI2NjEtXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNscC1cXHUwMDNlY2xfc3RhdGUpKSB7XFxuZnMvbmZzL25mczRzdGF0ZS5jOjI2NjI6XFx0XFx0XFx0bWVtZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9uZnMvbmZzNHN0YXRlLmMtMjY2My1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmZzL250ZnMvbGNuYWxsb2MuYz0xODM9c3RydWN0IHJ1bmxpc3RfZWxlbWVudCAqbnRmc19jbHVzdGVyX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBzNjQgc3RhcnRfdmNuLFxcbi0tXFxuZnMvbnRmcy9sY25hbGxvYy5jLTIxNy1cXG5mcy9udGZzL2xjbmFsbG9jLmM6MjE4OlxcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvbnRmcy9sY25hbGxvYy5jLTIxOS1cXG4tLVxcbmZzL250ZnMvbGNuYWxsb2MuYz04NDI9czY0IF9fbnRmc19jbHVzdGVyX2ZyZWUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCBzNjQgc3RhcnRfdmNuLCBzNjQgY291bnQsXFxuLS1cXG5mcy9udGZzL2xjbmFsbG9jLmMtODcwLVxcdGlmIChsaWtlbHkoIWlzX3JvbGxiYWNrKSkge1xcbmZzL250ZnMvbGNuYWxsb2MuYzo4NzE6XFx0XFx0bWVtYWxsb2NfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9udGZzL2xjbmFsbG9jLmMtODcyLVxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnZvbC1cXHUwMDNlbGNuYm1wX2xvY2spO1xcbi0tXFxuZnMvbnRmcy9sY25hbGxvYy5oPTEyMD1zdGF0aWMgaW5saW5lIGludCBudGZzX2NsdXN0ZXJfZnJlZV9mcm9tX3JsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbi0tXFxuZnMvbnRmcy9sY25hbGxvYy5oLTEyNS1cXG5mcy9udGZzL2xjbmFsbG9jLmg6MTI2OlxcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvbnRmcy9sY25hbGxvYy5oLTEyNy1cXHRkb3duX3dyaXRlKFxcdTAwMjZ2b2wtXFx1MDAzZWxjbmJtcF9sb2NrKTtcXG4tLVxcbmZzL250ZnMvbWZ0LmM9MjAxMz1pbnQgbnRmc19tZnRfcmVjb3JkX2FsbG9jKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBpbnQgbW9kZSxcXG4tLVxcbmZzL250ZnMvbWZ0LmMtMjA0My1cXG5mcy9udGZzL21mdC5jOjIwNDQ6XFx0bWVtYWxsb2NfZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9udGZzL21mdC5jLTIwNDUtXFxuLS1cXG5mcy9udGZzL21mdC5jPTI1MDk9aW50IG50ZnNfbWZ0X3JlY29yZF9mcmVlKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzL21mdC5jLTI1NjYtXFx0LyogQ2xlYXIgdGhlIGJpdCBpbiB0aGUgJE1GVC8kQklUTUFQIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyByZWNvcmQuICovXFxuZnMvbnRmcy9tZnQuYzoyNTY3OlxcdG1lbWFsbG9jX2ZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvbnRmcy9tZnQuYy0yNTY4LVxcdGlmIChiYXNlX25pLVxcdTAwM2VtZnRfbm8gIT0gRklMRV9NRlQpXFxuLS1cXG5mcy9udGZzL21mdC5jLTI1ODItYml0bWFwX3JvbGxiYWNrOlxcbmZzL250ZnMvbWZ0LmM6MjU4MzpcXHRtZW1hbGxvY19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL250ZnMvbWZ0LmMtMjU4NC1cXHRpZiAoYmFzZV9uaS1cXHUwMDNlbWZ0X25vICE9IEZJTEVfTUZUKVxcbi0tXFxuZnMvbnRmcy93b2YuYz0xNDc9c3RhdGljIGludCBudGZzX2JkZXZfcmVhZF9mcm9tX3JsKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbi0tXFxuZnMvbnRmcy93b2YuYy0xNjUtXFxuZnMvbnRmcy93b2YuYzoxNjY6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL250ZnMvd29mLmMtMTY3LVxcdGRvd25fcmVhZChcXHUwMDI2cnVubGlzdC1cXHUwMDNlbG9jayk7XFxuLS1cXG5mcy9udGZzL3dvZi5jPTU0OT1zdGF0aWMgaW50IG50ZnNfd29mX2RlY29kZV9mb2xpb3NfZGlyZWN0KHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKndzLFxcbi0tXFxuZnMvbnRmcy93b2YuYy01NjgtXFxuZnMvbnRmcy93b2YuYzo1Njk6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL250ZnMvd29mLmMtNTcwLVxcdGFkZHIgPSB2bWFwKGRlc3QucGFnZXMsIGRlc3QubnJfcGFnZXMsIFZNX01BUCwgUEFHRV9LRVJORUwpO1xcbi0tXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYz0xNTc5PXN0YXRpYyB2b2lkIG8ybmV0X3N0YXJ0X2Nvbm5lY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYy0xNTk0LVxcdCAqL1xcbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmM6MTU5NTpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE1OTYtXFx0LyogaWYgd2UncmUgZ3JlYXRlciB3ZSBpbml0aWF0ZSB0eCwgb3RoZXJ3aXNlIHdlIGFjY2VwdCAqL1xcbi0tXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYz0xODUwPXN0YXRpYyBpbnQgbzJuZXRfYWNjZXB0X29uZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgKm1vcmUpXFxuLS1cXG5mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jLTE4NjctXFx0ICovXFxuZnMvb2NmczIvY2x1c3Rlci90Y3AuYzoxODY4OlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL29jZnMyL2NsdXN0ZXIvdGNwLmMtMTg2OS1cXG4tLVxcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jPTQ2Mj1pbnQgb2NmczJfZ2xvYmFsX3dyaXRlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpXFxuLS1cXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy00NjktXFx0ZG93bl93cml0ZShcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo0NzA6XFx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy00NzEtXFx0ZXJyID0gb2NmczJfcWluZm9fbG9jayhpbmZvLCAxKTtcXG4tLVxcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jPTYxNz1zdGF0aWMgaW50IG9jZnMyX3N5bmNfZHF1b3RfaGVscGVyKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jLTY0MS1cXHRkb3duX3dyaXRlKFxcdTAwMjZzYl9kcW9wdChzYiktXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo2NDI6XFx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy02NDMtXFx0c3RhdHVzID0gb2NmczJfc3luY19kcXVvdChkcXVvdCk7XFxuLS1cXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYz02ODM9c3RhdGljIGludCBvY2ZzMl93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtNjk5LVxcdGRvd25fd3JpdGUoXFx1MDAyNnNiX2Rxb3B0KGRxdW90LVxcdTAwM2VkcV9zYiktXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYzo3MDA6XFx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYy03MDEtXFx0c3RhdHVzID0gb2NmczJfbG9jYWxfd3JpdGVfZHF1b3QoZHF1b3QpO1xcbi0tXFxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmM9OTM5PXN0YXRpYyBpbnQgb2NmczJfbWFya19kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMtOTgwLVxcdGRvd25fd3JpdGUoXFx1MDAyNnNiX2Rxb3B0KHNiKS1cXHUwMDNlZHFpb19zZW0pO1xcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jOjk4MTpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL29jZnMyL3F1b3RhX2dsb2JhbC5jLTk4Mi1cXHRzdGF0dXMgPSBvY2ZzMl9zeW5jX2RxdW90KGRxdW90KTtcXG4tLVxcbmZzL29jZnMyL3F1b3RhX2xvY2FsLmM9NDU3PXN0YXRpYyBpbnQgb2NmczJfcmVjb3Zlcl9sb2NhbF9xdW90YV9maWxlKHN0cnVjdCBpbm9kZSAqbHFpbm9kZSxcXG4tLVxcbmZzL29jZnMyL3F1b3RhX2xvY2FsLmMtNTIzLVxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnNiX2Rxb3B0KHNiKS1cXHUwMDNlZHFpb19zZW0pO1xcbmZzL29jZnMyL3F1b3RhX2xvY2FsLmM6NTI0OlxcdFxcdFxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvb2NmczIvcXVvdGFfbG9jYWwuYy01MjUtXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZkcXVvdC1cXHUwMDNlZHFfZHFiX2xvY2spO1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYz00ODA9aW50IGRxdW90X2FjcXVpcmUoc3RydWN0IGRxdW90ICpkcXVvdClcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtNDg2LVxcdG11dGV4X2xvY2soXFx1MDAyNmRxdW90LVxcdTAwM2VkcV9sb2NrKTtcXG5mcy9xdW90YS9kcXVvdC5jOjQ4NzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL2RxdW90LmMtNDg4LVxcdGlmICghdGVzdF9iaXQoRFFfUkVBRF9CLCBcXHUwMDI2ZHF1b3QtXFx1MDAzZWRxX2ZsYWdzKSkge1xcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYz01Mjc9aW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy01MzMtXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHF1b3QtXFx1MDAzZWRxX2xvY2spO1xcbmZzL3F1b3RhL2RxdW90LmM6NTM0OlxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvcXVvdGEvZHF1b3QuYy01MzUtXFx0aWYgKCFjbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCkpXFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTU1Mz1pbnQgZHF1b3RfcmVsZWFzZShzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy01NTktXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHF1b3QtXFx1MDAzZWRxX2xvY2spO1xcbmZzL3F1b3RhL2RxdW90LmM6NTYwOlxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvcXVvdGEvZHF1b3QuYy01NjEtXFx0LyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgbm90IHJhY2luZyB3aXRoIHNvbWUgb3RoZXIgZHFnZXQoKSAqL1xcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjEuYz0xNTk9c3RhdGljIGludCB2MV9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTY2LVxcdGRvd25fcmVhZChcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9xdW90YS9xdW90YV92MS5jOjE2NzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTY4LVxcdHJldCA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVxcdTAwMjZkcWJsayxcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YxLmM9MTg5PXN0YXRpYyBpbnQgdjFfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjEuYy0xOTYtXFx0ZG93bl93cml0ZShcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9xdW90YS9xdW90YV92MS5jOjE5NzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YxLmMtMTk4LVxcdHJldCA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2VxdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKVxcdTAwMjZkcWJsayxcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9OTA9c3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMTAyLVxcdGRvd25fcmVhZChcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9xdW90YS9xdW90YV92Mi5jOjEwMzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMTA0LVxcdHJldCA9IHYyX3JlYWRfaGVhZGVyKHNiLCB0eXBlLCBcXHUwMDI2ZHFoZWFkKTtcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9MTk3PXN0YXRpYyBpbnQgdjJfd3JpdGVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0yMDYtXFx0ZG93bl93cml0ZShcXHUwMDI2ZHFvcHQtXFx1MDAzZWRxaW9fc2VtKTtcXG5mcy9xdW90YS9xdW90YV92Mi5jOjIwNzpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMjA4LVxcdHNwaW5fbG9jayhcXHUwMDI2ZHFfZGF0YV9sb2NrKTtcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9MzM2PXN0YXRpYyBpbnQgdjJfcmVhZF9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KVxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0zNDItXFx0ZG93bl9yZWFkKFxcdTAwMjZkcW9wdC1cXHUwMDNlZHFpb19zZW0pO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmM6MzQzOlxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0zNDQtXFx0cmV0ID0gcXRyZWVfcmVhZF9kcXVvdChcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmM9MzUyPXN0YXRpYyBpbnQgdjJfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdClcXG4tLVxcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMzcwLVxcdH1cXG5mcy9xdW90YS9xdW90YV92Mi5jOjM3MTpcXHRtZW1hbGxvYyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmMtMzcyLVxcdHJldCA9IHF0cmVlX3dyaXRlX2RxdW90KFxcbi0tXFxuZnMvcXVvdGEvcXVvdGFfdjIuYz0zODM9c3RhdGljIGludCB2Ml9yZWxlYXNlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpXFxuLS1cXG5mcy9xdW90YS9xdW90YV92Mi5jLTM4OS1cXHRkb3duX3dyaXRlKFxcdTAwMjZkcW9wdC1cXHUwMDNlZHFpb19zZW0pO1xcbmZzL3F1b3RhL3F1b3RhX3YyLmM6MzkwOlxcdG1lbWFsbG9jID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYy0zOTEtXFx0cmV0ID0gcXRyZWVfcmVsZWFzZV9kcXVvdChzYl9kcWluZm8oZHF1b3QtXFx1MDAzZWRxX3NiLCBkcXVvdC1cXHUwMDNlZHFfaWQudHlwZSktXFx1MDAzZWRxaV9wcml2LCBkcXVvdCk7XFxuLS1cXG5mcy9xdW90YS9xdW90YV92Mi5jPTQwND1zdGF0aWMgaW50IHYyX2dldF9uZXh0X2lkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkICpxaWQpXFxuLS1cXG5mcy9xdW90YS9xdW90YV92Mi5jLTQxMC1cXHRkb3duX3JlYWQoXFx1MDAyNmRxb3B0LVxcdTAwM2VkcWlvX3NlbSk7XFxuZnMvcXVvdGEvcXVvdGFfdjIuYzo0MTE6XFx0bWVtYWxsb2MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy9xdW90YS9xdW90YV92Mi5jLTQxMi1cXHRyZXQgPSBxdHJlZV9nZXRfbmV4dF9pZChzYl9kcWluZm8oc2IsIHFpZC1cXHUwMDNldHlwZSktXFx1MDAzZWRxaV9wcml2LCBxaWQpO1xcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oPTg0ND1zdGF0aWMgaW5saW5lIHZvaWQgY2lmc19zZXJ2ZXJfbG9jayhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpXFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oLTg0NS17XFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oOjg0NjpcXHR1bnNpZ25lZCBpbnQgbm9mc19mbGFnID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oLTg0Ny1cXG4tLVxcbmZzL3NxdWFzaGZzL2ZpbGUuYz0zOTI9dm9pZCBzcXVhc2hmc19jb3B5X2NhY2hlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9zcXVhc2hmcy9maWxlLmMtNDAwLVxcdGludCBzdGFydF9pbmRleCA9IGZvbGlvLVxcdTAwM2VpbmRleCBcXHUwMDI2IH5tYXNrLCBlbmRfaW5kZXggPSBzdGFydF9pbmRleCB8IG1hc2s7XFxuZnMvc3F1YXNoZnMvZmlsZS5jOjQwMTpcXHR1bnNpZ25lZCBpbnQgbm9mcyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3NxdWFzaGZzL2ZpbGUuYy00MDItXFxuLS1cXG5mcy94ZnMvc2NydWIveGZpbGUuYz0xMDg9eGZpbGVfbG9hZChcXG4tLVxcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jLTEyMy1cXG5mcy94ZnMvc2NydWIveGZpbGUuYzoxMjQ6XFx0cGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMveGZzL3NjcnViL3hmaWxlLmMtMTI1LVxcdHdoaWxlIChjb3VudCBcXHUwMDNlIDApIHtcXG4tLVxcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jPTE3MT14ZmlsZV9zdG9yZShcXG4tLVxcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jLTE5My1cXG5mcy94ZnMvc2NydWIveGZpbGUuYzoxOTQ6XFx0cGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XFxuZnMveGZzL3NjcnViL3hmaWxlLmMtMTk1LVxcdHdoaWxlIChjb3VudCBcXHUwMDNlIDApIHtcXG4tLVxcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jPTI0Nz14ZmlsZV9nZXRfZm9saW8oXFxuLS1cXG5mcy94ZnMvc2NydWIveGZpbGUuYy0yNjktXFxuZnMveGZzL3NjcnViL3hmaWxlLmM6MjcwOlxcdHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy9zY3J1Yi94ZmlsZS5jLTI3MS1cXHRlcnJvciA9IHNobWVtX2dldF9mb2xpbyhpbm9kZSwgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIDAsIFxcdTAwMjZmb2xpbyxcXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jPTEwNz14ZnNfZW5kX2lvZW5kX3dyaXRlKFxcbi0tXFxuZnMveGZzL3hmc19hb3BzLmMtMTIyLVxcdCAqL1xcbmZzL3hmcy94ZnNfYW9wcy5jOjEyMzpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy94ZnMveGZzX2FvcHMuYy0xMjQtXFxuLS1cXG5mcy94ZnMveGZzX2FvcHMuYz01Mjk9eGZzX3dyaXRlYmFja19zdWJtaXQoXFxuLS1cXG5mcy94ZnMveGZzX2FvcHMuYy01NDQtXFxuZnMveGZzL3hmc19hb3BzLmM6NTQ1OlxcdFxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy94ZnNfYW9wcy5jLTU0Ni1cXHRcXHRlcnJvciA9IHhmc19yZWZsaW5rX2NvbnZlcnRfY293KFhGU19JKGlvZW5kLVxcdTAwM2Vpb19pbm9kZSksXFxuLS1cXG5mcy94ZnMveGZzX2RxdW90LmM9ODQ2PXhmc19xbV9kcWdldF9jYWNoZV9pbnNlcnQoXFxuLS1cXG5mcy94ZnMveGZzX2RxdW90LmMtODU2LVxcbmZzL3hmcy94ZnNfZHF1b3QuYzo4NTc6XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy94ZnNfZHF1b3QuYy04NTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cWktXFx1MDAzZXFpX3RyZWVfbG9jayk7XFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYz02MDg9eGZzX3pvbmVkX2Rpb193cml0ZV9lbmRfaW8oXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy02MjktXFxuZnMveGZzL3hmc19maWxlLmM6NjMwOlxcdG5vZnNfZmxhZyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy94ZnNfZmlsZS5jLTYzMS1cXHRlcnJvciA9IHhmc19kaW9fZW5kaW9fc2V0X2lzaXplKGlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MsIHNpemUpO1xcbi0tXFxuZnMveGZzL3hmc19maWxlLmM9NjM4PXhmc19kaW9fd3JpdGVfZW5kX2lvKFxcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtNjcxLVxcdCAqL1xcbmZzL3hmcy94ZnNfZmlsZS5jOjY3MjpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy94ZnMveGZzX2ZpbGUuYy02NzMtXFxuLS1cXG5mcy94ZnMveGZzX2ljYWNoZS5jPTE5NTU9eGZzX2lub2RlZ2Nfd29ya2VyKFxcbi0tXFxuZnMveGZzL3hmc19pY2FjaGUuYy0xOTgzLVxcdCAqL1xcbmZzL3hmcy94ZnNfaWNhY2hlLmM6MTk4NDpcXHRub2ZzX2ZsYWcgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5mcy94ZnMveGZzX2ljYWNoZS5jLTE5ODUtXFxuLS1cXG5mcy94ZnMveGZzX2xvZ19jaWwuYz0xMzc1PXhsb2dfY2lsX3B1c2hfd29yayhcXG4tLVxcbmZzL3hmcy94ZnNfbG9nX2NpbC5jLTEzNzcte1xcbmZzL3hmcy94ZnNfbG9nX2NpbC5jOjEzNzg6XFx0dW5zaWduZWQgaW50XFx0XFx0bm9mc19mbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbmZzL3hmcy94ZnNfbG9nX2NpbC5jLTEzNzktXFx0c3RydWN0IHhmc19jaWxfY3R4XFx0KmN0eCA9XFxuLS1cXG5mcy94ZnMveGZzX2xvZ19wcml2Lmg9NjM5PXhsb2dfdmFsaWRfbHNuKFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NDowMi41NDEzNTMwNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjMzODYwNzIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gRmxhZ3MgaW4gRmlsZSBTeXN0ZW1zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZyBzaXR1YXRpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGhvdyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncywgcGFydGljdWxhcmx5IGluIGNvbnRleHRzIHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyB0cmlnZ2VyaW5nIHJlY3Vyc2l2ZSByZWNsYWltIG9yIG90aGVyIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGJlaGF2aW9ycywgYmVjYXVzZSBJIG5lZWQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgbXkgbW9kaWZpY2F0aW9ucyBpbXBhY3QgdGhlIGNvZGUgYmFzZS5cblxuRmlyc3QgdXAsIGBlcm9mc2AuIFRoZSBgZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXRgIGZ1bmN0aW9uIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHVzZSBvZiBgcmVhZGFoZWFkX2dmcF9tYXNrKGFzKSBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU1gIGFscmVhZHkgcHJldmVudHMgdGhlIGFsbG9jYXRpb24gZnJvbSBkaXJlY3RseSByZWNsYWltaW5nLCB3aGljaCBpcyBnb29kLiBUaGF0IHdhcyBhIGdvb2Qgc3RhcnQuXG5cbk5leHQsIEkgbG9va2VkIGF0IGBleHQ0YC4gVGhlIGZ1bmN0aW9ucyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgYW5kIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgIGFyZSBjYWxsZWQgd2l0aGluIGEgSkJEMiB0cmFuc2FjdGlvbiBoYW5kbGUuIFRoaXMgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHdpdGhpbiB0aGF0IGhhbmRsZSBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIGlzIGNhbGxlZCB2aWEgYHN0YXJ0X3RoaXNfaGFuZGxlKClgLiBUaGlzIG1lYW5zIHRoYXQgYWxsb2NhdGlvbnMgd2l0aGluIHRoZSBleHRlbnQgY29udmVyc2lvbiBwcm9jZXNzIGFyZSBhbHJlYWR5IGd1YXJkZWQgYWdhaW5zdCByZWN1cnNpb24uIFRoYXQncyBhIHBvaW50IGluIHRoZSBcInNhZmVcIiBjb2x1bW4uXG5cbk1vdmluZyBvbiB0byBgbmZzYCwgSSBub3RpY2VkIHRoYXQgYG5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0YCB1c2VzIGBGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVRgIGFuZCBgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKWAuIEJ1dCB3YWl0LCBpbiB0aGUgZGVlcGVyIGNhbGwsIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCB0aGUgYEZHUF9OT1dBSVRgIGZsYWcgaXMgZXhwbGljaXRseSBoYW5kbGVkLCBjbGVhcmluZyBgR0ZQX0tFUk5FTGAgYW5kIHNldHRpbmcgYEdGUF9OT1dBSVRgLiBUaGlzIGlzIGltcG9ydGFudCwgYXMgYEdGUF9OT1dBSVRgIGl0c2VsZiAqZG9lc24ndCogaGF2ZSBgX19HRlBfRlNgIG9yIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgc2V0LCBzbyB3ZSBhcmUgYWxzbyBzYWZlIGhlcmUsIGFuZCB3ZSBjYW4gYmUgc3VyZSBvZiB0aGlzIGJlaGF2aW9yLlxuXG5Ob3csIGBudGZzYC4gVGhlIGZ1bmN0aW9uIGBfX250ZnNfaW5vZGVfcmVzaWRlbnRfYXR0cl9wd3JpdGVgIGhhcyBjYWxsZXJzIGVpdGhlciBpbnNpZGUgYW4gTlRGUyBsb2NrL3RyYW5zYWN0aW9uIHdoZXJlIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgaXMgYWN0aXZlICpvciogdXNlcyBgbWFwcGluZ19nZnBfbWFza2AuIFdlIGFyZSBjb3ZlcmVkIGVpdGhlciB3YXkuIEFuZCBgbnRmc193b2ZfY29sbGVjdF9kZXN0YCBwYXNzZXMgYEZHUF9OT1dBSVRgLCB3aGljaCBjb3JyZWN0bHkgc2V0cyBgR0ZQX05PV0FJVGAuXG5cbkxvb2tpbmcgYXQgYHNxdWFzaGZzYCwgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIGV4cGxpY2l0bHkgdXNlcyBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIGFuZCBgbWVtYWxsb2Nfbm9mc19yZXN0b3JlKG5vZnMpYCBhcm91bmQgYSBsb29wLiBFeHBsaWNpdCBpcyBhbHdheXMgZ29vZC4gVGhhdCdzIGEgZ29vZCBhcHByb2FjaCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29udGV4dC5cblxuRmluYWxseSwgaW4gYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCwgYGdyYWJfY2FjaGVfcGFnZV9ub3dhaXRgIHVzZXMgYEZHUF9OT1dBSVRgLCBzbyBgZ2ZwYCBiZWNvbWVzIGBHRlBfTk9XQUlUYCBhbnl3YXkuIFRoZSBrZXkgdGFrZWF3YXkgZnJvbSB0aGlzIHNlZW1zIHRvIGJlIHRoYXQgYEZHUF9OT1dBSVRgIGlzIGNvcnJlY3RseSBoYW5kbGVkLlxuXG5UaGUgZmluYWwgcGllY2Ugb2YgdGhpcyBpcyB0aGF0IGBGR1BfTk9GU2Agd2FzIGNvbXBsZXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwhIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgcmVmZXJlbmNlcyB0byBpdC4gSSB3aWxsIHNlYXJjaCB0aGUgY29kZSB0byB2ZXJpZnkgdGhpcyByZW1vdmFsIHdhcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMzAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDQ6NDQuODc5OTYyNjg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA1MjU2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkdQX05PRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZjJmcy9kYXRhLmM9Mzg0ND1zdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvZjJmcy9kYXRhLmMtMzkwMi1cXHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXFxuZnMvZjJmcy9kYXRhLmM6MzkwMzpcXHRcXHRcXHRcXHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCB8IEZHUF9OT0ZTLFxcbmZzL2YyZnMvZGF0YS5jLTM5MDQtXFx0XFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ0OjQ2LjQ2MDQ5MzUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwOTM1NzcyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBTdWRkZW4gSW5zaWdodCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0byBsb29rIGF0IGBmcy9mMmZzL2RhdGEuY2AgaW4gdGhlIEYyRlMgZmlsZSBzeXN0ZW0gY29kZS4uLiBzcGVjaWZpY2FsbHksIEkgd29uZGVyIHdoeSBgZnMvZjJmcy9kYXRhLmNgIGlzIHVzaW5nIHRoZSBgRkdQX05PRlNgIGZsYWc/IFRoYXQncyBhbiB1bnVzdWFsIGNvbnRleHQsIGFuZCBpdCdzIGdyYWJiaW5nIG15IGF0dGVudGlvbi4gQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIHNjcnV0aW5pemUgbGluZSAzOTAwIGluIGBmcy9mMmZzL2RhdGEuY2AuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ1OjA3LjU1NDA3MjYzOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mMmZzL2RhdGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODk1OlxcdCNlbmRpZlxcbjM4OTY6XFx0XFxuMzg5NzpcXHRyZXBlYXQ6XFxuMzg5ODpcXHRcXHQvKlxcbjM4OTk6XFx0XFx0ICogRG8gbm90IHVzZSBGR1BfU1RBQkxFIHRvIGF2b2lkIGRlYWRsb2NrLlxcbjM5MDA6XFx0XFx0ICogV2lsbCB3YWl0IHRoYXQgYmVsb3cgd2l0aCBvdXIgSU8gY29udHJvbC5cXG4zOTAxOlxcdFxcdCAqL1xcbjM5MDI6XFx0XFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbjM5MDM6XFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcXG4zOTA0OlxcdFxcdFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbjM5MDU6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4zOTA2OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xcbjM5MDc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjM5MDg6XFx0XFx0fVxcbjM5MDk6XFx0XFxuMzkxMDpcXHRcXHQvKiBUT0RPOiBjbHVzdGVyIGNhbiBiZSBjb21wcmVzc2VkIGR1ZSB0byByYWNlIHdpdGggLndyaXRlcGFnZSAqL1xcbjM5MTE6XFx0XFxuMzkxMjpcXHRcXHQqZm9saW9wID0gZm9saW87XFxuMzkxMzpcXHRcXG4zOTE0OlxcdFxcdGlmIChmMmZzX2lzX2F0b21pY19maWxlKGlub2RlKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDU6MDcuNTU0MzE4Mjk4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYxODMxNDE3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEYyRlMgQ29kZWJhc2UgLSBBIFF1aWNrIERldG91cioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBkZWVwIGluIGBmcy9mMmZzL2RhdGEuY2AgYW5kIEknbSBzZWVpbmcgYEZHUF9OT0ZTYCBiZWluZyB1c2VkLi4uIGludGVyZXN0aW5nLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYXNoZXMgdG8gdGhlIGltcGxpY2F0aW9ucyBvZiBieXBhc3NpbmcgdGhlIGZpbGUgc3lzdGVtLiBCdXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUuIFRoZSBjcnVjaWFsIGZ1bmN0aW9uIGNhbGwgbWVudGlvbmVkIGlzIGBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvYC4gTGV0IG1lIGp1bXAgb3ZlciB0byBgZnMvZjJmcy9mMmZzLmhgIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGYyZnNfZmlsZW1hcF9nZXRfZm9saW9gIGhhbmRsZXMgZGF0YSByZXRyaWV2YWwgYW5kIHdoYXQgY29uc3RyYWludHMgYXJlIGluIHBsYWNlIHdpdGggYEZHUF9OT0ZTYC4gSXQncyBhIHF1aWNrIHJhYmJpdCBob2xlIGJ1dCBuZWNlc3NhcnkgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA3MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDU6MjMuNzM3NDYyNTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzk0NjUyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZjJmc19maWxlbWFwX2dldF9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mMmZzL2NvbXByZXNzLmM9MTA4OD1zdGF0aWMgaW50IHByZXBhcmVfY29tcHJlc3Nfb3ZlcndyaXRlKHN0cnVjdCBjb21wcmVzc19jdHggKmNjLFxcbi0tXFxuZnMvZjJmcy9jb21wcmVzcy5jLTExMDktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNjLVxcdTAwM2VjbHVzdGVyX3NpemU7IGkrKykge1xcbmZzL2YyZnMvY29tcHJlc3MuYzoxMTEwOlxcdFxcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBzdGFydF9pZHggKyBpLFxcbmZzL2YyZnMvY29tcHJlc3MuYy0xMTExLVxcdFxcdFxcdFxcdGZncF9mbGFnLCBHRlBfTk9GUyk7XFxuLS1cXG5mcy9mMmZzL2NvbXByZXNzLmM9MTk1ND1ib29sIGYyZnNfbG9hZF9jb21wcmVzc2VkX2ZvbGlvKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2YyZnMvY29tcHJlc3MuYy0xOTYyLVxcbmZzL2YyZnMvY29tcHJlc3MuYzoxOTYzOlxcdGNmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8oQ09NUFJFU1NfTUFQUElORyhzYmkpLFxcbmZzL2YyZnMvY29tcHJlc3MuYy0xOTY0LVxcdFxcdFxcdFxcdGJsa2FkZHIsIEZHUF9MT0NLIHwgRkdQX05PV0FJVCwgR0ZQX05PRlMpO1xcbi0tXFxuZnMvZjJmcy9kYXRhLmM9MTM2MT1zdHJ1Y3QgZm9saW8gKmYyZnNfZmluZF9kYXRhX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5mcy9mMmZzL2RhdGEuYy0xMzY2LVxcbmZzL2YyZnMvZGF0YS5jOjEzNjc6XFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBGR1BfQUNDRVNTRUQsIDApO1xcbmZzL2YyZnMvZGF0YS5jLTEzNjgtXFx0aWYgKElTX0VSUihmb2xpbykpXFxuLS1cXG5mcy9mMmZzL2RhdGEuYz0zODQ0PXN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9mMmZzL2RhdGEuYy0zOTAxLVxcdCAqL1xcbmZzL2YyZnMvZGF0YS5jOjM5MDI6XFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbmZzL2YyZnMvZGF0YS5jLTM5MDMtXFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcXG4tLVxcbmZzL2YyZnMvZjJmcy5oPTMwNDc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmYyZnNfZ3JhYl9jYWNoZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2YyZnMvZjJmcy5oLTMwNzgtXFxuZnMvZjJmcy9mMmZzLmg6MzA3OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZjJmc19maWxlbWFwX2dldF9mb2xpbyhcXG5mcy9mMmZzL2YyZnMuaC0zMDgwLVxcdFxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxuZnMvZjJmcy9nYy5jPTEyMjA9c3RhdGljIGludCByYV9kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpXFxuLS1cXG5mcy9mMmZzL2djLmMtMTI5My1cXG5mcy9mMmZzL2djLmM6MTI5NDpcXHRlZm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKE1FVEFfTUFQUElORyhzYmkpLCBkbi5kYXRhX2Jsa2FkZHIsXFxuZnMvZjJmcy9nYy5jLTEyOTUtXFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQsIEdGUF9OT0ZTKTtcXG4tLVxcbmZzL2YyZnMvZ2MuYz0xMzMyPXN0YXRpYyBpbnQgbW92ZV9kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJsb2NrX3QgYmlkeCxcXG4tLVxcbmZzL2YyZnMvZ2MuYy0xNDU2LVxcbmZzL2YyZnMvZ2MuYzoxNDU3OlxcdGVmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8oTUVUQV9NQVBQSU5HKGZpby5zYmkpLCBuZXdhZGRyLFxcbmZzL2YyZnMvZ2MuYy0xNDU4LVxcdFxcdFxcdFxcdFxcdEZHUF9MT0NLIHwgRkdQX0NSRUFULCBHRlBfTk9GUyk7XFxuLS1cXG5mcy9mMmZzL25vZGUuYz0xNjUzPXN0YXRpYyB2b2lkIGZsdXNoX2lubGluZV9kYXRhKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgbmlkX3QgaW5vKVxcbi0tXFxuZnMvZjJmcy9ub2RlLmMtMTY2My1cXG5mcy9mMmZzL25vZGUuYzoxNjY0OlxcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCAwLFxcbmZzL2YyZnMvbm9kZS5jLTE2NjUtXFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0t8RkdQX05PV0FJVCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ1OjI1LjYxNjkzNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMyODg2MjUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvYC4gTGV0J3MgemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2YyZnMvZjJmcy5oYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBmb2xpby1iYXNlZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGYyZnMgZmlsZXN5c3RlbS4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyByb2xlIGluIG1hcHBpbmcgZmlsZSBkYXRhIHRvIGZvbGlvcywgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGVmZmljaWVudCBJL08sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBGMkZTJ3MgZGVzaWduIGZvciBmbGFzaCBtZW1vcnkuIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHRpZXMgaW50byB0aGUgb3ZlcmFsbCBwYWdlIGNhY2hlIGltcGxlbWVudGF0aW9uLCB0aGUgZm9saW8gQVBJLCBhbmQgaG93IGYyZnMgaGFuZGxlcyBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBhbmQgYWxsb2NhdGlvbiB3aXRoaW4gaXRzIGJsb2NrLW9yaWVudGVkIHN0cnVjdHVyZS4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGxvY2tpbmcgc2VtYW50aWNzIGludm9sdmVkLCBhbmQgaG93IHRoYXQgaW1wYWN0cyBjb25jdXJyZW5jeS4gTGV0J3Mgc2VlIGhvdyBgZjJmc19maWxlbWFwX2dldF9mb2xpb2AgaGFuZGxlcyB0aGUgZGV0YWlscywgc3VjaCBhcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDI5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDU6MjkuOTQ1ODAwMjIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mMmZzL2YyZnMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDc1OlxcdFxcbjMwNzY6XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjMwNzc6XFx0fVxcbjMwNzg6XFx0XFxuMzA3OTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZjJmc19maWxlbWFwX2dldF9mb2xpbyhcXG4zMDgwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbjMwODE6XFx0XFx0XFx0XFx0XFx0ZmdmX3QgZmdwX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4zMDgyOlxcdHtcXG4zMDgzOlxcdFxcdGlmICh0aW1lX3RvX2luamVjdChGMkZTX01fU0IobWFwcGluZyksIEZBVUxUX1BBR0VfR0VUKSlcXG4zMDg0OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjMwODU6XFx0XFxuMzA4NjpcXHRcXHRyZXR1cm4gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwgZmdwX2ZsYWdzLCBnZnBfbWFzayk7XFxuMzA4NzpcXHR9XFxuMzA4ODpcXHRcXG4zMDg5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBmMmZzX2ZvbGlvX3B1dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHVubG9jaylcXG4zMDkwOlxcdHtcXG4zMDkxOlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXFxuMzA5MjpcXHRcXHRcXHRyZXR1cm47XFxuMzA5MzpcXHRcXG4zMDk0OlxcdFxcdGlmICh1bmxvY2spIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDU6MjkuOTQ1OTg3NDYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NjU2NzQ4NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRjJGUyBDb21waWxhdGlvbiBJc3N1ZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBmZWVscyBvZmYuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzLiBJIHdhcyBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgYW5kIG5vdGljZWQgc29tZSBjaGFuZ2VzIHRvIHRoZSBgZmdmX3RgIGZsYWdzLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGBGR1BfTk9GU2AuIExldCBtZSBxdWlja2x5IGNvbXBhcmUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXI6XG5cbmBgYGNcbi0jZGVmaW5lIEZHUF9OT0ZTXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuLSNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbi0jZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcbi0jZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4tI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxuKyNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcbisjZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbisjZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4rI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuYGBgXG5cbk5vdywgdGhlIGNvbmNlcm4gaXMgdGhhdCBpZiBhIGZpbGUgbGlrZSBgZjJmcy9kYXRhLmNgICp3YXNuJ3QqIHVwZGF0ZWQgd2l0aCB0aGlzIHBhdGNoLCB0aGVyZSBjb3VsZCBiZSBhIGNvbXBpbGF0aW9uIGlzc3VlLiBNYXliZSBpdCdzIGEgY29uZmxpY3Qgb3IgdGhlcmUncyBpbi10cmVlIGNvZGUgdGhhdCBzdGlsbCByZWxpZXMgb24gYEZHUF9OT0ZTYCBidXQgaXNuJ3QgZGVmaW5lZCBhbnltb3JlLiBEb2VzIHRoaXMgY29kZSBzdGlsbCBjb21waWxlPyBUaGlzIGlzIGEgcHJvYmxlbSEgTGV0IG1lIGRvdWJsZS1jaGVjayBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVwLCBgRkdQX05PRlNgIGlzIGdvbmUuIEJ1dCB3YWl0LCBJJ20gc3VyZSBJIHNhdyBgRkdQX05PRlNgIGluIGBmcy9mMmZzL2RhdGEuYzozOTAzYCB3aGVuIEkgcmFuIGBncmVwcGVyYCB0aGUgb3RoZXIgZGF5P1xuXG5UaGlzIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuIFdoeSB3b3VsZCBgZ3JlcHBlcmAgcGljayB0aGF0IHVwPyBMZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGZzL2YyZnMvZGF0YS5jYCBpcyBhY3R1YWxseSB1c2luZyBgRkdQX05PRlNgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NjowNy42MDI3Mzg3ODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2YyZnMvZGF0YS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5MDA6XFx0XFx0ICogV2lsbCB3YWl0IHRoYXQgYmVsb3cgd2l0aCBvdXIgSU8gY29udHJvbC5cXG4zOTAxOlxcdFxcdCAqL1xcbjM5MDI6XFx0XFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbjM5MDM6XFx0XFx0XFx0XFx0XFx0RkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfTk9GUyxcXG4zOTA0OlxcdFxcdFxcdFxcdFxcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xcbjM5MDU6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4zOTA2OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xcbjM5MDc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjM5MDg6XFx0XFx0fVxcbjM5MDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ2OjA3LjYwMjk3NDkzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQ2Nzg1ODQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGV4cGVyaWVuY2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgRjJGUyBDb21waWxhdGlvbiBGbGFnIElzc3VlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhlIHN5c3RlbSdzIHRlbGxpbmcgbWUgYEZHUF9OT0ZTYCBpcyB1bmRlZmluZWQgd2hlbiB3ZSdyZSBjb21waWxpbmcgZm9yIEYyRlMuIFRoYXQncy4uLiB1bmV4cGVjdGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgb2ZmIOKAkyB0aGlzIHNob3VsZCBiZSBkZWZpbmVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgRjJGUyBjb21waWxhdGlvbi4gSSdtIGdldHRpbmcgYSBiYWQgZmVlbGluZyBhYm91dCB0aGlzLCBpZiBgRkdQX05PRlNgIGlzIHVuZGVmaW5lZCB0aGVuIHRoZXJlJ3MgYSBwcm9ibGVtIGhlcmUuIFRoZSBkZWZpbml0aW9uIGlzIGNsZWFybHkgdXNlZCBkdXJpbmcgRjJGUyBjb21waWxhdGlvbi5cblxuV2FpdCBhIG1pbnV0ZSwgYmVmb3JlIEkgc3RhcnQgcmlwcGluZyB0aGluZ3MgYXBhcnQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoaXMgaXNuJ3QgZGVmaW5lZCAqc29tZXdoZXJlKiBlbHNlIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0aGF0IEknbSBub3QgaW1tZWRpYXRlbHkgdGhpbmtpbmcgb2YuIExldCdzIHRyYWNlIGl0IGFuZCB2ZXJpZnkgd2hlcmUgaXQncyBiZWluZyB1c2VkIGFuZCBob3cgaXQncyBiZWluZyBkZWZpbmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIGluY2x1ZGUgb3IgYSBtYWNybyBkZWZpbml0aW9uIHRoYXQncyBvdmVycmlkaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gSSBuZWVkIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGRvdWJsZS1jaGVjayB0aG9zZSBjb21waWxlciBkaXJlY3RpdmVzLiBHb3R0YSBiZSB0aG9yb3VnaC4gVGhlcmUncyBwcm9iYWJseSBhIGxvZ2ljYWwgZXhwbGFuYXRpb24gaGVyZTsgaXQncyBqdXN0IGEgbWF0dGVyIG9mIGZpbmRpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NjoyNi4wNzA4MzY0NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDU0NTM2MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmVcXFxccytGR1BfTk9GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDY6MjguMzE2Mjk5MzAyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDc2NTkxODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGBGR1BfTk9GU2AgaXMgdW5kZWZpbmVkLCB0aGF0J3Mgd2VpcmQuICBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvbnRleHQuICBJdCB0b3VjaGVzIGEgYnVuY2ggb2YgcGxhY2VzOiBgZXJvZnNgLCBgZXh0NGAsIGBuZnNgLCBgbnRmc2AsIGBzcXVhc2hmc2AsIHBsdXMgc29tZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIGNhY2hlIGhlYWRlcnMuICBJcyB0aGlzIGp1c3QgcmVmYWN0b3JpbmcsIG9yIGlzIHRoZXJlIGZ1bmN0aW9uYWwgc3R1ZmYgaGVyZSB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gZm9sbG93IHRoZSBydWxlcywgdGhvdWdoOlxuXG5UaGUgcHJvbXB0IHJlbWluZHMgbWUgYWJvdXQgdGhlIGNyaXRlcmlhLCBhbmQgSSBuZWVkIHRvIGJlICpyZWFsbHkqIGNhcmVmdWwuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0J3MgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQgb25seSBjb250YWlucyBkb2N1bWVudGF0aW9uLCBsb2dnaW5nLCBjb25zdGFudCBjaGFuZ2VzIHRoYXQgZG9uJ3QgY2hhbmdlIGhvdyB0aGluZ3Mgd29yaywgdW5yZWFjaGFibGUgY29kZSwgb3IgdGVhcmRvd24gY2FsbGJhY2tzLiAgSXQncyBgV29ydGhGdXp6aW5nPXRydWVgIGlmIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlxuXG5IbW0sIHRoaXMgKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYy4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vZmlsZW1hcC5jYCwgYW5kIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAuIEknbSByZW1vdmluZyB0aGUgYEZHUF9OT0ZTYCBhbmQgY2hhbmdpbmcgaG93IHRoZSBgR0ZQYCBmbGFncyBhcmUgaGFuZGxlZC4gSSBzZWUgbWFjcm9zIGJlaW5nIHNoaWZ0ZWQgaW4gdmFsdWVzLiBJbiBzcXVhc2hmcywgaXQgbG9va3MgbGlrZSBgbWVtYWxsb2Nfbm9mc19zYXZlKClgIGFuZCBgbWVtYWxsb2Nfbm9mc19yZXN0b3JlKClgIGFyZSBiZWluZyBhZGRlZC4gVGhpcyBsb29rcyBsaWtlIGl0J3MgY2hhbmdpbmcgaG93IG1lbW9yeSBhbGxvY2F0aW9uIGlzIHNjb3BlZCBhbmQgdGhlIGJlaGF2aW9yIG9mIEdGUCBmbGFncy4gSXQncyBtb2RpZnlpbmcgbWVtb3J5IGFsbG9jYXRpb24hIFNvLCBpcyB0aGlzICpqdXN0KiBpbnRlcm5hbCBjbGVhbnVwLCBvciBpcyBpdCBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGV4ZWN1dGlvbiBmbG93P1xuXG5MZXQncyBicmVhayBpdCBkb3duOiBJcyB0aGlzIHBhdGNoIGFsdGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGluIHBsYWNlcyBsaWtlIGBudGZzX3dvZl9jb2xsZWN0X2Rlc3RgLCBvciBpbnRyb2R1Y2luZyBgbWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmVgIGluIGEga2V5IGZ1bmN0aW9uIGxpa2UgYHNxdWFzaGZzX2NvcHlfY2FjaGVgPyBBYnNvbHV0ZWx5ISBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6IGJlY2F1c2UgdGhpcyBpcyByZWFjaGFibGUuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBtZWV0cyBub25lIG9mIHRoZSA2IGV4Y2x1c2lvbiBjYXRlZ29yaWVzLiAxLiBObywgaXQncyBtb2RpZnlpbmcgQyBjb2RlLiAyLiBObywgbm90IGp1c3QgbG9nZ2luZy4gMy4gTm8sIG5vdCBqdXN0IG1hY3JvczogSSdtIGVsaW1pbmF0aW5nIGBGR1BfTk9GU2AgaW4gbWVtb3J5IGFsbG9jYXRpb24gQVBJcywgaXQncyBtb3JlIHRoYW4gYSBjb25zdGFudCBjaGFuZ2UuIDQuIE5vLCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUgaW4gYSBRRU1VIGVudmlyb25tZW50LiA1LiBOb3BlLCBub3QgUENJL0dQVS9TbWFydE5JQyBkcml2ZXJzLiA2LiBOb3BlLCBub3QgdGVhcmRvd24gY2FsbGJhY2tzLlxuXG5Pa2F5LCBsZXQncyBwbGF5IGRldmlsJ3MgYWR2b2NhdGU6IElzIHRoaXMgYSBzaW1wbGUgcmVmYWN0b3JpbmcgdG8gY2xlYW4gdXAgdGhlIGBGR1BfTk9GU2AgZmxhZyBhY3Jvc3MgcGFnZWNhY2hlIGFuZCBjYWxsZXJzLCByZXBsYWNpbmcgaXQgd2l0aCBzY29wZWQgYWxsb2NhdG9ycywgYW5kIG5vdCByZWFsbHkgY2hhbmdpbmcgaG93IHRoZSBrZXJuZWwgd29ya3M/IE9yIGlzIGl0IGEgZnVuZGFtZW50YWwgbW9kaWZpY2F0aW9uIHRvIHBhZ2UgY2FjaGUgZm9saW8gZmxhZ3MsIGFuZCByZWNsYWltP1xuXG5Mb29raW5nIGF0IGl0IGNsb3NlbHksIHRoaXMgaXNuJ3QganVzdCBhYm91dCByZW1vdmluZyB0aGUgZmxhZzsgaXQncyBhYm91dCBhbHRlcmluZyBob3cgR0ZQIGZsYWdzIGFuZCBhbGxvY2F0aW9uIHNjb3BlcyB3b3JrIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtICphbmQqIHRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZSBpdC4gSW4gYG50ZnNfd29mX2NvbGxlY3RfZGVzdGAsIG5vdyB3ZSdyZSB1c2luZyB0aGUgYG1hcHBpbmdfZ2ZwX21hc2soKWAgYXJndW1lbnQsIGluc3RlYWQgb2YgYEdGUF9OT0ZTYC4gSW4gc3F1YXNoZnMsIHRoZSBjb2RlIGlzIHVzaW5nIGBtZW1hbGxvY19ub2ZzX3NhdmUoKWAgYW5kIGBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKWAgbm93LiBUaGUgdmFsdWVzIG9mIGZsYWdzIGxpa2UgYEZHUF9OT1dBSVRgIGhhdmUgY2hhbmdlZCFcblxuVGhlIHByb21wdCdzIGNyaXRlcmlvbiBpcyBzdHJpY3Q6IGlmIEkgbW9kaWZ5IGNvcmUgbG9naWMsIGl0J3Mgd29ydGggZnV6emluZyEgU3BlY2lmaWNhbGx5LCBpZiBJIG1vZGlmeSBNTSBjb2RlIGFuZCBGaWxlc3lzdGVtIGNvZGUsIGl0J3Mgd29ydGggZnV6emluZy4gUmVjbGFpbSBiZWhhdmlvciBpcyBjaGFuZ2luZywgYW5kIHRoYXQncyBjcml0aWNhbCBpbiBsb2NrZGVwIGFuZCBkZWFkbG9jayBwcmV2ZW50aW9uLlxuXG5JIGFsc28gbmVlZCB0byB2ZXJpZnkgY29uZmlnIHN5bWJvbHMuIGBFUk9GU19GU2AsIGBFWFQ0X0ZTYCwgYE5GU19GU2AsIGBOVEZTX0ZTYCwgYFNRVUFTSEZTYCBhcmUgcmVsZXZhbnQuIFRoZW4sIHRoZSBjb3JlIE1NIGNvZGUgaXMgYWx3YXlzIGVuYWJsZWQgb3IgYSBzdGFuZGFyZCBjb25maWcuIEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBidXQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIEkgaGF2ZSBteSBhbnN3ZXIhXG5cblRoaXMgY2xlYXJseSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGluY2x1ZGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbXVsdGlwbGUgZmlsZXN5c3RlbXMuIEl0J3Mgbm90ICpqdXN0KiBjb3NtZXRpYyBvciB1bnJlYWNoYWJsZSBjb2RlLiBJdCdzIGFib3V0IGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCByZWNsYWltZWQsIGFuZCB0aGF0ICphYnNvbHV0ZWx5KiBtYWtlcyB0aGlzIHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSB3aXRoIGxvY2tkZXAgYW5kIG1lbW9yeSBwcmVzc3VyZS4gVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjE0LjM5Mjg5MzEwNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTE0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVST0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Vyb2ZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Vyb2ZzL0tjb25maWctMi1cXG5mcy9lcm9mcy9LY29uZmlnOjM6Y29uZmlnIEVST0ZTX0ZTXFxuZnMvZXJvZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTQ5LVxcbmZzL2Vyb2ZzL0tjb25maWc6NTA6Y29uZmlnIEVST0ZTX0ZTX0RFQlVHXFxuZnMvZXJvZnMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJFUk9GUyBkZWJ1Z2dpbmcgZmVhdHVyZVxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctNTktXFxuZnMvZXJvZnMvS2NvbmZpZzo2MDpjb25maWcgRVJPRlNfRlNfWEFUVFJcXG5mcy9lcm9mcy9LY29uZmlnLTYxLVxcdGJvb2wgXFxcIkVST0ZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTcwLVxcbmZzL2Vyb2ZzL0tjb25maWc6NzE6Y29uZmlnIEVST0ZTX0ZTX1BPU0lYX0FDTFxcbmZzL2Vyb2ZzL0tjb25maWctNzItXFx0Ym9vbCBcXFwiRVJPRlMgQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTg0LVxcbmZzL2Vyb2ZzL0tjb25maWc6ODU6Y29uZmlnIEVST0ZTX0ZTX1NFQ1VSSVRZXFxuZnMvZXJvZnMvS2NvbmZpZy04Ni1cXHRib29sIFxcXCJFUk9GUyBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTk3LVxcbmZzL2Vyb2ZzL0tjb25maWc6OTg6Y29uZmlnIEVST0ZTX0ZTX0JBQ0tFRF9CWV9GSUxFXFxuZnMvZXJvZnMvS2NvbmZpZy05OS1cXHRib29sIFxcXCJGaWxlLWJhY2tlZCBFUk9GUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTExMS1cXG5mcy9lcm9mcy9LY29uZmlnOjExMjpjb25maWcgRVJPRlNfRlNfWklQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMTMtXFx0Ym9vbCBcXFwiRVJPRlMgRGF0YSBDb21wcmVzc2lvbiBTdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjEtXFxuZnMvZXJvZnMvS2NvbmZpZzoxMjI6Y29uZmlnIEVST0ZTX0ZTX1pJUF9MWk1BXFxuZnMvZXJvZnMvS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiRVJPRlMgTFpNQSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTMzLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTM0OmNvbmZpZyBFUk9GU19GU19aSVBfTFpNQV9ERUZBVUxUX01BWF9TVFJFQU1TXFxuZnMvZXJvZnMvS2NvbmZpZy0xMzUtXFx0aW50IFxcXCJFUk9GUyBMWk1BIGRlZmF1bHQgbWF4aW11bSBkZWNvbXByZXNzaW9uIHN0cmVhbXNcXFwiIGlmIFNNUFxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTAtXFxuZnMvZXJvZnMvS2NvbmZpZzoxNTE6Y29uZmlnIEVST0ZTX0ZTX1pJUF9ERUZMQVRFXFxuZnMvZXJvZnMvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiRVJPRlMgREVGTEFURSBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTYxLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTYyOmNvbmZpZyBFUk9GU19GU19aSVBfWlNURFxcbmZzL2Vyb2ZzL0tjb25maWctMTYzLVxcdGJvb2wgXFxcIkVST0ZTIFpzdGFuZGFyZCBjb21wcmVzc2VkIGRhdGEgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTcyLVxcbmZzL2Vyb2ZzL0tjb25maWc6MTczOmNvbmZpZyBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJFUk9GUyBoYXJkd2FyZSBkZWNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9lcm9mcy9LY29uZmlnLTE4Ni1cXG5mcy9lcm9mcy9LY29uZmlnOjE4Nzpjb25maWcgRVJPRlNfRlNfUENQVV9LVEhSRUFEXFxuZnMvZXJvZnMvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiRVJPRlMgcGVyLWNwdSBkZWNvbXByZXNzaW9uIGt0aHJlYWQgd29ya2Vyc1xcXCJcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctMTk1LVxcbmZzL2Vyb2ZzL0tjb25maWc6MTk2OmNvbmZpZyBFUk9GU19GU19QQ1BVX0tUSFJFQURfSElQUklcXG5mcy9lcm9mcy9LY29uZmlnLTE5Ny1cXHRib29sIFxcXCJFUk9GUyBoaWdoIHByaW9yaXR5IHBlci1DUFUga3RocmVhZCB3b3JrZXJzXFxcIlxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy0yMDUtXFxuZnMvZXJvZnMvS2NvbmZpZzoyMDY6Y29uZmlnIEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVcXG5mcy9lcm9mcy9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJFUk9GUyBwYWdlIGNhY2hlIHNoYXJlIHN1cHBvcnQgKGV4cGVyaW1lbnRhbClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjE0LjQ0MDYxMDcxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDE1OTcxMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCBpbiBgZnMvZXJvZnMvaW50ZXJuYWwuaGAqKlxuXG5SaWdodCwgc28gdGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdXNhZ2Ugb2YgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCB3aXRoaW4gdGhlIEVST0ZTIGZpbGVzeXN0ZW0uIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGBmcy9lcm9mcy9pbnRlcm5hbC5oYCBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0YCBhY3R1YWxseSAqZG9lcyouIElzIGl0IGludm9sdmVkIGluIGNhY2hlIG1hbmFnZW1lbnQsIHBlcmhhcHM/IE9yIG1heWJlIGl0J3MgcmVsYXRlZCB0byBtZXRhZGF0YSBoYW5kbGluZz9cblxuT25jZSBJJ3ZlIGdvdCB0aGF0IHN0cmFpZ2h0IGluIG15IGhlYWQsIEknbGwgbW92ZSBvbiB0byBhIGNyaXRpY2FsIGFzcGVjdCBvZiB1bmRlcnN0YW5kaW5nIGFueSBmdW5jdGlvbjogaXRzIHVzZSBjYXNlcy4gVGhlcmVmb3JlLCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29kZSBjYWxscyBgZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXRgLiBJJ2xsIHdhbnQgdG8gc2VlIHRoZSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBjb2RlIHRoYXQgbWFrZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGl0cyBwdXJwb3NlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBvdGhlciBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhpcyBvbmUuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBFUk9GUyBvcGVyYXRpb25zIHRoYXQgaGVhdmlseSByZWx5IG9uIGl0P1xuXG5cbiIsIklucHV0VG9rZW5zIjoyODIwNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjE3Ljg1NjU4Mzc2OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMzQxNzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcm9mc19ncmFiX2ZvbGlvX25vd2FpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9lcm9mcy9pbnRlcm5hbC5oPTMyMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBlcm9mc19pbm9kZV9kYXRhbGF5b3V0KHVuc2lnbmVkIGludCBpZm10KVxcbi0tXFxuZnMvZXJvZnMvaW50ZXJuYWwuaC0zMjUtLyogcmVjbGFpbWluZyBpcyBuZXZlciB0cmlnZ2VyZWQgd2hlbiBhbGxvY2F0aW5nIG5ldyBmb2xpb3MuICovXFxuZnMvZXJvZnMvaW50ZXJuYWwuaDozMjY6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmVyb2ZzX2dyYWJfZm9saW9fbm93YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICphcyxcXG5mcy9lcm9mcy9pbnRlcm5hbC5oLTMyNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcGdvZmZfdCBpbmRleClcXG4tLVxcbmZzL2Vyb2ZzL3pkYXRhLmM9MTgxND1zdGF0aWMgdm9pZCB6X2Vyb2ZzX3BjbHVzdGVyX3JlYWRtb3JlKHN0cnVjdCB6X2Vyb2ZzX2Zyb250ZW5kICpmLFxcbi0tXFxuZnMvZXJvZnMvemRhdGEuYy0xODUwLVxcbmZzL2Vyb2ZzL3pkYXRhLmM6MTg1MTpcXHRcXHRmb2xpbyA9IGVyb2ZzX2dyYWJfZm9saW9fbm93YWl0KGYtXFx1MDAzZXNoYXJlZGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGluZGV4KTtcXG5mcy9lcm9mcy96ZGF0YS5jLTE4NTItXFx0XFx0aWYgKCFJU19FUlJfT1JfTlVMTChmb2xpbykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6MTkuMzcwMDA2MTgzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NTA4MDE0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBFUk9GUyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBgel9lcm9mc19wY2x1c3Rlcl9yZWFkbW9yZWAgaXMgb25seSByZWxldmFudCB3aGVuIEVST0ZTIGlzIGNvbmZpZ3VyZWQgd2l0aCBlaXRoZXIgYEVST0ZTX0ZTX1BBR0VfQ0FDSEVfU0hBUkVgIG9yIGBFUk9GU19GU19aSVBgLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGFuZCBpdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uIGFuZCBpbXBhY3QuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgRVJPRlMgYW5kIGl0cyBvcHRpbWl6YXRpb25zLCB0aGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgbm93IG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbW9kdWxlIGlzIGFjdHVhbGx5IGRvaW5nLlxuXG5UbyBnZXQgYSBiZXR0ZXIgaWRlYSBvZiBob3cgRVJPRlMgaXMgY29uZmlndXJlZCwgYW5kIHdoZXRoZXIgaXQgY291bGQgcHJvdmlkZSBhbnkgaW5mb3JtYXRpb24sIGl0IGxvb2tzIGxpa2UgY2hlY2tpbmcgdGhlIE5URlMgY29uZmlncyBpbiB0aGUgZmlsZSBzeXN0ZW0gd291bGQgYmUgYSB1c2VmdWwgc3RlcCB0byBiZXR0ZXIgdW5kZXJzdGFuZCBpdC4gVGhlcmVmb3JlLCBJIHdpbGwgbm93IGdvIGFuZCBjaGVjayB0aGUgYGZzL250ZnMvTWFrZWZpbGVgIGFuZCBgZnMvbnRmcy9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IE5URlMgY29uZmlndXJhdGlvbnMsIGFuZCBwb3NzaWJseSByZXZlYWwgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbXBsb3llZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3OTIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0NzoyNy4wMjA4MDk4MjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTcwMDA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy0xMi1cXG5mcy9udGZzL0tjb25maWc6MTM6Y29uZmlnIE5URlNfRlNfV09GX0NPTVBSRVNTSU9OXFxuZnMvbnRmcy9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIk5URlMgV2luZG93cyBzeXN0ZW0gY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy0yMy1cXG5mcy9udGZzL0tjb25maWc6MjQ6Y29uZmlnIE5URlNfREVCVUdcXG5mcy9udGZzL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00NS1cXG5mcy9udGZzL0tjb25maWc6NDY6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuZnMvbnRmcy9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjI3LjMzNjUxNzEwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDQ5NzM4NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipRdWljayBOVEZTIENvbmZpZ3VyYXRpb24gU2NhbioqXG5cblJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gb24gdG9wIG9mIHRoZSBOVEZTIGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgc3RhdHVzIG9mIGBOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTmAuIFRoYXQgb25lIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd3JpdGUtb25jZSwgZmlsZS1zeXN0ZW0tYmFzZWQgY29tcHJlc3Npb24gaXMgaGFuZGxlZC4gQW5kIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBpZiBgTlRGU19GU19SV2AgaXMgc3RpbGwgYXJvdW5kLCBvciBpZiBpdCdzIGJlZW4gc3VwZXJzZWRlZCBieSBzb21ldGhpbmcgZWxzZS4gQmVzdCB0byBqdXN0IGp1bXAgaW50byBgZnMvbnRmcy9LY29uZmlnYCBhbmQgdmVyaWZ5LiBOb3RoaW5nIHdvcnNlIHRoYW4gbWFraW5nIGFzc3VtcHRpb25zIHdoZW4gYSBxdWljayBLY29uZmlnIGNoZWNrIHdpbGwgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzI5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6MzAuNzg2MjU3NDE2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cXG4gICA4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIG50ZnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBOVEZTX0ZTX1dPRl9DT01QUkVTU0lPTlxcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTlRGUyBXaW5kb3dzIHN5c3RlbSBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIEVuYWJsZSByZWFkIHN1cHBvcnQgZm9yIFdpbmRvd3Mgc3lzdGVtLWNvbXByZXNzZWQgZmlsZXMuXFxuICAxODpcXHRcXHQgIFdpbmRvd3MgbW9yZSBhZ2dyZXNzaXZlbHkgY29tcHJlc3NlcyBzeXN0ZW0gZmlsZXMgc3VjaCBhcyBiaW5hcmllc1xcbiAgMTk6XFx0XFx0ICBhbmQgRExMcyB1c2luZyBzeXN0ZW0gY29tcHJlc3Npb24uIEl0IGlzIG9wdGltaXplZCBmb3IgZmlsZXMgdGhhdFxcbiAgMjA6XFx0XFx0ICBhcmUgcmFyZWx5IG1vZGlmaWVkLlxcbiAgMjE6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiBidWlsZHMgdGhlIGRlY29tcHJlc3Npb24gc3VwcG9ydCBpbnRvIHRoZSBOVEZTXFxuICAyMjpcXHRcXHQgIG1vZHVsZS5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5URlNfREVCVUdcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIk5URlMgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxcbiAgMjk6XFx0XFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXFxuICAzMDpcXHRcXHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cXG4gIDMxOlxcdFxcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXFxuICAzMjpcXHRcXHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXFxuICAzMzpcXHRcXHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxcbiAgMzQ6XFx0XFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXFxuICAzNTpcXHRcXHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XFxuICAzNjpcXHRcXHQgIGVjaG8gMSBcXHUwMDNlIC9wcm9jL3N5cy9mcy9udGZzLWRlYnVnXFxuICAzNzpcXHRcXHQgIFJlcGxhY2luZyB0aGUgXFxcIjFcXFwiIHdpdGggXFxcIjBcXFwiIHdvdWxkIGRpc2FibGUgZGVidWcgbWVzc2FnZXMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgSWYgeW91IGxlYXZlIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZCwgdGhpcyByZXN1bHRzIGluIGxpdHRsZVxcbiAgNDA6XFx0XFx0ICBvdmVyaGVhZCwgYnV0IGVuYWJsaW5nIGRlYnVnIG1lc3NhZ2VzIHJlc3VsdHMgaW4gdmVyeSBzaWduaWZpY2FudFxcbiAgNDE6XFx0XFx0ICBzbG93ZG93biBvZiB0aGUgc3lzdGVtLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcXG4gIDQ0OlxcdFxcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuICA0NzpcXHRcXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICA0OTpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICA1MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjMwLjc4NjQ1Nzg1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQyMzYxMTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU3F1YXNoRlMgQ29uZmlndXJhdGlvbiBIdW50KipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdGhpcyBzb3J0ZWQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBTcXVhc2hGUyBhbmQgaG93IGl0J3MgYmVpbmcgaGFuZGxlZCBpbiB0aGUgc3lzdGVtLiBUaGUgYGZzL3NxdWFzaGZzL0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhvc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCdzIHRoZSBnby10byBzcG90IGZvciBmaWd1cmluZyBvdXQgd2hhdCdzIGVuYWJsZWQsIGRpc2FibGVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlciB3aXRoaW4gdGhlIGJyb2FkZXIgYnVpbGQgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhvc2UgY29uZmlncyB0aG9yb3VnaGx5IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0Nzo0OS4yMTAwNzE2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTg4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNRVUFTSEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NxdWFzaGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NxdWFzaGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zcXVhc2hmcy9LY29uZmlnOjI6Y29uZmlnIFNRVUFTSEZTXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTcXVhc2hGUyA0LjAgLSBTcXVhc2hlZCBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZz0yOT1jaG9pY2VcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctNDAtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzo0MTpjb25maWcgU1FVQVNIRlNfRklMRV9DQUNIRVxcbmZzL3NxdWFzaGZzL0tjb25maWctNDItXFx0Ym9vbCBcXFwiRGVjb21wcmVzcyBmaWxlIGRhdGEgaW50byBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyXFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy00Ni1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjQ3OmNvbmZpZyBTUVVBU0hGU19GSUxFX0RJUkVDVFxcbmZzL3NxdWFzaGZzL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGVjb21wcmVzcyBmaWxlcyBkaXJlY3RseSBpbnRvIHRoZSBwYWdlIGNhY2hlXFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZz01NT1lbmRjaG9pY2VcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTU2LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6NTc6Y29uZmlnIFNRVUFTSEZTX0RFQ09NUF9TSU5HTEVcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTU4LVxcdGRlcGVuZHMgb24gU1FVQVNIRlNcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctNjAtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzo2MTpjb25maWcgU1FVQVNIRlNfREVDT01QX01VTFRJXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy02Mi1cXHRkZXBlbmRzIG9uIFNRVUFTSEZTXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTY0LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6NjU6Y29uZmlnIFNRVUFTSEZTX0RFQ09NUF9NVUxUSV9QRVJDUFVcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTY2LVxcdGRlcGVuZHMgb24gU1FVQVNIRlNcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctNjgtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzo2OTpjb25maWcgU1FVQVNIRlNfQ0hPSUNFX0RFQ09NUF9CWV9NT1VOVFxcbmZzL3NxdWFzaGZzL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiU2VsZWN0IHRoZSBwYXJhbGxlbCBkZWNvbXByZXNzaW9uIG1vZGUgZHVyaW5nIG1vdW50XFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZz04Mj1jaG9pY2VcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctOTItXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzo5Mzpjb25maWcgU1FVQVNIRlNfQ09NUElMRV9ERUNPTVBfU0lOR0xFXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy05NC1cXHRib29sIFxcXCJTaW5nbGUgdGhyZWFkZWQgY29tcHJlc3Npb25cXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTEwMC1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjEwMTpjb25maWcgU1FVQVNIRlNfQ09NUElMRV9ERUNPTVBfTVVMVElcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJVc2UgbXVsdGlwbGUgZGVjb21wcmVzc29ycyBmb3IgcGFyYWxsZWwgSS9PXFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMTUtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxMTY6Y29uZmlnIFNRVUFTSEZTX0NPTVBJTEVfREVDT01QX01VTFRJX1BFUkNQVVxcbmZzL3NxdWFzaGZzL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIlVzZSBwZXJjcHUgbXVsdGlwbGUgZGVjb21wcmVzc29ycyBmb3IgcGFyYWxsZWwgSS9PXFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZz0xMjc9ZW5kY2hvaWNlXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMjgtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxMjk6Y29uZmlnIFNRVUFTSEZTX01PVU5UX0RFQ09NUF9USFJFQURTXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xMzAtXFx0Ym9vbCBcXFwiQWRkIHRoZSBtb3VudCBwYXJhbWV0ZXIgJ3RocmVhZHM9JyBmb3Igc3F1YXNoZnNcXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE0MS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE0Mjpjb25maWcgU1FVQVNIRlNfWEFUVFJcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE0My1cXHRib29sIFxcXCJTcXVhc2hmcyBYQVRUUiBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc3F1YXNoZnMvS2NvbmZpZy0xNTEtXFxuZnMvc3F1YXNoZnMvS2NvbmZpZzoxNTI6Y29uZmlnIFNRVUFTSEZTX0NPTVBfQ0FDSEVfRlVMTFxcbmZzL3NxdWFzaGZzL0tjb25maWctMTUzLVxcdGJvb2wgXFxcIkVuYWJsZSBmdWxsIGNhY2hpbmcgb2YgY29tcHJlc3NlZCBibG9ja3NcXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE3Mi1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjE3Mzpjb25maWcgU1FVQVNIRlNfWkxJQlxcbmZzL3NxdWFzaGZzL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkluY2x1ZGUgc3VwcG9ydCBmb3IgWkxJQiBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctMTg1LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6MTg2OmNvbmZpZyBTUVVBU0hGU19MWjRcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJJbmNsdWRlIHN1cHBvcnQgZm9yIExaNCBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjAwLVxcbmZzL3NxdWFzaGZzL0tjb25maWc6MjAxOmNvbmZpZyBTUVVBU0hGU19MWk9cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTIwMi1cXHRib29sIFxcXCJJbmNsdWRlIHN1cHBvcnQgZm9yIExaTyBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjE1LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6MjE2OmNvbmZpZyBTUVVBU0hGU19YWlxcbmZzL3NxdWFzaGZzL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIkluY2x1ZGUgc3VwcG9ydCBmb3IgWFogY29tcHJlc3NlZCBmaWxlIHN5c3RlbXNcXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTIzMC1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjIzMTpjb25maWcgU1FVQVNIRlNfWlNURFxcbmZzL3NxdWFzaGZzL0tjb25maWctMjMyLVxcdGJvb2wgXFxcIkluY2x1ZGUgc3VwcG9ydCBmb3IgWlNURCBjb21wcmVzc2VkIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjQ0LVxcbmZzL3NxdWFzaGZzL0tjb25maWc6MjQ1OmNvbmZpZyBTUVVBU0hGU180S19ERVZCTEtfU0laRVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjQ2LVxcdGJvb2wgXFxcIlVzZSA0SyBkZXZpY2UgYmxvY2sgc2l6ZT9cXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI2Ni1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjI2Nzpjb25maWcgU1FVQVNIRlNfRU1CRURERURcXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI2OC1cXHRib29sIFxcXCJBZGRpdGlvbmFsIG9wdGlvbiBmb3IgbWVtb3J5LWNvbnN0cmFpbmVkIHN5c3RlbXNcXFwiXFxuLS1cXG5mcy9zcXVhc2hmcy9LY29uZmlnLTI3NC1cXG5mcy9zcXVhc2hmcy9LY29uZmlnOjI3NTpjb25maWcgU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRVxcbmZzL3NxdWFzaGZzL0tjb25maWctMjc2LVxcdGludCBcXFwiTnVtYmVyIG9mIGZyYWdtZW50cyBjYWNoZWRcXFwiIGlmIFNRVUFTSEZTX0VNQkVEREVEXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ3OjQ5LjI1NTc3NjA1OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzU4MzkxNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYWN0dWFsbHkgZW5hYmxpbmcgdGhlIGBzcXVhc2hmc19jb3B5X2NhY2hlYCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9zcXVhc2hmcy9maWxlLmNgLiBUaGF0J3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIEknbSBjaGFzaW5nIGRvd24gaG93IGEgcGFydGljdWxhciBmZWF0dXJlLCBlc3BlY2lhbGx5IG9uZSByZWxhdGVkIHRvIGZpbGUgaGFuZGxpbmcsIGlzIGNvbnRyb2xsZWQgYXQgYnVpbGQgdGltZS4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgc2NhbiB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIOKAkyB0aGUgYCNpZmRlZmAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIOKAkyB0aGF0IGNvbnRyb2wgd2hldGhlciB0aGUgY29kZSB1dGlsaXppbmcgYHNxdWFzaGZzX2NvcHlfY2FjaGVgIGlzIGFjdHVhbGx5IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRpbWUgdG8gc2VlIHdoaWNoIGNvbmZpZyBvcHRpb25zIHVsdGltYXRlbHkgZGVjaWRlIGlmIHRoYXQgY29kZSBnZXRzIGxpbmtlZCBvciBub3QuIEhvcGVmdWxseSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBtYXliZSBhIHNpbmdsZSBgQ09ORklHX1NRVUFTSEZTXypgIHZhcmlhYmxlLCBvciBwZXJoYXBzIGEgbW9yZSBpbnZvbHZlZCBkZXBlbmRlbmN5IGNoYWluLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTM2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6NTQuNjE0MTY5ODk5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAxMzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcXVhc2hmc19jb3B5X2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NxdWFzaGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NxdWFzaGZzL2ZpbGUuYz0zNzQ9c3RhdGljIGJvb2wgc3F1YXNoZnNfZmlsbF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9zcXVhc2hmcy9maWxlLmMtMzkxLS8qIENvcHkgZGF0YSBpbnRvIHBhZ2UgY2FjaGUgICovXFxuZnMvc3F1YXNoZnMvZmlsZS5jOjM5Mjp2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5mcy9zcXVhc2hmcy9maWxlLmMtMzkzLVxcdFxcdHN0cnVjdCBzcXVhc2hmc19jYWNoZV9lbnRyeSAqYnVmZmVyLCBzaXplX3QgYnl0ZXMsXFxuLS1cXG5mcy9zcXVhc2hmcy9maWxlLmM9NDM5PXN0YXRpYyBpbnQgc3F1YXNoZnNfcmVhZHBhZ2VfZnJhZ21lbnQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGV4cGVjdGVkKVxcbi0tXFxuZnMvc3F1YXNoZnMvZmlsZS5jLTQ1MS1cXHRlbHNlXFxuZnMvc3F1YXNoZnMvZmlsZS5jOjQ1MjpcXHRcXHRzcXVhc2hmc19jb3B5X2NhY2hlKGZvbGlvLCBidWZmZXIsIGV4cGVjdGVkLFxcbmZzL3NxdWFzaGZzL2ZpbGUuYy00NTMtXFx0XFx0XFx0c3F1YXNoZnNfaShpbm9kZSktXFx1MDAzZWZyYWdtZW50X29mZnNldCk7XFxuLS1cXG5mcy9zcXVhc2hmcy9maWxlLmM9NDU5PXN0YXRpYyBpbnQgc3F1YXNoZnNfcmVhZHBhZ2Vfc3BhcnNlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBleHBlY3RlZClcXG5mcy9zcXVhc2hmcy9maWxlLmMtNDYwLXtcXG5mcy9zcXVhc2hmcy9maWxlLmM6NDYxOlxcdHNxdWFzaGZzX2NvcHlfY2FjaGUoZm9saW8sIE5VTEwsIGV4cGVjdGVkLCAwKTtcXG5mcy9zcXVhc2hmcy9maWxlLmMtNDYyLVxcdHJldHVybiAwO1xcbi0tXFxuZnMvc3F1YXNoZnMvZmlsZV9jYWNoZS5jPTIxPWludCBzcXVhc2hmc19yZWFkcGFnZV9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgYmxvY2ssIGludCBic2l6ZSwgaW50IGV4cGVjdGVkKVxcbi0tXFxuZnMvc3F1YXNoZnMvZmlsZV9jYWNoZS5jLTMxLVxcdGVsc2VcXG5mcy9zcXVhc2hmcy9maWxlX2NhY2hlLmM6MzI6XFx0XFx0c3F1YXNoZnNfY29weV9jYWNoZShmb2xpbywgYnVmZmVyLCBleHBlY3RlZCwgMCk7XFxuZnMvc3F1YXNoZnMvZmlsZV9jYWNoZS5jLTMzLVxcbi0tXFxuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaD03Mj1leHRlcm4gX19sZTY0ICpzcXVhc2hmc19yZWFkX2ZyYWdtZW50X2luZGV4X3RhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqLFxcbi0tXFxuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaC03NS0vKiBmaWxlLmMgKi9cXG5mcy9zcXVhc2hmcy9zcXVhc2hmcy5oOjc2OnZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKiwgc3RydWN0IHNxdWFzaGZzX2NhY2hlX2VudHJ5ICosXFxuZnMvc3F1YXNoZnMvc3F1YXNoZnMuaC03Ny1cXHRcXHRzaXplX3QgYnl0ZXMsIHNpemVfdCBvZmZzZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0Nzo1NC42NjAxODYxNTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM1NjAwOTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYGZzL3NxdWFzaGZzL01ha2VmaWxlYDpcblxuKipBbmFseXppbmcgdGhlIFNxdWFzaGZzIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9zcXVhc2hmcy9NYWtlZmlsZWAuIEdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiBmaWxlIHN5c3RlbXMgYW5kIGJ1aWxkIHByb2Nlc3NlcywgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHdoYXQgSSBleHBlY3QgdG8gc2VlLiBJIGFudGljaXBhdGUgdGhpcyBNYWtlZmlsZSB3aWxsIG1hbmFnZSB0aGUgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgb2YgdGhlIFNxdWFzaGZzIGtlcm5lbCBtb2R1bGUsIGl0cyB1dGlsaXRpZXMsIGFuZCBwb3RlbnRpYWxseSBzb21lIHRlc3RzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleSBlbGVtZW50czogdGhlIG1vZHVsZSBuYW1lIGRlZmluaXRpb24sIHNvdXJjZSBmaWxlIGxpc3RzLCBvYmplY3QgZmlsZSBnZW5lcmF0aW9uLCBkZXBlbmRlbmN5IHJ1bGVzLCBjb21waWxhdGlvbiBmbGFncywgbGlua2VyIG9wdGlvbnMsIGluc3RhbGxhdGlvbiB0YXJnZXRzLCBhbmQgYW55IGNyb3NzLWNvbXBpbGF0aW9uIGNvbnNpZGVyYXRpb25zLiBJJ2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbnkgY2xldmVyIHRyaWNrcyBvciBvcHRpbWl6YXRpb25zIHRoZXkndmUgaW1wbGVtZW50ZWQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgYnVpbGQgc3RydWN0dXJlLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCwgb3Igc3BvdCBhbnkgdW51c3VhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJ20gYWxzbyBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgc3lzdGVtLiBBcmUgdGhleSB1c2luZyB0aGUgc3RhbmRhcmQga2VybmVsIG1ha2UgcnVsZXMsIG9yIGhhdmUgdGhleSBpbnRyb2R1Y2VkIGN1c3RvbSBsb2dpYz8gRmluYWxseSwgSSBuZWVkIHRvIG5vdGUgYW55IHNwZWNpZmljIGZsYWdzIG9yIHRhcmdldHMgdGhhdCBJIGNvdWxkIHV0aWxpemUgZm9yIHF1aWNrIHJlYnVpbGRzIG9yIHVuaXQgdGVzdHMgaW4gbXkgc3BlY2lmaWMgdXNlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6NTkuMDE2MTk4MTkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3NxdWFzaGZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IHNxdWFzaGZzIHJvdXRpbmVzLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfU1FVQVNIRlMpICs9IHNxdWFzaGZzLm9cXG4gICA3OlxcdHNxdWFzaGZzLXkgKz0gYmxvY2subyBjYWNoZS5vIGRpci5vIGV4cG9ydC5vIGZpbGUubyBmcmFnbWVudC5vIGlkLm8gaW5vZGUub1xcbiAgIDg6XFx0c3F1YXNoZnMteSArPSBuYW1laS5vIHN1cGVyLm8gc3ltbGluay5vIGRlY29tcHJlc3Nvci5vIHBhZ2VfYWN0b3Iub1xcbiAgIDk6XFx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfRklMRV9DQUNIRSkgKz0gZmlsZV9jYWNoZS5vXFxuICAxMDpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19GSUxFX0RJUkVDVCkgKz0gZmlsZV9kaXJlY3Qub1xcbiAgMTE6XFx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfREVDT01QX1NJTkdMRSkgKz0gZGVjb21wcmVzc29yX3NpbmdsZS5vXFxuICAxMjpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19ERUNPTVBfTVVMVEkpICs9IGRlY29tcHJlc3Nvcl9tdWx0aS5vXFxuICAxMzpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19ERUNPTVBfTVVMVElfUEVSQ1BVKSArPSBkZWNvbXByZXNzb3JfbXVsdGlfcGVyY3B1Lm9cXG4gIDE0OlxcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX1hBVFRSKSArPSB4YXR0ci5vIHhhdHRyX2lkLm9cXG4gIDE1OlxcdHNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0xaNCkgKz0gbHo0X3dyYXBwZXIub1xcbiAgMTY6XFx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfTFpPKSArPSBsem9fd3JhcHBlci5vXFxuICAxNzpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19YWikgKz0geHpfd3JhcHBlci5vXFxuICAxODpcXHRzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19aTElCKSArPSB6bGliX3dyYXBwZXIub1xcbiAgMTk6XFx0c3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfWlNURCkgKz0genN0ZF93cmFwcGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDc6NTkuMDE2MjU3OTExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTQzNDMzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gRmlsZW1hcCBhbmQgRm9saW8gSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGZvY3VzIHN5bWJvbHMgYW5kIGhvdyB0aGV5J3JlIGRlY2xhcmVkIGFuZCBsaW5rZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY2hhbmdlcyBhbmQgdGhlaXIgaW1wYWN0IG9uIGNlcnRhaW4gZnVuY3Rpb25zLCBuYW1lbHkgYF9fZmlsZW1hcF9nZXRfZm9saW9gIGFuZCBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCByZXNpZGluZyBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGNoZWNrLiBJcyBgX19maWxlbWFwX2dldF9mb2xpb2AgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlY2xhcmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgZnVsbHkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYG1tL2ZpbGVtYXAuY2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ4OjAxLjA3MDYwMzg1M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNzMwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19maWxlbWFwX2dldF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9maWxlbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZmlsZW1hcC5jPTE4OTk9dm9pZCAqZmlsZW1hcF9nZXRfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgpXFxuLS1cXG5tbS9maWxlbWFwLmMtMTkzMC0vKipcXG5tbS9maWxlbWFwLmM6MTkzMTogKiBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wgLSBGaW5kIGFuZCBnZXQgYSByZWZlcmVuY2UgdG8gYSBmb2xpby5cXG5tbS9maWxlbWFwLmMtMTkzMi0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoLlxcbi0tXFxubW0vZmlsZW1hcC5jLTE5NDYtICovXFxubW0vZmlsZW1hcC5jOjE5NDc6c3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxubW0vZmlsZW1hcC5jLTE5NDgtXFx0XFx0cGdvZmZfdCBpbmRleCwgZmdmX3QgZmdwX2ZsYWdzLCBnZnBfdCBnZnAsIHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDczLX1cXG5tbS9maWxlbWFwLmM6MjA3NDpFWFBPUlRfU1lNQk9MKF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCk7XFxubW0vZmlsZW1hcC5jLTIwNzUtXFxuLS1cXG5tbS9maWxlbWFwLmM9MzU1Mz12bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9maWxlbWFwLmMtMzYwNC1cXHRcXHR9XFxubW0vZmlsZW1hcC5jOjM2MDU6XFx0XFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbm1tL2ZpbGVtYXAuYy0zNjA2LVxcdFxcdFxcdFxcdFxcdCAgRkdQX0NSRUFUfEZHUF9GT1JfTU1BUCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6MDEuMTE3OTgxNzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc0NzA3Mjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZpbGUgU3lzdGVtIERhdGEgQ29ycnVwdGlvbiBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgZmlsZSBzeXN0ZW0gZGF0YSBjb3JydXB0aW9uIGNvdWxkIGNyZWVwIGluLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGZpbGUgc3lzdGVtcyB0aGF0IGhhbmRsZSBkYXRhIGRpcmVjdGx5LCBpbiBwYXJ0aWN1bGFyIGlubGluZSBkYXRhIGFuZCBjYWNoZSBtYW5hZ2VtZW50LiBJIHN0YXJ0IGJ5IG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZSBleHBvcnRlZCBzeW1ib2wgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAsIGFuZCB0aGUgaW5saW5lIHdyYXBwZXIgYF9fZmlsZW1hcF9nZXRfZm9saW9gIOKAkyB0aGVzZSBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSBhcmUgdmlzaWJsZSBleHRlcm5hbGx5LiBJIGtub3cgdGhvc2UgYXJlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAsIEkgd2FudCB0byBiZSBhd2FyZSBvZiBob3cgdGhleSdyZSB1c2VkLlxuXG5OZXh0LCBJIHNlZSBgc3F1YXNoZnNfY29weV9jYWNoZWAgaW4gYGZzL3NxdWFzaGZzL2ZpbGUuY2AgaXMgbm9uLXN0YXRpYywgbWVhbmluZyBpdCdzIGV4dGVybmFsbHkgdmlzaWJsZSB3aXRoaW4gdGhhdCBtb2R1bGUuIFNhbWUgd2l0aCBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCBpbiBgZnMvZXh0NC9pbmxpbmUuY2AuIFRoZXNlIGp1bXAgb3V0IGFzIGZ1bmN0aW9ucyBJIHNob3VsZCBkZWZpbml0ZWx5IHNjcnV0aW5pemUuIEFueSBub24tc3RhdGljIGZ1bmN0aW9uIGNvdWxkIGhhdmUgaXRzIGRhdGEgbWFuaXB1bGF0ZWQgYnkgYW5vdGhlciBtb2R1bGUuXG5cblRoZW4sIHRoZXJlJ3MgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRgIGluIGBmcy9leHQ0L2lubGluZS5jYC4gSXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGV4dGVybmFsbHkgdmlzaWJsZSwgYnV0IHRoYXQgZG9lc24ndCBtZWFuIGl0J3Mgc2FmZS4gSXQncyBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4sIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdpdGhpbiB0aGUgZmlsZSwgb3IgYW55IGV4cG9ydGVkIHN5bWJvbHMsIHRoYXQgbWlnaHQgY2FsbCBpdCwgb3Igb3RoZXJ3aXNlIGV4cG9zZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gYGZzL2V4dDQvaW5saW5lLmNgIGFuZCBzcGVjaWZpY2FsbHkgdHJhY2UgdGhlIGNhbGxlcnMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSB3YXkgdG8gdHJpZ2dlciBpdCBmcm9tIG91dHNpZGUgaXRzIGZpbGUgc2NvcGUuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYW5hbHlzaXMgdG8gdW5jb3ZlciBhbnkgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6MDQuODY1MDU3NjZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njk2NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lubGluZS5jPTU0ND1pbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTcwLVxcbmZzL2V4dDQvaW5saW5lLmM6NTcxOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9leHQ0L2lubGluZS5jLTU3Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz02OTM9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNzI0LVxcdFxcdFxcdC8qIFJldHJ5IGluc2lkZSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NzI1OlxcdFxcdFxcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcXG5mcy9leHQ0L2lubGluZS5jLTcyNi1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTc4MD1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTc4NS1cXHRpZiAocG9zICsgbGVuIFxcdTAwM2UgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSlcXG5mcy9leHQ0L2lubGluZS5jOjc4NjpcXHRcXHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy03ODctXFx0cmV0dXJuIGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ4OjA0LjkxMDc2MDk0OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA0MzExMTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmxpbmUgRGF0YSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGFgIGFyZSAqbm90KiBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIHRoZXkgY291bGQgcG90ZW50aWFsbHkgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGVpciBpbW1lZGlhdGUgc2NvcGUsIHdoaWNoIGlzIHJlbGV2YW50IGlmIHdlJ3JlIGludmVzdGlnYXRpbmcgaG93IGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhcHByb2FjaCBpbmxpbmUgZGF0YS4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IG9wcG9ydHVuaXRpZXMgdG8gY29uc29saWRhdGUgb3IgYmV0dGVyIHVuZGVyc3RhbmQgdGhlc2UgaW1wbGVtZW50YXRpb25zLlxuXG5UbyB0aGF0IGVuZCwgSSB0aGluayBhIGxvb2sgYXQgYG50ZnNfd29mX2NvbGxlY3RfZGVzdGAgaW4gYGZzL250ZnMvd29mLmNgIHdvdWxkIGJlIHdvcnRod2hpbGUuIFNlZWluZyBob3cgTlRGUyBoYW5kbGVzIGl0cyBXcml0ZS1Pbmx5LUZpbHRlciAoV09GKSBhbmQgaW5saW5lIGRhdGEgY291bGQgcmV2ZWFsIHBvdGVudGlhbCBpbnNpZ2h0cywgY29tcGFyaXNvbnMsIG9yIGV2ZW4gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIGludmVzdGlnYXRpb24uIEl0IG1pZ2h0IGlsbHVtaW5hdGUgc29tZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzLiBMZXQncyBzZWUgd2hhdCB0aGF0IG1vZHVsZSBoYXMgdG8gb2ZmZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6MjQuOTUzODc1MzIyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE0ODU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX3dvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvbnRmcy5oPTIwNj1pbnQgbnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmZzL250ZnMvbnRmcy5oOjIwNzp2b2lkIG50ZnNfd29mX2ZyZWVfd29ya3NwYWNlcyh2b2lkKTtcXG5mcy9udGZzL250ZnMuaC0yMDgtI2VuZGlmXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MjY4Mz1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9udGZzX2ZzKHZvaWQpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjY5NC0jaWZkZWYgQ09ORklHX05URlNfRlNfV09GX0NPTVBSRVNTSU9OXFxuZnMvbnRmcy9zdXBlci5jOjI2OTU6XFx0bnRmc193b2ZfZnJlZV93b3Jrc3BhY2VzKCk7XFxuZnMvbnRmcy9zdXBlci5jLTI2OTYtI2VuZGlmXFxuLS1cXG5mcy9udGZzL3dvZi5jPTIzPXN0YXRpYyBjb25zdCBfX2xlMTYgV09GX05BTUVbXSA9IHtcXG4tLVxcbmZzL250ZnMvd29mLmMtMzctXFxuZnMvbnRmcy93b2YuYzozODpzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIHtcXG5mcy9udGZzL3dvZi5jLTM5LVxcdHN0cnVjdCBtdXRleCAqbG9jaztcXG4tLVxcbmZzL250ZnMvd29mLmMtNDctXFxuZnMvbnRmcy93b2YuYzo0ODpzdGF0aWMgREVGSU5FX01VVEVYKG50ZnNfd29mX3hwcmVzczRrX2xvY2spO1xcbmZzL250ZnMvd29mLmM6NDk6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl94cHJlc3M4a19sb2NrKTtcXG5mcy9udGZzL3dvZi5jOjUwOnN0YXRpYyBERUZJTkVfTVVURVgobnRmc193b2ZfeHByZXNzMTZrX2xvY2spO1xcbmZzL250ZnMvd29mLmM6NTE6c3RhdGljIERFRklORV9NVVRFWChudGZzX3dvZl9sengzMmtfbG9jayk7XFxuZnMvbnRmcy93b2YuYy01Mi1cXG5mcy9udGZzL3dvZi5jOjUzOnN0YXRpYyBzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIG50ZnNfd29mX3hwcmVzczRrX3dvcmtzcGFjZSA9IHtcXG5mcy9udGZzL3dvZi5jOjU0OlxcdC5sb2NrID0gXFx1MDAyNm50ZnNfd29mX3hwcmVzczRrX2xvY2ssXFxuZnMvbnRmcy93b2YuYy01NS1cXHQuY29kZWMgPSBcXHUwMDI2bnRmc194cHJlc3M0a19jb2RlY19vcHMsXFxuLS1cXG5mcy9udGZzL3dvZi5jLTU4LVxcbmZzL250ZnMvd29mLmM6NTk6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgbnRmc193b2ZfeHByZXNzOGtfd29ya3NwYWNlID0ge1xcbmZzL250ZnMvd29mLmM6NjA6XFx0LmxvY2sgPSBcXHUwMDI2bnRmc193b2ZfeHByZXNzOGtfbG9jayxcXG5mcy9udGZzL3dvZi5jLTYxLVxcdC5jb2RlYyA9IFxcdTAwMjZudGZzX3hwcmVzczhrX2NvZGVjX29wcyxcXG4tLVxcbmZzL250ZnMvd29mLmMtNjQtXFxuZnMvbnRmcy93b2YuYzo2NTpzdGF0aWMgc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSBudGZzX3dvZl94cHJlc3MxNmtfd29ya3NwYWNlID0ge1xcbmZzL250ZnMvd29mLmM6NjY6XFx0LmxvY2sgPSBcXHUwMDI2bnRmc193b2ZfeHByZXNzMTZrX2xvY2ssXFxuZnMvbnRmcy93b2YuYy02Ny1cXHQuY29kZWMgPSBcXHUwMDI2bnRmc194cHJlc3MxNmtfY29kZWNfb3BzLFxcbi0tXFxuZnMvbnRmcy93b2YuYy03MC1cXG5mcy9udGZzL3dvZi5jOjcxOnN0YXRpYyBzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlIG50ZnNfd29mX2x6eDMya193b3Jrc3BhY2UgPSB7XFxuZnMvbnRmcy93b2YuYzo3MjpcXHQubG9jayA9IFxcdTAwMjZudGZzX3dvZl9sengzMmtfbG9jayxcXG5mcy9udGZzL3dvZi5jLTczLVxcdC5jb2RlYyA9IFxcdTAwMjZudGZzX2x6eDMya19jb2RlY19vcHMsXFxuLS1cXG5mcy9udGZzL3dvZi5jLTc2LVxcbmZzL250ZnMvd29mLmM6Nzc6c3RhdGljIHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKmNvbnN0IG50ZnNfd29mX3dvcmtzcGFjZXNbXSA9IHtcXG5mcy9udGZzL3dvZi5jOjc4OlxcdFxcdTAwMjZudGZzX3dvZl94cHJlc3M0a193b3Jrc3BhY2UsXFxuZnMvbnRmcy93b2YuYzo3OTpcXHRcXHUwMDI2bnRmc193b2ZfeHByZXNzOGtfd29ya3NwYWNlLFxcbmZzL250ZnMvd29mLmM6ODA6XFx0XFx1MDAyNm50ZnNfd29mX3hwcmVzczE2a193b3Jrc3BhY2UsXFxuZnMvbnRmcy93b2YuYzo4MTpcXHRcXHUwMDI2bnRmc193b2ZfbHp4MzJrX3dvcmtzcGFjZSxcXG5mcy9udGZzL3dvZi5jLTgyLX07XFxuZnMvbnRmcy93b2YuYy04My1cXG5mcy9udGZzL3dvZi5jOjg0OnN0YXRpYyBzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICpudGZzX3dvZl93b3Jrc3BhY2UodTggYmxvY2tfc2l6ZV9iaXRzKVxcbmZzL250ZnMvd29mLmMtODUte1xcbi0tXFxuZnMvbnRmcy93b2YuYy04Ny1cXHRjYXNlIDEyOlxcbmZzL250ZnMvd29mLmM6ODg6XFx0XFx0cmV0dXJuIFxcdTAwMjZudGZzX3dvZl94cHJlc3M0a193b3Jrc3BhY2U7XFxuZnMvbnRmcy93b2YuYy04OS1cXHRjYXNlIDEzOlxcbmZzL250ZnMvd29mLmM6OTA6XFx0XFx0cmV0dXJuIFxcdTAwMjZudGZzX3dvZl94cHJlc3M4a193b3Jrc3BhY2U7XFxuZnMvbnRmcy93b2YuYy05MS1cXHRjYXNlIDE0OlxcbmZzL250ZnMvd29mLmM6OTI6XFx0XFx0cmV0dXJuIFxcdTAwMjZudGZzX3dvZl94cHJlc3MxNmtfd29ya3NwYWNlO1xcbmZzL250ZnMvd29mLmMtOTMtXFx0Y2FzZSAxNTpcXG5mcy9udGZzL3dvZi5jOjk0OlxcdFxcdHJldHVybiBcXHUwMDI2bnRmc193b2ZfbHp4MzJrX3dvcmtzcGFjZTtcXG5mcy9udGZzL3dvZi5jLTk1LVxcdGRlZmF1bHQ6XFxuLS1cXG5mcy9udGZzL3dvZi5jLTk5LVxcbmZzL250ZnMvd29mLmM6MTAwOnN0YXRpYyBpbnQgbnRmc193b2Zfd29ya3NwYWNlX3ByZXBhcmUoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MpXFxuZnMvbnRmcy93b2YuYy0xMDEte1xcbi0tXFxuZnMvbnRmcy93b2YuYy0xMjgtXFxuZnMvbnRmcy93b2YuYzoxMjk6dm9pZCBudGZzX3dvZl9mcmVlX3dvcmtzcGFjZXModm9pZClcXG5mcy9udGZzL3dvZi5jLTEzMC17XFxuLS1cXG5mcy9udGZzL3dvZi5jLTEzMi1cXG5mcy9udGZzL3dvZi5jOjEzMzpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShudGZzX3dvZl93b3Jrc3BhY2VzKTsgaSsrKSB7XFxuZnMvbnRmcy93b2YuYzoxMzQ6XFx0XFx0c3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MgPSBudGZzX3dvZl93b3Jrc3BhY2VzW2ldO1xcbmZzL250ZnMvd29mLmMtMTM1LVxcbi0tXFxuZnMvbnRmcy93b2YuYz0zNjU9c3RhdGljIGludCBudGZzX3JlYWRfd29mX2NodW5rKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLFxcbi0tXFxuZnMvbnRmcy93b2YuYy00MTktXFxuZnMvbnRmcy93b2YuYzo0MjA6c3RydWN0IG50ZnNfd29mX2Rlc3Qge1xcbmZzL250ZnMvd29mLmMtNDIxLVxcdHN0cnVjdCBmb2xpbyAqZm9saW9zW05URlNfV09GX01BWF9QQUdFU107XFxuLS1cXG5mcy9udGZzL3dvZi5jLTQyNi1cXG5mcy9udGZzL3dvZi5jOjQyNzpzdGF0aWMgdm9pZCBudGZzX3dvZl9yZWxlYXNlX2Rlc3Qoc3RydWN0IG50ZnNfd29mX2Rlc3QgKmRlc3QsXFxuZnMvbnRmcy93b2YuYy00MjgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8gKnRhcmdldCwgYm9vbCBzdWNjZXNzKVxcbi0tXFxuZnMvbnRmcy93b2YuYy00NDctXFxuZnMvbnRmcy93b2YuYzo0NDg6c3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvbnRmcy93b2YuYy00NDktXFx0XFx0XFx0XFx0IHN0cnVjdCBmb2xpbyAqdGFyZ2V0LCBsb2ZmX3QgY2h1bmtfc3RhcnQsXFxuZnMvbnRmcy93b2YuYzo0NTA6XFx0XFx0XFx0XFx0IGxvZmZfdCBjaHVua19lbmQsIHN0cnVjdCBudGZzX3dvZl9kZXN0ICpkZXN0KVxcbmZzL250ZnMvd29mLmMtNDUxLXtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTEyLVxcbmZzL250ZnMvd29mLmM6NTEzOnN0YXRpYyBpbnQgbnRmc193b2ZfZGVjb2RlKHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKndzLCBjb25zdCB2b2lkICpzcmMsXFxuZnMvbnRmcy93b2YuYy01MTQtXFx0XFx0XFx0ICAgdTMyIHNyY19sZW4sIHZvaWQgKmRzdCwgdTMyIGRzdF9sZW4pXFxuLS1cXG5mcy9udGZzL3dvZi5jLTUyMy1cXG5mcy9udGZzL3dvZi5jOjUyNDpzdGF0aWMgaW50IG50ZnNfd29mX2RlY29kZV9wYWdlX2RpcmVjdChzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cyxcXG5mcy9udGZzL3dvZi5jLTUyNS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZvbGlvICp0YXJnZXQsIGxvZmZfdCBjaHVua19zdGFydCxcXG4tLVxcbmZzL250ZnMvd29mLmMtNTQwLVxcdGFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuZnMvbnRmcy93b2YuYzo1NDE6XFx0ZXJyID0gbnRmc193b2ZfZGVjb2RlKHdzLCBzcmMsIHNyY19sZW4sICh1OCAqKWFkZHIgKyBwYWdlX29mZnNldCxcXG5mcy9udGZzL3dvZi5jLTU0Mi1cXHRcXHRcXHQgICAgICBkc3RfbGVuKTtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTQ4LVxcbmZzL250ZnMvd29mLmM6NTQ5OnN0YXRpYyBpbnQgbnRmc193b2ZfZGVjb2RlX2ZvbGlvc19kaXJlY3Qoc3RydWN0IG50ZnNfd29mX3dvcmtzcGFjZSAqd3MsXFxuZnMvbnRmcy93b2YuYy01NTAtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbnRmcy93b2YuYy01NTYtXFx0dW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY2h1bmtfc3RhcnQpO1xcbmZzL250ZnMvd29mLmM6NTU3OlxcdHN0cnVjdCBudGZzX3dvZl9kZXN0IGRlc3Q7XFxuZnMvbnRmcy93b2YuYy01NTgtXFx0dm9pZCAqYWRkcjtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTYxLVxcbmZzL250ZnMvd29mLmM6NTYyOlxcdGVyciA9IG50ZnNfd29mX2NvbGxlY3RfZGVzdChtYXBwaW5nLCB0YXJnZXQsIGNodW5rX3N0YXJ0LCBjaHVua19lbmQsXFxuZnMvbnRmcy93b2YuYy01NjMtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkZXN0KTtcXG5mcy9udGZzL3dvZi5jLTU2NC1cXHRpZiAoZXJyKSB7XFxuZnMvbnRmcy93b2YuYzo1NjU6XFx0XFx0bnRmc193b2ZfcmVsZWFzZV9kZXN0KFxcdTAwMjZkZXN0LCB0YXJnZXQsIGZhbHNlKTtcXG5mcy9udGZzL3dvZi5jLTU2Ni1cXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTcyLVxcdGlmICghYWRkcikge1xcbmZzL250ZnMvd29mLmM6NTczOlxcdFxcdG50ZnNfd29mX3JlbGVhc2VfZGVzdChcXHUwMDI2ZGVzdCwgdGFyZ2V0LCBmYWxzZSk7XFxuZnMvbnRmcy93b2YuYy01NzQtXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLS1cXG5mcy9udGZzL3dvZi5jLTU3Ni1cXG5mcy9udGZzL3dvZi5jOjU3NzpcXHRlcnIgPSBudGZzX3dvZl9kZWNvZGUod3MsIHNyYywgc3JjX2xlbiwgKHU4ICopYWRkciArIHBhZ2Vfb2Zmc2V0LFxcbmZzL250ZnMvd29mLmMtNTc4LVxcdFxcdFxcdCAgICAgIGRzdF9sZW4pO1xcbi0tXFxuZnMvbnRmcy93b2YuYy01ODAtXFx0aWYgKGVycikge1xcbmZzL250ZnMvd29mLmM6NTgxOlxcdFxcdG50ZnNfd29mX3JlbGVhc2VfZGVzdChcXHUwMDI2ZGVzdCwgdGFyZ2V0LCBmYWxzZSk7XFxuZnMvbnRmcy93b2YuYy01ODItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZnMvbnRmcy93b2YuYy01ODMtXFx0fVxcbmZzL250ZnMvd29mLmM6NTg0OlxcdG50ZnNfd29mX3JlbGVhc2VfZGVzdChcXHUwMDI2ZGVzdCwgdGFyZ2V0LCB0cnVlKTtcXG5mcy9udGZzL3dvZi5jLTU4NS1cXHRyZXR1cm4gMDtcXG4tLVxcbmZzL250ZnMvd29mLmMtNTg3LVxcbmZzL250ZnMvd29mLmM6NTg4OnN0YXRpYyBpbnQgbnRmc193b2ZfdHJ5X2RpcmVjdChzdHJ1Y3QgbnRmc193b2Zfd29ya3NwYWNlICp3cyxcXG5mcy9udGZzL3dvZi5jLTU4OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9udGZzL3dvZi5jLTU5Ni1cXHRpZiAoZHN0X2xlbiBcXHUwMDNjPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldClcXG5mcy9udGZzL3dvZi5jOjU5NzpcXHRcXHRyZXR1cm4gbnRmc193b2ZfZGVjb2RlX3BhZ2VfZGlyZWN0KHdzLCB0YXJnZXQsIGNodW5rX3N0YXJ0LCBzcmMsXFxuZnMvbnRmcy93b2YuYy01OTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3JjX2xlbiwgZHN0X2xlbik7XFxuZnMvbnRmcy93b2YuYy01OTktXFxuZnMvbnRmcy93b2YuYzo2MDA6XFx0cmV0dXJuIG50ZnNfd29mX2RlY29kZV9mb2xpb3NfZGlyZWN0KHdzLCBtYXBwaW5nLCB0YXJnZXQsIGNodW5rX3N0YXJ0LFxcbmZzL250ZnMvd29mLmMtNjAxLVxcdFxcdFxcdFxcdFxcdCAgICAgY2h1bmtfZW5kLCBzcmMsIHNyY19sZW4sIGRzdF9sZW4pO1xcbi0tXFxuZnMvbnRmcy93b2YuYz02MDQ9aW50IG50ZnNfcmVhZF93b2ZfY29tcHJlc3NlZF9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvbnRmcy93b2YuYy02MDktXFx0c3RydWN0IG50ZnNfdm9sdW1lICp2b2wgPSBuaS1cXHUwMDNldm9sO1xcbmZzL250ZnMvd29mLmM6NjEwOlxcdHN0cnVjdCBudGZzX3dvZl93b3Jrc3BhY2UgKndzO1xcbmZzL250ZnMvd29mLmMtNjExLVxcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChWRlNfSShuaSkpO1xcbi0tXFxuZnMvbnRmcy93b2YuYy02MTgtXFxuZnMvbnRmcy93b2YuYzo2MTk6XFx0d3MgPSBudGZzX3dvZl93b3Jrc3BhY2UobmktXFx1MDAzZWl0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZV9iaXRzKTtcXG5mcy9udGZzL3dvZi5jLTYyMC1cXHRpZiAoIXdzKSB7XFxuLS1cXG5mcy9udGZzL3dvZi5jLTY1NC1cXHRtdXRleF9sb2NrKHdzLVxcdTAwM2Vsb2NrKTtcXG5mcy9udGZzL3dvZi5jOjY1NTpcXHRlcnIgPSBudGZzX3dvZl93b3Jrc3BhY2VfcHJlcGFyZSh3cyk7XFxuZnMvbnRmcy93b2YuYy02NTYtXFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMvd29mLmMtNjg1LVxcdFxcdGNodW5rX2VuZCA9IGNodW5rX2ZpbGVfb2Zmc2V0ICsgZGVjb21wX3NpemU7XFxuZnMvbnRmcy93b2YuYzo2ODY6XFx0XFx0ZXJyID0gbnRmc193b2ZfdHJ5X2RpcmVjdCh3cywgbWFwcGluZywgZm9saW8sIGNodW5rX2ZpbGVfb2Zmc2V0LFxcbmZzL250ZnMvd29mLmMtNjg3LVxcdFxcdFxcdFxcdFxcdCAgY2h1bmtfZW5kLCBjaHVua19tZW0sIGNodW5rX3NpemUsXFxuLS1cXG5mcy9udGZzL3dvZi5jLTY5My1cXG5mcy9udGZzL3dvZi5jOjY5NDpcXHRcXHRlcnIgPSBudGZzX3dvZl9kZWNvZGUod3MsIGNodW5rX21lbSwgY2h1bmtfc2l6ZSwgd3MtXFx1MDAzZW91dHB1dCxcXG5mcy9udGZzL3dvZi5jLTY5NS1cXHRcXHRcXHRcXHQgICAgICBkZWNvbXBfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ4OjI1LjAwMjAyODJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY3NTQ1MjgxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRmlsZSBTeXN0ZW0gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2tgLCBhIHB1YmxpYyBmdW5jdGlvbiBpbiB0aGUgTlRGUyBtb2R1bGUsIGlzIGF0IHRoZSBoZWFydCBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIHNvIEkndmUgY3Jvc3MtcmVmZXJlbmNlZCBpdCBhZ2FpbnN0IG90aGVyIHBvdGVudGlhbGx5IGFmZmVjdGVkIGNvZGUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmV2aWV3IGFsbCB0aGUgY29kZSB0aGF0IHdhcyBjaGFuZ2VkOlxuXG4qICAgYGZzL2Vyb2ZzL2ludGVybmFsLmhgIGxvb2tzIHJlbGV2YW50IGR1ZSB0byB0aGUgYHpfZXJvZnNfcGNsdXN0ZXJfcmVhZG1vcmVgIC8gYHpfZXJvZnNfcmVhZGFoZWFkYFxuKiAgIGBmcy9leHQ0L2lubGluZS5jYCBhbmQgZnVuY3Rpb25zIGBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudGAgbWlnaHQgYmUgYSBjb25jZXJuLlxuKiAgIGBmcy9uZnMvZGlyLmNgIHdoZXJlIGBuZnNfcmVhZGRpcl9mb2xpb19nZXRfbmV4dGAgY2FsbHMgYG5mc19yZWFkZGlyX2ZvbGlvX2ZpbGxlcmAgLyBgbmZzX3JlYWRkaXJgXG4qICAgYGZzL250ZnMvaW5vZGUuY2Agd2l0aCB0aGUgZnVuY3Rpb25zIGBfX250ZnNfaW5vZGVfcmVzaWRlbnRfYXR0cl9wd3JpdGVgIC8gYG50ZnNfZmlsZV93cml0ZV9pdGVyYFxuKiAgIGBmcy9udGZzL3dvZi5jYCB3aXRoIGBudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2tgIHdoaWNoIGlzIG15IGluaXRpYWwgcG9pbnRcbiogICBgZnMvc3F1YXNoZnMvZmlsZS5jYCBhbmQgZnVuY3Rpb25zIGBzcXVhc2hmc19jb3B5X2NhY2hlYCwgYHNxdWFzaGZzX3JlYWRfZm9saW9gXG4qICAgYG1tL2ZpbGVtYXAuY2AgYW5kIHRoZSBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBmdW5jdGlvblxuKiAgIGBtbS9yZWFkYWhlYWQuY2Agd2l0aCB0aGUgYHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkYCwgYHBhZ2VfY2FjaGVfcmFfb3JkZXJgXG5cbk5vdywgSSBuZWVkIHRvIG5hcnJvdyBkb3duIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0YXJnZXRlZCBhbmFseXNpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMgYW5kIGZ1bmN0aW9ucyBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgb25lczpcblxuKiAgIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgIC0gQ29yZSBmaWxlbWFwIGZ1bmN0aW9uIGlzIGludGVyZXN0aW5nLlxuKiAgIGBzcXVhc2hmc19jb3B5X2NhY2hlYCAtIFBhcnQgb2Ygc3F1YXNoZnMgZmlsZSBoYW5kbGluZy5cbiogICBgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhYCAtIERlYWxpbmcgd2l0aCBpbmxpbmUgZGF0YSB3aXRoaW4gZXh0NC5cbiogICBgbnRmc19yZWFkX3dvZl9jb21wcmVzc2VkX2Jsb2NrYCAtIFRoZSBpbml0aWFsIHBvaW50IG9mIGludGVyZXN0IHJlbGF0ZWQgdG8gTlRGUy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzOlxuXG4qICAgYEVST0ZTX0ZTYCAtIGZvciBFUk9GUy5cbiogICBgRVhUNF9GU2AgLSBmb3IgZXh0NC5cbiogICBgTkZTX0ZTYCAtIGZvciBORlMuXG4qICAgYE5URlNfRlNgIC0gZm9yIE5URlMsIG5hdHVyYWxseS5cbiogICBgTlRGU19GU19XT0ZfQ09NUFJFU1NJT05gIC0gdGhpcyBpcyBsaWtlbHkgKmNydWNpYWwqIHRvIGVuYWJsZSBOVEZTJ3MgV09GIGNvbXByZXNzaW9uLlxuKiAgIGBTUVVBU0hGU2AgLSBmb3IgU3F1YXNoRlMuXG5cbkkndmUgY29uZmlybWVkIHRoYXQgYE5URlNfRlNfV09GX0NPTVBSRVNTSU9OYCBkZXBlbmRzIG9uIGBOVEZTX0ZTYCBhcyBleHBlY3RlZC4gVGhlIG90aGVycyBhcmUgc3RhbmRhcmQgYW5kIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0IGNvbnRhaW5zOlxuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBBbGwgb2YgdGhlIGNvbmZpZ3MgSSBtZW50aW9uZWQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IHRoZSBsaXN0IG9mIGtleSBmdW5jdGlvbnMgSSBpZGVudGlmaWVkLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggcmVtb3ZlcyBgRkdQX05PRlNgIGZyb20gcGFnZWNhY2hlIEFQSXMgYW5kIHVwZGF0ZXMgZm9saW8gYWxsb2NhdGlvbi9yZWNsYWltIHNjb3BlcyBhY3Jvc3MgY29yZSBtbSBhbmQgZmlsZXN5c3RlbXMsIGltcGFjdGluZyByZWNsYWltIGNvbnRleHRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBpbiBjb3JlIHBhdGhzLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBBYnNvbHV0ZWx5LiBUaGlzIHNvdW5kcyBsaWtlIGFuIGFyZWEgcmlwZSBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gY2hhbmdlcyBpbiBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIHBhdGhzLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTAzNSwiT3V0cHV0VG9rZW5zIjoyMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6NTEuNzU2NTU4NDc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzNTcwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVST0ZTX0ZTXCIsXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJORlNfRlNcIixcbiAgICBcIk5URlNfRlNcIixcbiAgICBcIk5URlNfRlNfV09GX0NPTVBSRVNTSU9OXCIsXG4gICAgXCJTUVVBU0hGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbFwiLFxuICAgIFwic3F1YXNoZnNfY29weV9jYWNoZVwiLFxuICAgIFwiZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhXCIsXG4gICAgXCJudGZzX3JlYWRfd29mX2NvbXByZXNzZWRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBGR1BfTk9GUyBmbGFnIGZyb20gY29yZSBwYWdlIGNhY2hlIEFQSXMgKF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCkgYW5kIGFkanVzdHMgZm9saW8gYWxsb2NhdGlvbiBmbGFncyBhbmQgcmVjbGFpbSBjb250ZXh0IGFjcm9zcyBzZXZlcmFsIGZpbGVzeXN0ZW1zIChleHQ0LCBzcXVhc2hmcywgZXJvZnMsIG50ZnMsIGFuZCBuZnMpLiBJdCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgYW5kIGludHJvZHVjZXMgc2NvcGVkIE5PRlMgY29udGV4dHMgKG1lbWFsbG9jX25vZnNfc2F2ZS9yZXN0b3JlKSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBJL08gYW5kIGNhY2hpbmcgcGF0aHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIGZvciBtZW1vcnkgcmVjbGFpbSBhbmQgbG9ja2luZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVJPRlNfRlNcIixcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTlRGU19GU1wiLFxuICAgIFwiTlRGU19GU19XT0ZfQ09NUFJFU1NJT05cIixcbiAgICBcIlNRVUFTSEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19maWxlbWFwX2dldF9mb2xpb19tcG9sXCIsXG4gICAgXCJzcXVhc2hmc19jb3B5X2NhY2hlXCIsXG4gICAgXCJleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGFcIixcbiAgICBcIm50ZnNfcmVhZF93b2ZfY29tcHJlc3NlZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIEZHUF9OT0ZTIGZsYWcgZnJvbSBjb3JlIHBhZ2UgY2FjaGUgQVBJcyAoX19maWxlbWFwX2dldF9mb2xpb19tcG9sKSBhbmQgYWRqdXN0cyBmb2xpbyBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZWNsYWltIGNvbnRleHQgYWNyb3NzIHNldmVyYWwgZmlsZXN5c3RlbXMgKGV4dDQsIHNxdWFzaGZzLCBlcm9mcywgbnRmcywgYW5kIG5mcykuIEl0IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgaW50cm9kdWNlcyBzY29wZWQgTk9GUyBjb250ZXh0cyAobWVtYWxsb2Nfbm9mc19zYXZlL3Jlc3RvcmUpIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIEkvTyBhbmQgY2FjaGluZyBwYXRocywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgZm9yIG1lbW9yeSByZWNsYWltIGFuZCBsb2NraW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDQ6NDg6NTEuODI5OTIxNTUxWiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTM3MTk1MTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA0OjQ4OjUxLjgzMDM3NDAyMloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM1MzcxNDkzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBkZXByZWNhdGVkIEZHUF9OT0ZTIGZsYWcgZnJvbSB0aGUgcGFnZSBjYWNoZSBmb2xpbyBhY3F1aXNpdGlvbiBBUElzIGFuZCBhZGp1c3RzIGNhbGwgc2l0ZXMgYWNyb3NzIHZhcmlvdXMgZmlsZXN5c3RlbXMgKEVST0ZTLCBFWFQ0LCBORlMsIE5URlMsIFNxdWFzaEZTKSB0byByZWx5IG9uIG1hcHBpbmcgR0ZQIG1hc2tzIG9yIHNjb3BlZCBtZW1hbGxvY19ub2ZzX3NhdmUoKS9tZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSBjb250ZXh0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGFsbG9jYXRpb24gcmVjbGFpbSBmbGFncyAoR0ZQL0ZHUCBmbGFncykgYW5kIGZpbGVzeXN0ZW0gcmVjdXJzaW9uL2RlYWRsb2NrIHByZXZlbnRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbnRyb2wgZmxvdyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKGUuZy4sIHJlY2xhaW0gcmVjdXJzaW9uIG9yIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTI0MzU2ZDdhYzY1ZTBmOWJkZWRmNjczMWY2YWEzODIyZDkwNzQ3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA0OjQyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXJvZnMvaW50ZXJuYWwuaCBiL2ZzL2Vyb2ZzL2ludGVybmFsLmhcbmluZGV4IDY1OTc0ZTU3YWViZmIuLjg0YjNjZGM4ZTg4ZjEgMTAwNjQ0XG4tLS0gYS9mcy9lcm9mcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9lcm9mcy9pbnRlcm5hbC5oXG5AQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICplcm9mc19ncmFiX2ZvbGlvX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXMsXG4gXHRcdFx0XHRcdFx0ICAgIHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIF9fZmlsZW1hcF9nZXRfZm9saW8oYXMsIGluZGV4LFxuLVx0XHRcdEZHUF9MT0NLfEZHUF9DUkVBVHxGR1BfTk9GU3xGR1BfTk9XQUlULFxuK1x0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRyZWFkYWhlYWRfZ2ZwX21hc2soYXMpIFx1MDAyNiB+X19HRlBfUkVDTEFJTSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCBjZWVlNjlhNjY0ODJiLi4xODg0YWJiMDk2MTQwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTYwMSw5ICs2MDEsNyBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0LyogV2UgY2Fubm90IHJlY3Vyc2UgaW50byB0aGUgZmlsZXN5c3RlbSBhcyB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeVxuLVx0ICogc3RhcnRlZCAqL1xuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4rXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGZvbGlvKTtcbkBAIC03MzQsNyArNzMyLDcgQEAgaW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0Z290byBvdXRfcmVsZWFzZV9iaDtcbiBcdH1cbiBcbi1cdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCAwLCBGR1BfV1JJVEVCRUdJTiB8IEZHUF9OT0ZTLFxuK1x0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOLFxuIFx0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdHJldCA9IFBUUl9FUlIoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xuaW5kZXggNDkzOTQxMjNiZDA5Ni4uZTM0MTI1YThhMmUyOCAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtNDQ3LDcgKzQ0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKm5mc19yZWFkZGlyX2ZvbGlvX2dldF9uZXh0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbitcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jXG5pbmRleCAzMmVkYjQwNDUxNzhhLi4zNmEwZDZiMjZjMDJlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbm9kZS5jXG4rKysgYi9mcy9udGZzL2lub2RlLmNcbkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBzdGF0aWMgczY0IF9fbnRmc19pbm9kZV9yZXNpZGVudF9hdHRyX3B3cml0ZShzdHJ1Y3QgaW5vZGUgKnZpLFxuIFx0bWFya19tZnRfcmVjb3JkX2RpcnR5KGN0eC1cdTAwM2VudGZzX2lubyk7XG4gXG4gXHQvKiBLZWVwIHRoZSBmaXJzdCBwYWdlIGNsZWFuIGFuZCB1cHRvZGF0ZSAqL1xuLVx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIDAsIEZHUF9XUklURUJFR0lOIHwgRkdQX05PRlMsXG4rXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgMCwgRkdQX1dSSVRFQkVHSU4sXG4gXHRcdFx0XHQgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2ZzL250ZnMvd29mLmMgYi9mcy9udGZzL3dvZi5jXG5pbmRleCA4Zjg0YzIyMTJlZWVjLi5jOTgxYjRhM2I2OTU5IDEwMDY0NFxuLS0tIGEvZnMvbnRmcy93b2YuY1xuKysrIGIvZnMvbnRmcy93b2YuY1xuQEAgLTQ2NCwxMCArNDY0LDkgQEAgc3RhdGljIGludCBudGZzX3dvZl9jb2xsZWN0X2Rlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0Zm9saW8gPSB0YXJnZXQ7XG4gXHRcdFx0aXNfdGFyZ2V0ID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8oXG4tXHRcdFx0XHRtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PRlMgfCBGR1BfTk9XQUlULFxuLVx0XHRcdFx0R0ZQX05PRlMpO1xuK1x0XHRcdGZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCxcbitcdFx0XHRcdFx0RkdQX0xPQ0sgfCBGR1BfQ1JFQVQgfCBGR1BfTk9XQUlULFxuK1x0XHRcdFx0XHRtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdFx0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0XHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0XHRpc190YXJnZXQgPSBmYWxzZTtcbmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9maWxlLmMgYi9mcy9zcXVhc2hmcy9maWxlLmNcbmluZGV4IGQ4MzU5NGNlOTFkMjMuLjM0YzU1MGEyNjZiY2YgMTAwNjQ0XG4tLS0gYS9mcy9zcXVhc2hmcy9maWxlLmNcbisrKyBiL2ZzL3NxdWFzaGZzL2ZpbGUuY1xuQEAgLTM5OCw2ICszOTgsNyBAQCB2b2lkIHNxdWFzaGZzX2NvcHlfY2FjaGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHN0cnVjdCBzcXVhc2hmc19zYl9pbmZvICptc2JsayA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvO1xuIFx0aW50IGksIG1hc2sgPSAoMSBcdTAwM2NcdTAwM2MgKG1zYmxrLVx1MDAzZWJsb2NrX2xvZyAtIFBBR0VfU0hJRlQpKSAtIDE7XG4gXHRpbnQgc3RhcnRfaW5kZXggPSBmb2xpby1cdTAwM2VpbmRleCBcdTAwMjYgfm1hc2ssIGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4IHwgbWFzaztcbitcdHVuc2lnbmVkIGludCBub2ZzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4gXG4gXHQvKlxuIFx0ICogTG9vcCBjb3B5aW5nIGRhdGFibG9jayBpbnRvIHBhZ2VzLiAgQXMgdGhlIGRhdGFibG9jayBsaWtlbHkgY292ZXJzXG5AQCAtNDE1LDcgKzQxNiw3IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRwdXNoX2ZvbGlvID0gKGkgPT0gZm9saW8tXHUwMDNlaW5kZXgpID8gZm9saW8gOlxuIFx0XHRcdF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaSxcbi1cdFx0XHRcdFx0RkdQX0xPQ0t8RkdQX0NSRUFUfEZHUF9OT0ZTfEZHUF9OT1dBSVQsXG4rXHRcdFx0XHRcdEZHUF9MT0NLIHwgRkdQX0NSRUFUIHwgRkdQX05PV0FJVCxcbiBcdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXG4gXHRcdGlmIChJU19FUlIocHVzaF9mb2xpbykpXG5AQCAtNDMwLDYgKzQzMSw4IEBAIHZvaWQgc3F1YXNoZnNfY29weV9jYWNoZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRpZiAoaSAhPSBmb2xpby1cdTAwM2VpbmRleClcbiBcdFx0XHRmb2xpb19wdXQocHVzaF9mb2xpbyk7XG4gXHR9XG4rXG4rXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mcyk7XG4gfVxuIFxuIC8qIFJlYWQgZGF0YWJsb2NrIHN0b3JlZCBwYWNrZWQgaW5zaWRlIGEgZnJhZ21lbnQgKHRhaWwtZW5kIHBhY2tlZCBibG9jaykgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAwYWRmYTY2MDU2NTNkLi5iZmY4YjcyNjRmYjAyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtNjk3LDcgKzY5Nyw2IEBAIHBnb2ZmX3QgcGFnZV9jYWNoZV9wcmV2X21pc3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gICogICBmb2xpbyBpcyBhbHJlYWR5IGluIGNhY2hlLiAgSWYgdGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQsIHVubG9jayBpdFxuICAqICAgYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGNhbiBkbyB0aGUgc2FtZSBkYW5jZS5cbiAgKiAqICVGR1BfV1JJVEUgLSBUaGUgZm9saW8gd2lsbCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBjYWxsZXIuXG4tICogKiAlRkdQX05PRlMgLSBfX0dGUF9GUyB3aWxsIGdldCBjbGVhcmVkIGluIGdmcC5cbiAgKiAqICVGR1BfTk9XQUlUIC0gRG9uJ3QgYmxvY2sgb24gdGhlIGZvbGlvIGxvY2suXG4gICogKiAlRkdQX1NUQUJMRSAtIFdhaXQgZm9yIHRoZSBmb2xpbyB0byBiZSBzdGFibGUgKGZpbmlzaGVkIHdyaXRlYmFjaylcbiAgKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU9cbkBAIC03MTAsMTEgKzcwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7XG4gI2RlZmluZSBGR1BfTE9DS1x0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwMilcbiAjZGVmaW5lIEZHUF9DUkVBVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwNClcbiAjZGVmaW5lIEZHUF9XUklURVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcbi0jZGVmaW5lIEZHUF9OT0ZTXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuLSNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbi0jZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcbi0jZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4tI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxuKyNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMClcbisjZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbisjZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4rI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuICNkZWZpbmUgRkdGX0dFVF9PUkRFUihmZ2YpXHQoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgXHUwMDNlXHUwMDNlIDI2KVx0LyogdG9wIDYgYml0cyAqL1xuIFxuICNkZWZpbmUgRkdQX1dSSVRFQkVHSU5cdFx0KEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSlcbkBAIC05MjksNyArOTI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ3JhYl9jYWNoZV9wYWdlX25vd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdHBnb2ZmX3QgaW5kZXgpXG4ge1xuIFx0cmV0dXJuIHBhZ2VjYWNoZV9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCxcbi1cdFx0XHRGR1BfTE9DS3xGR1BfQ1JFQVR8RkdQX05PRlN8RkdQX05PV0FJVCxcbitcdFx0XHRGR1BfTE9DSyB8IEZHUF9DUkVBVCB8IEZHUF9OT1dBSVQsXG4gXHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuaW5kZXggZDdjNmE5NDJhYTdlMC4uZjc2YmUxMTQxYjA2NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oXG5AQCAtMzcyLDEzICszNzIsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWFsbG9jX25vaW9fcmVzdG9yZSh1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gfVxuIFxuIC8qKlxuLSAqIG1lbWFsbG9jX25vZnNfc2F2ZSAtIE1hcmtzIGltcGxpY2l0IEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4rICogbWVtYWxsb2Nfbm9mc19zYXZlIC0gUHJldmVudCByZWN1cnNpb24gaW50byB0aGUgZmlsZXN5c3RlbS5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb25zIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIEdGUF9OT0ZTIGFsbG9jYXRpb24gc2NvcGUuXG4tICogQWxsIGZ1cnRoZXIgYWxsb2NhdGlvbnMgd2lsbCBpbXBsaWNpdGx5IGRyb3AgX19HRlBfRlMgZmxhZyBhbmQgc29cbi0gKiB0aGV5IGFyZSBzYWZlIGZvciB0aGUgRlMgY3JpdGljYWwgc2VjdGlvbiBmcm9tIHRoZSBhbGxvY2F0aW9uIHJlY3Vyc2lvblxuLSAqIHBvaW50IG9mIHZpZXcuIFVzZSBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUgdG8gZW5kIHRoZSBzY29wZSB3aXRoIGZsYWdzXG4tICogcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi5cbisgKiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBjYWxsaW5nXG4rICogbWVtYWxsb2Nfbm9mc19yZXN0b3JlKCkgd2lsbCBiZSBwcmV2ZW50ZWQgZnJvbSBjYWxsaW5nIGludG8gZmlsZXN5c3RlbXNcbisgKiB0byByZWNsYWltIG1lbW9yeS4gIENsZWFuIHBhZ2UgY2FjaGUgbWVtb3J5IGNhbiBzdGlsbCBiZSByZWNsYWltZWQsXG4rICogYnV0IChmb3IgZXhhbXBsZSkgaW5vZGVzIHdpbGwgbm90IGJlLlxuKyAqXG4rICogVGhlIHByaW1hcnkgcmVhc29uIHRvIGRvIHRoaXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhcyB0YWtlbiBhIGxvY2tcbisgKiB3aGljaCB3b3VsZCBiZSBuZWVkZWQgYnkgRlMgcmVjbGFpbS4gIFdoaWxlIHdlIGNvdWxkIHRoZW9yZXRpY2FsbHlcbisgKiBjYWxsIGludG8gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbSBpbiB0aGlzIGNhc2UsIGl0IGNhbiBiZSBhIGRlZXAgY2FsbFxuKyAqIHN0YWNrIHNvIGl0IGlzIGJldHRlciB0byBhdm9pZCBhbGwgZmlsZXN5c3RlbXMuXG4rICpcbisgKiBGaWxlc3lzdGVtcyBvZnRlbiBjaG9vc2UgdG8gaW5jb3Jwb3JhdGUgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gYXMgcGFydFxuKyAqIG9mIHN0YXJ0aW5nIGEgam91cm5hbCB0cmFuc2FjdGlvbi4gIFdoaWxlIG5vdCBhIGxvY2sgaW4gdGhlIG5vcm1hbFxuKyAqIHNlbnNlLCBpdCBoYXMgbXVjaCB0aGUgc2FtZSBlZmZlY3QgYXMgbmVzdGVkIGpvdXJuYWwgdHJhbnNhY3Rpb25zXG4rICogYXJlIGVpdGhlciBwcm9oaWJpdGVkIG9yIGV4cGVuc2l2ZS5cbisgKlxuKyAqIEFsc28gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSB3aGlsZSBob2xkaW5nXG4rICogYSBmaWxlIGZvbGlvIGxvY2tlZC4gIEhpZ2ggb3JkZXIgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgdGhvc2UgcmVxdWVzdGVkXG4rICogYnkgc2xhYikgY2FuIHRyaWdnZXIgY29tcGFjdGlvbiB3aGljaCB3aWxsIGF0dGVtcHQgdG8gbG9jayB0aGUgZm9saW8uXG4gICpcbiAgKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gYmUgdXNlZCBmcm9tIGFueSBjb250ZXh0LlxuICAqIFJldHVybjogVGhlIHNhdmVkIGZsYWdzIHRvIGJlIHBhc3NlZCB0byBtZW1hbGxvY19ub2ZzX3Jlc3RvcmUuXG5AQCAtMzg5LDEwICs0MDIsMTIgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWVtYWxsb2Nfbm9mc19zYXZlKHZvaWQpXG4gfVxuIFxuIC8qKlxuLSAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZHMgdGhlIGltcGxpY2l0IEdGUF9OT0ZTIHNjb3BlLlxuKyAqIG1lbWFsbG9jX25vZnNfcmVzdG9yZSAtIEVuZCBmaWxlc3lzdGVtIHJlY2xhaW0gc2NvcGUuXG4gICogQGZsYWdzOiBGbGFncyB0byByZXN0b3JlLlxuICAqXG4tICogRW5kcyB0aGUgaW1wbGljaXQgR0ZQX05PRlMgc2NvcGUgc3RhcnRlZCBieSBtZW1hbGxvY19ub2ZzX3NhdmUgZnVuY3Rpb24uXG4rICogRW5kcyB0aGUgaW1wbGljaXQgbWVtb3J5IGFsbG9jYXRpb24gc2NvcGUgc3RhcnRlZCBieVxuKyAqIG1lbWFsbG9jX25vZnNfc2F2ZSgpLiAgVGhpcyBtYXkgbm90IGVuYWJsZSBhY2Nlc3MgdG8gZmlsZXN5c3RlbSByZWNsYWltXG4rICogaWYgaXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRpbWUgbWVtYWxsb2Nfbm9mc19zYXZlKCkgd2FzIGNhbGxlZC5cbiAgKiBBbHdheXMgbWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIGZsYWdzIGlzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGVcbiAgKiBwYWlyaW5nIG1lbWFsbG9jX25vZnNfc2F2ZSBjYWxsLlxuICAqL1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNmFmZWM2MzY4ODFmYi4uZTY1ODAyOTFmMjE4NSAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTk5NCw4ICsxOTk0LDYgQEAgc3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXG4gXHRcdGlmICgoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfV1JJVEUpIFx1MDAyNlx1MDAyNiBtYXBwaW5nX2Nhbl93cml0ZWJhY2sobWFwcGluZykpXG4gXHRcdFx0Z2ZwIHw9IF9fR0ZQX1dSSVRFO1xuLVx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfTk9GUylcbi1cdFx0XHRnZnAgXHUwMDI2PSB+X19HRlBfRlM7XG4gXHRcdGlmIChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9OT1dBSVQpIHtcbiBcdFx0XHRnZnAgXHUwMDI2PSB+R0ZQX0tFUk5FTDtcbiBcdFx0XHRnZnAgfD0gR0ZQX05PV0FJVDtcbmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jXG5pbmRleCA2ZTU1NjMyOTAyODdlLi45YzExNmQ0YmE5NjNhIDEwMDY0NFxuLS0tIGEvbW0vcmVhZGFoZWFkLmNcbisrKyBiL21tL3JlYWRhaGVhZC5jXG5AQCAtMjI3LDE3ICsyMjcsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfdW5ib3VuZGVkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4gXHRnZnBfdCBnZnBfbWFzayA9IHJlYWRhaGVhZF9nZnBfbWFzayhtYXBwaW5nKTtcbiBcdHVuc2lnbmVkIGxvbmcgbWFyayA9IFVMT05HX01BWCwgaSA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgbWluX25ycGFnZXMgPSBtYXBwaW5nX21pbl9mb2xpb19ucnBhZ2VzKG1hcHBpbmcpO1xuLVxuLVx0Lypcbi1cdCAqIFBhcnR3YXkgdGhyb3VnaCB0aGUgcmVhZGFoZWFkIG9wZXJhdGlvbiwgd2Ugd2lsbCBoYXZlIGFkZGVkXG4tXHQgKiBsb2NrZWQgcGFnZXMgdG8gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aWxsIG5vdCB5ZXQgaGF2ZSBzdWJtaXR0ZWRcbi1cdCAqIHRoZW0gZm9yIEkvTy4gIEFkZGluZyBhbm90aGVyIHBhZ2UgbWF5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5LFxuLVx0ICogd2hpY2ggY2FuIHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0uICBUZWxsaW5nIHRoZSBWTSB3ZSdyZSBpblxuLVx0ICogdGhlIG1pZGRsZSBvZiBhIGZpbGVzeXN0ZW0gb3BlcmF0aW9uIHdpbGwgY2F1c2UgaXQgdG8gbm90XG4tXHQgKiB0b3VjaCBmaWxlLWJhY2tlZCBwYWdlcywgcHJldmVudGluZyBhIGRlYWRsb2NrLiAgTW9zdCAoYWxsPylcbi1cdCAqIGZpbGVzeXN0ZW1zIGFscmVhZHkgc3BlY2lmeSBfX0dGUF9OT0ZTIGluIHRoZWlyIG1hcHBpbmcnc1xuLVx0ICogZ2ZwX21hc2ssIGJ1dCBsZXQncyBiZSBleHBsaWNpdCBoZXJlLlxuLVx0ICovXG4rXHQvKiBBbGxvY2F0aW5nIHdpdGggbG9ja2VkIGZvbGlvcyAqL1xuIFx0dW5zaWduZWQgaW50IG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2spO1xuQEAgLTUxMiw3ICs1MDIsNyBAQCB2b2lkIHBhZ2VfY2FjaGVfcmFfb3JkZXIoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiBcbiBcdHJhLVx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xuIFxuLVx0LyogU2VlIGNvbW1lbnQgaW4gcGFnZV9jYWNoZV9yYV91bmJvdW5kZWQoKSAqL1xuK1x0LyogQWxsb2NhdGluZyB3aXRoIGxvY2tlZCBmb2xpb3MgKi9cbiBcdG5vZnMgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0ODo1MS44MzAzNzQ4NDJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNzE0NjYyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIHRoZSBgRkdQX05PRlNgIEZsYWcgYW5kIEl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByaXBwaW5nIG91dCB0aGUgYEZHUF9OT0ZTYCBmbGFnIGZyb20gYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCBhbmQgdGhlbiB1cGRhdGluZyBhbGwgdGhlIHBsYWNlcyB0aGF0IHVzZWQgaXQuIEl0IGxvb2tzIGxpa2UgaXQncyBhIHNpZ25pZmljYW50IHJlZmFjdG9yLCBidXQgdGhlIG92ZXJhbGwgZ29hbCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBhdm9pZGluZyBGUyByZWNsYWltIGRlYWRsb2NrcyBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24uIEknbSBnb2luZyB0aHJvdWdoIHRoZSBjaGFuZ2VzIG1ldGhvZGljYWxseS5cblxuRmlyc3QsIEknbSBub3RpbmcgdGhlIHNwZWNpZmljIGFyZWFzIGJlaW5nIHRvdWNoZWQ6IGBlcm9mcy9pbnRlcm5hbC5oYCwgYGV4dDQvaW5saW5lLmNgLCBgbmZzL2Rpci5jYCwgYG50ZnMvaW5vZGUuY2AsIGBudGZzL3dvZi5jYCwgYHNxdWFzaGZzL2ZpbGUuY2AsIGBwYWdlbWFwLmhgLCBgc2NoZWQvbW0uaGAsIGBmaWxlbWFwLmNgLCBhbmQgYHJlYWRhaGVhZC5jYC4gRWFjaCBvZiB0aGVzZSBmaWxlcyBpcyBiZWluZyBhZGp1c3RlZCB0byBlaXRoZXIgcmVtb3ZlIHRoZSBgRkdQX05PRlNgIGZsYWcgZGlyZWN0bHkgb3IgcmVwbGFjZSBpdCB3aXRoIGEgbW9yZSBhcHByb3ByaWF0ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBvZnRlbiBpbnZvbHZpbmcgYG1lbWFsbG9jX25vZnNfc2F2ZSgpYCBhbmQgYG1lbWFsbG9jX25vZnNfcmVzdG9yZSgpYC5cblxuU3BlY2lmaWNhbGx5LCBpbiBgZXJvZnNgLCBJIHNlZSBgZXJvZnNfZ3JhYl9mb2xpb19ub3dhaXRgIHJlbW92aW5nIHRoZSBmbGFnLCB3aGljaCBpcyBnb29kIGJlY2F1c2UgaXQgYWxyZWFkeSB1c2VzIGEgbWFzayB0aGF0IGV4Y2x1ZGVzIGBfX0dGUF9SRUNMQUlNYC4gVGhlbiwgYGV4dDRgIGlzIGNsZWFuaW5nIHVwIGBpbmxpbmUuY2AsIHNhbWUgd2l0aCBgbmZzYCwgYW5kIGBudGZzYC4gVGhlIGBzcXVhc2hmc2AgY2hhbmdlIGlzIGtleTsgdGhleSdyZSBleHBsaWNpdGx5IHdyYXBwaW5nIHRoZSBgc3F1YXNoZnNfY29weV9jYWNoZSgpYCBjYWxsIHdpdGggdGhvc2UgYG1lbWFsbG9jX25vZnNfLi4uYCBjYWxscywgd2hpY2ggaXMgZXhhY3RseSB0aGUga2luZCBvZiBhcHByb2FjaCBJIHdvdWxkIGV4cGVjdCB0byBzZWUgZm9yIHByb3BlciBGUyByZWNsYWltIHByb3RlY3Rpb24uIEknbSB0YWtpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGlzIHBhdHRlcm4sIEkgbWlnaHQgYmUgdXNpbmcgaXQgbXlzZWxmLiBUaGUgaGVhZGVyIGZpbGVzIGFyZSBiZWluZyBjbGVhbmVkIHVwIGFuZCB0aGUgZmxhZyBpdHNlbGYgaXMgYmVpbmcgcmVtb3ZlZCBhbmQgcmVudW1iZXJlZCwgYW5kIEknbSB1cGRhdGluZyBteSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoZSBmbGFncyBhcmUuIFRoZSBgbW0vZmlsZW1hcC5jYCBjaGFuZ2UgbWFrZXMgc2Vuc2U6IGl0J3MgcmVtb3ZpbmcgYSBjaGVjayByZWxhdGVkIHRvIHRoZSBmbGFnLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBzdHVmZiwgaG9uZXN0bHksIGxvb2tzIHByZXR0eSBjbGVhbi5cblxuTm93LCBteSBrZXkgY29uY2VybjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlza3M/IEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgS0FTQU4gaXNzdWVzLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBjcmVhdGUgYSBzY2VuYXJpbyB3aGVyZSB3ZSdyZSBsZWFraW5nIGluZm9ybWF0aW9uIG9yIGxlYWRpbmcgdG8gbWVtb3J5IGNvcnJ1cHRpb24uIEkgY2FuJ3Qgc2VlIGFueXRoaW5nIG9idmlvdXMgdGhhdCB3b3VsZCBjYXVzZSBhIHByb2JsZW0gd2l0aCBzdHJ1Y3QgcGFkZGluZy4gSSdtIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIGNvZGUsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBsZW5ndGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBicmFuY2hpbmcuIFRoZSBwYXRjaCBpcyBzb2xlbHkgZm9jdXNlZCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyAoR0ZQIGZsYWdzKSBhbmQgcGFnZSBjYWNoZSBmb2xpbyByZXRyaWV2YWwgZmxhZ3MgKEZHUCBmbGFncykgYW5kIEZTIHJlY2xhaW0gZGVhZGxvY2sgYXZvaWRhbmNlLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGl0IGxvb2tzIGxpa2UgaXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBvZiB0aG9zZSBjb25jZXJucy4gSSdtIGFsc28gY29uZmlybWluZyBpdCB3b3VsZG4ndCBpbXBhY3QgdGhvc2UgS0FTQU4vTE9DS0RFUCBkb21haW5zLlxuXG5JJ20gbm93IHJ1bm5pbmcgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEgaW4gbXkgaGVhZDogS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLiBDb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcnM/IE5vLiBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLiBCb3VuZHMgY2hlY2tzL3VuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vdCBoZXJlLlxuXG5CYXNlZCBvbiBhbGwgb2YgdGhpcywgSSdtIGNvbWZvcnRhYmxlIHRoYXQgdGhpcyBwYXRjaCBpcyBzYWZlLiBJJ20gcmVhZHkgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwOCwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwNDo0OToyNy4yMDE4NDUwNDhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGRlcHJlY2F0ZWQgRkdQX05PRlMgZmxhZyBmcm9tIHRoZSBwYWdlIGNhY2hlIGZvbGlvIGFjcXVpc2l0aW9uIEFQSXMgYW5kIGFkanVzdHMgY2FsbCBzaXRlcyBhY3Jvc3MgdmFyaW91cyBmaWxlc3lzdGVtcyAoRVJPRlMsIEVYVDQsIE5GUywgTlRGUywgU3F1YXNoRlMpIHRvIHJlbHkgb24gbWFwcGluZyBHRlAgbWFza3Mgb3Igc2NvcGVkIG1lbWFsbG9jX25vZnNfc2F2ZSgpL21lbWFsbG9jX25vZnNfcmVzdG9yZSgpIGNvbnRleHRzLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgcGVydGFpbiB0byBtZW1vcnkgYWxsb2NhdGlvbiByZWNsYWltIGZsYWdzIChHRlAvRkdQIGZsYWdzKSBhbmQgZmlsZXN5c3RlbSByZWN1cnNpb24vZGVhZGxvY2sgcHJldmVudGlvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkga2VybmVsLXRvLXVzZXIgY29waWVzLCBidWZmZXIgaW5pdGlhbGl6YXRpb25zLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29udHJvbCBmbG93IGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoZS5nLiwgcmVjbGFpbSByZWN1cnNpb24gb3IgbG9ja2luZyBpc3N1ZXMpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBkZXByZWNhdGVkIEZHUF9OT0ZTIGZsYWcgZnJvbSB0aGUgcGFnZSBjYWNoZSBmb2xpbyBhY3F1aXNpdGlvbiBBUElzIGFuZCBhZGp1c3RzIGNhbGwgc2l0ZXMgYWNyb3NzIHZhcmlvdXMgZmlsZXN5c3RlbXMgKEVST0ZTLCBFWFQ0LCBORlMsIE5URlMsIFNxdWFzaEZTKSB0byByZWx5IG9uIG1hcHBpbmcgR0ZQIG1hc2tzIG9yIHNjb3BlZCBtZW1hbGxvY19ub2ZzX3NhdmUoKS9tZW1hbGxvY19ub2ZzX3Jlc3RvcmUoKSBjb250ZXh0cy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IHBlcnRhaW4gdG8gbWVtb3J5IGFsbG9jYXRpb24gcmVjbGFpbSBmbGFncyAoR0ZQL0ZHUCBmbGFncykgYW5kIGZpbGVzeXN0ZW0gcmVjdXJzaW9uL2RlYWRsb2NrIHByZXZlbnRpb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGluaXRpYWxpemF0aW9ucywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbnRyb2wgZmxvdyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKGUuZy4sIHJlY2xhaW0gcmVjdXJzaW9uIG9yIGxvY2tpbmcgaXNzdWVzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt77l[1] Phase: Succeeded StartedAt: 2026-08-30 04:49:38 +0000 UTC FinishedAt: 2026-08-30 04:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-30 04:49:38 +0000 UTC FinishedAt: 2026-08-30 04:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2] Phase: Succeeded StartedAt: 2026-08-30 04:49:38 +0000 UTC FinishedAt: 2026-08-30 05:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-30 04:49:38 +0000 UTC FinishedAt: 2026-08-30 05:20:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-30 04:49:38 +0000 UTC FinishedAt: 2026-08-30 04:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-30 04:49:38 +0000 UTC FinishedAt: 2026-08-30 04:49:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjt77l/series-workflowjt77l-convert-artifact-424953979/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-30 04:49:48 +0000 UTC FinishedAt: 2026-08-30 05:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-30 04:49:48 +0000 UTC FinishedAt: 2026-08-30 05:06:16 +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:*40f2349d-993e-4666-aa8b-c27da80f214c,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-workflowjt77l/series-workflowjt77l-convert-artifact-424953979/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": "2f41d9ee-fd07-4470-99e9-06582796b957", "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-workflowjt77l/series-workflowjt77l-build-action-760674233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-30 04:49:48 +0000 UTC FinishedAt: 2026-08-30 05:06:06 +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:*40f2349d-993e-4666-aa8b-c27da80f214c,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-workflowjt77l/series-workflowjt77l-convert-artifact-424953979/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": "2f41d9ee-fd07-4470-99e9-06582796b957", "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-workflowjt77l/series-workflowjt77l-build-action-760674233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-30 05:06:16 +0000 UTC FinishedAt: 2026-08-30 05:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-30 05:06:16 +0000 UTC FinishedAt: 2026-08-30 05:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-30 05:06:16 +0000 UTC FinishedAt: 2026-08-30 05:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-30 05:06:16 +0000 UTC FinishedAt: 2026-08-30 05:06:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjt77l/series-workflowjt77l-convert-artifact-3271548882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-30 05:06:26 +0000 UTC FinishedAt: 2026-08-30 05:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-30 05:06:26 +0000 UTC FinishedAt: 2026-08-30 05:08:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2f41d9ee-fd07-4470-99e9-06582796b957,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-workflowjt77l/series-workflowjt77l-build-action-760674233/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-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-30 05:08:22 +0000 UTC FinishedAt: 2026-08-30 05:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-30 05:08:22 +0000 UTC FinishedAt: 2026-08-30 05:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-30 05:08:22 +0000 UTC FinishedAt: 2026-08-30 05:20:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-30 05:08:22 +0000 UTC FinishedAt: 2026-08-30 05:20:21 +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:*40f2349d-993e-4666-aa8b-c27da80f214c,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-workflowjt77l/series-workflowjt77l-convert-artifact-3271548882/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": "0bf0117c-21b3-4384-be5f-29194d5ea5e4", "success": false },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-workflowjt77l/series-workflowjt77l-build-action-123625062/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-30 05:08:22 +0000 UTC FinishedAt: 2026-08-30 05:20:11 +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:*40f2349d-993e-4666-aa8b-c27da80f214c,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-workflowjt77l/series-workflowjt77l-convert-artifact-3271548882/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": "0bf0117c-21b3-4384-be5f-29194d5ea5e4", "success": false },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-workflowjt77l/series-workflowjt77l-build-action-123625062/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-08-30 05:20:21 +0000 UTC FinishedAt: 2026-08-30 05:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjt77l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["__filemap_get_folio_mpol","squashfs_copy_cache","ext4_generic_write_inline_data","ntfs_read_wof_compressed_block"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["EROFS_FS","EXT4_FS","NFS_FS","NTFS_FS","NTFS_FS_WOF_COMPRESSION","SQUASHFS"],"series_id":"30b4b362-31a6-46cf-a7d0-8df2be654a16","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-08-30 05:20:21 +0000 UTC FinishedAt: 2026-08-30 05:20:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}