Name: series-workflow6cgqg Phase: Succeeded StartedAt: 2026-08-19 09:15:15 +0000 UTC FinishedAt: 2026-08-19 13:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[0] Phase: Succeeded StartedAt: 2026-08-19 09:15:15 +0000 UTC FinishedAt: 2026-08-19 09:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 09:15:15 +0000 UTC FinishedAt: 2026-08-19 09:52:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5453bc3279e9f8578ac3e534d476240e40c879e1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUSE_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5453bc3279e9f8578ac3e534d476240e40c879e1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUSE_FS" ], "series_id": "da8be885-aec2-4961-a6e9-162d8900ab4d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "fuse_direct_write_iter", "fuse_file_write_iter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXNlX2RpcmVjdF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2Z1c2VfZmlsZV93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIHdoZXJlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiBhIHdyaXRlIChgcG9zYCkgd2FzIGNhcHR1cmVkIGJlZm9yZSBjYWxsaW5nIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC4gU2luY2UgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIGNhbiB1cGRhdGUgYGlvY2ItXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIGBPX0FQUEVORGAgd3JpdGVzKSwgY2FwdHVyaW5nIGl0IGJlZm9yZWhhbmQgcmVzdWx0ZWQgaW4gYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGJlaW5nIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FjaGUgaW52YWxpZGF0aW9uIChgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgKS4gVGhlIGZpeCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvc2AgdG8gYWZ0ZXIgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRkcmVzc2VzIGEgZmlsZSBvZmZzZXQgbG9naWMgYnVnIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gRlVTRSBkaXJlY3QgSS9PIHdoZXJlIGBwb3NgIHdhcyBpbml0aWFsaXplZCBiZWZvcmUgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBJZiBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgbW9kaWZpZWQgYGlvY2ItXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIE9fQVBQRU5EKSwgdGhlIG9sZCBgcG9zYCB2YWx1ZSB3YXMgdXNlZCBsYXRlciBpbiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoKWAsIHBvdGVudGlhbGx5IGludmFsaWRhdGluZyB0aGUgd3JvbmcgcGFnZSByYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEZVU0UgZmlsZXN5c3RlbSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jXG5pbmRleCA0NWViZDFiMTU4NzRhLi5kMTJhOWZkZjc3MGVmIDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZmlsZS5jXG5AQCAtMTc4OSwxMyAmIzQzOzE3ODksMTQgQEAgc3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4tXHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXHRzc2l6ZV90IHJlcztcbiBcdGJvb2wgZXhjbHVzaXZlO1xuIFxuIFx0ZnVzZV9kaW9fbG9jayhpb2NiLCBmcm9tLCBcdTAwMjZleGNsdXNpdmUpO1xuIFx0cmVzID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4gXHRpZiAocmVzIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuIFx0XHR0YXNrX2lvX2FjY291bnRfd3JpdGUocmVzKTtcbiBcdFx0aWYgKCFpc19zeW5jX2tpb2NiKGlvY2IpKSB7XG4gXHRcdFx0cmVzID0gZnVzZV9kaXJlY3RfSU8oaW9jYiwgZnJvbSk7XG5AQCAtMTgxMCw3ICYjNDM7MTgxMSw3IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBcyBpbiBnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKCksIGludmFsaWRhdGUgYWZ0ZXJcbiBcdFx0XHQgKiB3cml0ZSwgdG8gaW52YWxpZGF0ZSByZWFkLWFoZWFkIGNhY2hlIHRoYXQgbWF5IGhhdmVcbi1cdFx0XHQgKiB3aXRoIHRoZSB3cml0ZS5cbiYjNDM7XHRcdFx0ICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZyxcbiBcdFx0XHRcdHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1c2VfZGlyZWN0X3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7ZnVzZV9maWxlX3dyaXRlX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gRlVTRSBkaXJlY3QgSS9PIHdoZXJlIGBwb3NgIHdhcyBpbml0aWFsaXplZCBiZWZvcmUgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBJZiBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgbW9kaWZpZWQgYGlvY2ItXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIE9fQVBQRU5EKSwgdGhlIG9sZCBgcG9zYCB2YWx1ZSB3YXMgdXNlZCBsYXRlciBpbiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoKWAsIHBvdGVudGlhbGx5IGludmFsaWRhdGluZyB0aGUgd3JvbmcgcGFnZSByYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEZVU0UgZmlsZXN5c3RlbSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggNDVlYmQxYjE1ODc0YS4uZDEyYTlmZGY3NzBlZiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9maWxlLmMKQEAgLTE3ODksMTMgJiM0MzsxNzg5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0mZ3Q7aV9tYXBwaW5nOwotCWxvZmZfdCBwb3MgPSBpb2NiLSZndDtraV9wb3M7CiAJc3NpemVfdCByZXM7CiAJYm9vbCBleGNsdXNpdmU7CiAKIAlmdXNlX2Rpb19sb2NrKGlvY2IsIGZyb20sICZhbXA7ZXhjbHVzaXZlKTsKIAlyZXMgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTsKIAlpZiAocmVzICZndDsgMCkgewomIzQzOwkJbG9mZl90IHBvcyA9IGlvY2ItJmd0O2tpX3BvczsKJiM0MzsKIAkJdGFza19pb19hY2NvdW50X3dyaXRlKHJlcyk7CiAJCWlmICghaXNfc3luY19raW9jYihpb2NiKSkgewogCQkJcmVzID0gZnVzZV9kaXJlY3RfSU8oaW9jYiwgZnJvbSk7CkBAIC0xODEwLDcgJiM0MzsxODExLDcgQEAgc3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAkJCS8qCiAJCQkgKiBBcyBpbiBnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKCksIGludmFsaWRhdGUgYWZ0ZXIKIAkJCSAqIHdyaXRlLCB0byBpbnZhbGlkYXRlIHJlYWQtYWhlYWQgY2FjaGUgdGhhdCBtYXkgaGF2ZQotCQkJICogd2l0aCB0aGUgd3JpdGUuCiYjNDM7CQkJICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuCiAJCQkgKi8KIAkJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsCiAJCQkJcG9zICZndDsmZ3Q7IFBBR0VfU0hJRlQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRlVTRSBEaXJlY3QgV3JpdGUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZnVzZS9maWxlLmNgIHNwZWNpZmljYWxseSB0aGUgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBsb2ZmX3QgcG9zID0gaW9jYi0mZ3Q7a2lfcG9zO2AuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIG1vdmluZyB0aGlzIGluaXRpYWxpemF0aW9uICppbnNpZGUqIHRoZSBgaWYgKHJlcyAmZ3Q7IDApYCBibG9jay4gTGV0IG1lIHB1bGwgdXAgdGhlIGRpZmYgcmVhbCBxdWljay4uLiBZdXAsIHRoZXJlIGl0IGlzLiBUaGUgb3JpZ2luYWwgY29kZSBpbml0aWFsaXplZCBgcG9zYCBiZWZvcmUgY2FsbGluZyBgZ2VuZXJpY193cml0ZV9jaGVja3NgLCBidXQgbm93IGl0JiMzOTtzIGluaXRpYWxpemVkIGFmdGVyLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeT8gIFdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBzZWVtaW5nbHkgbWlub3IgY29kZSBtb3ZlbWVudD8gIEFoLCBJIHNlZSBpdC4gYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCBjYW4gbW9kaWZ5IHRoZSBgaW9jYi0mZ3Q7a2lfcG9zYC4gU3BlY2lmaWNhbGx5LCB0aGUgT19BUFBFTkQgZmxhZyBjb21lcyB0byBtaW5kLiAgSWYgdGhhdCBmbGFnIGlzIHNldCwgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCB3aWxsIHVwZGF0ZSBga2lfcG9zYCB0byBgaV9zaXplYC4gIElmIGBwb3NgIGlzIGluaXRpYWxpemVkICpiZWZvcmUqIHRoYXQgY2FsbCwgaXQmIzM5O3MgaG9sZGluZyBvbnRvIHRoZSBvdXRkYXRlZCB2YWx1ZSBvZiB0aGUgZmlsZSBvZmZzZXQuICBUaGVuIHRoZSBmdW5jdGlvbiwgbGF0ZXIgb24sIGlzIGdvaW5nIHRvIHVzZSBgcG9zYCBpbiB0aGUgbGluZSBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgLiBJdCYjMzk7cyBnb2luZyB0byB1c2UgYHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZUYCwgYW5kIHNpbmNlIGBwb3NgIHdvdWxkIGhhdmUgdGhlIHdyb25nIHZhbHVlLCB0aGlzIGNvdWxkIGNhdXNlIHRoZSB3cm9uZyBwYWdlIHJhbmdlIHRvIGJlIGludmFsaWRhdGVkLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBvZmYtYnktb25lIG9yIG9mZi1ieS1zb21lIHR5cGUgb2YgbWVtb3J5IGJ1Zy4KClNvLCBieSBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uICphZnRlciogdGhlIGNoZWNrcywgdGhlIGNvZGUgaXMgZ3VhcmFudGVlZCB0byBncmFiIHRoZSBjb3JyZWN0LCB1cGRhdGVkIHZhbHVlIG9mIGBraV9wb3NgIHdoaWNoIGF2b2lkcyBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgdGhlIHdyb25nIHBhZ2UgcmFuZ2UgYW5kIGNvcnJ1cHRpbmcgdGhlIGZpbGUgc3lzdGVtLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4LCBub3QganVzdCBhIHN0eWxpc3RpYyBvbmUuIEl0JiMzOTtzIGFkZHJlc3NpbmcgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gb3IsIG1vcmUgcHJlY2lzZWx5LCBhIGxvZ2ljIGVycm9yIGluIGhvdyB0aGUgZGlyZWN0IEkvTyBwcm9jZXNzIGhhbmRsZXMgdXBkYXRlcyB0byB0aGUgZmlsZSBvZmZzZXQuIExvb2tzIGxpa2UgYSBzb2xpZCwgbmVjZXNzYXJ5IGNoYW5nZSB0byBtYWludGFpbiBkYXRhIGludGVncml0eSBpbiB0aGUgRlVTRSBmaWxlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXNlX2RpcmVjdF93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9maWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9maWxlLmM9MTc3Mz1zdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2Z1c2UvZmlsZS5jLTE3ODctXG5mcy9mdXNlL2ZpbGUuYzoxNzg4OnN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9mdXNlL2ZpbGUuYy0xNzg5LXtcbi0tXG5mcy9mdXNlL2ZpbGUuYz0xODQ3PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2Z1c2UvZmlsZS5jLTE4NjAtXHRpZiAoZmYtXHUwMDNlb3Blbl9mbGFncyBcdTAwMjYgRk9QRU5fRElSRUNUX0lPKVxuZnMvZnVzZS9maWxlLmM6MTg2MTpcdFx0cmV0dXJuIGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9mdXNlL2ZpbGUuYy0xODYyLVx0ZWxzZSBpZiAoZnVzZV9maWxlX3Bhc3N0aHJvdWdoKGZmKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIGNhbGxlZCBmcm9tIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBwYXJ0IG9mIEZVU0UmIzM5O3MgZGlyZWN0IEkvTyBpbXBsZW1lbnRhdGlvbi4gRGlyZWN0IEkvTyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgbG90cyBvZiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsIGFuZCBwb3RlbnRpYWwgZm9yIGVkZ2UgY2FzZXMuIENvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIEZVU0UsIGFueSB2dWxuZXJhYmlsaXRpZXMgaGVyZSBjb3VsZCBiZSBxdWl0ZSBzZXZlcmUuCgpNeSBmb2N1cyBoYXMgdG8gYmUgb24gZWl0aGVyIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBvciBpdHMgY2FsbGVyLCBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBpcyB0aGUgbW9yZSBmcnVpdGZ1bCBzdGFydGluZyBwb2ludCBmb3IgZ2VuZXJhdGluZyB0ZXN0IGNhc2VzLiBJIHN1c3BlY3QgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIG1pZ2h0IGJlIHRoZSBiZXR0ZXIgYmV0LCBnaXZlbiBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGRpcmVjdCB3cml0ZSBpdGVyYXRpb24uIE5vdywgSSBuZWVkIHRvIGdldCBteSBoYW5kcyBvbiB0aGUgRlVTRSBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSB2YXJpb3VzIG9wdGlvbnMgYW5kIGZsYWdzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgY3JhZnRpbmcgZWZmZWN0aXZlIGZ1enppbmcgaW5wdXRzLiBJIG5lZWQgdG8gc2VlIHdoYXQgY2FuIGJlIGNvbnRyb2xsZWQsIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mdXNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Z1c2UvS2NvbmZpZz0zMj1jb25maWcgVklSVElPX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQyLVxuZnMvZnVzZS9LY29uZmlnOjQzOmNvbmZpZyBGVVNFX0RBWFxuZnMvZnVzZS9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtWaXJ0aW8gRmlsZXN5c3RlbSBEaXJlY3QgSG9zdCBNZW1vcnkgQWNjZXNzIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9mdXNlL0tjb25maWctNTYtXG5mcy9mdXNlL0tjb25maWc6NTc6Y29uZmlnIEZVU0VfUEFTU1RIUk9VR0hcbmZzL2Z1c2UvS2NvbmZpZy01OC1cdGJvb2wgXCYjMzQ7RlVTRSBwYXNzdGhyb3VnaCBvcGVyYXRpb25zIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9mdXNlL0tjb25maWctNjctXG5mcy9mdXNlL0tjb25maWc6Njg6Y29uZmlnIEZVU0VfSU9fVVJJTkdcbmZzL2Z1c2UvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7RlVTRSBjb21tdW5pY2F0aW9uIG92ZXIgaW8tdXJpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRlVTRSBGaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBGVVNFX0ZTYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gYWRoZXJlcyB0byBiZXN0IHByYWN0aWNlcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEZpcnN0LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBpcyBzdGF0aWMuIEFscmlnaHQsIGl0IGlzLiBOb3csIHRoZSBkb2N1bWVudGF0aW9uIGlzIHZlcnkgY2xlYXI6IFdlIHNob3VsZCBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBiZWNhdXNlIG9mIHRoZSB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4gU2luY2UgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIHN0YXRpYywgSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXMgaXQgYXNzaWduZWQgdG8gYSBzdHJ1Y3QgbWVtYmVyLCBvciBpcyBpdCBjYWxsZWQgZnJvbSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24/IExldCYjMzk7cyBhbHNvIGNoZWNrIG9uIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAgc2luY2UgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgcHJvYmxlbWF0aWMgYXMgd2VsbCwgaWYgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIEkmIzM5O2xsIHZlcmlmeSBpZiB0aGF0JiMzOTtzIHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9maWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9maWxlLmM9MTgyNj1zdGF0aWMgc3NpemVfdCBmdXNlX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xODQ2LVxuZnMvZnVzZS9maWxlLmM6MTg0NzpzdGF0aWMgc3NpemVfdCBmdXNlX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmZzL2Z1c2UvZmlsZS5jLTE4NDgte1xuLS1cbmZzL2Z1c2UvZmlsZS5jPTMwNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVzZV9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvZnVzZS9maWxlLmMtMzA3MC1cdC5yZWFkX2l0ZXJcdD0gZnVzZV9maWxlX3JlYWRfaXRlcixcbmZzL2Z1c2UvZmlsZS5jOjMwNzE6XHQud3JpdGVfaXRlclx0PSBmdXNlX2ZpbGVfd3JpdGVfaXRlcixcbmZzL2Z1c2UvZmlsZS5jLTMwNzItXHQubW1hcFx0XHQ9IGZ1c2VfZmlsZV9tbWFwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZVU0UgV3JpdGUgSXRlcmF0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdyaXRlcyBhcmUgaGFuZGxlZCBpbiB0aGUgRlVTRSBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGB3cml0ZV9pdGVyYCBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBgZnVzZV9maWxlX29wZXJhdGlvbnNgIHN0cnVjdC4gSSBzZWUgdGhhdCBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGAud3JpdGVfaXRlcmAuIE15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgaXNuJiMzOTt0IGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAgc3RhdGljPyYjMzQ7IEkmIzM5O20gaW1tZWRpYXRlbHkgd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZS4KClRoZW4gSSByZW1lbWJlciB0aGF0IGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgdG8gYSBzdHJ1Y3QsIHdoaWNoIG1lYW5zIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kIHdpbGwgaGF2ZSBpdHMgb3duIHN5bWJvbCBhZGRyZXNzLiBUaGF0IG1ha2VzIGl0IGFuIGVudHJ5IHBvaW50LiBUaGlzIGNvbnRyYWRpY3RzIHRoZSBpbnN0cnVjdGlvbiB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIGl0IGFuIEFQSSBlbnRyeXBvaW50IChWRlMgZW50cnlwb2ludCkKClNvLCBJIGhhdmUgYSBmZXcgb3B0aW9ucyBmb3Igd2hhdCB0byBsaXN0OiBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgLCBvciBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAuIExldCYjMzk7cyBzZWUuLi5JIHNob3VsZCBjaGVjayBpZiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgaXMgaW5saW5lZDsgaXQmIzM5O3MgcXVpdGUgYSBsYXJnZSBmdW5jdGlvbiBzbyBwcm9iYWJseSBub3QgaW5saW5lZC4gR29vZCwgb25lIHBvaW50IGZvciBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAuIEFuZCBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGlzICpkZWZpbml0ZWx5KiBub3QgaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4KCldhaXQuLi4gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIGFjdHVhbGx5IGNhbGxlZCAqZnJvbSogYGZ1c2VfZmlsZV93cml0ZV9pdGVyYC4gUmlnaHQsIGdvdCBpdC4gSXQgbWFrZXMgc2Vuc2UgdG8gbGlzdCBib3RoOiBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGFuZCBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAuCgpMZXQmIzM5O3MgYWxzbyB0YWtlIGEgbG9vayBhdCBgZnMvZnVzZS9maWxlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBJJiMzOTttIG1pc3NpbmcuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVzZV9kaXJlY3Rfd3JpdGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZmlsZS5jPTE3NzM9c3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3RfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xNzg3LVxuZnMvZnVzZS9maWxlLmM6MTc4ODpzdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvZnVzZS9maWxlLmMtMTc4OS17XG4tLVxuZnMvZnVzZS9maWxlLmM9MTg0Nz1zdGF0aWMgc3NpemVfdCBmdXNlX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xODYwLVx0aWYgKGZmLVx1MDAzZW9wZW5fZmxhZ3MgXHUwMDI2IEZPUEVOX0RJUkVDVF9JTylcbmZzL2Z1c2UvZmlsZS5jOjE4NjE6XHRcdHJldHVybiBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvZnVzZS9maWxlLmMtMTg2Mi1cdGVsc2UgaWYgKGZ1c2VfZmlsZV9wYXNzdGhyb3VnaChmZikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTkKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgRlVTRSBEaXJlY3QgSS9PIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgZ29pbmcgb24uIFRoZSBjb3JlIGlzc3VlIGlzIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYC4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2l0aCBob3cgdGhlIGZpbGUgcG9zaXRpb24gKGBwb3NgKSBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AuIFRoZSBmaXggZW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IHZhbHVlIG9mIGBraV9wb3NgICh3aGljaCBjYW4gYmUgbW9kaWZpZWQgd2l0aGluIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AsIGVzcGVjaWFsbHkgd2l0aCBgT19BUFBFTkRgKSBpcyB1c2VkIHRvIHVwZGF0ZSBgcG9zYC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoYXQgYHBvc2AgdmFsdWUgaXMgdGhlbiBwYXNzZWQgaW50byBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgLCBhbmQgdXNpbmcgdGhlIHdyb25nIHZhbHVlIGNvdWxkIGludmFsaWRhdGUgYW4gaW5jb3JyZWN0IHJhbmdlIG9mIHBhZ2VzLCB3aGljaCBpcyBhIHByZXR0eSBuYXN0eSBidWcuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBidWcgZml4LCBpbiBmYWN0LiBJdCYjMzk7cyBpbiB0aGUgY29yZSBGVVNFIGZpbGVzeXN0ZW0gbG9naWMuIEFuZCBpdCYjMzk7cyB1c2VyLXJlYWNoYWJsZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIHNvbWV0aGluZyB3ZSBzaG91bGQgdGVzdCB0aG9yb3VnaGx5LgoKSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgdGhvdWdoLiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgaXMgc3RhdGljLCB3aGljaCBpcyBmaW5lLCBidXQgSSYjMzk7bGwgYWxzbyBpbmNsdWRlIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAuIEV2ZW4gdGhvdWdoIGl0IGlzIGFsc28gc3RhdGljLCBpdCYjMzk7cyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgZnVzZV9maWxlX29wZXJhdGlvbnNgLiBUaGF0IHdpbGwgZ2l2ZSB1cyBhIHNsaWdodGx5IGJyb2FkZXIgdmlldyB3aGVuIGZ1enppbmcuCgpCYXNpY2FsbHksIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBjYW4gbW9kaWZ5IGBpb2NiLSZndDtraV9wb3NgLiBUaGUgb3JpZ2luYWwgYHBvc2Agd2FzIGluaXRpYWxpemVkICpiZWZvcmUqIHRoYXQgY2hlY2suIElmIGBraV9wb3NgIGNoYW5nZWQgKHRoaW5rIGBPX0FQUEVORGApLCB0aGVuIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCB3b3VsZCB1c2UgdGhlIG9sZCwgaW5jb3JyZWN0IGBwb3NgIHZhbHVlLiBUaGlzIHBhdGNoIGZpeGVzIHRoYXQsIGFuZCB0aGF0IGtpbmQgb2YgbG9naWMgZGVzZXJ2ZXMgY2FyZWZ1bCBmdXp6aW5nLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnVzZV9kaXJlY3Rfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtmdXNlX2ZpbGVfd3JpdGVfaXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBGVVNFIGRpcmVjdCBJL08gd2hlcmUgYHBvc2Agd2FzIGluaXRpYWxpemVkIGJlZm9yZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIElmIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBtb2RpZmllZCBgaW9jYi1cdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgT19BUFBFTkQpLCB0aGUgb2xkIGBwb3NgIHZhbHVlIHdhcyB1c2VkIGxhdGVyIGluIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCwgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIHRoZSB3cm9uZyBwYWdlIHJhbmdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgRlVTRSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnVzZV9kaXJlY3Rfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtmdXNlX2ZpbGVfd3JpdGVfaXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBGVVNFIGRpcmVjdCBJL08gd2hlcmUgYHBvc2Agd2FzIGluaXRpYWxpemVkIGJlZm9yZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIElmIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBtb2RpZmllZCBgaW9jYi1cdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgT19BUFBFTkQpLCB0aGUgb2xkIGBwb3NgIHZhbHVlIHdhcyB1c2VkIGxhdGVyIGluIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCwgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIHRoZSB3cm9uZyBwYWdlIHJhbmdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgRlVTRSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCB3aGVyZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgYSB3cml0ZSAoYHBvc2ApIHdhcyBjYXB0dXJlZCBiZWZvcmUgY2FsbGluZyBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIFNpbmNlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBjYW4gdXBkYXRlIGBpb2NiLVx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBgT19BUFBFTkRgIHdyaXRlcyksIGNhcHR1cmluZyBpdCBiZWZvcmVoYW5kIHJlc3VsdGVkIGluIGFuIGluY29ycmVjdCBwb3NpdGlvbiBiZWluZyB1c2VkIGZvciBzdWJzZXF1ZW50IGNhY2hlIGludmFsaWRhdGlvbiAoYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYCkuIFRoZSBmaXggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwb3NgIHRvIGFmdGVyIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC5cblxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFkZHJlc3NlcyBhIGZpbGUgb2Zmc2V0IGxvZ2ljIGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggNDVlYmQxYjE1ODc0YS4uZDEyYTlmZGY3NzBlZiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9maWxlLmMKQEAgLTE3ODksMTMgJiM0MzsxNzg5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0mZ3Q7aV9tYXBwaW5nOwotCWxvZmZfdCBwb3MgPSBpb2NiLSZndDtraV9wb3M7CiAJc3NpemVfdCByZXM7CiAJYm9vbCBleGNsdXNpdmU7CiAKIAlmdXNlX2Rpb19sb2NrKGlvY2IsIGZyb20sICZhbXA7ZXhjbHVzaXZlKTsKIAlyZXMgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTsKIAlpZiAocmVzICZndDsgMCkgewomIzQzOwkJbG9mZl90IHBvcyA9IGlvY2ItJmd0O2tpX3BvczsKJiM0MzsKIAkJdGFza19pb19hY2NvdW50X3dyaXRlKHJlcyk7CiAJCWlmICghaXNfc3luY19raW9jYihpb2NiKSkgewogCQkJcmVzID0gZnVzZV9kaXJlY3RfSU8oaW9jYiwgZnJvbSk7CkBAIC0xODEwLDcgJiM0MzsxODExLDcgQEAgc3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAkJCS8qCiAJCQkgKiBBcyBpbiBnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKCksIGludmFsaWRhdGUgYWZ0ZXIKIAkJCSAqIHdyaXRlLCB0byBpbnZhbGlkYXRlIHJlYWQtYWhlYWQgY2FjaGUgdGhhdCBtYXkgaGF2ZQotCQkJICogd2l0aCB0aGUgd3JpdGUuCiYjNDM7CQkJICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuCiAJCQkgKi8KIAkJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsCiAJCQkJcG9zICZndDsmZ3Q7IFBBR0VfU0hJRlQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnVzZSBEaXJlY3QgV3JpdGUgSXRlcmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGluIGBmcy9mdXNlL2ZpbGUuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgZm9jdXNlZCBjaGFuZ2UuIEl0JiMzOTtzIG1vdmluZyB0aGUgYHBvc2AgaW5pdGlhbGl6YXRpb24uIEkga25vdyB0aGF0IGZ1bmN0aW9uOyBpdCYjMzk7cyB0aGUgY29yZSBvZiBkaXJlY3QgSS9PIGluIHRoZSBGVVNFIGZpbGVzeXN0ZW0uCgpUaGUgY29yZSBvZiBteSB0aGlua2luZyByZXZvbHZlcyBhcm91bmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIHBhdGNoLiBUaGUga2V5IGlzIHdoZXJlIGBwb3NgIGlzIGluaXRpYWxpemVkIHJlbGF0aXZlIHRvIGBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKWAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSXTigJlzIHdoZXJlIHRoZSBjaGVja3MgaGFwcGVuLCBhbmQsIGNydWNpYWxseSwgaXQgY2FuIG1vZGlmeSBgaW9jYi0mZ3Q7a2lfcG9zYC4gSSYjMzk7bSBzdGFydGluZyB0byByZW1lbWJlciB0aGF0IGRldGFpbCwgdGhpbmtpbmcgYWJvdXQgaG93IGBpb2NiLSZndDtraV9wb3NgIGNvdWxkIGJlIHVwZGF0ZWQgYnkgdGhhdCBjYWxsLgoKSW5pdGlhbGx5LCBgcG9zYCB3YXMgYmVpbmcgYXNzaWduZWQgYmVmb3JlIHRoYXQgY2hlY2suIE5vdywgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgKmFmdGVyKi4gVGhlIGltcGxpY2F0aW9ucyBhcmUgYmVjb21pbmcgY2xlYXJlcjogaWYgaXQmIzM5O3MgYmVmb3JlLCB5b3UmIzM5O3JlIGdyYWJiaW5nIHRoZSAqb2xkKiBwb3NpdGlvbi4gSWYgaXQmIzM5O3MgYWZ0ZXIsIHlvdSYjMzk7cmUgZ2V0dGluZyB0aGUgKm5ldyogcG9zaXRpb24g4oCTIHRoZSBvbmUgdGhhdCYjMzk7cyBiZWVuIHBvdGVudGlhbGx5IGFkanVzdGVkIGJ5IGBnZW5lcmljX3dyaXRlX2NoZWNrc2AsIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC4KClRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB0aG9zZSBjaGVja3MgaW4gYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgdGhleSBjaGFuZ2UgYGlvY2ItJmd0O2tpX3Bvc2AgaWYsIHNheSwgT19BUFBFTkQgaXMgc2V0LCBvciBzb21lIG90aGVyIGZpbGUgYWNjZXNzIGNvbnN0cmFpbnRzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4uIFRoYXQgaW5pdGlhbCB2YWx1ZSBtaWdodCBiZSBvdmVyd3JpdHRlbi4gTXkgY29uY2VybiBpcyB3aGV0aGVyIGl0JiMzOTtzIHRoZSBzdGFydCBwb3NpdGlvbiwgd2hpY2ggdGhlIHdyaXRlIGlzIHN1cHBvc2VkIHRvIGJlZ2luLCBvciBpZiB0aGVyZSBpcyBhIHNjZW5hcmlvIHdoZXJlIHRoZSB1cGRhdGVkIHN0YXJ0IHBvc2l0aW9uIGlzIG1vcmUgYXBwcm9wcmlhdGUuCgpUaGUgaW1wb3J0YW50IGxpbmUgaXMgd2hlcmUgYHBvc2AgaXMgdXNlZCBsYXRlciB3aXRoIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwgLi4uKWAgdG8gdGVsbCB0aGUga2VybmVsIHRvIGludmFsaWRhdGUgdGhlIHJlbGV2YW50IHBhZ2VzIGZvciB0aGUgd3JpdHRlbiBkYXRhLiBJbnZhbGlkYXRpb24gaGFwcGVucyB1c2luZyB0aGUgc3RhcnRpbmcgcG9zaXRpb24uIFRoZSBwYXRjaCBpcyBlbnN1cmluZyB0aGUgaW52YWxpZGF0aW9uIGhhcHBlbnMgZnJvbSB0aGUgY29ycmVjdCBvZmZzZXQuCgpTbyB0aGUgcGF0Y2ggaXMgYWRqdXN0aW5nIHRoZSBzdGFydCBwb3NpdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCBoYXMgdG8gYmUgdGhlIHVwZGF0ZWQgcG9zaXRpb24uIFNvIHRoZSBwYXRjaCBpcyBhY3R1YWxseSBmaXhpbmcgYSBzdWJ0bGUgYnVnIHdoZXJlIHRoZSB3cm9uZyBvZmZzZXQgd2FzIGJlaW5nIHVzZWQgZm9yIGludmFsaWRhdGlvbi4KCldhaXQuIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IElzIHRoZXJlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgYHBvc2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgaW9jYi0mZ3Q7a2lfcG9zYCByaWdodCBhZnRlciBgZ2VuZXJpY193cml0ZV9jaGVja3NgLCBzbyB3ZSYjMzk7cmUgc2FmZSB0aGVyZS4gTm8gcmlzayBvZiBsZWFraW5nIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2UuCgpJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4LCBlbnN1cmluZyB0aGUgY29ycmVjdCBwb3NpdGlvbiBpcyB1c2VkIHdpdGhpbiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgIGZ1bmN0aW9uIHdoZW4gcGVyZm9ybWluZyBkaXJlY3Qgd3JpdGVzIGluIGEgRlVTRSBmaWxlc3lzdGVtLCB3aGVyZSBPX0FQUEVORCBvciBzb21ldGhpbmcgc2ltaWxhciBoYXMgYmVlbiBhcHBsaWVkLiBMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBjb2RlIHBhdGguLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVzZV9kaXJlY3Rfd3JpdGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZmlsZS5jPTE3NzM9c3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3RfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xNzg3LVxuZnMvZnVzZS9maWxlLmM6MTc4ODpzdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvZnVzZS9maWxlLmMtMTc4OS17XG4tLVxuZnMvZnVzZS9maWxlLmM9MTg0Nz1zdGF0aWMgc3NpemVfdCBmdXNlX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xODYwLVx0aWYgKGZmLVx1MDAzZW9wZW5fZmxhZ3MgXHUwMDI2IEZPUEVOX0RJUkVDVF9JTylcbmZzL2Z1c2UvZmlsZS5jOjE4NjE6XHRcdHJldHVybiBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvZnVzZS9maWxlLmMtMTg2Mi1cdGVsc2UgaWYgKGZ1c2VfZmlsZV9wYXNzdGhyb3VnaChmZikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODMKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FjaGUgSW52YWxpZGF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nOiB0aGVyZSYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbG9naWMgZmxhdyBpbiB0aGUgd2F5IGBwb3NgIGlzIGJlaW5nIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgaW5pdGlhbGl6ZXMgYHBvc2AgYmVmb3JlIGEgY2FsbCB0byBgZ2VuZXJpY193cml0ZV9jaGVja3NgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGBnZW5lcmljX3dyaXRlX2NoZWNrc2AgY2FuIGFjdHVhbGx5ICp1cGRhdGUqIHRoZSB2YWx1ZSBvZiBgaW9jYi0mZ3Q7a2lfcG9zYCwgcGFydGljdWxhcmx5IGluIHNjZW5hcmlvcyBsaWtlIHdoZW4gYE9fQVBQRU5EYCBpcyB1c2VkLgoKQnkgaW5pdGlhbGl6aW5nIGBwb3NgICphZnRlciogYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgd2UmIzM5O3JlIGd1YXJhbnRlZWluZyB0aGF0IGBwb3NgIGlzIHNldCB0byB0aGUgKmNvcnJlY3QqIHN0YXJ0aW5nIHBvc2l0aW9uLCB0aGUgb25lIHRoYXQmIzM5O3MgYmVlbiBwcm9wZXJseSBhZGp1c3RlZCBmb3IgdGhlIHdyaXRlIG9wZXJhdGlvbi4gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiB3ZSBnZXQgdG8gdGhlIGNhY2hlIGludmFsaWRhdGlvbiBzdGVwLCB3ZSYjMzk7cmUgdXNpbmcgdGhlIHJpZ2h0IG9mZnNldC4KClRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHJpc2tpbmcgYW55IGluZm9ybWF0aW9uIGxlYWtzLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IHNob3VsZCB0cmlnZ2VyIEtNU0FOIGNvbmNlcm5zLiBJdCYjMzk7cyBzdHJpY3RseSBhIG1hdHRlciBvZiBnZXR0aW5nIHRoZSBsb2dpYyBmbG93IHJpZ2h0LCB3aGljaCBpcyBnb29kLgoKR2l2ZW4gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEkmIzM5O2xsIGluY2x1ZGUgdGhpcyByZWFzb25pbmcgaW4gbXkgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCB3aGVyZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgYSB3cml0ZSAoYHBvc2ApIHdhcyBjYXB0dXJlZCBiZWZvcmUgY2FsbGluZyBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIFNpbmNlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBjYW4gdXBkYXRlIGBpb2NiLVx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBgT19BUFBFTkRgIHdyaXRlcyksIGNhcHR1cmluZyBpdCBiZWZvcmVoYW5kIHJlc3VsdGVkIGluIGFuIGluY29ycmVjdCBwb3NpdGlvbiBiZWluZyB1c2VkIGZvciBzdWJzZXF1ZW50IGNhY2hlIGludmFsaWRhdGlvbiAoYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYCkuIFRoZSBmaXggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwb3NgIHRvIGFmdGVyIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC5cblxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFkZHJlc3NlcyBhIGZpbGUgb2Zmc2V0IGxvZ2ljIGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgd2hlcmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGEgd3JpdGUgKGBwb3NgKSB3YXMgY2FwdHVyZWQgYmVmb3JlIGNhbGxpbmcgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBTaW5jZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgY2FuIHVwZGF0ZSBgaW9jYi1cdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgYE9fQVBQRU5EYCB3cml0ZXMpLCBjYXB0dXJpbmcgaXQgYmVmb3JlaGFuZCByZXN1bHRlZCBpbiBhbiBpbmNvcnJlY3QgcG9zaXRpb24gYmVpbmcgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWNoZSBpbnZhbGlkYXRpb24gKGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWApLiBUaGUgZml4IG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgcG9zYCB0byBhZnRlciBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZGRyZXNzZXMgYSBmaWxlIG9mZnNldCBsb2dpYyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MTowNy42NzIyNjk0ODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg3OTIyMDgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVNFX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnVzZV9kaXJlY3Rfd3JpdGVfaXRlclwiLFxuICAgIFwiZnVzZV9maWxlX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCB3aGVyZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgYSB3cml0ZSAoYHBvc2ApIHdhcyBjYXB0dXJlZCBiZWZvcmUgY2FsbGluZyBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIFNpbmNlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBjYW4gdXBkYXRlIGBpb2NiLVxcdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgYE9fQVBQRU5EYCB3cml0ZXMpLCBjYXB0dXJpbmcgaXQgYmVmb3JlaGFuZCByZXN1bHRlZCBpbiBhbiBpbmNvcnJlY3QgcG9zaXRpb24gYmVpbmcgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWNoZSBpbnZhbGlkYXRpb24gKGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWApLiBUaGUgZml4IG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgcG9zYCB0byBhZnRlciBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuXFxuXFxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFkZHJlc3NlcyBhIGZpbGUgb2Zmc2V0IGxvZ2ljIGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gRlVTRSBkaXJlY3QgSS9PIHdoZXJlIGBwb3NgIHdhcyBpbml0aWFsaXplZCBiZWZvcmUgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBJZiBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgbW9kaWZpZWQgYGlvY2ItXFx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBPX0FQUEVORCksIHRoZSBvbGQgYHBvc2AgdmFsdWUgd2FzIHVzZWQgbGF0ZXIgaW4gYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKClgLCBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgdGhlIHdyb25nIHBhZ2UgcmFuZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBGVVNFIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjA3LjY3MjI3NzQyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5OTUwMDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzg3NThiYmFiY2ZmMzRmZjYyYzQ5MmVmNzE5OTZmMGUxNjhlOTUxZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jXFxuaW5kZXggNDVlYmQxYjE1ODc0YS4uZDEyYTlmZGY3NzBlZiAxMDA2NDRcXG4tLS0gYS9mcy9mdXNlL2ZpbGUuY1xcbisrKyBiL2ZzL2Z1c2UvZmlsZS5jXFxuQEAgLTE3ODksMTMgKzE3ODksMTQgQEAgc3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbi1cXHRsb2ZmX3QgcG9zID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcbiBcXHRzc2l6ZV90IHJlcztcXG4gXFx0Ym9vbCBleGNsdXNpdmU7XFxuIFxcbiBcXHRmdXNlX2Rpb19sb2NrKGlvY2IsIGZyb20sIFxcdTAwMjZleGNsdXNpdmUpO1xcbiBcXHRyZXMgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcXG4gXFx0aWYgKHJlcyBcXHUwMDNlIDApIHtcXG4rXFx0XFx0bG9mZl90IHBvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFxuIFxcdFxcdHRhc2tfaW9fYWNjb3VudF93cml0ZShyZXMpO1xcbiBcXHRcXHRpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpIHtcXG4gXFx0XFx0XFx0cmVzID0gZnVzZV9kaXJlY3RfSU8oaW9jYiwgZnJvbSk7XFxuQEAgLTE4MTAsNyArMTgxMSw3IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIEFzIGluIGdlbmVyaWNfZmlsZV9kaXJlY3Rfd3JpdGUoKSwgaW52YWxpZGF0ZSBhZnRlclxcbiBcXHRcXHRcXHQgKiB3cml0ZSwgdG8gaW52YWxpZGF0ZSByZWFkLWFoZWFkIGNhY2hlIHRoYXQgbWF5IGhhdmVcXG4tXFx0XFx0XFx0ICogd2l0aCB0aGUgd3JpdGUuXFxuK1xcdFxcdFxcdCAqIGNvbXBldGVkIHdpdGggdGhlIHdyaXRlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZyxcXG4gXFx0XFx0XFx0XFx0cG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjA4LjE2MzAyMzQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzI5NDQxMDkyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJcIixcbiAgICBcImZ1c2VfZmlsZV93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gRlVTRSBkaXJlY3QgSS9PIHdoZXJlIGBwb3NgIHdhcyBpbml0aWFsaXplZCBiZWZvcmUgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBJZiBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgbW9kaWZpZWQgYGlvY2ItXFx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBPX0FQUEVORCksIHRoZSBvbGQgYHBvc2AgdmFsdWUgd2FzIHVzZWQgbGF0ZXIgaW4gYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKClgLCBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgdGhlIHdyb25nIHBhZ2UgcmFuZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBGVVNFIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmNcbmluZGV4IDQ1ZWJkMWIxNTg3NGEuLmQxMmE5ZmRmNzcwZWYgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2ZpbGUuY1xuKysrIGIvZnMvZnVzZS9maWxlLmNcbkBAIC0xNzg5LDEzICsxNzg5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXHUwMDNlaV9tYXBwaW5nO1xuLVx0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuIFx0c3NpemVfdCByZXM7XG4gXHRib29sIGV4Y2x1c2l2ZTtcbiBcbiBcdGZ1c2VfZGlvX2xvY2soaW9jYiwgZnJvbSwgXHUwMDI2ZXhjbHVzaXZlKTtcbiBcdHJlcyA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuIFx0aWYgKHJlcyBcdTAwM2UgMCkge1xuK1x0XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXG4gXHRcdHRhc2tfaW9fYWNjb3VudF93cml0ZShyZXMpO1xuIFx0XHRpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpIHtcbiBcdFx0XHRyZXMgPSBmdXNlX2RpcmVjdF9JTyhpb2NiLCBmcm9tKTtcbkBAIC0xODEwLDcgKzE4MTEsNyBAQCBzdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHRcdC8qXG4gXHRcdFx0ICogQXMgaW4gZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZSgpLCBpbnZhbGlkYXRlIGFmdGVyXG4gXHRcdFx0ICogd3JpdGUsIHRvIGludmFsaWRhdGUgcmVhZC1haGVhZCBjYWNoZSB0aGF0IG1heSBoYXZlXG4tXHRcdFx0ICogd2l0aCB0aGUgd3JpdGUuXG4rXHRcdFx0ICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZyxcbiBcdFx0XHRcdHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjA4LjE2MzAyNTQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkzODMxODQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGVVNFIERpcmVjdCBXcml0ZSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZnVzZS9maWxlLmNgIHNwZWNpZmljYWxseSB0aGUgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7YC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgbW92aW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gKmluc2lkZSogdGhlIGBpZiAocmVzIFx1MDAzZSAwKWAgYmxvY2suIExldCBtZSBwdWxsIHVwIHRoZSBkaWZmIHJlYWwgcXVpY2suLi4gWXVwLCB0aGVyZSBpdCBpcy4gVGhlIG9yaWdpbmFsIGNvZGUgaW5pdGlhbGl6ZWQgYHBvc2AgYmVmb3JlIGNhbGxpbmcgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgYnV0IG5vdyBpdCdzIGluaXRpYWxpemVkIGFmdGVyLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5PyAgV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgc2VlbWluZ2x5IG1pbm9yIGNvZGUgbW92ZW1lbnQ/ICBBaCwgSSBzZWUgaXQuIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AgY2FuIG1vZGlmeSB0aGUgYGlvY2ItXHUwMDNla2lfcG9zYC4gU3BlY2lmaWNhbGx5LCB0aGUgT19BUFBFTkQgZmxhZyBjb21lcyB0byBtaW5kLiAgSWYgdGhhdCBmbGFnIGlzIHNldCwgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCB3aWxsIHVwZGF0ZSBga2lfcG9zYCB0byBgaV9zaXplYC4gIElmIGBwb3NgIGlzIGluaXRpYWxpemVkICpiZWZvcmUqIHRoYXQgY2FsbCwgaXQncyBob2xkaW5nIG9udG8gdGhlIG91dGRhdGVkIHZhbHVlIG9mIHRoZSBmaWxlIG9mZnNldC4gIFRoZW4gdGhlIGZ1bmN0aW9uLCBsYXRlciBvbiwgaXMgZ29pbmcgdG8gdXNlIGBwb3NgIGluIHRoZSBsaW5lIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAuIEl0J3MgZ29pbmcgdG8gdXNlIGBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlRgLCBhbmQgc2luY2UgYHBvc2Agd291bGQgaGF2ZSB0aGUgd3JvbmcgdmFsdWUsIHRoaXMgY291bGQgY2F1c2UgdGhlIHdyb25nIHBhZ2UgcmFuZ2UgdG8gYmUgaW52YWxpZGF0ZWQuIFRoYXQncyBhIGNsYXNzaWMgb2ZmLWJ5LW9uZSBvciBvZmYtYnktc29tZSB0eXBlIG9mIG1lbW9yeSBidWcuXG5cblNvLCBieSBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uICphZnRlciogdGhlIGNoZWNrcywgdGhlIGNvZGUgaXMgZ3VhcmFudGVlZCB0byBncmFiIHRoZSBjb3JyZWN0LCB1cGRhdGVkIHZhbHVlIG9mIGBraV9wb3NgIHdoaWNoIGF2b2lkcyBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgdGhlIHdyb25nIHBhZ2UgcmFuZ2UgYW5kIGNvcnJ1cHRpbmcgdGhlIGZpbGUgc3lzdGVtLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgsIG5vdCBqdXN0IGEgc3R5bGlzdGljIG9uZS4gSXQncyBhZGRyZXNzaW5nIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIG9yLCBtb3JlIHByZWNpc2VseSwgYSBsb2dpYyBlcnJvciBpbiBob3cgdGhlIGRpcmVjdCBJL08gcHJvY2VzcyBoYW5kbGVzIHVwZGF0ZXMgdG8gdGhlIGZpbGUgb2Zmc2V0LiBMb29rcyBsaWtlIGEgc29saWQsIG5lY2Vzc2FyeSBjaGFuZ2UgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgaW4gdGhlIEZVU0UgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MToxNi4xMDEzNDYyNTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzOTQwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVzZV9kaXJlY3Rfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL2ZpbGUuYz0xNzczPXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xNzg3LVxcbmZzL2Z1c2UvZmlsZS5jOjE3ODg6c3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9mdXNlL2ZpbGUuYy0xNzg5LXtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTE4NDc9c3RhdGljIHNzaXplX3QgZnVzZV9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xODYwLVxcdGlmIChmZi1cXHUwMDNlb3Blbl9mbGFncyBcXHUwMDI2IEZPUEVOX0RJUkVDVF9JTylcXG5mcy9mdXNlL2ZpbGUuYzoxODYxOlxcdFxcdHJldHVybiBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL2Z1c2UvZmlsZS5jLTE4NjItXFx0ZWxzZSBpZiAoZnVzZV9maWxlX3Bhc3N0aHJvdWdoKGZmKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6MTYuMTU5NzQ0NTE3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMzg5MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBpcyBjYWxsZWQgZnJvbSBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcGFydCBvZiBGVVNFJ3MgZGlyZWN0IEkvTyBpbXBsZW1lbnRhdGlvbi4gRGlyZWN0IEkvTyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgbG90cyBvZiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsIGFuZCBwb3RlbnRpYWwgZm9yIGVkZ2UgY2FzZXMuIENvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIEZVU0UsIGFueSB2dWxuZXJhYmlsaXRpZXMgaGVyZSBjb3VsZCBiZSBxdWl0ZSBzZXZlcmUuXG5cbk15IGZvY3VzIGhhcyB0byBiZSBvbiBlaXRoZXIgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIG9yIGl0cyBjYWxsZXIsIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIHRoZSBtb3JlIGZydWl0ZnVsIHN0YXJ0aW5nIHBvaW50IGZvciBnZW5lcmF0aW5nIHRlc3QgY2FzZXMuIEkgc3VzcGVjdCBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgbWlnaHQgYmUgdGhlIGJldHRlciBiZXQsIGdpdmVuIGl0J3MgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBkaXJlY3Qgd3JpdGUgaXRlcmF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24gdGhlIEZVU0UgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgdmFyaW91cyBvcHRpb25zIGFuZCBmbGFncyB3aWxsIGJlIGNydWNpYWwgZm9yIGNyYWZ0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIGlucHV0cy4gSSBuZWVkIHRvIHNlZSB3aGF0IGNhbiBiZSBjb250cm9sbGVkLCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6MjAuNDkzNjM5MTUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzUwMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Z1c2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZz0zMj1jb25maWcgVklSVElPX0ZTXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNDItXFxuZnMvZnVzZS9LY29uZmlnOjQzOmNvbmZpZyBGVVNFX0RBWFxcbmZzL2Z1c2UvS2NvbmZpZy00NC1cXHRib29sIFxcXCJWaXJ0aW8gRmlsZXN5c3RlbSBEaXJlY3QgSG9zdCBNZW1vcnkgQWNjZXNzIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNTYtXFxuZnMvZnVzZS9LY29uZmlnOjU3OmNvbmZpZyBGVVNFX1BBU1NUSFJPVUdIXFxuZnMvZnVzZS9LY29uZmlnLTU4LVxcdGJvb2wgXFxcIkZVU0UgcGFzc3Rocm91Z2ggb3BlcmF0aW9ucyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZnVzZS9LY29uZmlnLTY3LVxcbmZzL2Z1c2UvS2NvbmZpZzo2ODpjb25maWcgRlVTRV9JT19VUklOR1xcbmZzL2Z1c2UvS2NvbmZpZy02OS1cXHRib29sIFxcXCJGVVNFIGNvbW11bmljYXRpb24gb3ZlciBpby11cmluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6MjAuNTQ3Mzk1NjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIyNDU4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRlVTRSBGaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgd2l0aCBpcyBgRlVTRV9GU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGFkaGVyZXMgdG8gYmVzdCBwcmFjdGljZXMsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBGaXJzdCwgbGV0J3MgdmVyaWZ5IGlmIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBpcyBzdGF0aWMuIEFscmlnaHQsIGl0IGlzLiBOb3csIHRoZSBkb2N1bWVudGF0aW9uIGlzIHZlcnkgY2xlYXI6IFdlIHNob3VsZCBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBiZWNhdXNlIG9mIHRoZSB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4gU2luY2UgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIHN0YXRpYywgSSdtIGdvaW5nIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIElzIGl0IGFzc2lnbmVkIHRvIGEgc3RydWN0IG1lbWJlciwgb3IgaXMgaXQgY2FsbGVkIGZyb20gYSBub24tc3RhdGljIGZ1bmN0aW9uPyBMZXQncyBhbHNvIGNoZWNrIG9uIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAgc2luY2UgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgcHJvYmxlbWF0aWMgYXMgd2VsbCwgaWYgaXQncyBhbHNvIHN0YXRpYy4gSSdsbCB2ZXJpZnkgaWYgdGhhdCdzIHRoZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjI0LjQ2OTg1ODI2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE2MTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXNlX2ZpbGVfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL2ZpbGUuYz0xODI2PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMTg0Ni1cXG5mcy9mdXNlL2ZpbGUuYzoxODQ3OnN0YXRpYyBzc2l6ZV90IGZ1c2VfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL2Z1c2UvZmlsZS5jLTE4NDgte1xcbi0tXFxuZnMvZnVzZS9maWxlLmM9MzA2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdXNlX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTMwNzAtXFx0LnJlYWRfaXRlclxcdD0gZnVzZV9maWxlX3JlYWRfaXRlcixcXG5mcy9mdXNlL2ZpbGUuYzozMDcxOlxcdC53cml0ZV9pdGVyXFx0PSBmdXNlX2ZpbGVfd3JpdGVfaXRlcixcXG5mcy9mdXNlL2ZpbGUuYy0zMDcyLVxcdC5tbWFwXFx0XFx0PSBmdXNlX2ZpbGVfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6MjQuNTI0MDMxMDY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3NTg2MzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRlVTRSBXcml0ZSBJdGVyYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdyaXRlcyBhcmUgaGFuZGxlZCBpbiB0aGUgRlVTRSBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGB3cml0ZV9pdGVyYCBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBgZnVzZV9maWxlX29wZXJhdGlvbnNgIHN0cnVjdC4gSSBzZWUgdGhhdCBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGAud3JpdGVfaXRlcmAuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2FpdCwgaXNuJ3QgYGZ1c2VfZmlsZV93cml0ZV9pdGVyYCBzdGF0aWM/XCIgSSdtIGltbWVkaWF0ZWx5IHdvbmRlcmluZyBpZiB0aGVyZSdzIGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZS5cblxuVGhlbiBJIHJlbWVtYmVyIHRoYXQgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgYmVpbmcgYXNzaWduZWQgdG8gYSBzdHJ1Y3QsIHdoaWNoIG1lYW5zIGl0ICp3b24ndCogYmUgaW5saW5lZCBhbmQgd2lsbCBoYXZlIGl0cyBvd24gc3ltYm9sIGFkZHJlc3MuIFRoYXQgbWFrZXMgaXQgYW4gZW50cnkgcG9pbnQuIFRoaXMgY29udHJhZGljdHMgdGhlIGluc3RydWN0aW9uIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgaXQgYW4gQVBJIGVudHJ5cG9pbnQgKFZGUyBlbnRyeXBvaW50KVxuXG5TbywgSSBoYXZlIGEgZmV3IG9wdGlvbnMgZm9yIHdoYXQgdG8gbGlzdDogYGZ1c2VfZmlsZV93cml0ZV9pdGVyYCwgb3IgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgLiBMZXQncyBzZWUuLi5JIHNob3VsZCBjaGVjayBpZiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgaXMgaW5saW5lZDsgaXQncyBxdWl0ZSBhIGxhcmdlIGZ1bmN0aW9uIHNvIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBHb29kLCBvbmUgcG9pbnQgZm9yIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYC4gQW5kIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAgaXMgKmRlZmluaXRlbHkqIG5vdCBpbmxpbmVkIGJlY2F1c2UgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuXG5cbldhaXQuLi4gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIGFjdHVhbGx5IGNhbGxlZCAqZnJvbSogYGZ1c2VfZmlsZV93cml0ZV9pdGVyYC4gUmlnaHQsIGdvdCBpdC4gSXQgbWFrZXMgc2Vuc2UgdG8gbGlzdCBib3RoOiBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGFuZCBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAuXG5cbkxldCdzIGFsc28gdGFrZSBhIGxvb2sgYXQgYGZzL2Z1c2UvZmlsZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgSSdtIG1pc3NpbmcuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MTozMC42OTk4OTc3NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDA0OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnVzZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9maWxlLmM9MTc3Mz1zdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMTc4Ny1cXG5mcy9mdXNlL2ZpbGUuYzoxNzg4OnN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvZnVzZS9maWxlLmMtMTc4OS17XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYz0xODQ3PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMTg2MC1cXHRpZiAoZmYtXFx1MDAzZW9wZW5fZmxhZ3MgXFx1MDAyNiBGT1BFTl9ESVJFQ1RfSU8pXFxuZnMvZnVzZS9maWxlLmM6MTg2MTpcXHRcXHRyZXR1cm4gZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy9mdXNlL2ZpbGUuYy0xODYyLVxcdGVsc2UgaWYgKGZ1c2VfZmlsZV9wYXNzdGhyb3VnaChmZikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjMwLjc1MjkwODkwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI3MjUxMzM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIEZVU0UgRGlyZWN0IEkvTyBCdWcgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyB3aGF0J3MgZ29pbmcgb24uIFRoZSBjb3JlIGlzc3VlIGlzIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYC4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGhvdyB0aGUgZmlsZSBwb3NpdGlvbiAoYHBvc2ApIGlzIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gYGdlbmVyaWNfd3JpdGVfY2hlY2tzYC4gVGhlIGZpeCBlbnN1cmVzIHRoYXQgdGhlIGNvcnJlY3QgdmFsdWUgb2YgYGtpX3Bvc2AgKHdoaWNoIGNhbiBiZSBtb2RpZmllZCB3aXRoaW4gYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgZXNwZWNpYWxseSB3aXRoIGBPX0FQUEVORGApIGlzIHVzZWQgdG8gdXBkYXRlIGBwb3NgLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhhdCBgcG9zYCB2YWx1ZSBpcyB0aGVuIHBhc3NlZCBpbnRvIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAsIGFuZCB1c2luZyB0aGUgd3JvbmcgdmFsdWUgY291bGQgaW52YWxpZGF0ZSBhbiBpbmNvcnJlY3QgcmFuZ2Ugb2YgcGFnZXMsIHdoaWNoIGlzIGEgcHJldHR5IG5hc3R5IGJ1Zy5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgYnVnIGZpeCwgaW4gZmFjdC4gSXQncyBpbiB0aGUgY29yZSBGVVNFIGZpbGVzeXN0ZW0gbG9naWMuIEFuZCBpdCdzIHVzZXItcmVhY2hhYmxlLCB3aGljaCBtZWFucyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIHNvbWV0aGluZyB3ZSBzaG91bGQgdGVzdCB0aG9yb3VnaGx5LlxuXG5JIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyB0aG91Z2guIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGZpbmUsIGJ1dCBJJ2xsIGFsc28gaW5jbHVkZSBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgLiBFdmVuIHRob3VnaCBpdCBpcyBhbHNvIHN0YXRpYywgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgZnVzZV9maWxlX29wZXJhdGlvbnNgLiBUaGF0IHdpbGwgZ2l2ZSB1cyBhIHNsaWdodGx5IGJyb2FkZXIgdmlldyB3aGVuIGZ1enppbmcuXG5cbkJhc2ljYWxseSwgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIGNhbiBtb2RpZnkgYGlvY2ItXHUwMDNla2lfcG9zYC4gVGhlIG9yaWdpbmFsIGBwb3NgIHdhcyBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGF0IGNoZWNrLiBJZiBga2lfcG9zYCBjaGFuZ2VkICh0aGluayBgT19BUFBFTkRgKSwgdGhlbiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoKWAgd291bGQgdXNlIHRoZSBvbGQsIGluY29ycmVjdCBgcG9zYCB2YWx1ZS4gVGhpcyBwYXRjaCBmaXhlcyB0aGF0LCBhbmQgdGhhdCBraW5kIG9mIGxvZ2ljIGRlc2VydmVzIGNhcmVmdWwgZnV6emluZy5cblxuSSdtIHJlYWR5IHRvIGNhbGwgdGhlIHNldC1yZXN1bHRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5OSwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6NDEuMDI1NDI1MjA1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3MDQxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXNlX2RpcmVjdF93cml0ZV9pdGVyXCIsXG4gICAgXCJmdXNlX2ZpbGVfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEZVU0UgZGlyZWN0IEkvTyB3aGVyZSBgcG9zYCB3YXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC4gSWYgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIG1vZGlmaWVkIGBpb2NiLVxcdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgT19BUFBFTkQpLCB0aGUgb2xkIGBwb3NgIHZhbHVlIHdhcyB1c2VkIGxhdGVyIGluIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCwgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIHRoZSB3cm9uZyBwYWdlIHJhbmdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgRlVTRSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXNlX2RpcmVjdF93cml0ZV9pdGVyXCIsXG4gICAgXCJmdXNlX2ZpbGVfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEZVU0UgZGlyZWN0IEkvTyB3aGVyZSBgcG9zYCB3YXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC4gSWYgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIG1vZGlmaWVkIGBpb2NiLVxcdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgT19BUFBFTkQpLCB0aGUgb2xkIGBwb3NgIHZhbHVlIHdhcyB1c2VkIGxhdGVyIGluIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCwgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIHRoZSB3cm9uZyBwYWdlIHJhbmdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgRlVTRSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MTo0MS4xMDcxMzczMDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDQ0MzQzMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6NDEuMTA3NzI1MjMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NDQzNzUwNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgd2hlcmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGEgd3JpdGUgKGBwb3NgKSB3YXMgY2FwdHVyZWQgYmVmb3JlIGNhbGxpbmcgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBTaW5jZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgY2FuIHVwZGF0ZSBgaW9jYi1cXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIGBPX0FQUEVORGAgd3JpdGVzKSwgY2FwdHVyaW5nIGl0IGJlZm9yZWhhbmQgcmVzdWx0ZWQgaW4gYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGJlaW5nIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FjaGUgaW52YWxpZGF0aW9uIChgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgKS4gVGhlIGZpeCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvc2AgdG8gYWZ0ZXIgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZGRyZXNzZXMgYSBmaWxlIG9mZnNldCBsb2dpYyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmNcbmluZGV4IDQ1ZWJkMWIxNTg3NGEuLmQxMmE5ZmRmNzcwZWYgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2ZpbGUuY1xuKysrIGIvZnMvZnVzZS9maWxlLmNcbkBAIC0xNzg5LDEzICsxNzg5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXHUwMDNlaV9tYXBwaW5nO1xuLVx0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuIFx0c3NpemVfdCByZXM7XG4gXHRib29sIGV4Y2x1c2l2ZTtcbiBcbiBcdGZ1c2VfZGlvX2xvY2soaW9jYiwgZnJvbSwgXHUwMDI2ZXhjbHVzaXZlKTtcbiBcdHJlcyA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuIFx0aWYgKHJlcyBcdTAwM2UgMCkge1xuK1x0XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXG4gXHRcdHRhc2tfaW9fYWNjb3VudF93cml0ZShyZXMpO1xuIFx0XHRpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpIHtcbiBcdFx0XHRyZXMgPSBmdXNlX2RpcmVjdF9JTyhpb2NiLCBmcm9tKTtcbkBAIC0xODEwLDcgKzE4MTEsNyBAQCBzdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHRcdC8qXG4gXHRcdFx0ICogQXMgaW4gZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZSgpLCBpbnZhbGlkYXRlIGFmdGVyXG4gXHRcdFx0ICogd3JpdGUsIHRvIGludmFsaWRhdGUgcmVhZC1haGVhZCBjYWNoZSB0aGF0IG1heSBoYXZlXG4tXHRcdFx0ICogd2l0aCB0aGUgd3JpdGUuXG4rXHRcdFx0ICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZyxcbiBcdFx0XHRcdHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjQxLjEwNzczMzczM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTM4OTYxODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnVzZSBEaXJlY3QgV3JpdGUgSXRlcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgaW4gYGZzL2Z1c2UvZmlsZS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IGl0J3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgY2hhbmdlLiBJdCdzIG1vdmluZyB0aGUgYHBvc2AgaW5pdGlhbGl6YXRpb24uIEkga25vdyB0aGF0IGZ1bmN0aW9uOyBpdCdzIHRoZSBjb3JlIG9mIGRpcmVjdCBJL08gaW4gdGhlIEZVU0UgZmlsZXN5c3RlbS5cblxuVGhlIGNvcmUgb2YgbXkgdGhpbmtpbmcgcmV2b2x2ZXMgYXJvdW5kIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIHBhdGNoLiBUaGUga2V5IGlzIHdoZXJlIGBwb3NgIGlzIGluaXRpYWxpemVkIHJlbGF0aXZlIHRvIGBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKWAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSXTigJlzIHdoZXJlIHRoZSBjaGVja3MgaGFwcGVuLCBhbmQsIGNydWNpYWxseSwgaXQgY2FuIG1vZGlmeSBgaW9jYi1cdTAwM2VraV9wb3NgLiBJJ20gc3RhcnRpbmcgdG8gcmVtZW1iZXIgdGhhdCBkZXRhaWwsIHRoaW5raW5nIGFib3V0IGhvdyBgaW9jYi1cdTAwM2VraV9wb3NgIGNvdWxkIGJlIHVwZGF0ZWQgYnkgdGhhdCBjYWxsLlxuXG5Jbml0aWFsbHksIGBwb3NgIHdhcyBiZWluZyBhc3NpZ25lZCBiZWZvcmUgdGhhdCBjaGVjay4gTm93LCBpdCdzIGJlaW5nIGFzc2lnbmVkICphZnRlciouIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGJlY29taW5nIGNsZWFyZXI6IGlmIGl0J3MgYmVmb3JlLCB5b3UncmUgZ3JhYmJpbmcgdGhlICpvbGQqIHBvc2l0aW9uLiBJZiBpdCdzIGFmdGVyLCB5b3UncmUgZ2V0dGluZyB0aGUgKm5ldyogcG9zaXRpb24g4oCTIHRoZSBvbmUgdGhhdCdzIGJlZW4gcG90ZW50aWFsbHkgYWRqdXN0ZWQgYnkgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkLlxuXG5UaGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgdGhvc2UgY2hlY2tzIGluIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AsIHRoZXkgY2hhbmdlIGBpb2NiLVx1MDAzZWtpX3Bvc2AgaWYsIHNheSwgT19BUFBFTkQgaXMgc2V0LCBvciBzb21lIG90aGVyIGZpbGUgYWNjZXNzIGNvbnN0cmFpbnRzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4uIFRoYXQgaW5pdGlhbCB2YWx1ZSBtaWdodCBiZSBvdmVyd3JpdHRlbi4gTXkgY29uY2VybiBpcyB3aGV0aGVyIGl0J3MgdGhlIHN0YXJ0IHBvc2l0aW9uLCB3aGljaCB0aGUgd3JpdGUgaXMgc3VwcG9zZWQgdG8gYmVnaW4sIG9yIGlmIHRoZXJlIGlzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHVwZGF0ZWQgc3RhcnQgcG9zaXRpb24gaXMgbW9yZSBhcHByb3ByaWF0ZS5cblxuVGhlIGltcG9ydGFudCBsaW5lIGlzIHdoZXJlIGBwb3NgIGlzIHVzZWQgbGF0ZXIgd2l0aCBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCAuLi4pYCB0byB0ZWxsIHRoZSBrZXJuZWwgdG8gaW52YWxpZGF0ZSB0aGUgcmVsZXZhbnQgcGFnZXMgZm9yIHRoZSB3cml0dGVuIGRhdGEuIEludmFsaWRhdGlvbiBoYXBwZW5zIHVzaW5nIHRoZSBzdGFydGluZyBwb3NpdGlvbi4gVGhlIHBhdGNoIGlzIGVuc3VyaW5nIHRoZSBpbnZhbGlkYXRpb24gaGFwcGVucyBmcm9tIHRoZSBjb3JyZWN0IG9mZnNldC5cblxuU28gdGhlIHBhdGNoIGlzIGFkanVzdGluZyB0aGUgc3RhcnQgcG9zaXRpb24uIEl0J3MgY2xlYXIgdGhhdCBpdCBoYXMgdG8gYmUgdGhlIHVwZGF0ZWQgcG9zaXRpb24uIFNvIHRoZSBwYXRjaCBpcyBhY3R1YWxseSBmaXhpbmcgYSBzdWJ0bGUgYnVnIHdoZXJlIHRoZSB3cm9uZyBvZmZzZXQgd2FzIGJlaW5nIHVzZWQgZm9yIGludmFsaWRhdGlvbi5cblxuV2FpdC4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gSXMgdGhlcmUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBgcG9zYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBpb2NiLVx1MDAzZWtpX3Bvc2AgcmlnaHQgYWZ0ZXIgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgc28gd2UncmUgc2FmZSB0aGVyZS4gTm8gcmlzayBvZiBsZWFraW5nIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2UuXG5cbkl0J3MgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgZW5zdXJpbmcgdGhlIGNvcnJlY3QgcG9zaXRpb24gaXMgdXNlZCB3aXRoaW4gYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYCBmdW5jdGlvbiB3aGVuIHBlcmZvcm1pbmcgZGlyZWN0IHdyaXRlcyBpbiBhIEZVU0UgZmlsZXN5c3RlbSwgd2hlcmUgT19BUFBFTkQgb3Igc29tZXRoaW5nIHNpbWlsYXIgaGFzIGJlZW4gYXBwbGllZC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgY29kZSBwYXRoLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MTo0OS4wNDY2OTg1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MTU2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVzZV9kaXJlY3Rfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL2ZpbGUuYz0xNzczPXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xNzg3LVxcbmZzL2Z1c2UvZmlsZS5jOjE3ODg6c3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9mdXNlL2ZpbGUuYy0xNzg5LXtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTE4NDc9c3RhdGljIHNzaXplX3QgZnVzZV9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xODYwLVxcdGlmIChmZi1cXHUwMDNlb3Blbl9mbGFncyBcXHUwMDI2IEZPUEVOX0RJUkVDVF9JTylcXG5mcy9mdXNlL2ZpbGUuYzoxODYxOlxcdFxcdHJldHVybiBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL2Z1c2UvZmlsZS5jLTE4NjItXFx0ZWxzZSBpZiAoZnVzZV9maWxlX3Bhc3N0aHJvdWdoKGZmKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6NDkuMDkxNDE5MzE5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NjAwMTM4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDYWNoZSBJbnZhbGlkYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIHdoYXQgSSdtIHNlZWluZzogdGhlcmUncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbG9naWMgZmxhdyBpbiB0aGUgd2F5IGBwb3NgIGlzIGJlaW5nIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgaW5pdGlhbGl6ZXMgYHBvc2AgYmVmb3JlIGEgY2FsbCB0byBgZ2VuZXJpY193cml0ZV9jaGVja3NgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGBnZW5lcmljX3dyaXRlX2NoZWNrc2AgY2FuIGFjdHVhbGx5ICp1cGRhdGUqIHRoZSB2YWx1ZSBvZiBgaW9jYi1cdTAwM2VraV9wb3NgLCBwYXJ0aWN1bGFybHkgaW4gc2NlbmFyaW9zIGxpa2Ugd2hlbiBgT19BUFBFTkRgIGlzIHVzZWQuXG5cbkJ5IGluaXRpYWxpemluZyBgcG9zYCAqYWZ0ZXIqIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AsIHdlJ3JlIGd1YXJhbnRlZWluZyB0aGF0IGBwb3NgIGlzIHNldCB0byB0aGUgKmNvcnJlY3QqIHN0YXJ0aW5nIHBvc2l0aW9uLCB0aGUgb25lIHRoYXQncyBiZWVuIHByb3Blcmx5IGFkanVzdGVkIGZvciB0aGUgd3JpdGUgb3BlcmF0aW9uLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHdlIGdldCB0byB0aGUgY2FjaGUgaW52YWxpZGF0aW9uIHN0ZXAsIHdlJ3JlIHVzaW5nIHRoZSByaWdodCBvZmZzZXQuXG5cblRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgaXNuJ3QgdG91Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igcmlza2luZyBhbnkgaW5mb3JtYXRpb24gbGVha3MuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBzaG91bGQgdHJpZ2dlciBLTVNBTiBjb25jZXJucy4gSXQncyBzdHJpY3RseSBhIG1hdHRlciBvZiBnZXR0aW5nIHRoZSBsb2dpYyBmbG93IHJpZ2h0LCB3aGljaCBpcyBnb29kLlxuXG5HaXZlbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJJ2xsIGluY2x1ZGUgdGhpcyByZWFzb25pbmcgaW4gbXkgcmVzcG9uc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODMsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjU1LjU1MTQzNTU2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIHdoZXJlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiBhIHdyaXRlIChgcG9zYCkgd2FzIGNhcHR1cmVkIGJlZm9yZSBjYWxsaW5nIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC4gU2luY2UgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIGNhbiB1cGRhdGUgYGlvY2ItXFx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBgT19BUFBFTkRgIHdyaXRlcyksIGNhcHR1cmluZyBpdCBiZWZvcmVoYW5kIHJlc3VsdGVkIGluIGFuIGluY29ycmVjdCBwb3NpdGlvbiBiZWluZyB1c2VkIGZvciBzdWJzZXF1ZW50IGNhY2hlIGludmFsaWRhdGlvbiAoYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYCkuIFRoZSBmaXggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwb3NgIHRvIGFmdGVyIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRkcmVzc2VzIGEgZmlsZSBvZmZzZXQgbG9naWMgYnVnIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgd2hlcmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGEgd3JpdGUgKGBwb3NgKSB3YXMgY2FwdHVyZWQgYmVmb3JlIGNhbGxpbmcgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBTaW5jZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgY2FuIHVwZGF0ZSBgaW9jYi1cXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIGBPX0FQUEVORGAgd3JpdGVzKSwgY2FwdHVyaW5nIGl0IGJlZm9yZWhhbmQgcmVzdWx0ZWQgaW4gYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGJlaW5nIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FjaGUgaW52YWxpZGF0aW9uIChgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgKS4gVGhlIGZpeCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvc2AgdG8gYWZ0ZXIgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZGRyZXNzZXMgYSBmaWxlIG9mZnNldCBsb2dpYyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 09:15:15 +0000 UTC FinishedAt: 2026-08-19 09:51:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5453bc3279e9f8578ac3e534d476240e40c879e1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUSE_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5453bc3279e9f8578ac3e534d476240e40c879e1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUSE_FS" ], "series_id": "da8be885-aec2-4961-a6e9-162d8900ab4d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "fuse_direct_write_iter", "fuse_file_write_iter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVU0VfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXNlX2RpcmVjdF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2Z1c2VfZmlsZV93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIHdoZXJlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiBhIHdyaXRlIChgcG9zYCkgd2FzIGNhcHR1cmVkIGJlZm9yZSBjYWxsaW5nIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC4gU2luY2UgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIGNhbiB1cGRhdGUgYGlvY2ItXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIGBPX0FQUEVORGAgd3JpdGVzKSwgY2FwdHVyaW5nIGl0IGJlZm9yZWhhbmQgcmVzdWx0ZWQgaW4gYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGJlaW5nIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FjaGUgaW52YWxpZGF0aW9uIChgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgKS4gVGhlIGZpeCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvc2AgdG8gYWZ0ZXIgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRkcmVzc2VzIGEgZmlsZSBvZmZzZXQgbG9naWMgYnVnIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gRlVTRSBkaXJlY3QgSS9PIHdoZXJlIGBwb3NgIHdhcyBpbml0aWFsaXplZCBiZWZvcmUgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBJZiBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgbW9kaWZpZWQgYGlvY2ItXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIE9fQVBQRU5EKSwgdGhlIG9sZCBgcG9zYCB2YWx1ZSB3YXMgdXNlZCBsYXRlciBpbiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoKWAsIHBvdGVudGlhbGx5IGludmFsaWRhdGluZyB0aGUgd3JvbmcgcGFnZSByYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEZVU0UgZmlsZXN5c3RlbSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jXG5pbmRleCA0NWViZDFiMTU4NzRhLi5kMTJhOWZkZjc3MGVmIDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZmlsZS5jXG5AQCAtMTc4OSwxMyAmIzQzOzE3ODksMTQgQEAgc3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4tXHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXHRzc2l6ZV90IHJlcztcbiBcdGJvb2wgZXhjbHVzaXZlO1xuIFxuIFx0ZnVzZV9kaW9fbG9jayhpb2NiLCBmcm9tLCBcdTAwMjZleGNsdXNpdmUpO1xuIFx0cmVzID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG4gXHRpZiAocmVzIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4mIzQzO1xuIFx0XHR0YXNrX2lvX2FjY291bnRfd3JpdGUocmVzKTtcbiBcdFx0aWYgKCFpc19zeW5jX2tpb2NiKGlvY2IpKSB7XG4gXHRcdFx0cmVzID0gZnVzZV9kaXJlY3RfSU8oaW9jYiwgZnJvbSk7XG5AQCAtMTgxMCw3ICYjNDM7MTgxMSw3IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBcyBpbiBnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKCksIGludmFsaWRhdGUgYWZ0ZXJcbiBcdFx0XHQgKiB3cml0ZSwgdG8gaW52YWxpZGF0ZSByZWFkLWFoZWFkIGNhY2hlIHRoYXQgbWF5IGhhdmVcbi1cdFx0XHQgKiB3aXRoIHRoZSB3cml0ZS5cbiYjNDM7XHRcdFx0ICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZyxcbiBcdFx0XHRcdHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVTRV9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1c2VfZGlyZWN0X3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7ZnVzZV9maWxlX3dyaXRlX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gRlVTRSBkaXJlY3QgSS9PIHdoZXJlIGBwb3NgIHdhcyBpbml0aWFsaXplZCBiZWZvcmUgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBJZiBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgbW9kaWZpZWQgYGlvY2ItXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIE9fQVBQRU5EKSwgdGhlIG9sZCBgcG9zYCB2YWx1ZSB3YXMgdXNlZCBsYXRlciBpbiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoKWAsIHBvdGVudGlhbGx5IGludmFsaWRhdGluZyB0aGUgd3JvbmcgcGFnZSByYW5nZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEZVU0UgZmlsZXN5c3RlbSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggNDVlYmQxYjE1ODc0YS4uZDEyYTlmZGY3NzBlZiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9maWxlLmMKQEAgLTE3ODksMTMgJiM0MzsxNzg5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0mZ3Q7aV9tYXBwaW5nOwotCWxvZmZfdCBwb3MgPSBpb2NiLSZndDtraV9wb3M7CiAJc3NpemVfdCByZXM7CiAJYm9vbCBleGNsdXNpdmU7CiAKIAlmdXNlX2Rpb19sb2NrKGlvY2IsIGZyb20sICZhbXA7ZXhjbHVzaXZlKTsKIAlyZXMgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTsKIAlpZiAocmVzICZndDsgMCkgewomIzQzOwkJbG9mZl90IHBvcyA9IGlvY2ItJmd0O2tpX3BvczsKJiM0MzsKIAkJdGFza19pb19hY2NvdW50X3dyaXRlKHJlcyk7CiAJCWlmICghaXNfc3luY19raW9jYihpb2NiKSkgewogCQkJcmVzID0gZnVzZV9kaXJlY3RfSU8oaW9jYiwgZnJvbSk7CkBAIC0xODEwLDcgJiM0MzsxODExLDcgQEAgc3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAkJCS8qCiAJCQkgKiBBcyBpbiBnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKCksIGludmFsaWRhdGUgYWZ0ZXIKIAkJCSAqIHdyaXRlLCB0byBpbnZhbGlkYXRlIHJlYWQtYWhlYWQgY2FjaGUgdGhhdCBtYXkgaGF2ZQotCQkJICogd2l0aCB0aGUgd3JpdGUuCiYjNDM7CQkJICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuCiAJCQkgKi8KIAkJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsCiAJCQkJcG9zICZndDsmZ3Q7IFBBR0VfU0hJRlQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRlVTRSBEaXJlY3QgV3JpdGUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZnVzZS9maWxlLmNgIHNwZWNpZmljYWxseSB0aGUgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBsb2ZmX3QgcG9zID0gaW9jYi0mZ3Q7a2lfcG9zO2AuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIG1vdmluZyB0aGlzIGluaXRpYWxpemF0aW9uICppbnNpZGUqIHRoZSBgaWYgKHJlcyAmZ3Q7IDApYCBibG9jay4gTGV0IG1lIHB1bGwgdXAgdGhlIGRpZmYgcmVhbCBxdWljay4uLiBZdXAsIHRoZXJlIGl0IGlzLiBUaGUgb3JpZ2luYWwgY29kZSBpbml0aWFsaXplZCBgcG9zYCBiZWZvcmUgY2FsbGluZyBgZ2VuZXJpY193cml0ZV9jaGVja3NgLCBidXQgbm93IGl0JiMzOTtzIGluaXRpYWxpemVkIGFmdGVyLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeT8gIFdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBzZWVtaW5nbHkgbWlub3IgY29kZSBtb3ZlbWVudD8gIEFoLCBJIHNlZSBpdC4gYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCBjYW4gbW9kaWZ5IHRoZSBgaW9jYi0mZ3Q7a2lfcG9zYC4gU3BlY2lmaWNhbGx5LCB0aGUgT19BUFBFTkQgZmxhZyBjb21lcyB0byBtaW5kLiAgSWYgdGhhdCBmbGFnIGlzIHNldCwgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCB3aWxsIHVwZGF0ZSBga2lfcG9zYCB0byBgaV9zaXplYC4gIElmIGBwb3NgIGlzIGluaXRpYWxpemVkICpiZWZvcmUqIHRoYXQgY2FsbCwgaXQmIzM5O3MgaG9sZGluZyBvbnRvIHRoZSBvdXRkYXRlZCB2YWx1ZSBvZiB0aGUgZmlsZSBvZmZzZXQuICBUaGVuIHRoZSBmdW5jdGlvbiwgbGF0ZXIgb24sIGlzIGdvaW5nIHRvIHVzZSBgcG9zYCBpbiB0aGUgbGluZSBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgLiBJdCYjMzk7cyBnb2luZyB0byB1c2UgYHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZUYCwgYW5kIHNpbmNlIGBwb3NgIHdvdWxkIGhhdmUgdGhlIHdyb25nIHZhbHVlLCB0aGlzIGNvdWxkIGNhdXNlIHRoZSB3cm9uZyBwYWdlIHJhbmdlIHRvIGJlIGludmFsaWRhdGVkLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBvZmYtYnktb25lIG9yIG9mZi1ieS1zb21lIHR5cGUgb2YgbWVtb3J5IGJ1Zy4KClNvLCBieSBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uICphZnRlciogdGhlIGNoZWNrcywgdGhlIGNvZGUgaXMgZ3VhcmFudGVlZCB0byBncmFiIHRoZSBjb3JyZWN0LCB1cGRhdGVkIHZhbHVlIG9mIGBraV9wb3NgIHdoaWNoIGF2b2lkcyBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgdGhlIHdyb25nIHBhZ2UgcmFuZ2UgYW5kIGNvcnJ1cHRpbmcgdGhlIGZpbGUgc3lzdGVtLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4LCBub3QganVzdCBhIHN0eWxpc3RpYyBvbmUuIEl0JiMzOTtzIGFkZHJlc3NpbmcgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gb3IsIG1vcmUgcHJlY2lzZWx5LCBhIGxvZ2ljIGVycm9yIGluIGhvdyB0aGUgZGlyZWN0IEkvTyBwcm9jZXNzIGhhbmRsZXMgdXBkYXRlcyB0byB0aGUgZmlsZSBvZmZzZXQuIExvb2tzIGxpa2UgYSBzb2xpZCwgbmVjZXNzYXJ5IGNoYW5nZSB0byBtYWludGFpbiBkYXRhIGludGVncml0eSBpbiB0aGUgRlVTRSBmaWxlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXNlX2RpcmVjdF93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9maWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9maWxlLmM9MTc3Mz1zdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2Z1c2UvZmlsZS5jLTE3ODctXG5mcy9mdXNlL2ZpbGUuYzoxNzg4OnN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9mdXNlL2ZpbGUuYy0xNzg5LXtcbi0tXG5mcy9mdXNlL2ZpbGUuYz0xODQ3PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2Z1c2UvZmlsZS5jLTE4NjAtXHRpZiAoZmYtXHUwMDNlb3Blbl9mbGFncyBcdTAwMjYgRk9QRU5fRElSRUNUX0lPKVxuZnMvZnVzZS9maWxlLmM6MTg2MTpcdFx0cmV0dXJuIGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9mdXNlL2ZpbGUuYy0xODYyLVx0ZWxzZSBpZiAoZnVzZV9maWxlX3Bhc3N0aHJvdWdoKGZmKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIGNhbGxlZCBmcm9tIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBwYXJ0IG9mIEZVU0UmIzM5O3MgZGlyZWN0IEkvTyBpbXBsZW1lbnRhdGlvbi4gRGlyZWN0IEkvTyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgbG90cyBvZiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsIGFuZCBwb3RlbnRpYWwgZm9yIGVkZ2UgY2FzZXMuIENvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIEZVU0UsIGFueSB2dWxuZXJhYmlsaXRpZXMgaGVyZSBjb3VsZCBiZSBxdWl0ZSBzZXZlcmUuCgpNeSBmb2N1cyBoYXMgdG8gYmUgb24gZWl0aGVyIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBvciBpdHMgY2FsbGVyLCBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBpcyB0aGUgbW9yZSBmcnVpdGZ1bCBzdGFydGluZyBwb2ludCBmb3IgZ2VuZXJhdGluZyB0ZXN0IGNhc2VzLiBJIHN1c3BlY3QgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIG1pZ2h0IGJlIHRoZSBiZXR0ZXIgYmV0LCBnaXZlbiBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGRpcmVjdCB3cml0ZSBpdGVyYXRpb24uIE5vdywgSSBuZWVkIHRvIGdldCBteSBoYW5kcyBvbiB0aGUgRlVTRSBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSB2YXJpb3VzIG9wdGlvbnMgYW5kIGZsYWdzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgY3JhZnRpbmcgZWZmZWN0aXZlIGZ1enppbmcgaW5wdXRzLiBJIG5lZWQgdG8gc2VlIHdoYXQgY2FuIGJlIGNvbnRyb2xsZWQsIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mdXNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2Z1c2UvS2NvbmZpZz0zMj1jb25maWcgVklSVElPX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQyLVxuZnMvZnVzZS9LY29uZmlnOjQzOmNvbmZpZyBGVVNFX0RBWFxuZnMvZnVzZS9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtWaXJ0aW8gRmlsZXN5c3RlbSBEaXJlY3QgSG9zdCBNZW1vcnkgQWNjZXNzIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9mdXNlL0tjb25maWctNTYtXG5mcy9mdXNlL0tjb25maWc6NTc6Y29uZmlnIEZVU0VfUEFTU1RIUk9VR0hcbmZzL2Z1c2UvS2NvbmZpZy01OC1cdGJvb2wgXCYjMzQ7RlVTRSBwYXNzdGhyb3VnaCBvcGVyYXRpb25zIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9mdXNlL0tjb25maWctNjctXG5mcy9mdXNlL0tjb25maWc6Njg6Y29uZmlnIEZVU0VfSU9fVVJJTkdcbmZzL2Z1c2UvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7RlVTRSBjb21tdW5pY2F0aW9uIG92ZXIgaW8tdXJpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRlVTRSBGaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBGVVNFX0ZTYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gYWRoZXJlcyB0byBiZXN0IHByYWN0aWNlcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEZpcnN0LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBpcyBzdGF0aWMuIEFscmlnaHQsIGl0IGlzLiBOb3csIHRoZSBkb2N1bWVudGF0aW9uIGlzIHZlcnkgY2xlYXI6IFdlIHNob3VsZCBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBiZWNhdXNlIG9mIHRoZSB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4gU2luY2UgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIHN0YXRpYywgSSYjMzk7bSBnb2luZyB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXMgaXQgYXNzaWduZWQgdG8gYSBzdHJ1Y3QgbWVtYmVyLCBvciBpcyBpdCBjYWxsZWQgZnJvbSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24/IExldCYjMzk7cyBhbHNvIGNoZWNrIG9uIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAgc2luY2UgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgcHJvYmxlbWF0aWMgYXMgd2VsbCwgaWYgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIEkmIzM5O2xsIHZlcmlmeSBpZiB0aGF0JiMzOTtzIHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfZmlsZV93cml0ZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9maWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9maWxlLmM9MTgyNj1zdGF0aWMgc3NpemVfdCBmdXNlX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xODQ2LVxuZnMvZnVzZS9maWxlLmM6MTg0NzpzdGF0aWMgc3NpemVfdCBmdXNlX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmZzL2Z1c2UvZmlsZS5jLTE4NDgte1xuLS1cbmZzL2Z1c2UvZmlsZS5jPTMwNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnVzZV9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvZnVzZS9maWxlLmMtMzA3MC1cdC5yZWFkX2l0ZXJcdD0gZnVzZV9maWxlX3JlYWRfaXRlcixcbmZzL2Z1c2UvZmlsZS5jOjMwNzE6XHQud3JpdGVfaXRlclx0PSBmdXNlX2ZpbGVfd3JpdGVfaXRlcixcbmZzL2Z1c2UvZmlsZS5jLTMwNzItXHQubW1hcFx0XHQ9IGZ1c2VfZmlsZV9tbWFwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZVU0UgV3JpdGUgSXRlcmF0aW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdyaXRlcyBhcmUgaGFuZGxlZCBpbiB0aGUgRlVTRSBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGB3cml0ZV9pdGVyYCBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBgZnVzZV9maWxlX29wZXJhdGlvbnNgIHN0cnVjdC4gSSBzZWUgdGhhdCBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGAud3JpdGVfaXRlcmAuIE15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgaXNuJiMzOTt0IGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAgc3RhdGljPyYjMzQ7IEkmIzM5O20gaW1tZWRpYXRlbHkgd29uZGVyaW5nIGlmIHRoZXJlJiMzOTtzIGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZS4KClRoZW4gSSByZW1lbWJlciB0aGF0IGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgdG8gYSBzdHJ1Y3QsIHdoaWNoIG1lYW5zIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kIHdpbGwgaGF2ZSBpdHMgb3duIHN5bWJvbCBhZGRyZXNzLiBUaGF0IG1ha2VzIGl0IGFuIGVudHJ5IHBvaW50LiBUaGlzIGNvbnRyYWRpY3RzIHRoZSBpbnN0cnVjdGlvbiB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIGl0IGFuIEFQSSBlbnRyeXBvaW50IChWRlMgZW50cnlwb2ludCkKClNvLCBJIGhhdmUgYSBmZXcgb3B0aW9ucyBmb3Igd2hhdCB0byBsaXN0OiBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgLCBvciBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAuIExldCYjMzk7cyBzZWUuLi5JIHNob3VsZCBjaGVjayBpZiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgaXMgaW5saW5lZDsgaXQmIzM5O3MgcXVpdGUgYSBsYXJnZSBmdW5jdGlvbiBzbyBwcm9iYWJseSBub3QgaW5saW5lZC4gR29vZCwgb25lIHBvaW50IGZvciBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAuIEFuZCBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGlzICpkZWZpbml0ZWx5KiBub3QgaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4KCldhaXQuLi4gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIGFjdHVhbGx5IGNhbGxlZCAqZnJvbSogYGZ1c2VfZmlsZV93cml0ZV9pdGVyYC4gUmlnaHQsIGdvdCBpdC4gSXQgbWFrZXMgc2Vuc2UgdG8gbGlzdCBib3RoOiBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGFuZCBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAuCgpMZXQmIzM5O3MgYWxzbyB0YWtlIGEgbG9vayBhdCBgZnMvZnVzZS9maWxlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBJJiMzOTttIG1pc3NpbmcuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVzZV9kaXJlY3Rfd3JpdGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZmlsZS5jPTE3NzM9c3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3RfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xNzg3LVxuZnMvZnVzZS9maWxlLmM6MTc4ODpzdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvZnVzZS9maWxlLmMtMTc4OS17XG4tLVxuZnMvZnVzZS9maWxlLmM9MTg0Nz1zdGF0aWMgc3NpemVfdCBmdXNlX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xODYwLVx0aWYgKGZmLVx1MDAzZW9wZW5fZmxhZ3MgXHUwMDI2IEZPUEVOX0RJUkVDVF9JTylcbmZzL2Z1c2UvZmlsZS5jOjE4NjE6XHRcdHJldHVybiBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvZnVzZS9maWxlLmMtMTg2Mi1cdGVsc2UgaWYgKGZ1c2VfZmlsZV9wYXNzdGhyb3VnaChmZikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTkKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgRlVTRSBEaXJlY3QgSS9PIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgZ29pbmcgb24uIFRoZSBjb3JlIGlzc3VlIGlzIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYC4gU3BlY2lmaWNhbGx5LCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2l0aCBob3cgdGhlIGZpbGUgcG9zaXRpb24gKGBwb3NgKSBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AuIFRoZSBmaXggZW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IHZhbHVlIG9mIGBraV9wb3NgICh3aGljaCBjYW4gYmUgbW9kaWZpZWQgd2l0aGluIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AsIGVzcGVjaWFsbHkgd2l0aCBgT19BUFBFTkRgKSBpcyB1c2VkIHRvIHVwZGF0ZSBgcG9zYC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRoYXQgYHBvc2AgdmFsdWUgaXMgdGhlbiBwYXNzZWQgaW50byBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgLCBhbmQgdXNpbmcgdGhlIHdyb25nIHZhbHVlIGNvdWxkIGludmFsaWRhdGUgYW4gaW5jb3JyZWN0IHJhbmdlIG9mIHBhZ2VzLCB3aGljaCBpcyBhIHByZXR0eSBuYXN0eSBidWcuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBidWcgZml4LCBpbiBmYWN0LiBJdCYjMzk7cyBpbiB0aGUgY29yZSBGVVNFIGZpbGVzeXN0ZW0gbG9naWMuIEFuZCBpdCYjMzk7cyB1c2VyLXJlYWNoYWJsZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIHNvbWV0aGluZyB3ZSBzaG91bGQgdGVzdCB0aG9yb3VnaGx5LgoKSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgdGhvdWdoLiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgaXMgc3RhdGljLCB3aGljaCBpcyBmaW5lLCBidXQgSSYjMzk7bGwgYWxzbyBpbmNsdWRlIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAuIEV2ZW4gdGhvdWdoIGl0IGlzIGFsc28gc3RhdGljLCBpdCYjMzk7cyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgZnVzZV9maWxlX29wZXJhdGlvbnNgLiBUaGF0IHdpbGwgZ2l2ZSB1cyBhIHNsaWdodGx5IGJyb2FkZXIgdmlldyB3aGVuIGZ1enppbmcuCgpCYXNpY2FsbHksIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBjYW4gbW9kaWZ5IGBpb2NiLSZndDtraV9wb3NgLiBUaGUgb3JpZ2luYWwgYHBvc2Agd2FzIGluaXRpYWxpemVkICpiZWZvcmUqIHRoYXQgY2hlY2suIElmIGBraV9wb3NgIGNoYW5nZWQgKHRoaW5rIGBPX0FQUEVORGApLCB0aGVuIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCB3b3VsZCB1c2UgdGhlIG9sZCwgaW5jb3JyZWN0IGBwb3NgIHZhbHVlLiBUaGlzIHBhdGNoIGZpeGVzIHRoYXQsIGFuZCB0aGF0IGtpbmQgb2YgbG9naWMgZGVzZXJ2ZXMgY2FyZWZ1bCBmdXp6aW5nLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIHRoZSBzZXQtcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnVzZV9kaXJlY3Rfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtmdXNlX2ZpbGVfd3JpdGVfaXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBGVVNFIGRpcmVjdCBJL08gd2hlcmUgYHBvc2Agd2FzIGluaXRpYWxpemVkIGJlZm9yZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIElmIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBtb2RpZmllZCBgaW9jYi1cdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgT19BUFBFTkQpLCB0aGUgb2xkIGBwb3NgIHZhbHVlIHdhcyB1c2VkIGxhdGVyIGluIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCwgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIHRoZSB3cm9uZyBwYWdlIHJhbmdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgRlVTRSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVNFX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnVzZV9kaXJlY3Rfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtmdXNlX2ZpbGVfd3JpdGVfaXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBGVVNFIGRpcmVjdCBJL08gd2hlcmUgYHBvc2Agd2FzIGluaXRpYWxpemVkIGJlZm9yZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIElmIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBtb2RpZmllZCBgaW9jYi1cdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgT19BUFBFTkQpLCB0aGUgb2xkIGBwb3NgIHZhbHVlIHdhcyB1c2VkIGxhdGVyIGluIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCwgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIHRoZSB3cm9uZyBwYWdlIHJhbmdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgRlVTRSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCB3aGVyZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgYSB3cml0ZSAoYHBvc2ApIHdhcyBjYXB0dXJlZCBiZWZvcmUgY2FsbGluZyBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIFNpbmNlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBjYW4gdXBkYXRlIGBpb2NiLVx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBgT19BUFBFTkRgIHdyaXRlcyksIGNhcHR1cmluZyBpdCBiZWZvcmVoYW5kIHJlc3VsdGVkIGluIGFuIGluY29ycmVjdCBwb3NpdGlvbiBiZWluZyB1c2VkIGZvciBzdWJzZXF1ZW50IGNhY2hlIGludmFsaWRhdGlvbiAoYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYCkuIFRoZSBmaXggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwb3NgIHRvIGFmdGVyIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC5cblxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFkZHJlc3NlcyBhIGZpbGUgb2Zmc2V0IGxvZ2ljIGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggNDVlYmQxYjE1ODc0YS4uZDEyYTlmZGY3NzBlZiAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9maWxlLmMKQEAgLTE3ODksMTMgJiM0MzsxNzg5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0mZ3Q7aV9tYXBwaW5nOwotCWxvZmZfdCBwb3MgPSBpb2NiLSZndDtraV9wb3M7CiAJc3NpemVfdCByZXM7CiAJYm9vbCBleGNsdXNpdmU7CiAKIAlmdXNlX2Rpb19sb2NrKGlvY2IsIGZyb20sICZhbXA7ZXhjbHVzaXZlKTsKIAlyZXMgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTsKIAlpZiAocmVzICZndDsgMCkgewomIzQzOwkJbG9mZl90IHBvcyA9IGlvY2ItJmd0O2tpX3BvczsKJiM0MzsKIAkJdGFza19pb19hY2NvdW50X3dyaXRlKHJlcyk7CiAJCWlmICghaXNfc3luY19raW9jYihpb2NiKSkgewogCQkJcmVzID0gZnVzZV9kaXJlY3RfSU8oaW9jYiwgZnJvbSk7CkBAIC0xODEwLDcgJiM0MzsxODExLDcgQEAgc3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAkJCS8qCiAJCQkgKiBBcyBpbiBnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKCksIGludmFsaWRhdGUgYWZ0ZXIKIAkJCSAqIHdyaXRlLCB0byBpbnZhbGlkYXRlIHJlYWQtYWhlYWQgY2FjaGUgdGhhdCBtYXkgaGF2ZQotCQkJICogd2l0aCB0aGUgd3JpdGUuCiYjNDM7CQkJICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuCiAJCQkgKi8KIAkJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsCiAJCQkJcG9zICZndDsmZ3Q7IFBBR0VfU0hJRlQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnVzZSBEaXJlY3QgV3JpdGUgSXRlcmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGluIGBmcy9mdXNlL2ZpbGUuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgZm9jdXNlZCBjaGFuZ2UuIEl0JiMzOTtzIG1vdmluZyB0aGUgYHBvc2AgaW5pdGlhbGl6YXRpb24uIEkga25vdyB0aGF0IGZ1bmN0aW9uOyBpdCYjMzk7cyB0aGUgY29yZSBvZiBkaXJlY3QgSS9PIGluIHRoZSBGVVNFIGZpbGVzeXN0ZW0uCgpUaGUgY29yZSBvZiBteSB0aGlua2luZyByZXZvbHZlcyBhcm91bmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIHBhdGNoLiBUaGUga2V5IGlzIHdoZXJlIGBwb3NgIGlzIGluaXRpYWxpemVkIHJlbGF0aXZlIHRvIGBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKWAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSXTigJlzIHdoZXJlIHRoZSBjaGVja3MgaGFwcGVuLCBhbmQsIGNydWNpYWxseSwgaXQgY2FuIG1vZGlmeSBgaW9jYi0mZ3Q7a2lfcG9zYC4gSSYjMzk7bSBzdGFydGluZyB0byByZW1lbWJlciB0aGF0IGRldGFpbCwgdGhpbmtpbmcgYWJvdXQgaG93IGBpb2NiLSZndDtraV9wb3NgIGNvdWxkIGJlIHVwZGF0ZWQgYnkgdGhhdCBjYWxsLgoKSW5pdGlhbGx5LCBgcG9zYCB3YXMgYmVpbmcgYXNzaWduZWQgYmVmb3JlIHRoYXQgY2hlY2suIE5vdywgaXQmIzM5O3MgYmVpbmcgYXNzaWduZWQgKmFmdGVyKi4gVGhlIGltcGxpY2F0aW9ucyBhcmUgYmVjb21pbmcgY2xlYXJlcjogaWYgaXQmIzM5O3MgYmVmb3JlLCB5b3UmIzM5O3JlIGdyYWJiaW5nIHRoZSAqb2xkKiBwb3NpdGlvbi4gSWYgaXQmIzM5O3MgYWZ0ZXIsIHlvdSYjMzk7cmUgZ2V0dGluZyB0aGUgKm5ldyogcG9zaXRpb24g4oCTIHRoZSBvbmUgdGhhdCYjMzk7cyBiZWVuIHBvdGVudGlhbGx5IGFkanVzdGVkIGJ5IGBnZW5lcmljX3dyaXRlX2NoZWNrc2AsIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC4KClRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB0aG9zZSBjaGVja3MgaW4gYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgdGhleSBjaGFuZ2UgYGlvY2ItJmd0O2tpX3Bvc2AgaWYsIHNheSwgT19BUFBFTkQgaXMgc2V0LCBvciBzb21lIG90aGVyIGZpbGUgYWNjZXNzIGNvbnN0cmFpbnRzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4uIFRoYXQgaW5pdGlhbCB2YWx1ZSBtaWdodCBiZSBvdmVyd3JpdHRlbi4gTXkgY29uY2VybiBpcyB3aGV0aGVyIGl0JiMzOTtzIHRoZSBzdGFydCBwb3NpdGlvbiwgd2hpY2ggdGhlIHdyaXRlIGlzIHN1cHBvc2VkIHRvIGJlZ2luLCBvciBpZiB0aGVyZSBpcyBhIHNjZW5hcmlvIHdoZXJlIHRoZSB1cGRhdGVkIHN0YXJ0IHBvc2l0aW9uIGlzIG1vcmUgYXBwcm9wcmlhdGUuCgpUaGUgaW1wb3J0YW50IGxpbmUgaXMgd2hlcmUgYHBvc2AgaXMgdXNlZCBsYXRlciB3aXRoIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwgLi4uKWAgdG8gdGVsbCB0aGUga2VybmVsIHRvIGludmFsaWRhdGUgdGhlIHJlbGV2YW50IHBhZ2VzIGZvciB0aGUgd3JpdHRlbiBkYXRhLiBJbnZhbGlkYXRpb24gaGFwcGVucyB1c2luZyB0aGUgc3RhcnRpbmcgcG9zaXRpb24uIFRoZSBwYXRjaCBpcyBlbnN1cmluZyB0aGUgaW52YWxpZGF0aW9uIGhhcHBlbnMgZnJvbSB0aGUgY29ycmVjdCBvZmZzZXQuCgpTbyB0aGUgcGF0Y2ggaXMgYWRqdXN0aW5nIHRoZSBzdGFydCBwb3NpdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCBoYXMgdG8gYmUgdGhlIHVwZGF0ZWQgcG9zaXRpb24uIFNvIHRoZSBwYXRjaCBpcyBhY3R1YWxseSBmaXhpbmcgYSBzdWJ0bGUgYnVnIHdoZXJlIHRoZSB3cm9uZyBvZmZzZXQgd2FzIGJlaW5nIHVzZWQgZm9yIGludmFsaWRhdGlvbi4KCldhaXQuIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IElzIHRoZXJlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgYHBvc2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgaW9jYi0mZ3Q7a2lfcG9zYCByaWdodCBhZnRlciBgZ2VuZXJpY193cml0ZV9jaGVja3NgLCBzbyB3ZSYjMzk7cmUgc2FmZSB0aGVyZS4gTm8gcmlzayBvZiBsZWFraW5nIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2UuCgpJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4LCBlbnN1cmluZyB0aGUgY29ycmVjdCBwb3NpdGlvbiBpcyB1c2VkIHdpdGhpbiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgIGZ1bmN0aW9uIHdoZW4gcGVyZm9ybWluZyBkaXJlY3Qgd3JpdGVzIGluIGEgRlVTRSBmaWxlc3lzdGVtLCB3aGVyZSBPX0FQUEVORCBvciBzb21ldGhpbmcgc2ltaWxhciBoYXMgYmVlbiBhcHBsaWVkLiBMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBjb2RlIHBhdGguLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVzZV9kaXJlY3Rfd3JpdGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZmlsZS5jPTE3NzM9c3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3RfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xNzg3LVxuZnMvZnVzZS9maWxlLmM6MTc4ODpzdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvZnVzZS9maWxlLmMtMTc4OS17XG4tLVxuZnMvZnVzZS9maWxlLmM9MTg0Nz1zdGF0aWMgc3NpemVfdCBmdXNlX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xODYwLVx0aWYgKGZmLVx1MDAzZW9wZW5fZmxhZ3MgXHUwMDI2IEZPUEVOX0RJUkVDVF9JTylcbmZzL2Z1c2UvZmlsZS5jOjE4NjE6XHRcdHJldHVybiBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvZnVzZS9maWxlLmMtMTg2Mi1cdGVsc2UgaWYgKGZ1c2VfZmlsZV9wYXNzdGhyb3VnaChmZikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODMKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FjaGUgSW52YWxpZGF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nOiB0aGVyZSYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbG9naWMgZmxhdyBpbiB0aGUgd2F5IGBwb3NgIGlzIGJlaW5nIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgaW5pdGlhbGl6ZXMgYHBvc2AgYmVmb3JlIGEgY2FsbCB0byBgZ2VuZXJpY193cml0ZV9jaGVja3NgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGBnZW5lcmljX3dyaXRlX2NoZWNrc2AgY2FuIGFjdHVhbGx5ICp1cGRhdGUqIHRoZSB2YWx1ZSBvZiBgaW9jYi0mZ3Q7a2lfcG9zYCwgcGFydGljdWxhcmx5IGluIHNjZW5hcmlvcyBsaWtlIHdoZW4gYE9fQVBQRU5EYCBpcyB1c2VkLgoKQnkgaW5pdGlhbGl6aW5nIGBwb3NgICphZnRlciogYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgd2UmIzM5O3JlIGd1YXJhbnRlZWluZyB0aGF0IGBwb3NgIGlzIHNldCB0byB0aGUgKmNvcnJlY3QqIHN0YXJ0aW5nIHBvc2l0aW9uLCB0aGUgb25lIHRoYXQmIzM5O3MgYmVlbiBwcm9wZXJseSBhZGp1c3RlZCBmb3IgdGhlIHdyaXRlIG9wZXJhdGlvbi4gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiB3ZSBnZXQgdG8gdGhlIGNhY2hlIGludmFsaWRhdGlvbiBzdGVwLCB3ZSYjMzk7cmUgdXNpbmcgdGhlIHJpZ2h0IG9mZnNldC4KClRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHJpc2tpbmcgYW55IGluZm9ybWF0aW9uIGxlYWtzLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IHNob3VsZCB0cmlnZ2VyIEtNU0FOIGNvbmNlcm5zLiBJdCYjMzk7cyBzdHJpY3RseSBhIG1hdHRlciBvZiBnZXR0aW5nIHRoZSBsb2dpYyBmbG93IHJpZ2h0LCB3aGljaCBpcyBnb29kLgoKR2l2ZW4gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEkmIzM5O2xsIGluY2x1ZGUgdGhpcyByZWFzb25pbmcgaW4gbXkgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCB3aGVyZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgYSB3cml0ZSAoYHBvc2ApIHdhcyBjYXB0dXJlZCBiZWZvcmUgY2FsbGluZyBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIFNpbmNlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBjYW4gdXBkYXRlIGBpb2NiLVx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBgT19BUFBFTkRgIHdyaXRlcyksIGNhcHR1cmluZyBpdCBiZWZvcmVoYW5kIHJlc3VsdGVkIGluIGFuIGluY29ycmVjdCBwb3NpdGlvbiBiZWluZyB1c2VkIGZvciBzdWJzZXF1ZW50IGNhY2hlIGludmFsaWRhdGlvbiAoYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYCkuIFRoZSBmaXggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwb3NgIHRvIGFmdGVyIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC5cblxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFkZHJlc3NlcyBhIGZpbGUgb2Zmc2V0IGxvZ2ljIGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgd2hlcmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGEgd3JpdGUgKGBwb3NgKSB3YXMgY2FwdHVyZWQgYmVmb3JlIGNhbGxpbmcgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBTaW5jZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgY2FuIHVwZGF0ZSBgaW9jYi1cdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgYE9fQVBQRU5EYCB3cml0ZXMpLCBjYXB0dXJpbmcgaXQgYmVmb3JlaGFuZCByZXN1bHRlZCBpbiBhbiBpbmNvcnJlY3QgcG9zaXRpb24gYmVpbmcgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWNoZSBpbnZhbGlkYXRpb24gKGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWApLiBUaGUgZml4IG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgcG9zYCB0byBhZnRlciBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZGRyZXNzZXMgYSBmaWxlIG9mZnNldCBsb2dpYyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MTowNy42NzIyNjk0ODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg3OTIyMDgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVNFX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnVzZV9kaXJlY3Rfd3JpdGVfaXRlclwiLFxuICAgIFwiZnVzZV9maWxlX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCB3aGVyZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgYSB3cml0ZSAoYHBvc2ApIHdhcyBjYXB0dXJlZCBiZWZvcmUgY2FsbGluZyBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuIFNpbmNlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYCBjYW4gdXBkYXRlIGBpb2NiLVxcdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgYE9fQVBQRU5EYCB3cml0ZXMpLCBjYXB0dXJpbmcgaXQgYmVmb3JlaGFuZCByZXN1bHRlZCBpbiBhbiBpbmNvcnJlY3QgcG9zaXRpb24gYmVpbmcgdXNlZCBmb3Igc3Vic2VxdWVudCBjYWNoZSBpbnZhbGlkYXRpb24gKGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWApLiBUaGUgZml4IG1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgcG9zYCB0byBhZnRlciBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAuXFxuXFxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFkZHJlc3NlcyBhIGZpbGUgb2Zmc2V0IGxvZ2ljIGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gRlVTRSBkaXJlY3QgSS9PIHdoZXJlIGBwb3NgIHdhcyBpbml0aWFsaXplZCBiZWZvcmUgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBJZiBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgbW9kaWZpZWQgYGlvY2ItXFx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBPX0FQUEVORCksIHRoZSBvbGQgYHBvc2AgdmFsdWUgd2FzIHVzZWQgbGF0ZXIgaW4gYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKClgLCBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgdGhlIHdyb25nIHBhZ2UgcmFuZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBGVVNFIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjA3LjY3MjI3NzQyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5OTUwMDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzg3NThiYmFiY2ZmMzRmZjYyYzQ5MmVmNzE5OTZmMGUxNjhlOTUxZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jXFxuaW5kZXggNDVlYmQxYjE1ODc0YS4uZDEyYTlmZGY3NzBlZiAxMDA2NDRcXG4tLS0gYS9mcy9mdXNlL2ZpbGUuY1xcbisrKyBiL2ZzL2Z1c2UvZmlsZS5jXFxuQEAgLTE3ODksMTMgKzE3ODksMTQgQEAgc3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbi1cXHRsb2ZmX3QgcG9zID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcbiBcXHRzc2l6ZV90IHJlcztcXG4gXFx0Ym9vbCBleGNsdXNpdmU7XFxuIFxcbiBcXHRmdXNlX2Rpb19sb2NrKGlvY2IsIGZyb20sIFxcdTAwMjZleGNsdXNpdmUpO1xcbiBcXHRyZXMgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcXG4gXFx0aWYgKHJlcyBcXHUwMDNlIDApIHtcXG4rXFx0XFx0bG9mZl90IHBvcyA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4rXFxuIFxcdFxcdHRhc2tfaW9fYWNjb3VudF93cml0ZShyZXMpO1xcbiBcXHRcXHRpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpIHtcXG4gXFx0XFx0XFx0cmVzID0gZnVzZV9kaXJlY3RfSU8oaW9jYiwgZnJvbSk7XFxuQEAgLTE4MTAsNyArMTgxMSw3IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIEFzIGluIGdlbmVyaWNfZmlsZV9kaXJlY3Rfd3JpdGUoKSwgaW52YWxpZGF0ZSBhZnRlclxcbiBcXHRcXHRcXHQgKiB3cml0ZSwgdG8gaW52YWxpZGF0ZSByZWFkLWFoZWFkIGNhY2hlIHRoYXQgbWF5IGhhdmVcXG4tXFx0XFx0XFx0ICogd2l0aCB0aGUgd3JpdGUuXFxuK1xcdFxcdFxcdCAqIGNvbXBldGVkIHdpdGggdGhlIHdyaXRlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZyxcXG4gXFx0XFx0XFx0XFx0cG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjA4LjE2MzAyMzQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzI5NDQxMDkyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVTRV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJcIixcbiAgICBcImZ1c2VfZmlsZV93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gRlVTRSBkaXJlY3QgSS9PIHdoZXJlIGBwb3NgIHdhcyBpbml0aWFsaXplZCBiZWZvcmUgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBJZiBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgbW9kaWZpZWQgYGlvY2ItXFx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBPX0FQUEVORCksIHRoZSBvbGQgYHBvc2AgdmFsdWUgd2FzIHVzZWQgbGF0ZXIgaW4gYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKClgLCBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgdGhlIHdyb25nIHBhZ2UgcmFuZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBGVVNFIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmNcbmluZGV4IDQ1ZWJkMWIxNTg3NGEuLmQxMmE5ZmRmNzcwZWYgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2ZpbGUuY1xuKysrIGIvZnMvZnVzZS9maWxlLmNcbkBAIC0xNzg5LDEzICsxNzg5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXHUwMDNlaV9tYXBwaW5nO1xuLVx0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuIFx0c3NpemVfdCByZXM7XG4gXHRib29sIGV4Y2x1c2l2ZTtcbiBcbiBcdGZ1c2VfZGlvX2xvY2soaW9jYiwgZnJvbSwgXHUwMDI2ZXhjbHVzaXZlKTtcbiBcdHJlcyA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuIFx0aWYgKHJlcyBcdTAwM2UgMCkge1xuK1x0XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXG4gXHRcdHRhc2tfaW9fYWNjb3VudF93cml0ZShyZXMpO1xuIFx0XHRpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpIHtcbiBcdFx0XHRyZXMgPSBmdXNlX2RpcmVjdF9JTyhpb2NiLCBmcm9tKTtcbkBAIC0xODEwLDcgKzE4MTEsNyBAQCBzdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHRcdC8qXG4gXHRcdFx0ICogQXMgaW4gZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZSgpLCBpbnZhbGlkYXRlIGFmdGVyXG4gXHRcdFx0ICogd3JpdGUsIHRvIGludmFsaWRhdGUgcmVhZC1haGVhZCBjYWNoZSB0aGF0IG1heSBoYXZlXG4tXHRcdFx0ICogd2l0aCB0aGUgd3JpdGUuXG4rXHRcdFx0ICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZyxcbiBcdFx0XHRcdHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjA4LjE2MzAyNTQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkzODMxODQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGVVNFIERpcmVjdCBXcml0ZSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvZnVzZS9maWxlLmNgIHNwZWNpZmljYWxseSB0aGUgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7YC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgbW92aW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gKmluc2lkZSogdGhlIGBpZiAocmVzIFx1MDAzZSAwKWAgYmxvY2suIExldCBtZSBwdWxsIHVwIHRoZSBkaWZmIHJlYWwgcXVpY2suLi4gWXVwLCB0aGVyZSBpdCBpcy4gVGhlIG9yaWdpbmFsIGNvZGUgaW5pdGlhbGl6ZWQgYHBvc2AgYmVmb3JlIGNhbGxpbmcgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgYnV0IG5vdyBpdCdzIGluaXRpYWxpemVkIGFmdGVyLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2h5PyAgV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgc2VlbWluZ2x5IG1pbm9yIGNvZGUgbW92ZW1lbnQ/ICBBaCwgSSBzZWUgaXQuIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AgY2FuIG1vZGlmeSB0aGUgYGlvY2ItXHUwMDNla2lfcG9zYC4gU3BlY2lmaWNhbGx5LCB0aGUgT19BUFBFTkQgZmxhZyBjb21lcyB0byBtaW5kLiAgSWYgdGhhdCBmbGFnIGlzIHNldCwgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCB3aWxsIHVwZGF0ZSBga2lfcG9zYCB0byBgaV9zaXplYC4gIElmIGBwb3NgIGlzIGluaXRpYWxpemVkICpiZWZvcmUqIHRoYXQgY2FsbCwgaXQncyBob2xkaW5nIG9udG8gdGhlIG91dGRhdGVkIHZhbHVlIG9mIHRoZSBmaWxlIG9mZnNldC4gIFRoZW4gdGhlIGZ1bmN0aW9uLCBsYXRlciBvbiwgaXMgZ29pbmcgdG8gdXNlIGBwb3NgIGluIHRoZSBsaW5lIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAuIEl0J3MgZ29pbmcgdG8gdXNlIGBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlRgLCBhbmQgc2luY2UgYHBvc2Agd291bGQgaGF2ZSB0aGUgd3JvbmcgdmFsdWUsIHRoaXMgY291bGQgY2F1c2UgdGhlIHdyb25nIHBhZ2UgcmFuZ2UgdG8gYmUgaW52YWxpZGF0ZWQuIFRoYXQncyBhIGNsYXNzaWMgb2ZmLWJ5LW9uZSBvciBvZmYtYnktc29tZSB0eXBlIG9mIG1lbW9yeSBidWcuXG5cblNvLCBieSBtb3ZpbmcgdGhlIGluaXRpYWxpemF0aW9uICphZnRlciogdGhlIGNoZWNrcywgdGhlIGNvZGUgaXMgZ3VhcmFudGVlZCB0byBncmFiIHRoZSBjb3JyZWN0LCB1cGRhdGVkIHZhbHVlIG9mIGBraV9wb3NgIHdoaWNoIGF2b2lkcyBwb3RlbnRpYWxseSBpbnZhbGlkYXRpbmcgdGhlIHdyb25nIHBhZ2UgcmFuZ2UgYW5kIGNvcnJ1cHRpbmcgdGhlIGZpbGUgc3lzdGVtLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgsIG5vdCBqdXN0IGEgc3R5bGlzdGljIG9uZS4gSXQncyBhZGRyZXNzaW5nIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIG9yLCBtb3JlIHByZWNpc2VseSwgYSBsb2dpYyBlcnJvciBpbiBob3cgdGhlIGRpcmVjdCBJL08gcHJvY2VzcyBoYW5kbGVzIHVwZGF0ZXMgdG8gdGhlIGZpbGUgb2Zmc2V0LiBMb29rcyBsaWtlIGEgc29saWQsIG5lY2Vzc2FyeSBjaGFuZ2UgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgaW4gdGhlIEZVU0UgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MToxNi4xMDEzNDYyNTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzOTQwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVzZV9kaXJlY3Rfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL2ZpbGUuYz0xNzczPXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xNzg3LVxcbmZzL2Z1c2UvZmlsZS5jOjE3ODg6c3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9mdXNlL2ZpbGUuYy0xNzg5LXtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTE4NDc9c3RhdGljIHNzaXplX3QgZnVzZV9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xODYwLVxcdGlmIChmZi1cXHUwMDNlb3Blbl9mbGFncyBcXHUwMDI2IEZPUEVOX0RJUkVDVF9JTylcXG5mcy9mdXNlL2ZpbGUuYzoxODYxOlxcdFxcdHJldHVybiBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL2Z1c2UvZmlsZS5jLTE4NjItXFx0ZWxzZSBpZiAoZnVzZV9maWxlX3Bhc3N0aHJvdWdoKGZmKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6MTYuMTU5NzQ0NTE3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMzg5MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBpcyBjYWxsZWQgZnJvbSBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcGFydCBvZiBGVVNFJ3MgZGlyZWN0IEkvTyBpbXBsZW1lbnRhdGlvbi4gRGlyZWN0IEkvTyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgbG90cyBvZiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsIGFuZCBwb3RlbnRpYWwgZm9yIGVkZ2UgY2FzZXMuIENvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIEZVU0UsIGFueSB2dWxuZXJhYmlsaXRpZXMgaGVyZSBjb3VsZCBiZSBxdWl0ZSBzZXZlcmUuXG5cbk15IGZvY3VzIGhhcyB0byBiZSBvbiBlaXRoZXIgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIG9yIGl0cyBjYWxsZXIsIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIHRoZSBtb3JlIGZydWl0ZnVsIHN0YXJ0aW5nIHBvaW50IGZvciBnZW5lcmF0aW5nIHRlc3QgY2FzZXMuIEkgc3VzcGVjdCBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgbWlnaHQgYmUgdGhlIGJldHRlciBiZXQsIGdpdmVuIGl0J3MgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBkaXJlY3Qgd3JpdGUgaXRlcmF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24gdGhlIEZVU0UgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgdmFyaW91cyBvcHRpb25zIGFuZCBmbGFncyB3aWxsIGJlIGNydWNpYWwgZm9yIGNyYWZ0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIGlucHV0cy4gSSBuZWVkIHRvIHNlZSB3aGF0IGNhbiBiZSBjb250cm9sbGVkLCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6MjAuNDkzNjM5MTUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzUwMTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Z1c2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZz0zMj1jb25maWcgVklSVElPX0ZTXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNDItXFxuZnMvZnVzZS9LY29uZmlnOjQzOmNvbmZpZyBGVVNFX0RBWFxcbmZzL2Z1c2UvS2NvbmZpZy00NC1cXHRib29sIFxcXCJWaXJ0aW8gRmlsZXN5c3RlbSBEaXJlY3QgSG9zdCBNZW1vcnkgQWNjZXNzIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNTYtXFxuZnMvZnVzZS9LY29uZmlnOjU3OmNvbmZpZyBGVVNFX1BBU1NUSFJPVUdIXFxuZnMvZnVzZS9LY29uZmlnLTU4LVxcdGJvb2wgXFxcIkZVU0UgcGFzc3Rocm91Z2ggb3BlcmF0aW9ucyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZnVzZS9LY29uZmlnLTY3LVxcbmZzL2Z1c2UvS2NvbmZpZzo2ODpjb25maWcgRlVTRV9JT19VUklOR1xcbmZzL2Z1c2UvS2NvbmZpZy02OS1cXHRib29sIFxcXCJGVVNFIGNvbW11bmljYXRpb24gb3ZlciBpby11cmluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6MjAuNTQ3Mzk1NjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIyNDU4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRlVTRSBGaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSdtIHdvcmtpbmcgd2l0aCBpcyBgRlVTRV9GU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGFkaGVyZXMgdG8gYmVzdCBwcmFjdGljZXMsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBGaXJzdCwgbGV0J3MgdmVyaWZ5IGlmIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBpcyBzdGF0aWMuIEFscmlnaHQsIGl0IGlzLiBOb3csIHRoZSBkb2N1bWVudGF0aW9uIGlzIHZlcnkgY2xlYXI6IFdlIHNob3VsZCBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBiZWNhdXNlIG9mIHRoZSB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4gU2luY2UgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIHN0YXRpYywgSSdtIGdvaW5nIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIElzIGl0IGFzc2lnbmVkIHRvIGEgc3RydWN0IG1lbWJlciwgb3IgaXMgaXQgY2FsbGVkIGZyb20gYSBub24tc3RhdGljIGZ1bmN0aW9uPyBMZXQncyBhbHNvIGNoZWNrIG9uIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAgc2luY2UgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgcHJvYmxlbWF0aWMgYXMgd2VsbCwgaWYgaXQncyBhbHNvIHN0YXRpYy4gSSdsbCB2ZXJpZnkgaWYgdGhhdCdzIHRoZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjI0LjQ2OTg1ODI2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE2MTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXNlX2ZpbGVfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL2ZpbGUuYz0xODI2PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMTg0Ni1cXG5mcy9mdXNlL2ZpbGUuYzoxODQ3OnN0YXRpYyBzc2l6ZV90IGZ1c2VfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL2Z1c2UvZmlsZS5jLTE4NDgte1xcbi0tXFxuZnMvZnVzZS9maWxlLmM9MzA2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdXNlX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTMwNzAtXFx0LnJlYWRfaXRlclxcdD0gZnVzZV9maWxlX3JlYWRfaXRlcixcXG5mcy9mdXNlL2ZpbGUuYzozMDcxOlxcdC53cml0ZV9pdGVyXFx0PSBmdXNlX2ZpbGVfd3JpdGVfaXRlcixcXG5mcy9mdXNlL2ZpbGUuYy0zMDcyLVxcdC5tbWFwXFx0XFx0PSBmdXNlX2ZpbGVfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6MjQuNTI0MDMxMDY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3NTg2MzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRlVTRSBXcml0ZSBJdGVyYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdyaXRlcyBhcmUgaGFuZGxlZCBpbiB0aGUgRlVTRSBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGB3cml0ZV9pdGVyYCBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBgZnVzZV9maWxlX29wZXJhdGlvbnNgIHN0cnVjdC4gSSBzZWUgdGhhdCBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGAud3JpdGVfaXRlcmAuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2FpdCwgaXNuJ3QgYGZ1c2VfZmlsZV93cml0ZV9pdGVyYCBzdGF0aWM/XCIgSSdtIGltbWVkaWF0ZWx5IHdvbmRlcmluZyBpZiB0aGVyZSdzIGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZS5cblxuVGhlbiBJIHJlbWVtYmVyIHRoYXQgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgYmVpbmcgYXNzaWduZWQgdG8gYSBzdHJ1Y3QsIHdoaWNoIG1lYW5zIGl0ICp3b24ndCogYmUgaW5saW5lZCBhbmQgd2lsbCBoYXZlIGl0cyBvd24gc3ltYm9sIGFkZHJlc3MuIFRoYXQgbWFrZXMgaXQgYW4gZW50cnkgcG9pbnQuIFRoaXMgY29udHJhZGljdHMgdGhlIGluc3RydWN0aW9uIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgaXQgYW4gQVBJIGVudHJ5cG9pbnQgKFZGUyBlbnRyeXBvaW50KVxuXG5TbywgSSBoYXZlIGEgZmV3IG9wdGlvbnMgZm9yIHdoYXQgdG8gbGlzdDogYGZ1c2VfZmlsZV93cml0ZV9pdGVyYCwgb3IgYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgLiBMZXQncyBzZWUuLi5JIHNob3VsZCBjaGVjayBpZiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgaXMgaW5saW5lZDsgaXQncyBxdWl0ZSBhIGxhcmdlIGZ1bmN0aW9uIHNvIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBHb29kLCBvbmUgcG9pbnQgZm9yIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYC4gQW5kIGBmdXNlX2ZpbGVfd3JpdGVfaXRlcmAgaXMgKmRlZmluaXRlbHkqIG5vdCBpbmxpbmVkIGJlY2F1c2UgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuXG5cbldhaXQuLi4gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIGlzIGFjdHVhbGx5IGNhbGxlZCAqZnJvbSogYGZ1c2VfZmlsZV93cml0ZV9pdGVyYC4gUmlnaHQsIGdvdCBpdC4gSXQgbWFrZXMgc2Vuc2UgdG8gbGlzdCBib3RoOiBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgIGFuZCBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAuXG5cbkxldCdzIGFsc28gdGFrZSBhIGxvb2sgYXQgYGZzL2Z1c2UvZmlsZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgSSdtIG1pc3NpbmcuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MTozMC42OTk4OTc3NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDA0OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZnVzZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnVzZS9maWxlLmM9MTc3Mz1zdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMTc4Ny1cXG5mcy9mdXNlL2ZpbGUuYzoxNzg4OnN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZnMvZnVzZS9maWxlLmMtMTc4OS17XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYz0xODQ3PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMTg2MC1cXHRpZiAoZmYtXFx1MDAzZW9wZW5fZmxhZ3MgXFx1MDAyNiBGT1BFTl9ESVJFQ1RfSU8pXFxuZnMvZnVzZS9maWxlLmM6MTg2MTpcXHRcXHRyZXR1cm4gZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcXG5mcy9mdXNlL2ZpbGUuYy0xODYyLVxcdGVsc2UgaWYgKGZ1c2VfZmlsZV9wYXNzdGhyb3VnaChmZikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjMwLjc1MjkwODkwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI3MjUxMzM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIEZVU0UgRGlyZWN0IEkvTyBCdWcgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyB3aGF0J3MgZ29pbmcgb24uIFRoZSBjb3JlIGlzc3VlIGlzIGluIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYC4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGhvdyB0aGUgZmlsZSBwb3NpdGlvbiAoYHBvc2ApIGlzIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gYGdlbmVyaWNfd3JpdGVfY2hlY2tzYC4gVGhlIGZpeCBlbnN1cmVzIHRoYXQgdGhlIGNvcnJlY3QgdmFsdWUgb2YgYGtpX3Bvc2AgKHdoaWNoIGNhbiBiZSBtb2RpZmllZCB3aXRoaW4gYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgZXNwZWNpYWxseSB3aXRoIGBPX0FQUEVORGApIGlzIHVzZWQgdG8gdXBkYXRlIGBwb3NgLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhhdCBgcG9zYCB2YWx1ZSBpcyB0aGVuIHBhc3NlZCBpbnRvIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAsIGFuZCB1c2luZyB0aGUgd3JvbmcgdmFsdWUgY291bGQgaW52YWxpZGF0ZSBhbiBpbmNvcnJlY3QgcmFuZ2Ugb2YgcGFnZXMsIHdoaWNoIGlzIGEgcHJldHR5IG5hc3R5IGJ1Zy5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgYnVnIGZpeCwgaW4gZmFjdC4gSXQncyBpbiB0aGUgY29yZSBGVVNFIGZpbGVzeXN0ZW0gbG9naWMuIEFuZCBpdCdzIHVzZXItcmVhY2hhYmxlLCB3aGljaCBtZWFucyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIHNvbWV0aGluZyB3ZSBzaG91bGQgdGVzdCB0aG9yb3VnaGx5LlxuXG5JIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyB0aG91Z2guIGBmdXNlX2RpcmVjdF93cml0ZV9pdGVyYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGZpbmUsIGJ1dCBJJ2xsIGFsc28gaW5jbHVkZSBgZnVzZV9maWxlX3dyaXRlX2l0ZXJgLiBFdmVuIHRob3VnaCBpdCBpcyBhbHNvIHN0YXRpYywgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgZnVzZV9maWxlX29wZXJhdGlvbnNgLiBUaGF0IHdpbGwgZ2l2ZSB1cyBhIHNsaWdodGx5IGJyb2FkZXIgdmlldyB3aGVuIGZ1enppbmcuXG5cbkJhc2ljYWxseSwgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIGNhbiBtb2RpZnkgYGlvY2ItXHUwMDNla2lfcG9zYC4gVGhlIG9yaWdpbmFsIGBwb3NgIHdhcyBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGF0IGNoZWNrLiBJZiBga2lfcG9zYCBjaGFuZ2VkICh0aGluayBgT19BUFBFTkRgKSwgdGhlbiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoKWAgd291bGQgdXNlIHRoZSBvbGQsIGluY29ycmVjdCBgcG9zYCB2YWx1ZS4gVGhpcyBwYXRjaCBmaXhlcyB0aGF0LCBhbmQgdGhhdCBraW5kIG9mIGxvZ2ljIGRlc2VydmVzIGNhcmVmdWwgZnV6emluZy5cblxuSSdtIHJlYWR5IHRvIGNhbGwgdGhlIHNldC1yZXN1bHRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5OSwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6NDEuMDI1NDI1MjA1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3MDQxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXNlX2RpcmVjdF93cml0ZV9pdGVyXCIsXG4gICAgXCJmdXNlX2ZpbGVfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEZVU0UgZGlyZWN0IEkvTyB3aGVyZSBgcG9zYCB3YXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC4gSWYgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIG1vZGlmaWVkIGBpb2NiLVxcdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgT19BUFBFTkQpLCB0aGUgb2xkIGBwb3NgIHZhbHVlIHdhcyB1c2VkIGxhdGVyIGluIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCwgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIHRoZSB3cm9uZyBwYWdlIHJhbmdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgRlVTRSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVU0VfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXNlX2RpcmVjdF93cml0ZV9pdGVyXCIsXG4gICAgXCJmdXNlX2ZpbGVfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEZVU0UgZGlyZWN0IEkvTyB3aGVyZSBgcG9zYCB3YXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC4gSWYgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIG1vZGlmaWVkIGBpb2NiLVxcdTAwM2VraV9wb3NgIChlLmcuLCBmb3IgT19BUFBFTkQpLCB0aGUgb2xkIGBwb3NgIHZhbHVlIHdhcyB1c2VkIGxhdGVyIGluIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSgpYCwgcG90ZW50aWFsbHkgaW52YWxpZGF0aW5nIHRoZSB3cm9uZyBwYWdlIHJhbmdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgRlVTRSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MTo0MS4xMDcxMzczMDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDQ0MzQzMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6NDEuMTA3NzI1MjMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NDQzNzUwNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgd2hlcmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGEgd3JpdGUgKGBwb3NgKSB3YXMgY2FwdHVyZWQgYmVmb3JlIGNhbGxpbmcgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBTaW5jZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgY2FuIHVwZGF0ZSBgaW9jYi1cXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIGBPX0FQUEVORGAgd3JpdGVzKSwgY2FwdHVyaW5nIGl0IGJlZm9yZWhhbmQgcmVzdWx0ZWQgaW4gYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGJlaW5nIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FjaGUgaW52YWxpZGF0aW9uIChgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgKS4gVGhlIGZpeCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvc2AgdG8gYWZ0ZXIgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZGRyZXNzZXMgYSBmaWxlIG9mZnNldCBsb2dpYyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4NzU4YmJhYmNmZjM0ZmY2MmM0OTJlZjcxOTk2ZjBlMTY4ZTk1MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTo1MTowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmNcbmluZGV4IDQ1ZWJkMWIxNTg3NGEuLmQxMmE5ZmRmNzcwZWYgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2ZpbGUuY1xuKysrIGIvZnMvZnVzZS9maWxlLmNcbkBAIC0xNzg5LDEzICsxNzg5LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtXHUwMDNlaV9tYXBwaW5nO1xuLVx0bG9mZl90IHBvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuIFx0c3NpemVfdCByZXM7XG4gXHRib29sIGV4Y2x1c2l2ZTtcbiBcbiBcdGZ1c2VfZGlvX2xvY2soaW9jYiwgZnJvbSwgXHUwMDI2ZXhjbHVzaXZlKTtcbiBcdHJlcyA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuIFx0aWYgKHJlcyBcdTAwM2UgMCkge1xuK1x0XHRsb2ZmX3QgcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4rXG4gXHRcdHRhc2tfaW9fYWNjb3VudF93cml0ZShyZXMpO1xuIFx0XHRpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpIHtcbiBcdFx0XHRyZXMgPSBmdXNlX2RpcmVjdF9JTyhpb2NiLCBmcm9tKTtcbkBAIC0xODEwLDcgKzE4MTEsNyBAQCBzdGF0aWMgc3NpemVfdCBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHRcdC8qXG4gXHRcdFx0ICogQXMgaW4gZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZSgpLCBpbnZhbGlkYXRlIGFmdGVyXG4gXHRcdFx0ICogd3JpdGUsIHRvIGludmFsaWRhdGUgcmVhZC1haGVhZCBjYWNoZSB0aGF0IG1heSBoYXZlXG4tXHRcdFx0ICogd2l0aCB0aGUgd3JpdGUuXG4rXHRcdFx0ICogY29tcGV0ZWQgd2l0aCB0aGUgd3JpdGUuXG4gXHRcdFx0ICovXG4gXHRcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZyxcbiBcdFx0XHRcdHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjQxLjEwNzczMzczM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTM4OTYxODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnVzZSBEaXJlY3QgV3JpdGUgSXRlcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgaW4gYGZzL2Z1c2UvZmlsZS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IGl0J3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgY2hhbmdlLiBJdCdzIG1vdmluZyB0aGUgYHBvc2AgaW5pdGlhbGl6YXRpb24uIEkga25vdyB0aGF0IGZ1bmN0aW9uOyBpdCdzIHRoZSBjb3JlIG9mIGRpcmVjdCBJL08gaW4gdGhlIEZVU0UgZmlsZXN5c3RlbS5cblxuVGhlIGNvcmUgb2YgbXkgdGhpbmtpbmcgcmV2b2x2ZXMgYXJvdW5kIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIHBhdGNoLiBUaGUga2V5IGlzIHdoZXJlIGBwb3NgIGlzIGluaXRpYWxpemVkIHJlbGF0aXZlIHRvIGBnZW5lcmljX3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKWAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbC4gSXTigJlzIHdoZXJlIHRoZSBjaGVja3MgaGFwcGVuLCBhbmQsIGNydWNpYWxseSwgaXQgY2FuIG1vZGlmeSBgaW9jYi1cdTAwM2VraV9wb3NgLiBJJ20gc3RhcnRpbmcgdG8gcmVtZW1iZXIgdGhhdCBkZXRhaWwsIHRoaW5raW5nIGFib3V0IGhvdyBgaW9jYi1cdTAwM2VraV9wb3NgIGNvdWxkIGJlIHVwZGF0ZWQgYnkgdGhhdCBjYWxsLlxuXG5Jbml0aWFsbHksIGBwb3NgIHdhcyBiZWluZyBhc3NpZ25lZCBiZWZvcmUgdGhhdCBjaGVjay4gTm93LCBpdCdzIGJlaW5nIGFzc2lnbmVkICphZnRlciouIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGJlY29taW5nIGNsZWFyZXI6IGlmIGl0J3MgYmVmb3JlLCB5b3UncmUgZ3JhYmJpbmcgdGhlICpvbGQqIHBvc2l0aW9uLiBJZiBpdCdzIGFmdGVyLCB5b3UncmUgZ2V0dGluZyB0aGUgKm5ldyogcG9zaXRpb24g4oCTIHRoZSBvbmUgdGhhdCdzIGJlZW4gcG90ZW50aWFsbHkgYWRqdXN0ZWQgYnkgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkLlxuXG5UaGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgdGhvc2UgY2hlY2tzIGluIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AsIHRoZXkgY2hhbmdlIGBpb2NiLVx1MDAzZWtpX3Bvc2AgaWYsIHNheSwgT19BUFBFTkQgaXMgc2V0LCBvciBzb21lIG90aGVyIGZpbGUgYWNjZXNzIGNvbnN0cmFpbnRzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4uIFRoYXQgaW5pdGlhbCB2YWx1ZSBtaWdodCBiZSBvdmVyd3JpdHRlbi4gTXkgY29uY2VybiBpcyB3aGV0aGVyIGl0J3MgdGhlIHN0YXJ0IHBvc2l0aW9uLCB3aGljaCB0aGUgd3JpdGUgaXMgc3VwcG9zZWQgdG8gYmVnaW4sIG9yIGlmIHRoZXJlIGlzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHVwZGF0ZWQgc3RhcnQgcG9zaXRpb24gaXMgbW9yZSBhcHByb3ByaWF0ZS5cblxuVGhlIGltcG9ydGFudCBsaW5lIGlzIHdoZXJlIGBwb3NgIGlzIHVzZWQgbGF0ZXIgd2l0aCBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCAuLi4pYCB0byB0ZWxsIHRoZSBrZXJuZWwgdG8gaW52YWxpZGF0ZSB0aGUgcmVsZXZhbnQgcGFnZXMgZm9yIHRoZSB3cml0dGVuIGRhdGEuIEludmFsaWRhdGlvbiBoYXBwZW5zIHVzaW5nIHRoZSBzdGFydGluZyBwb3NpdGlvbi4gVGhlIHBhdGNoIGlzIGVuc3VyaW5nIHRoZSBpbnZhbGlkYXRpb24gaGFwcGVucyBmcm9tIHRoZSBjb3JyZWN0IG9mZnNldC5cblxuU28gdGhlIHBhdGNoIGlzIGFkanVzdGluZyB0aGUgc3RhcnQgcG9zaXRpb24uIEl0J3MgY2xlYXIgdGhhdCBpdCBoYXMgdG8gYmUgdGhlIHVwZGF0ZWQgcG9zaXRpb24uIFNvIHRoZSBwYXRjaCBpcyBhY3R1YWxseSBmaXhpbmcgYSBzdWJ0bGUgYnVnIHdoZXJlIHRoZSB3cm9uZyBvZmZzZXQgd2FzIGJlaW5nIHVzZWQgZm9yIGludmFsaWRhdGlvbi5cblxuV2FpdC4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gSXMgdGhlcmUgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBgcG9zYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBpb2NiLVx1MDAzZWtpX3Bvc2AgcmlnaHQgYWZ0ZXIgYGdlbmVyaWNfd3JpdGVfY2hlY2tzYCwgc28gd2UncmUgc2FmZSB0aGVyZS4gTm8gcmlzayBvZiBsZWFraW5nIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2UuXG5cbkl0J3MgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgZW5zdXJpbmcgdGhlIGNvcnJlY3QgcG9zaXRpb24gaXMgdXNlZCB3aXRoaW4gYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYCBmdW5jdGlvbiB3aGVuIHBlcmZvcm1pbmcgZGlyZWN0IHdyaXRlcyBpbiBhIEZVU0UgZmlsZXN5c3RlbSwgd2hlcmUgT19BUFBFTkQgb3Igc29tZXRoaW5nIHNpbWlsYXIgaGFzIGJlZW4gYXBwbGllZC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgY29kZSBwYXRoLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTo1MTo0OS4wNDY2OTg1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3MTU2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVzZV9kaXJlY3Rfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL2ZpbGUuYz0xNzczPXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xNzg3LVxcbmZzL2Z1c2UvZmlsZS5jOjE3ODg6c3RhdGljIHNzaXplX3QgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9mdXNlL2ZpbGUuYy0xNzg5LXtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTE4NDc9c3RhdGljIHNzaXplX3QgZnVzZV9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xODYwLVxcdGlmIChmZi1cXHUwMDNlb3Blbl9mbGFncyBcXHUwMDI2IEZPUEVOX0RJUkVDVF9JTylcXG5mcy9mdXNlL2ZpbGUuYzoxODYxOlxcdFxcdHJldHVybiBmdXNlX2RpcmVjdF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL2Z1c2UvZmlsZS5jLTE4NjItXFx0ZWxzZSBpZiAoZnVzZV9maWxlX3Bhc3N0aHJvdWdoKGZmKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6NTE6NDkuMDkxNDE5MzE5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NjAwMTM4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDYWNoZSBJbnZhbGlkYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIHdoYXQgSSdtIHNlZWluZzogdGhlcmUncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbG9naWMgZmxhdyBpbiB0aGUgd2F5IGBwb3NgIGlzIGJlaW5nIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgaW5pdGlhbGl6ZXMgYHBvc2AgYmVmb3JlIGEgY2FsbCB0byBgZ2VuZXJpY193cml0ZV9jaGVja3NgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGBnZW5lcmljX3dyaXRlX2NoZWNrc2AgY2FuIGFjdHVhbGx5ICp1cGRhdGUqIHRoZSB2YWx1ZSBvZiBgaW9jYi1cdTAwM2VraV9wb3NgLCBwYXJ0aWN1bGFybHkgaW4gc2NlbmFyaW9zIGxpa2Ugd2hlbiBgT19BUFBFTkRgIGlzIHVzZWQuXG5cbkJ5IGluaXRpYWxpemluZyBgcG9zYCAqYWZ0ZXIqIGBnZW5lcmljX3dyaXRlX2NoZWNrc2AsIHdlJ3JlIGd1YXJhbnRlZWluZyB0aGF0IGBwb3NgIGlzIHNldCB0byB0aGUgKmNvcnJlY3QqIHN0YXJ0aW5nIHBvc2l0aW9uLCB0aGUgb25lIHRoYXQncyBiZWVuIHByb3Blcmx5IGFkanVzdGVkIGZvciB0aGUgd3JpdGUgb3BlcmF0aW9uLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHdlIGdldCB0byB0aGUgY2FjaGUgaW52YWxpZGF0aW9uIHN0ZXAsIHdlJ3JlIHVzaW5nIHRoZSByaWdodCBvZmZzZXQuXG5cblRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgaXNuJ3QgdG91Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igcmlza2luZyBhbnkgaW5mb3JtYXRpb24gbGVha3MuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCBzaG91bGQgdHJpZ2dlciBLTVNBTiBjb25jZXJucy4gSXQncyBzdHJpY3RseSBhIG1hdHRlciBvZiBnZXR0aW5nIHRoZSBsb2dpYyBmbG93IHJpZ2h0LCB3aGljaCBpcyBnb29kLlxuXG5HaXZlbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJJ2xsIGluY2x1ZGUgdGhpcyByZWFzb25pbmcgaW4gbXkgcmVzcG9uc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODMsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjUxOjU1LjU1MTQzNTU2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYGZ1c2VfZGlyZWN0X3dyaXRlX2l0ZXJgIHdoZXJlIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiBhIHdyaXRlIChgcG9zYCkgd2FzIGNhcHR1cmVkIGJlZm9yZSBjYWxsaW5nIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC4gU2luY2UgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgIGNhbiB1cGRhdGUgYGlvY2ItXFx1MDAzZWtpX3Bvc2AgKGUuZy4sIGZvciBgT19BUFBFTkRgIHdyaXRlcyksIGNhcHR1cmluZyBpdCBiZWZvcmVoYW5kIHJlc3VsdGVkIGluIGFuIGluY29ycmVjdCBwb3NpdGlvbiBiZWluZyB1c2VkIGZvciBzdWJzZXF1ZW50IGNhY2hlIGludmFsaWRhdGlvbiAoYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYCkuIFRoZSBmaXggbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwb3NgIHRvIGFmdGVyIGBnZW5lcmljX3dyaXRlX2NoZWNrcygpYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWRkcmVzc2VzIGEgZmlsZSBvZmZzZXQgbG9naWMgYnVnIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgZnVzZV9kaXJlY3Rfd3JpdGVfaXRlcmAgd2hlcmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGEgd3JpdGUgKGBwb3NgKSB3YXMgY2FwdHVyZWQgYmVmb3JlIGNhbGxpbmcgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLiBTaW5jZSBgZ2VuZXJpY193cml0ZV9jaGVja3MoKWAgY2FuIHVwZGF0ZSBgaW9jYi1cXHUwMDNla2lfcG9zYCAoZS5nLiwgZm9yIGBPX0FQUEVORGAgd3JpdGVzKSwgY2FwdHVyaW5nIGl0IGJlZm9yZWhhbmQgcmVzdWx0ZWQgaW4gYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGJlaW5nIHVzZWQgZm9yIHN1YnNlcXVlbnQgY2FjaGUgaW52YWxpZGF0aW9uIChgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2VgKS4gVGhlIGZpeCBtb3ZlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBvc2AgdG8gYWZ0ZXIgYGdlbmVyaWNfd3JpdGVfY2hlY2tzKClgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZGRyZXNzZXMgYSBmaWxlIG9mZnNldCBsb2dpYyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[1] Phase: Succeeded StartedAt: 2026-08-19 09:52:06 +0000 UTC FinishedAt: 2026-08-19 09:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 09:52:06 +0000 UTC FinishedAt: 2026-08-19 09:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2] Phase: Succeeded StartedAt: 2026-08-19 09:52:06 +0000 UTC FinishedAt: 2026-08-19 13:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 09:52:06 +0000 UTC FinishedAt: 2026-08-19 13:30:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 09:52:06 +0000 UTC FinishedAt: 2026-08-19 09:52:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 09:52:06 +0000 UTC FinishedAt: 2026-08-19 09:52:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-convert-artifact-1936334901/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 09:52:17 +0000 UTC FinishedAt: 2026-08-19 10:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 09:52:17 +0000 UTC FinishedAt: 2026-08-19 10:08:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*aff84b01-c8bb-4223-9533-0493a280116b,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-workflow6cgqg/series-workflow6cgqg-convert-artifact-1936334901/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": "9193e3ae-61e4-4b3b-b967-24c35b8d07ac", "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-workflow6cgqg/series-workflow6cgqg-build-action-3369589787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 09:52:17 +0000 UTC FinishedAt: 2026-08-19 10:08:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*aff84b01-c8bb-4223-9533-0493a280116b,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-workflow6cgqg/series-workflow6cgqg-convert-artifact-1936334901/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": "9193e3ae-61e4-4b3b-b967-24c35b8d07ac", "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-workflow6cgqg/series-workflow6cgqg-build-action-3369589787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 10:08:48 +0000 UTC FinishedAt: 2026-08-19 10:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 10:08:48 +0000 UTC FinishedAt: 2026-08-19 10:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 10:08:48 +0000 UTC FinishedAt: 2026-08-19 10:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 10:08:48 +0000 UTC FinishedAt: 2026-08-19 10:08:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-convert-artifact-3622094224/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 10:08:59 +0000 UTC FinishedAt: 2026-08-19 10:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 10:08:59 +0000 UTC FinishedAt: 2026-08-19 10:10:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9193e3ae-61e4-4b3b-b967-24c35b8d07ac,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-workflow6cgqg/series-workflow6cgqg-build-action-3369589787/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-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 10:10:56 +0000 UTC FinishedAt: 2026-08-19 10:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 10:10:56 +0000 UTC FinishedAt: 2026-08-19 10:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 10:10:56 +0000 UTC FinishedAt: 2026-08-19 10:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 10:10:56 +0000 UTC FinishedAt: 2026-08-19 10:27:19 +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:*aff84b01-c8bb-4223-9533-0493a280116b,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-workflow6cgqg/series-workflow6cgqg-convert-artifact-3622094224/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": "4fa8e2c5-8a62-499c-ba26-1eeb809b59a6", "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-workflow6cgqg/series-workflow6cgqg-build-action-3932865036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 10:10:56 +0000 UTC FinishedAt: 2026-08-19 10:27:09 +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:*aff84b01-c8bb-4223-9533-0493a280116b,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-workflow6cgqg/series-workflow6cgqg-convert-artifact-3622094224/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": "4fa8e2c5-8a62-499c-ba26-1eeb809b59a6", "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-workflow6cgqg/series-workflow6cgqg-build-action-3932865036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 10:27:19 +0000 UTC FinishedAt: 2026-08-19 10:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 10:27:19 +0000 UTC FinishedAt: 2026-08-19 10:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 10:27:19 +0000 UTC FinishedAt: 2026-08-19 10:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 10:27:19 +0000 UTC FinishedAt: 2026-08-19 10:29:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fa8e2c5-8a62-499c-ba26-1eeb809b59a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-build-action-3932865036/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-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 10:29:15 +0000 UTC FinishedAt: 2026-08-19 13:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 10:29:15 +0000 UTC FinishedAt: 2026-08-19 13:30:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9193e3ae-61e4-4b3b-b967-24c35b8d07ac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fa8e2c5-8a62-499c-ba26-1eeb809b59a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-build-action-3369589787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-build-action-3932865036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 10:29:15 +0000 UTC FinishedAt: 2026-08-19 10:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 10:29:15 +0000 UTC FinishedAt: 2026-08-19 10:29:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-convert-artifact-2462027145/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 10:29:15 +0000 UTC FinishedAt: 2026-08-19 10:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 10:29:15 +0000 UTC FinishedAt: 2026-08-19 10:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 10:29:15 +0000 UTC FinishedAt: 2026-08-19 10:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 10:29:25 +0000 UTC FinishedAt: 2026-08-19 13:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cgqg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["fuse_direct_write_iter","fuse_file_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUSE_FS"],"series_id":"da8be885-aec2-4961-a6e9-162d8900ab4d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 10:29:25 +0000 UTC FinishedAt: 2026-08-19 13:30:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9193e3ae-61e4-4b3b-b967-24c35b8d07ac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fa8e2c5-8a62-499c-ba26-1eeb809b59a6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-build-action-3369589787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-build-action-3932865036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6cgqg/series-workflow6cgqg-convert-artifact-2462027145/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}