Name: series-workflowkgcsk Phase: Succeeded StartedAt: 2026-07-31 02:10:51 +0000 UTC FinishedAt: 2026-07-31 04:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[0] Phase: Succeeded StartedAt: 2026-07-31 02:10:51 +0000 UTC FinishedAt: 2026-07-31 02:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 02:10:51 +0000 UTC FinishedAt: 2026-07-31 02:29:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "bc0e8faf90e776a2f1f3967a04e8091e6bdb4977", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "bc0e8faf90e776a2f1f3967a04e8091e6bdb4977", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "edbc32e5-cdf6-4dc3-ae6d-c21177a55f68" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ublk_ch_uring_cmd", "ublk_queue_rq", "ublk_queue_rqs" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgd2hlbiBpbXBvcnRfdWJ1ZiBmYWlscyBpbiB1YmxrX21hcF9pbyBhbmQgdWJsa191bm1hcF9pbywgYW5kIGhhbmRsZXMgdW5tYXBwZWRfYnl0ZXMgPT0gMCBpbiBfX3VibGtfY29tcGxldGVfcnEuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHVibGsgZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTk3NTE3MTU2NjZiMDM0MzU3NThiOWNhZTBiZTg4YTc4ODEzZmFhNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjI3OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggNGNhNmVjNzM4YzkzMC4uODEwMWMyYTczZWZkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5AQCAtMTQ3NSw3ICYjNDM7MTQ3NSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfbWFwX2lvKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4gXHRcdHN0cnVjdCBpb3ZfaXRlciBpdGVyO1xuIFx0XHRjb25zdCBpbnQgZGlyID0gSVRFUl9ERVNUO1xuIFxuLVx0XHRpbXBvcnRfdWJ1ZihkaXIsIHU2NF90b191c2VyX3B0cihpby1cdTAwM2VidWYuYWRkciksIHJxX2J5dGVzLCBcdTAwMjZpdGVyKTtcbiYjNDM7XHRcdGlmIChpbXBvcnRfdWJ1ZihkaXIsIHU2NF90b191c2VyX3B0cihpby1cdTAwM2VidWYuYWRkciksIHJxX2J5dGVzLFxuJiM0MztcdFx0XHRcdFx1MDAyNml0ZXIpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRcdHJldHVybiB1YmxrX2NvcHlfdXNlcl9wYWdlcyhyZXEsIDAsIFx1MDAyNml0ZXIsIGRpcik7XG4gXHR9XG4gXHRyZXR1cm4gcnFfYnl0ZXM7XG5AQCAtMTQ5NCw5ICYjNDM7MTQ5NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfdW5tYXBfaW8oYm9vbCBuZWVkX21hcCxcbiBcdFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRcdGNvbnN0IGludCBkaXIgPSBJVEVSX1NPVVJDRTtcbiBcbi1cdFx0V0FSTl9PTl9PTkNFKGlvLVx1MDAzZXJlcyBcdTAwM2UgcnFfYnl0ZXMpO1xuJiM0MztcdFx0aWYgKGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLVx1MDAzZWJ1Zi5hZGRyKSwgaW8tXHUwMDNlcmVzLFxuJiM0MztcdFx0XHRcdFx1MDAyNml0ZXIpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcbi1cdFx0aW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXHUwMDNlYnVmLmFkZHIpLCBpby1cdTAwM2VyZXMsIFx1MDAyNml0ZXIpO1xuIFx0XHRyZXR1cm4gdWJsa19jb3B5X3VzZXJfcGFnZXMocmVxLCAwLCBcdTAwMjZpdGVyLCBkaXIpO1xuIFx0fVxuIFx0cmV0dXJuIHJxX2J5dGVzO1xuQEAgLTE1ODQsOCAmIzQzOzE1ODgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdWJsa19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4gXHQgKlxuIFx0ICogUmUtcmVhZCBzaW1wbHkgZm9yIHRoaXMgdW5saWtlbHkgY2FzZS5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KHVubWFwcGVkX2J5dGVzIFx1MDAzYyBpby1cdTAwM2VyZXMpKVxuJiM0MztcdGlmICh1bmxpa2VseSh1bm1hcHBlZF9ieXRlcyBcdTAwM2MgaW8tXHUwMDNlcmVzKSkge1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCF1bm1hcHBlZF9ieXRlcykpIHtcbiYjNDM7XHRcdFx0cmVzID0gQkxLX1NUU19JT0VSUjtcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aW8tXHUwMDNlcmVzID0gdW5tYXBwZWRfYnl0ZXM7XG4mIzQzO1x0fVxuIFxuIFx0LypcbiBcdCAqIFJ1biBiaW8tXHUwMDNlYmlfZW5kX2lvKCkgd2l0aCBzb2Z0aXJxcyBkaXNhYmxlZC4gSWYgdGhlIGZpbmFsIGZwdXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDt1YmxrX3F1ZXVlX3JxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIGltcG9ydF91YnVmIGZhaWxzIGluIHVibGtfbWFwX2lvIGFuZCB1YmxrX3VubWFwX2lvLCBhbmQgaGFuZGxlcyB1bm1hcHBlZF9ieXRlcyA9PSAwIGluIF9fdWJsa19jb21wbGV0ZV9ycS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdWJsayBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOTc1MTcxNTY2NmIwMzQzNTc1OGI5Y2FlMGJlODhhNzg4MTNmYWE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDI6Mjc6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggNGNhNmVjNzM4YzkzMC4uODEwMWMyYTczZWZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwpAQCAtMTQ3NSw3ICYjNDM7MTQ3NSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfbWFwX2lvKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsCiAJCXN0cnVjdCBpb3ZfaXRlciBpdGVyOwogCQljb25zdCBpbnQgZGlyID0gSVRFUl9ERVNUOwogCi0JCWltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLSZndDtidWYuYWRkciksIHJxX2J5dGVzLCAmYW1wO2l0ZXIpOwomIzQzOwkJaWYgKGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLSZndDtidWYuYWRkciksIHJxX2J5dGVzLAomIzQzOwkJCQkmYW1wO2l0ZXIpICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKIAkJcmV0dXJuIHVibGtfY29weV91c2VyX3BhZ2VzKHJlcSwgMCwgJmFtcDtpdGVyLCBkaXIpOwogCX0KIAlyZXR1cm4gcnFfYnl0ZXM7CkBAIC0xNDk0LDkgJiM0MzsxNDk3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa191bm1hcF9pbyhib29sIG5lZWRfbWFwLAogCQlzdHJ1Y3QgaW92X2l0ZXIgaXRlcjsKIAkJY29uc3QgaW50IGRpciA9IElURVJfU09VUkNFOwogCi0JCVdBUk5fT05fT05DRShpby0mZ3Q7cmVzICZndDsgcnFfYnl0ZXMpOwomIzQzOwkJaWYgKGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLSZndDtidWYuYWRkciksIGlvLSZndDtyZXMsCiYjNDM7CQkJCSZhbXA7aXRlcikgJmx0OyAwKQomIzQzOwkJCXJldHVybiAwOwogCi0JCWltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLSZndDtidWYuYWRkciksIGlvLSZndDtyZXMsICZhbXA7aXRlcik7CiAJCXJldHVybiB1YmxrX2NvcHlfdXNlcl9wYWdlcyhyZXEsIDAsICZhbXA7aXRlciwgZGlyKTsKIAl9CiAJcmV0dXJuIHJxX2J5dGVzOwpAQCAtMTU4NCw4ICYjNDM7MTU4OCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbywKIAkgKgogCSAqIFJlLXJlYWQgc2ltcGx5IGZvciB0aGlzIHVubGlrZWx5IGNhc2UuCiAJICovCi0JaWYgKHVubGlrZWx5KHVubWFwcGVkX2J5dGVzICZsdDsgaW8tJmd0O3JlcykpCiYjNDM7CWlmICh1bmxpa2VseSh1bm1hcHBlZF9ieXRlcyAmbHQ7IGlvLSZndDtyZXMpKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoIXVubWFwcGVkX2J5dGVzKSkgewomIzQzOwkJCXJlcyA9IEJMS19TVFNfSU9FUlI7CiYjNDM7CQkJZ290byBleGl0OwomIzQzOwkJfQomIzQzOwogCQlpby0mZ3Q7cmVzID0gdW5tYXBwZWRfYnl0ZXM7CiYjNDM7CX0KIAogCS8qCiAJICogUnVuIGJpby0mZ3Q7YmlfZW5kX2lvKCkgd2l0aCBzb2Z0aXJxcyBkaXNhYmxlZC4gSWYgdGhlIGZpbmFsIGZwdXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHVibGsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGNoYW5nZXMgdG8gYHVibGtfbWFwX2lvYCwgYHVibGtfdW5tYXBfaW9gLCBhbmQgYF9fdWJsa19jb21wbGV0ZV9ycWAuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggSS9PIG1hcHBpbmcgb3IgdW5tYXBwaW5nIG9wZXJhdGlvbnMsIGFuZCB0aGUgY29tcGxldGlvbiBvZiByZXF1ZXN0cy4KClRoZSBiaXQgdGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhlIGNoZWNrIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYGltcG9ydF91YnVmYC4gUmV0dXJuaW5nIDAgb24gZmFpbHVyZSBpbmRpY2F0ZXMgYSBjbGVhciBlcnJvciBwYXRoLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNhZmV0eSBjaGVjaywgcHJldmVudGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcgaWYgdGhlIGJ1ZmZlciBpbXBvcnQgZmFpbHMuIEdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLCBlc3NlbnRpYWwgaW4gYSBibG9jayBkcml2ZXIuCgpUaGVuLCBsb29raW5nIGF0IGBfX3VibGtfY29tcGxldGVfcnFgLCB0aGUgY2hlY2sgZm9yIGB1bm1hcHBlZF9ieXRlc2AgYmVpbmcgemVybyBpcyBpbnRlcmVzdGluZy4gSWYgbm8gYnl0ZXMgd2VyZSB1bm1hcHBlZCwgaXQgc2V0cyBgcmVzID0gQkxLX1NUU19JT0VSUmAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhpcyBpcyBhaW1lZCBhdCBoYW5kbGluZyB1bmV4cGVjdGVkIHNjZW5hcmlvcyB3aGVyZSB1bm1hcHBpbmcgZmFpbHMsIG9yIGhhc24mIzM5O3QgYWN0dWFsbHkgaGFwcGVuZWQuIFNldHRpbmcgYEJMS19TVFNfSU9FUlJgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIHRvIHNpZ25hbCBhbiBJL08gZXJyb3IgdG8gdGhlIHVwcGVyIGxheWVycy4gVGhlIGNvZGUgdGhlbiBqdW1wcyB0byBleGl0LgoKVG8gZ2FpbiBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHBhcnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgZmluZCB0aGUgS2NvbmZpZyBvcHRpb24gdGhhdCBpbmNsdWRlcyBgdWJsa19kcnYub2AuIFRoYXQmIzM5O2xsIGdpdmUgbWUgY29udGV4dCBvbiB3aGVuIHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZSBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGUgY2hhbmdlcyB3aWxsIGltcGFjdCB0aGUgYmxvY2sgZHJpdmVyIGluIHZhcmlvdXMgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfZHJ2Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTM4PW9iai0kKENPTkZJR19CTEtfREVWX1JVU1RfTlVMTCkgJiM0Mzs9IHJudWxsL1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zOS1cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX0JMS19ERVZfVUJMSylcdFx0XHQmIzQzOz0gdWJsa19kcnYub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS00MS1vYmotJChDT05GSUdfQkxLX0RFVl9aT05FRF9MT09QKSAmIzQzOz0gemxvb3Aub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfVUJMS2AuIFJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgdGhpcyByZWxpZXMgb24gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gZGV0ZXJtaW5lIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gZGVzaWduLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfVUJMSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0zMTU9Y29uZmlnIEJMS19ERVZfUkJEXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyNy1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMjg6Y29uZmlnIEJMS19ERVZfVUJMS1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgdWJsayBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGBCTEtfREVWX1VCTEtgIEtjb25maWcgZW50cnkuIE15IGd1dCBmZWVsaW5nIGlzIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMsIGFzIGFsd2F5cy4gV2hhdCBvdGhlciBmZWF0dXJlcyAqbXVzdCogYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciB0aGlzIHRvIGV2ZW4gKmJlKiByZWxldmFudD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGhhcmR3YXJlIG9yIHNvZnR3YXJlIHJlcXVpcmVtZW50cyBiYWtlZCBpbiwgb3IgaXMgaXQgbW9yZSBnZW5lcmljPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaW1tZWRpYXRlbHksIHRoYXQmIzM5O3Mgc3RlcCBvbmUsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3Igc3RvcmFnZSBkZXNpZ24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBJcyB0aGlzICpvbmx5KiBmb3IgdXNlci1zcGFjZSBibG9jayBkZXZpY2VzPyBJZiBzbywgd2hhdCBkb2VzIHRoYXQgbWVhbiBmb3IgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgbGF0ZW5jeT8gQXJlIHRoZXJlIGFueSBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zIEkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mIHdpdGggZXhpc3RpbmcgZHJpdmVycyBvciBzdWJzeXN0ZW1zPyBJJiMzOTttIGhvcGluZyB0byBzZWUgd2VsbC1jb21tZW50ZWQgY29kZSwgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBzcGVjaWZpYyBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjg6XHRjb25maWcgQkxLX0RFVl9VQkxLXG4gMzI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gMzMwOlx0XHRzZWxlY3QgSU9fVVJJTkdcbiAzMzE6XHRcdGhlbHBcbiAzMzI6XHRcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xuIDMzMzpcdFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXG4gMzM0Olx0XHQgIGRlZmluaXRpb24gaXNuJiMzOTt0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxuIDMzNTpcdFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxuIDMzNjpcdFxuIDMzNzpcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xuIDMzODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVwmIzM0O1xuIDMzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0aGVscFxuIDM0MjpcdFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XG4gMzQzOlx0XHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXG4gMzQ0Olx0XHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XG4gMzQ1Olx0XHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcbiAzNDY6XHRcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXG4gMzQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVUJMSyBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNoYW5nZSBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBCTEtfREVWX1VCTEtgLiBSaWdodCwgZ290IGl0LiBNeSB0YXNrIGludm9sdmVzIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLCB3aGljaCBhcHBhcmVudGx5IHRvdWNoZXMgdGhlIGNvcmUgVUJMSyBJL08gaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQmIzM5O3MgbW9kaWZ5aW5nIHRocmVlIGtleSBmdW5jdGlvbnM6IGB1YmxrX21hcF9pb2AsIGB1YmxrX3VubWFwX2lvYCwgYW5kIGBfX3VibGtfY29tcGxldGVfcnFgLiBUaGUgaW1tZWRpYXRlIGNoYWxsZW5nZSBpcyB0aGF0IHRoZXNlIGFyZSAqc3RhdGljKiBmdW5jdGlvbnMuIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gdGhlIFVCTEsgbW9kdWxlLgoKU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYywgcHVibGljLWZhY2luZyBmdW5jdGlvbnMgdGhhdCAqY2FsbCogdGhlc2Ugc3RhdGljIG9uZXMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGUgZXh0ZXJuYWwgQVBJIGNhbGxzIGRvd24gaW50byB0aGVzZSBtb2RpZmllZCBpbnRlcm5hbHMuIEkgd2FudCB0byBzZWUgd2hhdCB0aGlzIG1vZGlmaWNhdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGUgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMuIEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBtYWtlIGl0IHZlcnkgZWFzeSB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX21hcF9pbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTQ1ND1zdGF0aWMgaW5saW5lIGJvb2wgdWJsa19uZWVkX3VubWFwX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNDU5LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjE0NjA6c3RhdGljIHVuc2lnbmVkIGludCB1YmxrX21hcF9pbyhjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0NjEtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzQ0PXN0YXRpYyBib29sIHVibGtfc3RhcnRfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTc1Mi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNzUzOlx0bWFwcGVkX2J5dGVzID0gdWJsa19tYXBfaW8odWJxLCByZXEsIGlvKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNzU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBJL08gUGF0aCBpbiBVYmxrKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBVYmxrIGNvZGUsIGFuZCBJIHNlZSB0aGF0IGB1YmxrX3N0YXJ0X2lvYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGluaXRpYXRpbmcgSS9PIG9wZXJhdGlvbnMuIE5vdywgd2hlcmUgaXMgKnRoYXQqIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBJL08gcHJvY2VzcyBiZWdpbnMuIEkgd2FudCB0byBzZWUgaG93IGB1YmxrX3N0YXJ0X2lvYCBpbnRlcmFjdHMgd2l0aCB0aGUgbWFwcGluZyBwcm9jZXNzIHdoaWNoIGl0IGNhbGxzIChgdWJsa19tYXBfaW9gKS4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgdWJsa19zdGFydF9pb2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIEkvTyBpcyBhY3R1YWxseSAqc3RhcnRlZCogd2l0aGluIHRoaXMgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX3N0YXJ0X2lvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzMwPXN0YXRpYyB2b2lkIHVibGtfYXV0b19idWZfZGlzcGF0Y2goY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTc0My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNzQ0OnN0YXRpYyBib29sIHVibGtfc3RhcnRfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNzQ1LVx0XHRcdCAgc3RydWN0IHVibGtfaW8gKmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzc4PXN0YXRpYyB2b2lkIHVibGtfZGlzcGF0Y2hfcmVxKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE4MTUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTgxNjpcdGlmICghdWJsa19zdGFydF9pbyh1YnEsIHJlcSwgaW8pKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE4MTctXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTgyNz1zdGF0aWMgYm9vbCBfX3VibGtfYmF0Y2hfcHJlcF9kaXNwYXRjaChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xODM2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjE4Mzc6XHRpZiAoIXVibGtfc3RhcnRfaW8odWJxLCByZXEsIGlvKSlcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xODM4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNDg9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjItXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM2MzpcdHJldHVybiB1YmxrX3N0YXJ0X2lvKHVicSwgcmVxLCBpbyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5yYXZlbGluZyB0aGUgSS9PIFBhdGggYW5kIFVubWFwIENhbGxzKioKClJpZ2h0LCBzbyBgdWJsa19kaXNwYXRjaF9yZXFgLCBgX191YmxrX2JhdGNoX3ByZXBfZGlzcGF0Y2hgLCBhbmQgYHVibGtfZ2V0X2RhdGFgIGFsbCBldmVudHVhbGx5IGxlYWQgdG8gYSBjYWxsIHRvIGB1YmxrX3N0YXJ0X2lvYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBJL08gaW5pdGlhdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhpcyBgdWJsa2AgY29udGV4dC4gTWFrZXMgc2Vuc2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgd2hvJiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xlYW51cD8gTW9yZSBzcGVjaWZpY2FsbHksIHdoZXJlIGFyZSB3ZSBzZWVpbmcgYHVibGtfdW5tYXBfaW9gIGNhbGxzIGhhcHBlbmluZz8gS25vd2luZyB3aG8gY2FsbHMgYHVibGtfdW5tYXBfaW9gIGlzIGNydWNpYWwgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgSS9PIGxpZmVjeWNsZSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gV2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpbmdzIGFyZSBwcm9wZXJseSB1bmRvbmUgYW5kIHJlbGVhc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX3VubWFwX2lvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNDYwPXN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa19tYXBfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTQ4Ni1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNDg3OnN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa191bm1hcF9pbyhib29sIG5lZWRfbWFwLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0ODgtXHRcdGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTE1NTM9c3RhdGljIGlubGluZSB2b2lkIF9fdWJsa19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1ODMtXHQvKiBmb3IgUkVBRCByZXF1ZXN0LCB3cml0aW5nIGRhdGEgaW4gaW9kLVx1MDAzZWFkZHIgdG8gcnEgYnVmZmVycyAqL1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjE1ODQ6XHR1bm1hcHBlZF9ieXRlcyA9IHVibGtfdW5tYXBfaW8obmVlZF9tYXAsIHJlcSwgaW8pO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1ODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSS9PIENvbXBsZXRpb24gUGF0aCBpbiB1YmxrKioKCkFscmlnaHQsIHNvIGBfX3VibGtfY29tcGxldGVfcnFgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGNvbXBsZXRpb24gb2YgYSByZXF1ZXN0IGluIHRoZSB1YmxrIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIGNvbXBsZXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsIGNoYWluIGxlYWRpbmcgdXAgdG8gaXQsIHNpbmNlIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cgaXMgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGluIGJsb2NrIGRyaXZlcnMuIEkgcmVtZW1iZXIgYF9fdWJsa19jb21wbGV0ZV9ycWAgY2FsbHMgYHVibGtfdW5tYXBfaW9gLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYWZ0ZXIgdGhlIEkvTyBpcyBkb25lIHRoZSBtYXBwaW5nIGlzIGJlaW5nIHVubWFwcGVkLiBCdXQgdGhlIG1vcmUgcHJlc3NpbmcgcXVlc3Rpb24gaXM6IHdobywgZXhhY3RseSwgaXMgY2FsbGluZyB0aGlzIGNvbXBsZXRpb24gcm91dGluZSwgYF9fdWJsa19jb21wbGV0ZV9ycWA/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHRoZSBkaWZmZXJlbnQgcG9zc2libGUgY2FsbGluZyBzaXRlcy4gQSBkZWVwZXIgZGl2ZSBpcyBpbiBvcmRlciB0byBwYWludCB0aGUgYmlnIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdWJsa19jb21wbGV0ZV9ycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NzczPXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19zZXR1cF9pb2Rfem9uZWQoc3RydWN0IHVibGtfcXVldWUgKnVicSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzgwLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjc4MTpzdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbyxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03ODItXHRcdFx0XHQgICAgICBib29sIG5lZWRfbWFwLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqaW9iKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgdWJsa19wdXRfcmVxX3JlZihzdHJ1Y3QgdWJsa19pbyAqaW8sIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTExOTctXHQvKiB1YmxrX25lZWRfbWFwX2lvKCkgYW5kIHVibGtfbmVlZF9yZXFfcmVmKCkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAqL1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjExOTg6XHRfX3VibGtfY29tcGxldGVfcnEocmVxLCBpbywgZmFsc2UsIE5VTEwpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTExOTktfVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNTQ1PXN0YXRpYyB2b2lkIHVibGtfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgYmxrX3N0YXR1c190IGVycm9yKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNTUyLS8qIHRvZG86IGhhbmRsZSBwYXJ0aWFsIGNvbXBsZXRpb24gKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNTUzOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VibGtfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IHVibGtfaW8gKmlvLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1NTQtXHRcdFx0XHQgICAgICBib29sIG5lZWRfbWFwLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqaW9iKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNjgwPXN0YXRpYyB2b2lkIF9fdWJsa19mYWlsX3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI2ODktXHRcdGlvLVx1MDAzZXJlcyA9IC1FSU87XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjY5MDpcdFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjY5MS1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzM2Nj1zdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQ2Ny1cdFx0aWYgKGNvbXBsKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM0Njg6XHRcdFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQ2OS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzc3MD1zdGF0aWMgaW50IHVibGtfYmF0Y2hfY29tbWl0X2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM4MTMtXHRpZiAoY29tcGwpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzgxNDpcdFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKGRhdGEtXHUwMDNldWIpLCBkYXRhLVx1MDAzZWlvYik7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzgxNS1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODE2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6CgoqKkFuYWx5emluZyBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGFuZCBgdWJsa19iYXRjaF9jb21taXRfaW9gKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGFuZCBgdWJsa19iYXRjaF9jb21taXRfaW9gLiBTZWVtcyBsaWtlIHRoZXNlIGFyZSBib3RoICpjcml0aWNhbCogY29tcG9uZW50cyB3aXRoaW4gdGhlIHVibGsgaW9fdXJpbmcgY29tbWFuZCBoYW5kbGluZyBwYXRod2F5IOKAkyB0aGV5JiMzOTtyZSBlaXRoZXIgZGlyZWN0IGhhbmRsZXJzIHRoZW1zZWx2ZXMgb3IgYXJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRob3NlIGhhbmRsZXJzLiBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlc2UgaW4gdGhlIGZhc3QgcGF0aC4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHNlZSBwcmVjaXNlbHkgd2hhdCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGlzIGRvaW5nLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpb191cmluZyBvcGVyYXRpb25zIGFyZSBwcm9jZXNzZWQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jaF91cmluZ19jbWRfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNDg9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM2NjpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY3LVx0XHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1Mjc9c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzMtXHRpZiAoIXR3LmNhbmNlbClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM0Olx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM1LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1Mzk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU1MS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTUyOlx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NTMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBpb191cmluZyBDb21tYW5kIEhhbmRsaW5nKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIsIGFzIEkgc2VlIGl0LCBpcyBgdWJsa19jaF91cmluZ19jbWRgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbWFnaWMgc3RhcnRzIGZvciBoYW5kbGluZyBpb191cmluZyBjb21tYW5kcyB3aXRoaW4gdGhlIHVibGsgZnJhbWV3b3JrLCBvciBhdCBsZWFzdCwgdGhhdCYjMzk7cyB3aGF0IG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBzdWdnZXN0cy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBoZXJlIGlzIHRvIGRpdmUgZGVlcCBpbnRvIHRoYXQgZnVuY3Rpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggYW5hbHlzaXMgb2YgYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgdW5yYXZlbCB0aGUgbWVjaGFuaWNzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQmIzM5O3Mgb3JjaGVzdHJhdGluZyB0aGUgY29tbWFuZCBwcm9jZXNzaW5nLCBxdWV1aW5nLCBhbmQgZXZlbnR1YWwgZXhlY3V0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgY29tbWFuZCB0eXBlcywgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgc3VibWlzc2lvbiBhbmQgY29tcGxldGlvbiBwcm9jZXNzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzQ4PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY1LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNjY6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2Ny1cdFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNDk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKl9fdWJsa19jaGVja19hbmRfZ2V0X3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mjc6c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzMtXHRpZiAoIXR3LmNhbmNlbClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM0Olx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM1LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzgtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzOTpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDAte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ3LVx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSkge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDg6XHRcdGlvX3VyaW5nX2NtZF9jb21wbGV0ZV9pbl90YXNrKGNtZCwgdWJsa19jaF91cmluZ19jbWRfY2IpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDktXHRcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NTEtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU1MjpcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUzLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNTUtXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTU2Olx0LnVyaW5nX2NtZCA9IHVibGtfY2hfdXJpbmdfY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNTctXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVYmxrIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVibGtfY2hfdXJpbmdfY21kYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSBgLnVyaW5nX2NtZGAsIHNwZWNpZmljYWxseSBmb3IgdGhlIGB1YmxrX2NoX2ZvcHNgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciwgYHVibGtfZHJ2LmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgcGFydCB0aGF0JiMzOTtzIGdyYWJiaW5nIG15IGF0dGVudGlvbiBpcyBob3cgaXQgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZhaWx1cmUgb2YgYGltcG9ydF91YnVmYC4gSXQmIzM5O3MgcmV0dXJuaW5nIGVpdGhlciAwIG9yIHNldHRpbmcgYEJMS19TVFNfSU9FUlJgLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZzsgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgYXJlYSBpcyBvZnRlbiBhIHNvdXJjZSBvZiBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLgoKTm93LCB0aGUgY29uZmlndXJhdGlvbiBpcyB0aWVkIHRvIGBCTEtfREVWX1VCTEtgLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAsIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGFzIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gV2FpdCwgc2NyYXRjaCB0aGF0LCBgdWJsa19jaF91cmluZ19jbWRgICppcyogdGhlIG1haW4gZW50cnkgcG9pbnQsIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgbW9zdCBjcnVjaWFsLiBIb3dldmVyLCBJJiMzOTttIGFsc28gc2VlaW5nIGB1YmxrX2NoX3dyaXRlX2l0ZXJgIG1lbnRpb25lZC4gSG1tLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGJvdGggYHVibGtfbWFwX2lvYCBhbmQgYHVibGtfdW5tYXBfaW9gLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYHVibGtfc3RhcnRfaW9gIGFuZCBgX191YmxrX2NvbXBsZXRlX3JxYCwgd2hpY2ggYXJlIGNvcmUgdG8gYW55IGJsb2NrIEkvTyBvcGVyYXRpb24uIExldCBtZSB0cmFjZSBiYWNrLi4uIGB1YmxrX3N0YXJ0X2lvYCBpcyBjYWxsZWQgZnJvbSBgdWJsa19kaXNwYXRjaF9yZXFgLCBgX191YmxrX2JhdGNoX3ByZXBfZGlzcGF0Y2hgLCBhbmQgZXZlbiBgdWJsa19nZXRfZGF0YWAuIEFuZCBgdWJsa19kaXNwYXRjaF9yZXFgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgdWJsa19xdWV1ZV9ycWAuIFNvLCB0aGVyZSBhcmUgc2V2ZXJhbCBrZXkgcG9pbnRzIG9mIGludGVncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgb2YgdGhlc2UgcG9pbnRzIGluIGRldGFpbC4gVGhlIGludGVyYWN0aW9uIG9mIGBtYXBgLCBgdW5tYXBgLCBhbmQgdGhlIGNvbW1hbmQgc3VibWlzc2lvbiBmbG93IGl0c2VsZiBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBmb3IgdGhlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfcXVldWVfcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIzOT1zdHJ1Y3QgdWJsa19xdWV1ZSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1Ny1cdCAqXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjU4Olx0ICogVGhlcmUgYXJlIG11bHRpcGxlIHdyaXRlciBmcm9tIHVibGtfcXVldWVfcnEoKSBvciB1YmxrX3F1ZXVlX3JxcygpLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1OS1cdCAqIHNvIGxvY2sgaXMgcmVxdWlyZWQgZm9yIHN0b3JpbmcgcmVxdWVzdCB0YWcgdG8gZmlmb1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMTQ3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19wcmVwX3JlcShzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODQtICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE4NTpzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBfX3VibGtfcXVldWVfcnFfY29tbW9uKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE4Ni1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTEtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIxMjpzdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMy1cdFx0Y29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxOS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjIwOlx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcdTAwMjZzaG91bGRfcXVldWUpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMjEtXHRpZiAoIXNob3VsZF9xdWV1ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjIyOD1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfYmF0Y2hfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMzUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIzNjpcdHJlcyA9IF9fdWJsa19xdWV1ZV9ycV9jb21tb24odWJxLCBycSwgXHUwMDI2c2hvdWxkX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjM3LVx0aWYgKCFzaG91bGRfcXVldWUpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIyNTI9c3RhdGljIHZvaWQgdWJsa19jb21taXRfcnFzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY0LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyNjU6c3RhdGljIHZvaWQgdWJsa19xdWV1ZV9ycXMoc3RydWN0IHJxX2xpc3QgKnJxbGlzdClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjM1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgdWJsa19tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NTpcdC5xdWV1ZV9ycSAgICAgICA9IHVibGtfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NjpcdC5xdWV1ZV9ycXMgICAgICA9IHVibGtfcXVldWVfcnFzLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIzNTctXHQuaW5pdF9oY3R4XHQ9IHVibGtfaW5pdF9oY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNzM1PXN0YXRpYyB2b2lkIHVibGtfc3RhcnRfY2FuY2VsKHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDQtXHRcdC8qXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc0NTpcdFx0ICogUXVpZXNjZSB0byBzZXJpYWxpemUgd2l0aCB1YmxrX3F1ZXVlX3JxKCksIGVuc3VyaW5nXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc0Ni1cdFx0ICogdWJxLVx1MDAzZWNhbmNlbGluZyBpcyB2aXNpYmxlIHdoZW4gdGhlIHF1ZXVlIHJlc3VtZXMuXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NTMtXHRcdCAqIERpc2sgbm90IHlldCBhbGxvY2F0ZWQgYnkgdWJsa19jdHJsX3N0YXJ0X2RldigpLCBzb1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NTQ6XHRcdCAqIHRoZXJlIGlzIG5vIHJlcXVlc3QgcXVldWUgYW5kIHVibGtfcXVldWVfcnEoKSBjYW5ub3RcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzU1LVx0XHQgKiBiZSBydW5uaW5nLiAgSnVzdCBzZXQgdGhlIGZsYWc7IGlmIHN0YXJ0X2RldiBwcm9jZWVkc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBVYmxrIFF1ZXVlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGJsb2NrIGxheWVyIHF1ZXVlIGZ1bmN0aW9ucyBmb3IgVWJsaywgc3BlY2lmaWNhbGx5IGB1YmxrX3F1ZXVlX3JxYCBhbmQgYHVibGtfcXVldWVfcnFzYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgY29yZSwgYnV0IGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGZvY3VzIGxpZXMuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGtleSBzeW1ib2xzIG1pZ2h0IGJlIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX3F1ZXVlX3JxYCwgYW5kIGB1YmxrX3F1ZXVlX3Jxc2AuIFdhaXQsIHJpZ2h0LCBgdWJsa19jaF91cmluZ19jbWRgIGhhbmRsZXMgdGhlIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGJvdGggYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfcXVldWVfcnFgLgoKTm93LCBpcyBgQkxLX0RFVl9VQkxLYCB0aGUgb25seSBjb25maWcgaW4gcGxheSBoZXJlPyBZZXAsIGl0IGxvb2tzIGxpa2UgaXQuIE9rYXksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBgQkxLX0RFVl9VQkxLYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSG1tLCBpdCBkZXBlbmRzIG9uIGBJT19VUklOR2AsIGFuZCwgYXMgSSB0aG91Z2h0LCBpdCAqc2VsZWN0cyogYElPX1VSSU5HYC4gQWxyaWdodCwgdGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSBvbmNlIG1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzI4OmNvbmZpZyBCTEtfREVWX1VCTEtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjktXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgU3ltYm9sIFByaW9yaXRpemF0aW9uKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGZvY3VzIHNlZW1zIHRvIGJlIG9uIGBCTEtfREVWX1VCTEtgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgaXMgaW1tZWRpYXRlbHkgY29ubmVjdGVkIHRvIHRoaXMuIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX3F1ZXVlX3JxYCwgYHVibGtfcXVldWVfcnFzYCwgYHVibGtfYmF0Y2hfcXVldWVfcnFgLCBhbmQgYHVibGtfY29tbWl0X3Jxc2AgYW5kIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAgYXJlIGFsbCBpbiB0aGUgbWl4LgoKQWxyaWdodCwgSSYjMzk7bGwgc2V0IG15IG1lbnRhbCBgRm9jdXNTeW1ib2xzYCB0byBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19xdWV1ZV9ycWAsIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGNvcmUgYXJlYXMgdG8gaW52ZXN0aWdhdGUgZnVydGhlciwgYXQgbGVhc3QgZm9yIG5vdy4KCldhaXQsIGB1YmxrX2NoX3VyaW5nX2NtZGAgZmVlbHMgbGlrZSB0aGUgYmVzdCBlbnRyeSBwb2ludCB0byBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0IG1lIGRvdWJsZS1jaGVjayBpZiBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGlzIHN0YXRpYy4gWWVzIGl0IGlzLCBzbyBgdWJsa19jaF91cmluZ19jbWRgIGl0c2VsZiBpcyB0aGUgbm9uLXN0YXRpYyBvbmUuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBpbXByZXNzaW9uLgoKSG93ZXZlciwgYSBxdWVzdGlvbiBqdXN0IHBvcHBlZCB1cC4gYHVibGtfcXVldWVfcnFgIGlzIHN0YXRpYz8gSG1tLi4uIE9rYXksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTGV0IG1lIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfcXVldWVfcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIzOT1zdHJ1Y3QgdWJsa19xdWV1ZSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1Ny1cdCAqXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjU4Olx0ICogVGhlcmUgYXJlIG11bHRpcGxlIHdyaXRlciBmcm9tIHVibGtfcXVldWVfcnEoKSBvciB1YmxrX3F1ZXVlX3JxcygpLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1OS1cdCAqIHNvIGxvY2sgaXMgcmVxdWlyZWQgZm9yIHN0b3JpbmcgcmVxdWVzdCB0YWcgdG8gZmlmb1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMTQ3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19wcmVwX3JlcShzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODQtICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE4NTpzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBfX3VibGtfcXVldWVfcnFfY29tbW9uKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE4Ni1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTEtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIxMjpzdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMy1cdFx0Y29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxOS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjIwOlx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcdTAwMjZzaG91bGRfcXVldWUpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMjEtXHRpZiAoIXNob3VsZF9xdWV1ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjIyOD1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfYmF0Y2hfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMzUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIzNjpcdHJlcyA9IF9fdWJsa19xdWV1ZV9ycV9jb21tb24odWJxLCBycSwgXHUwMDI2c2hvdWxkX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjM3LVx0aWYgKCFzaG91bGRfcXVldWUpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIyNTI9c3RhdGljIHZvaWQgdWJsa19jb21taXRfcnFzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY0LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyNjU6c3RhdGljIHZvaWQgdWJsa19xdWV1ZV9ycXMoc3RydWN0IHJxX2xpc3QgKnJxbGlzdClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjM1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgdWJsa19tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NTpcdC5xdWV1ZV9ycSAgICAgICA9IHVibGtfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NjpcdC5xdWV1ZV9ycXMgICAgICA9IHVibGtfcXVldWVfcnFzLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIzNTctXHQuaW5pdF9oY3R4XHQ9IHVibGtfaW5pdF9oY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNzM1PXN0YXRpYyB2b2lkIHVibGtfc3RhcnRfY2FuY2VsKHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDQtXHRcdC8qXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc0NTpcdFx0ICogUXVpZXNjZSB0byBzZXJpYWxpemUgd2l0aCB1YmxrX3F1ZXVlX3JxKCksIGVuc3VyaW5nXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc0Ni1cdFx0ICogdWJxLVx1MDAzZWNhbmNlbGluZyBpcyB2aXNpYmxlIHdoZW4gdGhlIHF1ZXVlIHJlc3VtZXMuXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NTMtXHRcdCAqIERpc2sgbm90IHlldCBhbGxvY2F0ZWQgYnkgdWJsa19jdHJsX3N0YXJ0X2RldigpLCBzb1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NTQ6XHRcdCAqIHRoZXJlIGlzIG5vIHJlcXVlc3QgcXVldWUgYW5kIHVibGtfcXVldWVfcnEoKSBjYW5ub3RcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzU1LVx0XHQgKiBiZSBydW5uaW5nLiAgSnVzdCBzZXQgdGhlIGZsYWc7IGlmIHN0YXJ0X2RldiBwcm9jZWVkc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0MgoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB1YmxrX3F1ZXVlX3JxYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYHVibGtfcXVldWVfcnFgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgcmVjYWxsIHNvbWUgYWR2aWNlOiAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LiBCdXQgd2FpdCBhIG1pbnV0ZSwgYHVibGtfcXVldWVfcnFgICppcyogYSBjYWxsYmFjaywgc3BlY2lmaWNhbGx5IGZvciB0aGUgYC5xdWV1ZV9ycWAgZmllbGQsIHJpZ2h0PyBUaGF0IG1lYW5zIGl0cyBhZGRyZXNzIGlzIGRlZmluaXRlbHkgdGFrZW4gYW5kIGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgKm5vdCogYmVpbmcgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLiBUaGUgY29tcGlsZXIgbmVlZHMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBmb3IgaXQuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBxdWV1aW5nIHByb2Nlc3M/IEkgc2hvdWxkIHJlYWxseSBjaGVjayBgdWJsa19kcnYuY2AgdGhvcm91Z2hseSBmb3IgYWx0ZXJuYXRpdmVzLiBUaGF0JiMzOTtzIHRoZSBwbGFjZSB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsbHkgbW9yZSBzdWl0YWJsZSwgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTMwPXN0cnVjdCB1YmxrX3pvbmVkX3JlcG9ydF9kZXNjIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTM1LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUzNjpzdGF0aWMgREVGSU5FX1hBUlJBWSh1YmxrX3pvbmVkX3JlcG9ydF9kZXNjcyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTM3LVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz03ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyB1YmxrX2Nocl9jbGFzcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzg4LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjc4OTpzdGF0aWMgREVGSU5FX0lEUih1YmxrX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzkwOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWJsa19pZHJfbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzkxLXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB1YmxrX2lkcl93cTtcdC8qIHdhaXQgdW50aWwgb25lIGlkciBpcyBmcmVlZCAqL1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc5Mi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo3OTM6c3RhdGljIERFRklORV9NVVRFWCh1YmxrX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NgoJCQkJCQkJb3V0cHV0OiA2NgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB1YmxrX2Rydi5jJiMzOTtzIERhdGEgRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gYHVibGtfZHJ2LmNgIGFuZCBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBkYXRhIHR5cGVzLiBNeSBhcHByb2FjaCBpcyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHRoZSBzdHJ1Y3R1cmVzIGFuZCBrZXkgdmFyaWFibGUgZGVjbGFyYXRpb25zLiBJJiMzOTttIG1lbnRhbGx5IHNlYXJjaGluZywgb3IgcmF0aGVyLCBJICp3b3VsZCogYmUgc2VhcmNoaW5nLCBmb3IgdGhlIHR5cGljYWwgc3VzcGVjdHMgaW4gQyBrZXJuZWwgY29kZTogYF5pbnQgYCwgYF52b2lkIGAsIGBeYm9vbCBgLCBgXnVuc2lnbmVkIGAuIFRob3NlIGFyZSBteSBiYXNpYyBwcmltaXRpdmVzLiBCdXQgSSB3b24mIzM5O3Qgc3RvcCB0aGVyZS4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIGFueSBjdXN0b20gdHlwZXMgYXJlIGRlZmluZWQsIHNvIEkgYW0gZ29pbmcgdG8gc2VhcmNoIGZvciBgXnN0cnVjdCBgLCBiZWNhdXNlIHRoYXQgd2lsbCBsZXQgbWUga25vdyB3aGF0IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHVzZWQuIEZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgcHJvamVjdC1zcGVjaWZpYyB0eXBlcywgc28gSSYjMzk7ZCBxdWlja2x5IHdhbnQgdG8gc2VlIGlmIHNvbWV0aGluZyBsaWtlIGBeYmxrX3N0YXR1c190IGAgc2hvd3MgdXAuIFRoYXQga2luZCBvZiB0aG9yb3VnaG5lc3MgdXAgZnJvbnQgZ2l2ZXMgbWUgdGhlIHNjYWZmb2xkaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIG1hbmlwdWxhdGVzIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgYW55IHBvdGVudGlhbCBkZXNpZ24gY2hvaWNlcyBiYXNlZCBvbiB0aG9zZSB0eXBlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2x8dW5zaWduZWR8c3RydWN0fGJsa19zdGF0dXNfdCkgW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKklzIEV2ZXJ5dGhpbmcgUmVhbGx5IFN0YXRpb25hcnk/IExldCYjMzk7cyBQcm9iZSBgbW9kdWxlX2luaXRgKioKCkFscmlnaHQsIEkmIzM5O20gZ2V0dGluZyBhIGh1bmNoIGhlcmUuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMgaXMgaW5oZXJlbnRseSBzdGF0aWMuIEl0JiMzOTtzIGEgZ3V0IGZlZWxpbmcsIGJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gbW9yZSBjb21wbGV4IGFuYWx5c2lzLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBUaGF0IHRob3VnaHQgbGVhZHMgbWUgdG8gYG1vZHVsZV9pbml0YC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGluaXRpYWwgc2V0dXAgaGFwcGVucywgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBldmVyeXRoaW5nIGVsc2UgaXMgYnVpbHQuIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBpZiB0aGUgJiMzOTtzdGF0aWMmIzM5OyBjaGFyYWN0ZXJpc3RpYyB0aGF0IEkmIzM5O20gc2VlaW5nIHJlYWxseSBleGlzdHMsIHRoZXJlIG1heSBiZSBzb21lIGNsdWVzIHRoZXJlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbW9kdWxlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQuIFBlcmhhcHMgc29tZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGluIGEgd2F5IHdoaWNoIGxpbWl0cyB0aGVpciBmbGV4aWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIHBvaW50IG9mIG9yaWdpbiwgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgc2V0IHVwLiBBbmFseXppbmcgYG1vZHVsZV9pbml0YCBtaWdodCBnaXZlIG1lIHRoZSBiYXNlIGZhY3RzIG9mIHRoZSBtYXR0ZXIuIEkgc3VzcGVjdCB0aGF0IHRoaXMgbWF5IGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01OTA4PXN0YXRpYyB2b2lkIF9fZXhpdCB1YmxrX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTkyMi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1OTIzOm1vZHVsZV9pbml0KHVibGtfaW5pdCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTkyNC1tb2R1bGVfZXhpdCh1YmxrX2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB1YmxrIEZ1bmN0aW9uIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBhbmFseXplIHRoaXMgYHVibGtgIGNvZGUuIElmIGV2ZXJ5dGhpbmcgb2YgaW1wb3J0YW5jZSBpcyBzdGF0aWMsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgdHJlbWVuZG91c2x5LiBJIGNhbiBqdXN0IGZvY3VzIG9uIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhY3QgYXMgY2FsbGJhY2tzIG9yIGVudHJ5IHBvaW50cy4gCgpSaWdodCBvZmYgdGhlIGJhdCwgYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyBwcm9taXNpbmcuIEFsc28sIGB1YmxrX3F1ZXVlX3JxYCwgYHVibGtfcXVldWVfcnFzYCwgYHVibGtfYmF0Y2hfcXVldWVfcnFgLCBhbmQgYHVibGtfY2hfd3JpdGVfaXRlcmAuIExldCYjMzk7cyBjb25maXJtIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgc3RhdGljLiBZZXAsIGl0IGlzLiBTaW5jZSB0aGV5IGFyZSBhbGwgc3RhdGljLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2ltcGx5IGxpc3QgYHVibGtfY2hfdXJpbmdfY21kYCwgYHVibGtfcXVldWVfcnFgLCBhbmQgYHVibGtfcXVldWVfcnFzYC4KCldhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSYjMzk7dmUgb3Zlcmxvb2tlZCBzb21ldGhpbmcgY3JpdGljYWwuIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgZGlyZWN0bHkgaGFuZGxpbmcgdGhlIGlvX3VyaW5nIGNvbW1hbmQhIEl0JiMzOTtzIHRoZSBvbmUgdGhhdCBldmVudHVhbGx5IGNhbGxzIGB1YmxrX3VubWFwX2lvYCBvciBgdWJsa19tYXBfaW9gLiBUaGlzIHNvdW5kcyBsaWtlIHRoZSByZWFsIGVudHJ5IHBvaW50IQoKTGV0JiMzOTtzIHRyYWNlIGl0IG91dC4KYHVibGtfY2hfdXJpbmdfY21kYCAtJmd0OyBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIC0mZ3Q7IGBfX3VibGtfY29tcGxldGVfcnFgIC0mZ3Q7IGB1YmxrX3VubWFwX2lvYC4KYHVibGtfY2hfdXJpbmdfY21kYCAtJmd0OyBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIC0mZ3Q7IGB1YmxrX2dldF9kYXRhYCAtJmd0OyBgdWJsa19zdGFydF9pb2AgLSZndDsgYHVibGtfbWFwX2lvYC4KClllcywgYHVibGtfY2hfdXJpbmdfY21kYCAqaXMqIHRoZSBwZXJmZWN0IHN5bWJvbCB0byBmb2N1cyBvbi4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGlvX3VyaW5nIGludGVyYWN0aW9uLgoKTm93LCBsZXQgbWUganVzdCBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLi4uIEFoLCBgQkxLX0RFVl9VQkxLYCBpcyB0aGUgb25seSBvbmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGB1YmxrX2NoX3VyaW5nX2NtZGAgaW4gYHVibGtfZHJ2LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2NoX3VyaW5nX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzM0OD1zdGF0aWMgYm9vbCB1YmxrX2dldF9kYXRhKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCB1YmxrX2lvICppbyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2NS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzY2OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjctXHRcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzQ5OT1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0ICpfX3VibGtfY2hlY2tfYW5kX2dldF9yZXEoc3RydWN0IHVibGtfZGV2aWNlICp1Yixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyNi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI3OnN0YXRpYyB2b2lkIHVibGtfY2hfdXJpbmdfY21kX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1Mjgte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMzLVx0aWYgKCF0dy5jYW5jZWwpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzNDpcdFx0cmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzNS1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM4LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mzk6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0Ny1cdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQ4Olx0XHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ5LVx0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NTI6XHRyZXR1cm4gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU1My19XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQxNTA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWJsa19jaF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTU1LVx0LndyaXRlX2l0ZXIgPSB1YmxrX2NoX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDE1NjpcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTU3LVx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqVWJsayBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIGNvbmZpcm1lZC4gYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2UgbmVlZCB0byBiZSBmb2N1c2VkIG9uIGhlcmUuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB0aGF0IHdlIG1heSBuZWVkIHRvIGNvbnNpZGVyIG9yIGFueSBpbnRlcmFjdGlvbnMgd2Ugc2hvdWxkIGJlIGF3YXJlIG9mLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIHNlZSBgQkxLX0RFVl9VQkxLYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJT19VUklOR2AsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byBjaGVjayB0aGVzZSB0aGluZ3MuIE5vdywgYElPX1VSSU5HYCBpcyBwcmV0dHkgdWJpcXVpdG91cyB0aGVzZSBkYXlzLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIGJhc2UgY29uZmlndXJhdGlvbi4gQnV0IHdhaXQgYSBtaW51dGXigKYgYEJMS19ERVZfVUJMS2AgKnNlbGVjdHMqIGBJT19VUklOR2AuIEFoLCByaWdodCEgU28sIGlmIHdlIGVuYWJsZSBgQkxLX0RFVl9VQkxLYCwgd2UgZ2V0IGBJT19VUklOR2AgJiMzNDtmb3IgZnJlZSwmIzM0OyBhcyBpdCB3ZXJlLiBUaGF0IG1lYW5zIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGBJT19VUklOR2AgaWYgd2UgZW5hYmxlIGBCTEtfREVWX1VCTEtgLCBzbyB0aGF0IHN0cmVhbWxpbmVzIHRoaW5ncy4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYnV0IHRoaXMgc2hvdWxkIGJlIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjg6XHRjb25maWcgQkxLX0RFVl9VQkxLXG4gMzI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gMzMwOlx0XHRzZWxlY3QgSU9fVVJJTkdcbiAzMzE6XHRcdGhlbHBcbiAzMzI6XHRcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xuIDMzMzpcdFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXG4gMzM0Olx0XHQgIGRlZmluaXRpb24gaXNuJiMzOTt0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxuIDMzNTpcdFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxuIDMzNjpcdFxuIDMzNzpcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xuIDMzODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVwmIzM0O1xuIDMzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0aGVscFxuIDM0MjpcdFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XG4gMzQzOlx0XHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXG4gMzQ0Olx0XHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XG4gMzQ1Olx0XHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcbiAzNDY6XHRcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXG4gMzQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjg2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKklPX1VSSU5HIGFuZCBCTEtfREVWX1VCTEsgQ29uZmx1ZW5jZSoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgdGhlIGNvbnRleHQuIFdlJiMzOTtyZSBsZWFuaW5nIHRvd2FyZHMgYElPX1VSSU5HYCBoZXJlLCBzbyBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGF0IGFmZmVjdHMgdGhpbmdzLiBHaXZlbiB0aGF0LCBgQkxLX0RFVl9VQkxLYCAqc2hvdWxkKiBiZSBhZGVxdWF0ZSBmb3IgdGhlIGltbWVkaWF0ZSBuZWVkcywgd2hpY2ggc3RyZWFtbGluZXMgYSBmZXcgYXNzdW1wdGlvbnMgSSBoYWQgZWFybGllci4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBJL08uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggZGF0YSBtb3ZlbWVudCwgd2hpY2ggbWVhbnMgSSBzaG91bGQgZHJpbGwgZG93biBpbnRvIHRoZSBgaW1wb3J0X3VidWZgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGxpa2VseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcy4gSXQmIzM5O3MgcHJvYmFibHkgaW4gYGxpYi9pb3ZfaXRlci5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgcmVsYXRlZCwgc28gSSYjMzk7bGwgZGlnIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGV5IGFyZSBoYW5kbGluZyB0aGlzIHdob2xlIGRhdGEgZXhjaGFuZ2UuIEl0IHNob3VsZCBoYXZlIGFsbCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhlIGJ1ZmZlciBpbXBvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbXBvcnRfdWJ1ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9pb3ZfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9pb3ZfaXRlci5jPTEzNDI9c3RhdGljIHNzaXplX3QgX19pbXBvcnRfaW92ZWNfdWJ1ZihpbnQgdHlwZSwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYyxcbi0tXG5saWIvaW92X2l0ZXIuYy0xMzU3LVxubGliL2lvdl9pdGVyLmM6MTM1ODpcdHJldCA9IGltcG9ydF91YnVmKHR5cGUsIGlvdi1cdTAwM2Vpb3ZfYmFzZSwgaW92LVx1MDAzZWlvdl9sZW4sIGkpO1xubGliL2lvdl9pdGVyLmMtMTM1OS1cdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbmxpYi9pb3ZfaXRlci5jPTE0NDM9RVhQT1JUX1NZTUJPTChpbXBvcnRfaW92ZWMpO1xubGliL2lvdl9pdGVyLmMtMTQ0NC1cbmxpYi9pb3ZfaXRlci5jOjE0NDU6aW50IGltcG9ydF91YnVmKGludCBydywgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc3RydWN0IGlvdl9pdGVyICppKVxubGliL2lvdl9pdGVyLmMtMTQ0Ni17XG4tLVxubGliL2lvdl9pdGVyLmMtMTQ1NC19XG5saWIvaW92X2l0ZXIuYzoxNDU1OkVYUE9SVF9TWU1CT0xfR1BMKGltcG9ydF91YnVmKTtcbmxpYi9pb3ZfaXRlci5jLTE0NTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODY1CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBVYmxrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgZml4IGluIHRoZSB1YmxrIGRyaXZlci4gYGltcG9ydF91YnVmYCBpcyByZXR1cm5pbmcgYW4gaW50ZWdlciwgYW5kIHRoZSBwYXRjaCBpcyBjb3JyZWN0bHkgY2hlY2tpbmcgaWYgaXQmIzM5O3MgbGVzcyB0aGFuIHplcm8sIG1lYW5pbmcgYW4gZXJyb3Igb2NjdXJyZWQsIGFuZCBoYW5kbGluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgZHJpdmVyIGZyb20gaWdub3JpbmcgYSBmYWlsdXJlLCB3aGljaCBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIGJ1Zywgc28gaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBjb3ZlciB3aXRoIGZ1enppbmcuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IHRvdWNoZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBjb3JlIG1hcHBpbmcvdW5tYXBwaW5nIGZ1bmN0aW9ucywgSSYjMzk7bGwgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCkZvciB0YXJnZXRlZCBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgRm9jdXNTeW1ib2xzYCB0byBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19xdWV1ZV9ycWAsIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaGVzZSBmdW5jdGlvbnMgc2VlbSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgSU8gcGF0aCBhbmQgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBXZSByZWFsbHkgbmVlZCB0byBzdHJlc3MgdGVzdCB0aGUgZXJyb3IgcGF0aHMuCgpJJiMzOTtsbCBlbmFibGUgdGhlIGBCTEtfREVWX1VCTEtgIGNvbmZpZywgb2YgY291cnNlLgoKRmluYWxseSwgdGhlIGBSZWFzb25pbmdgIHdpbGwgYmU6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gaW1wb3J0X3VidWYgZmFpbHMgaW4gdWJsa19tYXBfaW8gYW5kIHVibGtfdW5tYXBfaW8sIGFuZCBoYW5kbGVzIHVubWFwcGVkX2J5dGVzID09IDAgaW4gX191YmxrX2NvbXBsZXRlX3JxLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB1YmxrIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy4mIzM0OyBUaGlzIHNob3VsZCBnaXZlIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiB3aHkgd2Ugd2FudCB0byBmdXp6IHRoaXMgcGF0Y2guIFdlIGFyZSBmb2N1c2luZyBvbiBpbnB1dHRpbmcgYSBsb3Qgb2YgZGl2ZXJzZSBkYXRhIGZvciB0aGUgYWZvcmVtZW50aW9uZWQgZnVuY3Rpb25zLCB3aGlsZSBlbnN1cmluZyB0byBoYW5kbGUgZXJyb3JzIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDt1YmxrX3F1ZXVlX3JxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIGltcG9ydF91YnVmIGZhaWxzIGluIHVibGtfbWFwX2lvIGFuZCB1YmxrX3VubWFwX2lvLCBhbmQgaGFuZGxlcyB1bm1hcHBlZF9ieXRlcyA9PSAwIGluIF9fdWJsa19jb21wbGV0ZV9ycS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdWJsayBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgd2hlbiBpbXBvcnRfdWJ1ZiBmYWlscyBpbiB1YmxrX21hcF9pbyBhbmQgdWJsa191bm1hcF9pbywgYW5kIGhhbmRsZXMgdW5tYXBwZWRfYnl0ZXMgPT0gMCBpbiBfX3VibGtfY29tcGxldGVfcnEuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHVibGsgZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MTcuOTM2NTI3NDU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTk4NTAxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVUJMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVibGtfY2hfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3JxXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3Jxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gaW1wb3J0X3VidWYgZmFpbHMgaW4gdWJsa19tYXBfaW8gYW5kIHVibGtfdW5tYXBfaW8sIGFuZCBoYW5kbGVzIHVubWFwcGVkX2J5dGVzID09IDAgaW4gX191YmxrX2NvbXBsZXRlX3JxLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB1YmxrIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MTcuOTM2NTMzMDk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTUxODkzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlOTc1MTcxNTY2NmIwMzQzNTc1OGI5Y2FlMGJlODhhNzg4MTNmYWE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjI3OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbmluZGV4IDRjYTZlYzczOGM5MzAuLjgxMDFjMmE3M2VmZGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuQEAgLTE0NzUsNyArMTQ3NSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfbWFwX2lvKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuIFxcdFxcdHN0cnVjdCBpb3ZfaXRlciBpdGVyO1xcbiBcXHRcXHRjb25zdCBpbnQgZGlyID0gSVRFUl9ERVNUO1xcbiBcXG4tXFx0XFx0aW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXFx1MDAzZWJ1Zi5hZGRyKSwgcnFfYnl0ZXMsIFxcdTAwMjZpdGVyKTtcXG4rXFx0XFx0aWYgKGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLVxcdTAwM2VidWYuYWRkciksIHJxX2J5dGVzLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2aXRlcikgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdFxcdHJldHVybiB1YmxrX2NvcHlfdXNlcl9wYWdlcyhyZXEsIDAsIFxcdTAwMjZpdGVyLCBkaXIpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBycV9ieXRlcztcXG5AQCAtMTQ5NCw5ICsxNDk3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa191bm1hcF9pbyhib29sIG5lZWRfbWFwLFxcbiBcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgaXRlcjtcXG4gXFx0XFx0Y29uc3QgaW50IGRpciA9IElURVJfU09VUkNFO1xcbiBcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKGlvLVxcdTAwM2VyZXMgXFx1MDAzZSBycV9ieXRlcyk7XFxuK1xcdFxcdGlmIChpbXBvcnRfdWJ1ZihkaXIsIHU2NF90b191c2VyX3B0cihpby1cXHUwMDNlYnVmLmFkZHIpLCBpby1cXHUwMDNlcmVzLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2aXRlcikgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdFxcdGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLVxcdTAwM2VidWYuYWRkciksIGlvLVxcdTAwM2VyZXMsIFxcdTAwMjZpdGVyKTtcXG4gXFx0XFx0cmV0dXJuIHVibGtfY29weV91c2VyX3BhZ2VzKHJlcSwgMCwgXFx1MDAyNml0ZXIsIGRpcik7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHJxX2J5dGVzO1xcbkBAIC0xNTg0LDggKzE1ODgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdWJsa19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXFxuIFxcdCAqXFxuIFxcdCAqIFJlLXJlYWQgc2ltcGx5IGZvciB0aGlzIHVubGlrZWx5IGNhc2UuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkodW5tYXBwZWRfYnl0ZXMgXFx1MDAzYyBpby1cXHUwMDNlcmVzKSlcXG4rXFx0aWYgKHVubGlrZWx5KHVubWFwcGVkX2J5dGVzIFxcdTAwM2MgaW8tXFx1MDAzZXJlcykpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCF1bm1hcHBlZF9ieXRlcykpIHtcXG4rXFx0XFx0XFx0cmVzID0gQkxLX1NUU19JT0VSUjtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpby1cXHUwMDNlcmVzID0gdW5tYXBwZWRfYnl0ZXM7XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJ1biBiaW8tXFx1MDAzZWJpX2VuZF9pbygpIHdpdGggc29mdGlycXMgZGlzYWJsZWQuIElmIHRoZSBmaW5hbCBmcHV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjE4LjMzMjQ3NTg2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTgwMjU0MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19xdWV1ZV9ycVwiLFxuICAgIFwidWJsa19xdWV1ZV9ycXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIGltcG9ydF91YnVmIGZhaWxzIGluIHVibGtfbWFwX2lvIGFuZCB1YmxrX3VubWFwX2lvLCBhbmQgaGFuZGxlcyB1bm1hcHBlZF9ieXRlcyA9PSAwIGluIF9fdWJsa19jb21wbGV0ZV9ycS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdWJsayBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5NzUxNzE1NjY2YjAzNDM1NzU4YjljYWUwYmU4OGE3ODgxM2ZhYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMjoyNzoxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggNGNhNmVjNzM4YzkzMC4uODEwMWMyYTczZWZkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5AQCAtMTQ3NSw3ICsxNDc1LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa19tYXBfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcbiBcdFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRcdGNvbnN0IGludCBkaXIgPSBJVEVSX0RFU1Q7XG4gXG4tXHRcdGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLVx1MDAzZWJ1Zi5hZGRyKSwgcnFfYnl0ZXMsIFx1MDAyNml0ZXIpO1xuK1x0XHRpZiAoaW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXHUwMDNlYnVmLmFkZHIpLCBycV9ieXRlcyxcbitcdFx0XHRcdFx1MDAyNml0ZXIpIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuIFx0XHRyZXR1cm4gdWJsa19jb3B5X3VzZXJfcGFnZXMocmVxLCAwLCBcdTAwMjZpdGVyLCBkaXIpO1xuIFx0fVxuIFx0cmV0dXJuIHJxX2J5dGVzO1xuQEAgLTE0OTQsOSArMTQ5NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfdW5tYXBfaW8oYm9vbCBuZWVkX21hcCxcbiBcdFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRcdGNvbnN0IGludCBkaXIgPSBJVEVSX1NPVVJDRTtcbiBcbi1cdFx0V0FSTl9PTl9PTkNFKGlvLVx1MDAzZXJlcyBcdTAwM2UgcnFfYnl0ZXMpO1xuK1x0XHRpZiAoaW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXHUwMDNlYnVmLmFkZHIpLCBpby1cdTAwM2VyZXMsXG4rXHRcdFx0XHRcdTAwMjZpdGVyKSBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gMDtcbiBcbi1cdFx0aW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXHUwMDNlYnVmLmFkZHIpLCBpby1cdTAwM2VyZXMsIFx1MDAyNml0ZXIpO1xuIFx0XHRyZXR1cm4gdWJsa19jb3B5X3VzZXJfcGFnZXMocmVxLCAwLCBcdTAwMjZpdGVyLCBkaXIpO1xuIFx0fVxuIFx0cmV0dXJuIHJxX2J5dGVzO1xuQEAgLTE1ODQsOCArMTU4OCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbyxcbiBcdCAqXG4gXHQgKiBSZS1yZWFkIHNpbXBseSBmb3IgdGhpcyB1bmxpa2VseSBjYXNlLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkodW5tYXBwZWRfYnl0ZXMgXHUwMDNjIGlvLVx1MDAzZXJlcykpXG4rXHRpZiAodW5saWtlbHkodW5tYXBwZWRfYnl0ZXMgXHUwMDNjIGlvLVx1MDAzZXJlcykpIHtcbitcdFx0aWYgKHVubGlrZWx5KCF1bm1hcHBlZF9ieXRlcykpIHtcbitcdFx0XHRyZXMgPSBCTEtfU1RTX0lPRVJSO1xuK1x0XHRcdGdvdG8gZXhpdDtcbitcdFx0fVxuK1xuIFx0XHRpby1cdTAwM2VyZXMgPSB1bm1hcHBlZF9ieXRlcztcbitcdH1cbiBcbiBcdC8qXG4gXHQgKiBSdW4gYmlvLVx1MDAzZWJpX2VuZF9pbygpIHdpdGggc29mdGlycXMgZGlzYWJsZWQuIElmIHRoZSBmaW5hbCBmcHV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyNzoxOC4zMzI0NzczODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTk3NTE2ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdWJsayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGNoYW5nZXMgdG8gYHVibGtfbWFwX2lvYCwgYHVibGtfdW5tYXBfaW9gLCBhbmQgYF9fdWJsa19jb21wbGV0ZV9ycWAuIFRoaXMgdGVsbHMgbWUgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBJL08gbWFwcGluZyBvciB1bm1hcHBpbmcgb3BlcmF0aW9ucywgYW5kIHRoZSBjb21wbGV0aW9uIG9mIHJlcXVlc3RzLlxuXG5UaGUgYml0IHRoYXQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoZSBjaGVjayBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbXBvcnRfdWJ1ZmAuIFJldHVybmluZyAwIG9uIGZhaWx1cmUgaW5kaWNhdGVzIGEgY2xlYXIgZXJyb3IgcGF0aC4gSXQncyBhIGZ1bmRhbWVudGFsIHNhZmV0eSBjaGVjaywgcHJldmVudGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcgaWYgdGhlIGJ1ZmZlciBpbXBvcnQgZmFpbHMuIEdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLCBlc3NlbnRpYWwgaW4gYSBibG9jayBkcml2ZXIuXG5cblRoZW4sIGxvb2tpbmcgYXQgYF9fdWJsa19jb21wbGV0ZV9ycWAsIHRoZSBjaGVjayBmb3IgYHVubWFwcGVkX2J5dGVzYCBiZWluZyB6ZXJvIGlzIGludGVyZXN0aW5nLiBJZiBubyBieXRlcyB3ZXJlIHVubWFwcGVkLCBpdCBzZXRzIGByZXMgPSBCTEtfU1RTX0lPRVJSYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIGFpbWVkIGF0IGhhbmRsaW5nIHVuZXhwZWN0ZWQgc2NlbmFyaW9zIHdoZXJlIHVubWFwcGluZyBmYWlscywgb3IgaGFzbid0IGFjdHVhbGx5IGhhcHBlbmVkLiBTZXR0aW5nIGBCTEtfU1RTX0lPRVJSYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBzaWduYWwgYW4gSS9PIGVycm9yIHRvIHRoZSB1cHBlciBsYXllcnMuIFRoZSBjb2RlIHRoZW4ganVtcHMgdG8gZXhpdC5cblxuVG8gZ2FpbiBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHBhcnRzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGZpbmQgdGhlIEtjb25maWcgb3B0aW9uIHRoYXQgaW5jbHVkZXMgYHVibGtfZHJ2Lm9gLiBUaGF0J2xsIGdpdmUgbWUgY29udGV4dCBvbiB3aGVuIHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZSBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGUgY2hhbmdlcyB3aWxsIGltcGFjdCB0aGUgYmxvY2sgZHJpdmVyIGluIHZhcmlvdXMgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MjQuMzI5OTk3NDIyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUyMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfZHJ2Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfQkxLX0RFVl9SVVNUX05VTEwpICs9IHJudWxsL1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzktXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTo0MDpvYmotJChDT05GSUdfQkxLX0RFVl9VQkxLKVxcdFxcdFxcdCs9IHVibGtfZHJ2Lm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTQxLW9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1ApICs9IHpsb29wLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MjQuMzc0MDU0NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE2NjI2ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGluIHF1ZXN0aW9uIGlzIGBCTEtfREVWX1VCTEtgLiBSaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgdGhpcyByZWxpZXMgb24gd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCB0byBkZXRlcm1pbmUgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBkZXNpZ24uIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MjcuNjkwNjgzNjExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDgyMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1VCTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MjcuNzM2MTcxMTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMjM1ODAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgdWJsayBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhpcyBgQkxLX0RFVl9VQkxLYCBLY29uZmlnIGVudHJ5LiBNeSBndXQgZmVlbGluZyBpcyB0byBzdGFydCBieSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzLCBhcyBhbHdheXMuIFdoYXQgb3RoZXIgZmVhdHVyZXMgKm11c3QqIGJlIGVuYWJsZWQgb3IgY29uZmlndXJlZCBmb3IgdGhpcyB0byBldmVuICpiZSogcmVsZXZhbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMgYmFrZWQgaW4sIG9yIGlzIGl0IG1vcmUgZ2VuZXJpYz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGltbWVkaWF0ZWx5LCB0aGF0J3Mgc3RlcCBvbmUsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3Igc3RvcmFnZSBkZXNpZ24uIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IElzIHRoaXMgKm9ubHkqIGZvciB1c2VyLXNwYWNlIGJsb2NrIGRldmljZXM/IElmIHNvLCB3aGF0IGRvZXMgdGhhdCBtZWFuIGZvciBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHBvdGVudGlhbCBsYXRlbmN5PyBBcmUgdGhlcmUgYW55IGNvbXBhdGliaWxpdHkgY29uc2lkZXJhdGlvbnMgSSBzaG91bGQgYmUgaW1tZWRpYXRlbHkgYXdhcmUgb2Ygd2l0aCBleGlzdGluZyBkcml2ZXJzIG9yIHN1YnN5c3RlbXM/IEknbSBob3BpbmcgdG8gc2VlIHdlbGwtY29tbWVudGVkIGNvZGUsIHRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgc3BlY2lmaWMgY2hvaWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjMxLjY2ODUzMTY4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjg6XFx0Y29uZmlnIEJMS19ERVZfVUJMS1xcbiAzMjk6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuIDMzMDpcXHRcXHRzZWxlY3QgSU9fVVJJTkdcXG4gMzMxOlxcdFxcdGhlbHBcXG4gMzMyOlxcdFxcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xcbiAzMzM6XFx0XFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXFxuIDMzNDpcXHRcXHQgIGRlZmluaXRpb24gaXNuJ3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXFxuIDMzNTpcXHRcXHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXFxuIDMzNjpcXHRcXG4gMzM3OlxcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbiAzMzg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuIDMzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRoZWxwXFxuIDM0MjpcXHRcXHQgIHVibGsgZHJpdmVyIHN0YXJ0ZWQgdG8gdGFrZSBwbGFpbiBjb21tYW5kIGVuY29kaW5nLCB3aGljaCB0dXJucyBvdXRcXG4gMzQzOlxcdFxcdCAgb25lIGJhZCB3YXkuIFRoZSB0cmFkaXRpb25hbCBpb2N0bCBjb21tYW5kIG9wY29kZSBlbmNvZGVzIG1vcmVcXG4gMzQ0OlxcdFxcdCAgaW5mbyBhbmQgYmFzaWNhbGx5IGRlZmluZXMgZWFjaCBjb2RlIHVuaXF1ZWx5LCBzbyBvcGNvZGUgY29uZmxpY3RcXG4gMzQ1OlxcdFxcdCAgaXMgYXZvaWRlZCwgYW5kIGRyaXZlciBjYW4gaGFuZGxlIHdyb25nIGNvbW1hbmQgZWFzaWx5LCBtZWFudGltZSBpdFxcbiAzNDY6XFx0XFx0ICBtYXkgaGVscCBzZWN1cml0eSBzdWJzeXN0ZW0gdG8gYXVkaXQgaW9fdXJpbmcgY29tbWFuZC5cXG4gMzQ3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyNzozMS42Njg2MDIxMTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTkyMDg5NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVUJMSyBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYEJMS19ERVZfVUJMS2AuIFJpZ2h0LCBnb3QgaXQuIE15IHRhc2sgaW52b2x2ZXMgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGFwcGFyZW50bHkgdG91Y2hlcyB0aGUgY29yZSBVQkxLIEkvTyBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIG1vZGlmeWluZyB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgdWJsa19tYXBfaW9gLCBgdWJsa191bm1hcF9pb2AsIGFuZCBgX191YmxrX2NvbXBsZXRlX3JxYC4gVGhlIGltbWVkaWF0ZSBjaGFsbGVuZ2UgaXMgdGhhdCB0aGVzZSBhcmUgKnN0YXRpYyogZnVuY3Rpb25zLiBUaGF0IG1lYW5zIHRoZXkncmUgaW50ZXJuYWwgdG8gdGhlIFVCTEsgbW9kdWxlLlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljLCBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiB0aGVzZSBzdGF0aWMgb25lcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZSBleHRlcm5hbCBBUEkgY2FsbHMgZG93biBpbnRvIHRoZXNlIG1vZGlmaWVkIGludGVybmFscy4gSSB3YW50IHRvIHNlZSB3aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGFjdHVhbGx5ICpkb2VzKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucy4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIG1ha2UgaXQgdmVyeSBlYXN5IHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjM3LjI2MDY5NDE2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwODY3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19tYXBfaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNDU0PXN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX25lZWRfdW5tYXBfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTQ1OS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTQ2MDpzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfbWFwX2lvKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0NjEtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzQ0PXN0YXRpYyBib29sIHVibGtfc3RhcnRfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNzUyLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNzUzOlxcdG1hcHBlZF9ieXRlcyA9IHVibGtfbWFwX2lvKHVicSwgcmVxLCBpbyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE3NTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjM3LjMwMjc4NzAyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3NDk1NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIEkvTyBQYXRoIGluIFVibGsqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBVYmxrIGNvZGUsIGFuZCBJIHNlZSB0aGF0IGB1YmxrX3N0YXJ0X2lvYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGluaXRpYXRpbmcgSS9PIG9wZXJhdGlvbnMuIE5vdywgd2hlcmUgaXMgKnRoYXQqIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBJL08gcHJvY2VzcyBiZWdpbnMuIEkgd2FudCB0byBzZWUgaG93IGB1YmxrX3N0YXJ0X2lvYCBpbnRlcmFjdHMgd2l0aCB0aGUgbWFwcGluZyBwcm9jZXNzIHdoaWNoIGl0IGNhbGxzIChgdWJsa19tYXBfaW9gKS4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgdWJsa19zdGFydF9pb2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIEkvTyBpcyBhY3R1YWxseSAqc3RhcnRlZCogd2l0aGluIHRoaXMgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6NDAuNzgwMjg0ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg0MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfc3RhcnRfaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzMwPXN0YXRpYyB2b2lkIHVibGtfYXV0b19idWZfZGlzcGF0Y2goY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNzQzLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNzQ0OnN0YXRpYyBib29sIHVibGtfc3RhcnRfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTc0NS1cXHRcXHRcXHQgIHN0cnVjdCB1YmxrX2lvICppbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzc4PXN0YXRpYyB2b2lkIHVibGtfZGlzcGF0Y2hfcmVxKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTgxNS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTgxNjpcXHRpZiAoIXVibGtfc3RhcnRfaW8odWJxLCByZXEsIGlvKSlcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTgxNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTgyNz1zdGF0aWMgYm9vbCBfX3VibGtfYmF0Y2hfcHJlcF9kaXNwYXRjaChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE4MzYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjE4Mzc6XFx0aWYgKCF1YmxrX3N0YXJ0X2lvKHVicSwgcmVxLCBpbykpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE4MzgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNDg9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2Mi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM2MzpcXHRyZXR1cm4gdWJsa19zdGFydF9pbyh1YnEsIHJlcSwgaW8pO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6NDAuODI1MTc0NjE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTQyODgzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbnJhdmVsaW5nIHRoZSBJL08gUGF0aCBhbmQgVW5tYXAgQ2FsbHMqKlxuXG5SaWdodCwgc28gYHVibGtfZGlzcGF0Y2hfcmVxYCwgYF9fdWJsa19iYXRjaF9wcmVwX2Rpc3BhdGNoYCwgYW5kIGB1YmxrX2dldF9kYXRhYCBhbGwgZXZlbnR1YWxseSBsZWFkIHRvIGEgY2FsbCB0byBgdWJsa19zdGFydF9pb2AuIFRoYXQncyB0aGUgY29yZSBJL08gaW5pdGlhdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhpcyBgdWJsa2AgY29udGV4dC4gTWFrZXMgc2Vuc2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgd2hvJ3MgcmVzcG9uc2libGUgZm9yIHRoZSBjbGVhbnVwPyBNb3JlIHNwZWNpZmljYWxseSwgd2hlcmUgYXJlIHdlIHNlZWluZyBgdWJsa191bm1hcF9pb2AgY2FsbHMgaGFwcGVuaW5nPyBLbm93aW5nIHdobyBjYWxscyBgdWJsa191bm1hcF9pb2AgaXMgY3J1Y2lhbCB0byBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBJL08gbGlmZWN5Y2xlIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGluZ3MgYXJlIHByb3Blcmx5IHVuZG9uZSBhbmQgcmVsZWFzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyNzo0NC4zMzk0NjU4ODdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDExNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfdW5tYXBfaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNDYwPXN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa19tYXBfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNDg2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNDg3OnN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa191bm1hcF9pbyhib29sIG5lZWRfbWFwLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNDg4LVxcdFxcdGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTU1Mz1zdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNTgzLVxcdC8qIGZvciBSRUFEIHJlcXVlc3QsIHdyaXRpbmcgZGF0YSBpbiBpb2QtXFx1MDAzZWFkZHIgdG8gcnEgYnVmZmVycyAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNTg0OlxcdHVubWFwcGVkX2J5dGVzID0gdWJsa191bm1hcF9pbyhuZWVkX21hcCwgcmVxLCBpbyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1ODUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjQ0LjM4MTg4NTc4NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQ2OTYwNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJL08gQ29tcGxldGlvbiBQYXRoIGluIHVibGsqKlxuXG5BbHJpZ2h0LCBzbyBgX191YmxrX2NvbXBsZXRlX3JxYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBjb21wbGV0aW9uIG9mIGEgcmVxdWVzdCBpbiB0aGUgdWJsayBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIGNvbXBsZXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGNhbGwgY2hhaW4gbGVhZGluZyB1cCB0byBpdCwgc2luY2UgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdyBpcyBlc3NlbnRpYWwgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMgaW4gYmxvY2sgZHJpdmVycy4gSSByZW1lbWJlciBgX191YmxrX2NvbXBsZXRlX3JxYCBjYWxscyBgdWJsa191bm1hcF9pb2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBhZnRlciB0aGUgSS9PIGlzIGRvbmUgdGhlIG1hcHBpbmcgaXMgYmVpbmcgdW5tYXBwZWQuIEJ1dCB0aGUgbW9yZSBwcmVzc2luZyBxdWVzdGlvbiBpczogd2hvLCBleGFjdGx5LCBpcyBjYWxsaW5nIHRoaXMgY29tcGxldGlvbiByb3V0aW5lLCBgX191YmxrX2NvbXBsZXRlX3JxYD8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgdGhlIGRpZmZlcmVudCBwb3NzaWJsZSBjYWxsaW5nIHNpdGVzLiBBIGRlZXBlciBkaXZlIGlzIGluIG9yZGVyIHRvIHBhaW50IHRoZSBiaWcgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjUyLjUyODg0OTE1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MzQyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX191YmxrX2NvbXBsZXRlX3JxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NzczPXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19zZXR1cF9pb2Rfem9uZWQoc3RydWN0IHVibGtfcXVldWUgKnVicSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03ODAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjc4MTpzdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbyxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzgyLVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgbmVlZF9tYXAsIHN0cnVjdCBpb19jb21wX2JhdGNoICppb2IpO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTExOTI9c3RhdGljIGlubGluZSB2b2lkIHVibGtfcHV0X3JlcV9yZWYoc3RydWN0IHVibGtfaW8gKmlvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTExOTctXFx0LyogdWJsa19uZWVkX21hcF9pbygpIGFuZCB1YmxrX25lZWRfcmVxX3JlZigpIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKi9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTE5ODpcXHRfX3VibGtfY29tcGxldGVfcnEocmVxLCBpbywgZmFsc2UsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMTk5LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNTQ1PXN0YXRpYyB2b2lkIHVibGtfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgYmxrX3N0YXR1c190IGVycm9yKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1NTItLyogdG9kbzogaGFuZGxlIHBhcnRpYWwgY29tcGxldGlvbiAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNTUzOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VibGtfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNTU0LVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgbmVlZF9tYXAsIHN0cnVjdCBpb19jb21wX2JhdGNoICppb2IpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjY4MD1zdGF0aWMgdm9pZCBfX3VibGtfZmFpbF9yZXEoc3RydWN0IHVibGtfZGV2aWNlICp1Yiwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI2ODktXFx0XFx0aW8tXFx1MDAzZXJlcyA9IC1FSU87XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI2OTA6XFx0XFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI2OTEtXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNjY9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQ2Ny1cXHRcXHRpZiAoY29tcGwpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM0Njg6XFx0XFx0XFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0NjktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzc3MD1zdGF0aWMgaW50IHVibGtfYmF0Y2hfY29tbWl0X2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzgxMy1cXHRpZiAoY29tcGwpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM4MTQ6XFx0XFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKGRhdGEtXFx1MDAzZXViKSwgZGF0YS1cXHUwMDNlaW9iKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzgxNS1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6NTIuNTcxNzkyMzcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODE5MjIyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzpcblxuKipBbmFseXppbmcgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCBhbmQgYHVibGtfYmF0Y2hfY29tbWl0X2lvYCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgYW5kIGB1YmxrX2JhdGNoX2NvbW1pdF9pb2AuIFNlZW1zIGxpa2UgdGhlc2UgYXJlIGJvdGggKmNyaXRpY2FsKiBjb21wb25lbnRzIHdpdGhpbiB0aGUgdWJsayBpb191cmluZyBjb21tYW5kIGhhbmRsaW5nIHBhdGh3YXkg4oCTIHRoZXkncmUgZWl0aGVyIGRpcmVjdCBoYW5kbGVycyB0aGVtc2VsdmVzIG9yIGFyZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aG9zZSBoYW5kbGVycy4gSSdkIGV4cGVjdCB0byBzZWUgdGhlc2UgaW4gdGhlIGZhc3QgcGF0aC4gR2l2ZW4gdGhhdCwgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIHByZWNpc2VseSB3aGF0IGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgaXMgZG9pbmcuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgaW9fdXJpbmcgb3BlcmF0aW9ucyBhcmUgcHJvY2Vzc2VkLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODE2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6NTYuODUzNzE3NjkyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQyMTA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNDg9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2NS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM2NjpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2Ny1cXHRcXHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzUyNz1zdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMzLVxcdGlmICghdHcuY2FuY2VsKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM0OlxcdFxcdHJldCA9IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM1LVxcdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1Mzk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUxLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTUyOlxcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU1My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjU2Ljg5ODE0MzgxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI3NDI1OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIGlvX3VyaW5nIENvbW1hbmQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLCBhcyBJIHNlZSBpdCwgaXMgYHVibGtfY2hfdXJpbmdfY21kYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWFnaWMgc3RhcnRzIGZvciBoYW5kbGluZyBpb191cmluZyBjb21tYW5kcyB3aXRoaW4gdGhlIHVibGsgZnJhbWV3b3JrLCBvciBhdCBsZWFzdCwgdGhhdCdzIHdoYXQgbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIHN1Z2dlc3RzLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGhlcmUgaXMgdG8gZGl2ZSBkZWVwIGludG8gdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGFuYWx5c2lzIG9mIGB1YmxrX2NoX3VyaW5nX2NtZGAgYW5kIHVucmF2ZWwgdGhlIG1lY2hhbmljcyBvZiBpdHMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0J3Mgb3JjaGVzdHJhdGluZyB0aGUgY29tbWFuZCBwcm9jZXNzaW5nLCBxdWV1aW5nLCBhbmQgZXZlbnR1YWwgZXhlY3V0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBjb21tYW5kIHR5cGVzLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UsIGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBzdWJtaXNzaW9uIGFuZCBjb21wbGV0aW9uIHByb2Nlc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjAxLjYyNTU3Mjc0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0Njc2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzQ4PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjUtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNjY6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjctXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM0OTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdCAqX191YmxrX2NoZWNrX2FuZF9nZXRfcmVxKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyNi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyNzpzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzMy1cXHRpZiAoIXR3LmNhbmNlbClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzNDpcXHRcXHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzNS1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM4LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM5OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDAte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDctXFx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU0ODpcXHRcXHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0OS1cXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NTEtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NTI6XFx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUzLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTU1LVxcdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTU2OlxcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE1Ny1cXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MDEuNjcxMDQ2MTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4MDk4MjAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVYmxrIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB1YmxrX2NoX3VyaW5nX2NtZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgYC51cmluZ19jbWRgLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgdWJsa19jaF9mb3BzYCB3aXRoaW4gdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIsIGB1YmxrX2Rydi5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhlIHBhcnQgdGhhdCdzIGdyYWJiaW5nIG15IGF0dGVudGlvbiBpcyBob3cgaXQgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZhaWx1cmUgb2YgYGltcG9ydF91YnVmYC4gSXQncyByZXR1cm5pbmcgZWl0aGVyIDAgb3Igc2V0dGluZyBgQkxLX1NUU19JT0VSUmAuIEknbSBhbHJlYWR5IHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmc7IHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGlzIGFyZWEgaXMgb2Z0ZW4gYSBzb3VyY2Ugb2YgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcy5cblxuTm93LCB0aGUgY29uZmlndXJhdGlvbiBpcyB0aWVkIHRvIGBCTEtfREVWX1VCTEtgLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAsIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGFzIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gV2FpdCwgc2NyYXRjaCB0aGF0LCBgdWJsa19jaF91cmluZ19jbWRgICppcyogdGhlIG1haW4gZW50cnkgcG9pbnQsIHNvIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBtb3N0IGNydWNpYWwuIEhvd2V2ZXIsIEknbSBhbHNvIHNlZWluZyBgdWJsa19jaF93cml0ZV9pdGVyYCBtZW50aW9uZWQuIEhtbSwgdGhpcyBwYXRjaCBtb2RpZmllcyBib3RoIGB1YmxrX21hcF9pb2AgYW5kIGB1YmxrX3VubWFwX2lvYC4gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIGB1YmxrX3N0YXJ0X2lvYCBhbmQgYF9fdWJsa19jb21wbGV0ZV9ycWAsIHdoaWNoIGFyZSBjb3JlIHRvIGFueSBibG9jayBJL08gb3BlcmF0aW9uLiBMZXQgbWUgdHJhY2UgYmFjay4uLiBgdWJsa19zdGFydF9pb2AgaXMgY2FsbGVkIGZyb20gYHVibGtfZGlzcGF0Y2hfcmVxYCwgYF9fdWJsa19iYXRjaF9wcmVwX2Rpc3BhdGNoYCwgYW5kIGV2ZW4gYHVibGtfZ2V0X2RhdGFgLiBBbmQgYHVibGtfZGlzcGF0Y2hfcmVxYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYHVibGtfcXVldWVfcnFgLiBTbywgdGhlcmUgYXJlIHNldmVyYWwga2V5IHBvaW50cyBvZiBpbnRlZ3JhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIG9mIHRoZXNlIHBvaW50cyBpbiBkZXRhaWwuIFRoZSBpbnRlcmFjdGlvbiBvZiBgbWFwYCwgYHVubWFwYCwgYW5kIHRoZSBjb21tYW5kIHN1Ym1pc3Npb24gZmxvdyBpdHNlbGYgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgZm9yIHRoZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjA3Ljg1MjAzMTcxMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMzQ1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19xdWV1ZV9ycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIzOT1zdHJ1Y3QgdWJsa19xdWV1ZSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjU3LVxcdCAqXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1ODpcXHQgKiBUaGVyZSBhcmUgbXVsdGlwbGUgd3JpdGVyIGZyb20gdWJsa19xdWV1ZV9ycSgpIG9yIHVibGtfcXVldWVfcnFzKCksXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1OS1cXHQgKiBzbyBsb2NrIGlzIHJlcXVpcmVkIGZvciBzdG9yaW5nIHJlcXVlc3QgdGFnIHRvIGZpZm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMTQ3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19wcmVwX3JlcShzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE4NC0gKi9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE4NTpzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBfX3VibGtfcXVldWVfcnFfY29tbW9uKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTEtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMTI6c3RhdGljIGJsa19zdGF0dXNfdCB1YmxrX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjEzLVxcdFxcdGNvbnN0IHN0cnVjdCBibGtfbXFfcXVldWVfZGF0YSAqYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxOS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIyMDpcXHRyZXMgPSBfX3VibGtfcXVldWVfcnFfY29tbW9uKHVicSwgcnEsIFxcdTAwMjZzaG91bGRfcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjIxLVxcdGlmICghc2hvdWxkX3F1ZXVlKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIyMjg9c3RhdGljIGJsa19zdGF0dXNfdCB1YmxrX2JhdGNoX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMzUtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMzY6XFx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcXHUwMDI2c2hvdWxkX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIzNy1cXHRpZiAoIXNob3VsZF9xdWV1ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMjUyPXN0YXRpYyB2b2lkIHVibGtfY29tbWl0X3JxcyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY0LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjY1OnN0YXRpYyB2b2lkIHVibGtfcXVldWVfcnFzKHN0cnVjdCBycV9saXN0ICpycWxpc3QpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyNjYte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIzNTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHVibGtfbXFfb3BzID0ge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzU1OlxcdC5xdWV1ZV9ycSAgICAgICA9IHVibGtfcXVldWVfcnEsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIzNTY6XFx0LnF1ZXVlX3JxcyAgICAgID0gdWJsa19xdWV1ZV9ycXMsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIzNTctXFx0LmluaXRfaGN0eFxcdD0gdWJsa19pbml0X2hjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjczNT1zdGF0aWMgdm9pZCB1YmxrX3N0YXJ0X2NhbmNlbChzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDQtXFx0XFx0LypcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc0NTpcXHRcXHQgKiBRdWllc2NlIHRvIHNlcmlhbGl6ZSB3aXRoIHVibGtfcXVldWVfcnEoKSwgZW5zdXJpbmdcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc0Ni1cXHRcXHQgKiB1YnEtXFx1MDAzZWNhbmNlbGluZyBpcyB2aXNpYmxlIHdoZW4gdGhlIHF1ZXVlIHJlc3VtZXMuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc1My1cXHRcXHQgKiBEaXNrIG5vdCB5ZXQgYWxsb2NhdGVkIGJ5IHVibGtfY3RybF9zdGFydF9kZXYoKSwgc29cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc1NDpcXHRcXHQgKiB0aGVyZSBpcyBubyByZXF1ZXN0IHF1ZXVlIGFuZCB1YmxrX3F1ZXVlX3JxKCkgY2Fubm90XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NTUtXFx0XFx0ICogYmUgcnVubmluZy4gIEp1c3Qgc2V0IHRoZSBmbGFnOyBpZiBzdGFydF9kZXYgcHJvY2VlZHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MDcuODk1MTcwNzI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0Mjk3NjU2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVWJsayBRdWV1ZSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYmxvY2sgbGF5ZXIgcXVldWUgZnVuY3Rpb25zIGZvciBVYmxrLCBzcGVjaWZpY2FsbHkgYHVibGtfcXVldWVfcnFgIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlLCBidXQgbGV0J3Mgc2VlIHdoZXJlIHRoZSBmb2N1cyBsaWVzLiBJJ20gdGhpbmtpbmcgdGhlIGtleSBzeW1ib2xzIG1pZ2h0IGJlIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX3F1ZXVlX3JxYCwgYW5kIGB1YmxrX3F1ZXVlX3Jxc2AuIFdhaXQsIHJpZ2h0LCBgdWJsa19jaF91cmluZ19jbWRgIGhhbmRsZXMgdGhlIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYm90aCBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19xdWV1ZV9ycWAuXG5cbk5vdywgaXMgYEJMS19ERVZfVUJMS2AgdGhlIG9ubHkgY29uZmlnIGluIHBsYXkgaGVyZT8gWWVwLCBpdCBsb29rcyBsaWtlIGl0LiBPa2F5LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYEJMS19ERVZfVUJMS2AgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEhtbSwgaXQgZGVwZW5kcyBvbiBgSU9fVVJJTkdgLCBhbmQsIGFzIEkgdGhvdWdodCwgaXQgKnNlbGVjdHMqIGBJT19VUklOR2AuIEFscmlnaHQsIHRpbWUgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUgb25jZSBtb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI5MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODoxMy4zMjQ5MzkzODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzAyMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1VCTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MTMuMzY4NjQ5NTA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjAxNzg2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBTeW1ib2wgUHJpb3JpdGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBzZWVtcyB0byBiZSBvbiBgQkxLX0RFVl9VQkxLYC4gUmlnaHQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBpcyBpbW1lZGlhdGVseSBjb25uZWN0ZWQgdG8gdGhpcy4gYHVibGtfY2hfdXJpbmdfY21kYCwgYHVibGtfcXVldWVfcnFgLCBgdWJsa19xdWV1ZV9ycXNgLCBgdWJsa19iYXRjaF9xdWV1ZV9ycWAsIGFuZCBgdWJsa19jb21taXRfcnFzYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2NiYCBhcmUgYWxsIGluIHRoZSBtaXguXG5cbkFscmlnaHQsIEknbGwgc2V0IG15IG1lbnRhbCBgRm9jdXNTeW1ib2xzYCB0byBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19xdWV1ZV9ycWAsIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGNvcmUgYXJlYXMgdG8gaW52ZXN0aWdhdGUgZnVydGhlciwgYXQgbGVhc3QgZm9yIG5vdy5cblxuV2FpdCwgYHVibGtfY2hfdXJpbmdfY21kYCBmZWVscyBsaWtlIHRoZSBiZXN0IGVudHJ5IHBvaW50IHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQgbWUgZG91YmxlLWNoZWNrIGlmIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgaXMgc3RhdGljLiBZZXMgaXQgaXMsIHNvIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXRzZWxmIGlzIHRoZSBub24tc3RhdGljIG9uZS4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGltcHJlc3Npb24uXG5cbkhvd2V2ZXIsIGEgcXVlc3Rpb24ganVzdCBwb3BwZWQgdXAuIGB1YmxrX3F1ZXVlX3JxYCBpcyBzdGF0aWM/IEhtbS4uLiBPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCBtZSBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODoxOS4wMjg4MzE1NzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mzg3NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfcXVldWVfcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMzk9c3RydWN0IHVibGtfcXVldWUge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1Ny1cXHQgKlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyNTg6XFx0ICogVGhlcmUgYXJlIG11bHRpcGxlIHdyaXRlciBmcm9tIHVibGtfcXVldWVfcnEoKSBvciB1YmxrX3F1ZXVlX3JxcygpLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNTktXFx0ICogc28gbG9jayBpcyByZXF1aXJlZCBmb3Igc3RvcmluZyByZXF1ZXN0IHRhZyB0byBmaWZvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE0Nz1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcHJlcF9yZXEoc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODQtICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxODU6c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgX191YmxrX3F1ZXVlX3JxX2NvbW1vbihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTg2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjExLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjEyOnN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMy1cXHRcXHRjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTktXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMjA6XFx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcXHUwMDI2c2hvdWxkX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIyMS1cXHRpZiAoIXNob3VsZF9xdWV1ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMjI4PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19iYXRjaF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjM1LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjM2OlxcdHJlcyA9IF9fdWJsa19xdWV1ZV9ycV9jb21tb24odWJxLCBycSwgXFx1MDAyNnNob3VsZF9xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMzctXFx0aWYgKCFzaG91bGRfcXVldWUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjI1Mj1zdGF0aWMgdm9pZCB1YmxrX2NvbW1pdF9ycXMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjI2NC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjI2NTpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3JxcyhzdHJ1Y3QgcnFfbGlzdCAqcnFsaXN0KVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMzU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB1YmxrX21xX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NTpcXHQucXVldWVfcnEgICAgICAgPSB1YmxrX3F1ZXVlX3JxLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzU2OlxcdC5xdWV1ZV9ycXMgICAgICA9IHVibGtfcXVldWVfcnFzLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMzU3LVxcdC5pbml0X2hjdHhcXHQ9IHVibGtfaW5pdF9oY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI3MzU9c3RhdGljIHZvaWQgdWJsa19zdGFydF9jYW5jZWwoc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzQ0LVxcdFxcdC8qXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NDU6XFx0XFx0ICogUXVpZXNjZSB0byBzZXJpYWxpemUgd2l0aCB1YmxrX3F1ZXVlX3JxKCksIGVuc3VyaW5nXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDYtXFx0XFx0ICogdWJxLVxcdTAwM2VjYW5jZWxpbmcgaXMgdmlzaWJsZSB3aGVuIHRoZSBxdWV1ZSByZXN1bWVzLlxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NTMtXFx0XFx0ICogRGlzayBub3QgeWV0IGFsbG9jYXRlZCBieSB1YmxrX2N0cmxfc3RhcnRfZGV2KCksIHNvXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NTQ6XFx0XFx0ICogdGhlcmUgaXMgbm8gcmVxdWVzdCBxdWV1ZSBhbmQgdWJsa19xdWV1ZV9ycSgpIGNhbm5vdFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzU1LVxcdFxcdCAqIGJlIHJ1bm5pbmcuICBKdXN0IHNldCB0aGUgZmxhZzsgaWYgc3RhcnRfZGV2IHByb2NlZWRzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjE5LjA3MzIyNTk0OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQwOTAxNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHVibGtfcXVldWVfcnFgIEZ1bmN0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGB1YmxrX3F1ZXVlX3JxYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgcmVjYWxsIHNvbWUgYWR2aWNlOiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLiBCdXQgd2FpdCBhIG1pbnV0ZSwgYHVibGtfcXVldWVfcnFgICppcyogYSBjYWxsYmFjaywgc3BlY2lmaWNhbGx5IGZvciB0aGUgYC5xdWV1ZV9ycWAgZmllbGQsIHJpZ2h0PyBUaGF0IG1lYW5zIGl0cyBhZGRyZXNzIGlzIGRlZmluaXRlbHkgdGFrZW4gYW5kIGl0J3MgYWxtb3N0IGNlcnRhaW5seSAqbm90KiBiZWluZyBpbmxpbmVkLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gVGhlIGNvbXBpbGVyIG5lZWRzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgZm9yIGl0LlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBxdWV1aW5nIHByb2Nlc3M/IEkgc2hvdWxkIHJlYWxseSBjaGVjayBgdWJsa19kcnYuY2AgdGhvcm91Z2hseSBmb3IgYWx0ZXJuYXRpdmVzLiBUaGF0J3MgdGhlIHBsYWNlIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWxseSBtb3JlIHN1aXRhYmxlLCBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDIsIk91dHB1dFRva2VucyI6NjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MjQuNTE0MTMwMzM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI2MTAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01MzA9c3RydWN0IHVibGtfem9uZWRfcmVwb3J0X2Rlc2Mge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzNS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTM2OnN0YXRpYyBERUZJTkVfWEFSUkFZKHVibGtfem9uZWRfcmVwb3J0X2Rlc2NzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTM3LVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTc4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIHVibGtfY2hyX2NsYXNzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc4OC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Nzg5OnN0YXRpYyBERUZJTkVfSURSKHVibGtfaW5kZXhfaWRyKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzkwOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWJsa19pZHJfbG9jayk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc5MS1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgdWJsa19pZHJfd3E7XFx0Lyogd2FpdCB1bnRpbCBvbmUgaWRyIGlzIGZyZWVkICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc5Mi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzkzOnN0YXRpYyBERUZJTkVfTVVURVgodWJsa19jdGxfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjI0LjU2MDM5NTcwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODk1NzU5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdWJsa19kcnYuYydzIERhdGEgRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIGB1YmxrX2Rydi5jYCBhbmQgaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgZGF0YSB0eXBlcy4gTXkgYXBwcm9hY2ggaXMgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGUgc3RydWN0dXJlcyBhbmQga2V5IHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4gSSdtIG1lbnRhbGx5IHNlYXJjaGluZywgb3IgcmF0aGVyLCBJICp3b3VsZCogYmUgc2VhcmNoaW5nLCBmb3IgdGhlIHR5cGljYWwgc3VzcGVjdHMgaW4gQyBrZXJuZWwgY29kZTogYF5pbnQgYCwgYF52b2lkIGAsIGBeYm9vbCBgLCBgXnVuc2lnbmVkIGAuIFRob3NlIGFyZSBteSBiYXNpYyBwcmltaXRpdmVzLiBCdXQgSSB3b24ndCBzdG9wIHRoZXJlLiBJIGFsc28gd2FudCB0byBzZWUgaWYgYW55IGN1c3RvbSB0eXBlcyBhcmUgZGVmaW5lZCwgc28gSSBhbSBnb2luZyB0byBzZWFyY2ggZm9yIGBec3RydWN0IGAsIGJlY2F1c2UgdGhhdCB3aWxsIGxldCBtZSBrbm93IHdoYXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZC4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9yIHByb2plY3Qtc3BlY2lmaWMgdHlwZXMsIHNvIEknZCBxdWlja2x5IHdhbnQgdG8gc2VlIGlmIHNvbWV0aGluZyBsaWtlIGBeYmxrX3N0YXR1c190IGAgc2hvd3MgdXAuIFRoYXQga2luZCBvZiB0aG9yb3VnaG5lc3MgdXAgZnJvbnQgZ2l2ZXMgbWUgdGhlIHNjYWZmb2xkaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIG1hbmlwdWxhdGVzIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgYW55IHBvdGVudGlhbCBkZXNpZ24gY2hvaWNlcyBiYXNlZCBvbiB0aG9zZSB0eXBlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTYsIk91dHB1dFRva2VucyI6NjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODozMC40NTYxNTg2MDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI2MTc2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxib29sfHVuc2lnbmVkfHN0cnVjdHxibGtfc3RhdHVzX3QpIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjMwLjYwNDQyNzYzNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQwODU4OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSXMgRXZlcnl0aGluZyBSZWFsbHkgU3RhdGlvbmFyeT8gTGV0J3MgUHJvYmUgYG1vZHVsZV9pbml0YCoqXG5cbkFscmlnaHQsIEknbSBnZXR0aW5nIGEgaHVuY2ggaGVyZS4gSSdtIHdvbmRlcmluZyBpZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzIGlzIGluaGVyZW50bHkgc3RhdGljLiBJdCdzIGEgZ3V0IGZlZWxpbmcsIGJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gbW9yZSBjb21wbGV4IGFuYWx5c2lzLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBUaGF0IHRob3VnaHQgbGVhZHMgbWUgdG8gYG1vZHVsZV9pbml0YC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgaW5pdGlhbCBzZXR1cCBoYXBwZW5zLCB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIGV2ZXJ5dGhpbmcgZWxzZSBpcyBidWlsdC4gSSdtIHRoaW5raW5nIHRoYXQgaWYgdGhlICdzdGF0aWMnIGNoYXJhY3RlcmlzdGljIHRoYXQgSSdtIHNlZWluZyByZWFsbHkgZXhpc3RzLCB0aGVyZSBtYXkgYmUgc29tZSBjbHVlcyB0aGVyZS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIG1vZHVsZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkLiBQZXJoYXBzIHNvbWUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBpbiBhIHdheSB3aGljaCBsaW1pdHMgdGhlaXIgZmxleGliaWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHBvaW50IG9mIG9yaWdpbiwgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgc2V0IHVwLiBBbmFseXppbmcgYG1vZHVsZV9pbml0YCBtaWdodCBnaXZlIG1lIHRoZSBiYXNlIGZhY3RzIG9mIHRoZSBtYXR0ZXIuIEkgc3VzcGVjdCB0aGF0IHRoaXMgbWF5IGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MzQuNjQ1Mjg5MTMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUzNTAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU5MDg9c3RhdGljIHZvaWQgX19leGl0IHVibGtfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU5MjItXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU5MjM6bW9kdWxlX2luaXQodWJsa19pbml0KTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTkyNC1tb2R1bGVfZXhpdCh1YmxrX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODozNC42ODk4Mjg2MjlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxMzE0NjEyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdWJsayBGdW5jdGlvbiBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGFuYWx5emUgdGhpcyBgdWJsa2AgY29kZS4gSWYgZXZlcnl0aGluZyBvZiBpbXBvcnRhbmNlIGlzIHN0YXRpYywgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyB0cmVtZW5kb3VzbHkuIEkgY2FuIGp1c3QgZm9jdXMgb24gdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFjdCBhcyBjYWxsYmFja3Mgb3IgZW50cnkgcG9pbnRzLiBcblxuUmlnaHQgb2ZmIHRoZSBiYXQsIGB1YmxrX2NoX3VyaW5nX2NtZGAgc2VlbXMgcHJvbWlzaW5nLiBBbHNvLCBgdWJsa19xdWV1ZV9ycWAsIGB1YmxrX3F1ZXVlX3Jxc2AsIGB1YmxrX2JhdGNoX3F1ZXVlX3JxYCwgYW5kIGB1YmxrX2NoX3dyaXRlX2l0ZXJgLiBMZXQncyBjb25maXJtIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgc3RhdGljLiBZZXAsIGl0IGlzLiBTaW5jZSB0aGV5IGFyZSBhbGwgc3RhdGljLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2ltcGx5IGxpc3QgYHVibGtfY2hfdXJpbmdfY21kYCwgYHVibGtfcXVldWVfcnFgLCBhbmQgYHVibGtfcXVldWVfcnFzYC5cblxuV2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJJ3ZlIG92ZXJsb29rZWQgc29tZXRoaW5nIGNyaXRpY2FsLiBgdWJsa19jaF91cmluZ19jbWRgIGlzIGRpcmVjdGx5IGhhbmRsaW5nIHRoZSBpb191cmluZyBjb21tYW5kISBJdCdzIHRoZSBvbmUgdGhhdCBldmVudHVhbGx5IGNhbGxzIGB1YmxrX3VubWFwX2lvYCBvciBgdWJsa19tYXBfaW9gLiBUaGlzIHNvdW5kcyBsaWtlIHRoZSByZWFsIGVudHJ5IHBvaW50IVxuXG5MZXQncyB0cmFjZSBpdCBvdXQuXG5gdWJsa19jaF91cmluZ19jbWRgIC1cdTAwM2UgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCAtXHUwMDNlIGBfX3VibGtfY29tcGxldGVfcnFgIC1cdTAwM2UgYHVibGtfdW5tYXBfaW9gLlxuYHVibGtfY2hfdXJpbmdfY21kYCAtXHUwMDNlIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgLVx1MDAzZSBgdWJsa19nZXRfZGF0YWAgLVx1MDAzZSBgdWJsa19zdGFydF9pb2AgLVx1MDAzZSBgdWJsa19tYXBfaW9gLlxuXG5ZZXMsIGB1YmxrX2NoX3VyaW5nX2NtZGAgKmlzKiB0aGUgcGVyZmVjdCBzeW1ib2wgdG8gZm9jdXMgb24uIEl0J3MgdGhlIGNvcmUgb2YgdGhlIGlvX3VyaW5nIGludGVyYWN0aW9uLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuLi4gQWgsIGBCTEtfREVWX1VCTEtgIGlzIHRoZSBvbmx5IG9uZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgZG91YmxlLWNoZWNrIGB1YmxrX2NoX3VyaW5nX2NtZGAgaW4gYHVibGtfZHJ2LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODo1Ny44MjEyOTMzMThaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDY5NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfY2hfdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzM0OD1zdGF0aWMgYm9vbCB1YmxrX2dldF9kYXRhKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCB1YmxrX2lvICppbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY1LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzY2OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY3LVxcdFxcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNDk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKl9fdWJsa19jaGVja19hbmRfZ2V0X3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mjc6c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1Mjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzMtXFx0aWYgKCF0dy5jYW5jZWwpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MzQ6XFx0XFx0cmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzUtXFx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzOC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzOTpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ3LVxcdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDg6XFx0XFx0aW9fdXJpbmdfY21kX2NvbXBsZXRlX2luX3Rhc2soY21kLCB1YmxrX2NoX3VyaW5nX2NtZF9jYik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDktXFx0XFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUxLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTUyOlxcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU1My19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE1NS1cXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDE1NjpcXHQudXJpbmdfY21kID0gdWJsa19jaF91cmluZ19jbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNTctXFx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjU3Ljg2NDc2OTA4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk5MzI4NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKlVibGsgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGNvbmZpcm1lZC4gYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2UgbmVlZCB0byBiZSBmb2N1c2VkIG9uIGhlcmUuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIHRoYXQgd2UgbWF5IG5lZWQgdG8gY29uc2lkZXIgb3IgYW55IGludGVyYWN0aW9ucyB3ZSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cbkxldCdzIGNoZWNrIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIHNlZSBgQkxLX0RFVl9VQkxLYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJT19VUklOR2AsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIGNoZWNrIHRoZXNlIHRoaW5ncy4gTm93LCBgSU9fVVJJTkdgIGlzIHByZXR0eSB1YmlxdWl0b3VzIHRoZXNlIGRheXMsIHNvIGl0J3MgcHJvYmFibHkgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24uIEJ1dCB3YWl0IGEgbWludXRl4oCmIGBCTEtfREVWX1VCTEtgICpzZWxlY3RzKiBgSU9fVVJJTkdgLiBBaCwgcmlnaHQhIFNvLCBpZiB3ZSBlbmFibGUgYEJMS19ERVZfVUJMS2AsIHdlIGdldCBgSU9fVVJJTkdgIFwiZm9yIGZyZWUsXCIgYXMgaXQgd2VyZS4gVGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGBJT19VUklOR2AgaWYgd2UgZW5hYmxlIGBCTEtfREVWX1VCTEtgLCBzbyB0aGF0IHN0cmVhbWxpbmVzIHRoaW5ncy4gSSdsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGJ1dCB0aGlzIHNob3VsZCBiZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyOTowMi42NjQxMDA4MzRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyODpcXHRjb25maWcgQkxLX0RFVl9VQkxLXFxuIDMyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG4gMzMwOlxcdFxcdHNlbGVjdCBJT19VUklOR1xcbiAzMzE6XFx0XFx0aGVscFxcbiAzMzI6XFx0XFx0ICBpb191cmluZyBiYXNlZCB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyLiBUb2dldGhlciB3aXRoIHVibGsgc2VydmVyLCB1YmxrXFxuIDMzMzpcXHRcXHQgIGhhcyBiZWVuIHdvcmtpbmcgd2VsbCwgYnV0IGludGVyZmFjZSB3aXRoIHVzZXJzcGFjZSBvciBjb21tYW5kIGRhdGFcXG4gMzM0OlxcdFxcdCAgZGVmaW5pdGlvbiBpc24ndCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcXG4gMzM1OlxcdFxcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cXG4gMzM2OlxcdFxcbiAzMzc6XFx0Y29uZmlnIEJMS0RFVl9VQkxLX0xFR0FDWV9PUENPREVTXFxuIDMzODpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVxcXCJcXG4gMzM5OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9VQkxLXFxuIDM0MDpcXHRcXHRkZWZhdWx0IHlcXG4gMzQxOlxcdFxcdGhlbHBcXG4gMzQyOlxcdFxcdCAgdWJsayBkcml2ZXIgc3RhcnRlZCB0byB0YWtlIHBsYWluIGNvbW1hbmQgZW5jb2RpbmcsIHdoaWNoIHR1cm5zIG91dFxcbiAzNDM6XFx0XFx0ICBvbmUgYmFkIHdheS4gVGhlIHRyYWRpdGlvbmFsIGlvY3RsIGNvbW1hbmQgb3Bjb2RlIGVuY29kZXMgbW9yZVxcbiAzNDQ6XFx0XFx0ICBpbmZvIGFuZCBiYXNpY2FsbHkgZGVmaW5lcyBlYWNoIGNvZGUgdW5pcXVlbHksIHNvIG9wY29kZSBjb25mbGljdFxcbiAzNDU6XFx0XFx0ICBpcyBhdm9pZGVkLCBhbmQgZHJpdmVyIGNhbiBoYW5kbGUgd3JvbmcgY29tbWFuZCBlYXNpbHksIG1lYW50aW1lIGl0XFxuIDM0NjpcXHRcXHQgIG1heSBoZWxwIHNlY3VyaXR5IHN1YnN5c3RlbSB0byBhdWRpdCBpb191cmluZyBjb21tYW5kLlxcbiAzNDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI5OjAyLjY2NDE3OTIwNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjUwOTYyMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSU9fVVJJTkcgYW5kIEJMS19ERVZfVUJMSyBDb25mbHVlbmNlKipcblxuQWxyaWdodCwgSSd2ZSBnb3QgdGhlIGNvbnRleHQuIFdlJ3JlIGxlYW5pbmcgdG93YXJkcyBgSU9fVVJJTkdgIGhlcmUsIHNvIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoYXQgYWZmZWN0cyB0aGluZ3MuIEdpdmVuIHRoYXQsIGBCTEtfREVWX1VCTEtgICpzaG91bGQqIGJlIGFkZXF1YXRlIGZvciB0aGUgaW1tZWRpYXRlIG5lZWRzLCB3aGljaCBzdHJlYW1saW5lcyBhIGZldyBhc3N1bXB0aW9ucyBJIGhhZCBlYXJsaWVyLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBJL08uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBkYXRhIG1vdmVtZW50LCB3aGljaCBtZWFucyBJIHNob3VsZCBkcmlsbCBkb3duIGludG8gdGhlIGBpbXBvcnRfdWJ1ZmAgZnVuY3Rpb24uIFRoYXQncyBsaWtlbHkgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuIEl0J3MgcHJvYmFibHkgaW4gYGxpYi9pb3ZfaXRlci5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgcmVsYXRlZCwgc28gSSdsbCBkaWcgaW50byB0aGF0IGFuZCBzZWUgaG93IHRoZXkgYXJlIGhhbmRsaW5nIHRoaXMgd2hvbGUgZGF0YSBleGNoYW5nZS4gSXQgc2hvdWxkIGhhdmUgYWxsIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGUgYnVmZmVyIGltcG9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjg2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyOTowNy45MTUxNDQ0NDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIyMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImltcG9ydF91YnVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9pb3ZfaXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9pb3ZfaXRlci5jPTEzNDI9c3RhdGljIHNzaXplX3QgX19pbXBvcnRfaW92ZWNfdWJ1ZihpbnQgdHlwZSwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYyxcXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTEzNTctXFxubGliL2lvdl9pdGVyLmM6MTM1ODpcXHRyZXQgPSBpbXBvcnRfdWJ1Zih0eXBlLCBpb3YtXFx1MDAzZWlvdl9iYXNlLCBpb3YtXFx1MDAzZWlvdl9sZW4sIGkpO1xcbmxpYi9pb3ZfaXRlci5jLTEzNTktXFx0aWYgKHVubGlrZWx5KHJldCkpXFxuLS1cXG5saWIvaW92X2l0ZXIuYz0xNDQzPUVYUE9SVF9TWU1CT0woaW1wb3J0X2lvdmVjKTtcXG5saWIvaW92X2l0ZXIuYy0xNDQ0LVxcbmxpYi9pb3ZfaXRlci5jOjE0NDU6aW50IGltcG9ydF91YnVmKGludCBydywgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc3RydWN0IGlvdl9pdGVyICppKVxcbmxpYi9pb3ZfaXRlci5jLTE0NDYte1xcbi0tXFxubGliL2lvdl9pdGVyLmMtMTQ1NC19XFxubGliL2lvdl9pdGVyLmM6MTQ1NTpFWFBPUlRfU1lNQk9MX0dQTChpbXBvcnRfdWJ1Zik7XFxubGliL2lvdl9pdGVyLmMtMTQ1Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjk6MDcuOTYwMzcxODAyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTM0NDQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgVWJsayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgZml4IGluIHRoZSB1YmxrIGRyaXZlci4gYGltcG9ydF91YnVmYCBpcyByZXR1cm5pbmcgYW4gaW50ZWdlciwgYW5kIHRoZSBwYXRjaCBpcyBjb3JyZWN0bHkgY2hlY2tpbmcgaWYgaXQncyBsZXNzIHRoYW4gemVybywgbWVhbmluZyBhbiBlcnJvciBvY2N1cnJlZCwgYW5kIGhhbmRsaW5nIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXIgZnJvbSBpZ25vcmluZyBhIGZhaWx1cmUsIHdoaWNoIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgYnVnLCBzbyBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gY292ZXIgd2l0aCBmdXp6aW5nLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IHRvdWNoZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBjb3JlIG1hcHBpbmcvdW5tYXBwaW5nIGZ1bmN0aW9ucywgSSdsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Gb3IgdGFyZ2V0ZWQgZnV6emluZywgSSdtIGdvaW5nIHRvIHNldCBgRm9jdXNTeW1ib2xzYCB0byBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19xdWV1ZV9ycWAsIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaGVzZSBmdW5jdGlvbnMgc2VlbSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgSU8gcGF0aCBhbmQgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBXZSByZWFsbHkgbmVlZCB0byBzdHJlc3MgdGVzdCB0aGUgZXJyb3IgcGF0aHMuXG5cbkknbGwgZW5hYmxlIHRoZSBgQkxLX0RFVl9VQkxLYCBjb25maWcsIG9mIGNvdXJzZS5cblxuRmluYWxseSwgdGhlIGBSZWFzb25pbmdgIHdpbGwgYmU6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gaW1wb3J0X3VidWYgZmFpbHMgaW4gdWJsa19tYXBfaW8gYW5kIHVibGtfdW5tYXBfaW8sIGFuZCBoYW5kbGVzIHVubWFwcGVkX2J5dGVzID09IDAgaW4gX191YmxrX2NvbXBsZXRlX3JxLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB1YmxrIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy5cIiBUaGlzIHNob3VsZCBnaXZlIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiB3aHkgd2Ugd2FudCB0byBmdXp6IHRoaXMgcGF0Y2guIFdlIGFyZSBmb2N1c2luZyBvbiBpbnB1dHRpbmcgYSBsb3Qgb2YgZGl2ZXJzZSBkYXRhIGZvciB0aGUgYWZvcmVtZW50aW9uZWQgZnVuY3Rpb25zLCB3aGlsZSBlbnN1cmluZyB0byBoYW5kbGUgZXJyb3JzIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg2NSwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjk6MTQuMDUzODE4ODU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExOTYwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVUJMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVibGtfY2hfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3JxXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3Jxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gaW1wb3J0X3VidWYgZmFpbHMgaW4gdWJsa19tYXBfaW8gYW5kIHVibGtfdW5tYXBfaW8sIGFuZCBoYW5kbGVzIHVubWFwcGVkX2J5dGVzID09IDAgaW4gX191YmxrX2NvbXBsZXRlX3JxLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB1YmxrIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19xdWV1ZV9ycVwiLFxuICAgIFwidWJsa19xdWV1ZV9ycXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIGltcG9ydF91YnVmIGZhaWxzIGluIHVibGtfbWFwX2lvIGFuZCB1YmxrX3VubWFwX2lvLCBhbmQgaGFuZGxlcyB1bm1hcHBlZF9ieXRlcyA9PSAwIGluIF9fdWJsa19jb21wbGV0ZV9ycS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdWJsayBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowkgcsk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 02:10:51 +0000 UTC FinishedAt: 2026-07-31 02:29:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "bc0e8faf90e776a2f1f3967a04e8091e6bdb4977", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "bc0e8faf90e776a2f1f3967a04e8091e6bdb4977", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "edbc32e5-cdf6-4dc3-ae6d-c21177a55f68" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ublk_ch_uring_cmd", "ublk_queue_rq", "ublk_queue_rqs" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgd2hlbiBpbXBvcnRfdWJ1ZiBmYWlscyBpbiB1YmxrX21hcF9pbyBhbmQgdWJsa191bm1hcF9pbywgYW5kIGhhbmRsZXMgdW5tYXBwZWRfYnl0ZXMgPT0gMCBpbiBfX3VibGtfY29tcGxldGVfcnEuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHVibGsgZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTk3NTE3MTU2NjZiMDM0MzU3NThiOWNhZTBiZTg4YTc4ODEzZmFhNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjI3OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggNGNhNmVjNzM4YzkzMC4uODEwMWMyYTczZWZkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5AQCAtMTQ3NSw3ICYjNDM7MTQ3NSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfbWFwX2lvKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4gXHRcdHN0cnVjdCBpb3ZfaXRlciBpdGVyO1xuIFx0XHRjb25zdCBpbnQgZGlyID0gSVRFUl9ERVNUO1xuIFxuLVx0XHRpbXBvcnRfdWJ1ZihkaXIsIHU2NF90b191c2VyX3B0cihpby1cdTAwM2VidWYuYWRkciksIHJxX2J5dGVzLCBcdTAwMjZpdGVyKTtcbiYjNDM7XHRcdGlmIChpbXBvcnRfdWJ1ZihkaXIsIHU2NF90b191c2VyX3B0cihpby1cdTAwM2VidWYuYWRkciksIHJxX2J5dGVzLFxuJiM0MztcdFx0XHRcdFx1MDAyNml0ZXIpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRcdHJldHVybiB1YmxrX2NvcHlfdXNlcl9wYWdlcyhyZXEsIDAsIFx1MDAyNml0ZXIsIGRpcik7XG4gXHR9XG4gXHRyZXR1cm4gcnFfYnl0ZXM7XG5AQCAtMTQ5NCw5ICYjNDM7MTQ5NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfdW5tYXBfaW8oYm9vbCBuZWVkX21hcCxcbiBcdFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRcdGNvbnN0IGludCBkaXIgPSBJVEVSX1NPVVJDRTtcbiBcbi1cdFx0V0FSTl9PTl9PTkNFKGlvLVx1MDAzZXJlcyBcdTAwM2UgcnFfYnl0ZXMpO1xuJiM0MztcdFx0aWYgKGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLVx1MDAzZWJ1Zi5hZGRyKSwgaW8tXHUwMDNlcmVzLFxuJiM0MztcdFx0XHRcdFx1MDAyNml0ZXIpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcbi1cdFx0aW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXHUwMDNlYnVmLmFkZHIpLCBpby1cdTAwM2VyZXMsIFx1MDAyNml0ZXIpO1xuIFx0XHRyZXR1cm4gdWJsa19jb3B5X3VzZXJfcGFnZXMocmVxLCAwLCBcdTAwMjZpdGVyLCBkaXIpO1xuIFx0fVxuIFx0cmV0dXJuIHJxX2J5dGVzO1xuQEAgLTE1ODQsOCAmIzQzOzE1ODgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdWJsa19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4gXHQgKlxuIFx0ICogUmUtcmVhZCBzaW1wbHkgZm9yIHRoaXMgdW5saWtlbHkgY2FzZS5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KHVubWFwcGVkX2J5dGVzIFx1MDAzYyBpby1cdTAwM2VyZXMpKVxuJiM0MztcdGlmICh1bmxpa2VseSh1bm1hcHBlZF9ieXRlcyBcdTAwM2MgaW8tXHUwMDNlcmVzKSkge1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCF1bm1hcHBlZF9ieXRlcykpIHtcbiYjNDM7XHRcdFx0cmVzID0gQkxLX1NUU19JT0VSUjtcbiYjNDM7XHRcdFx0Z290byBleGl0O1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aW8tXHUwMDNlcmVzID0gdW5tYXBwZWRfYnl0ZXM7XG4mIzQzO1x0fVxuIFxuIFx0LypcbiBcdCAqIFJ1biBiaW8tXHUwMDNlYmlfZW5kX2lvKCkgd2l0aCBzb2Z0aXJxcyBkaXNhYmxlZC4gSWYgdGhlIGZpbmFsIGZwdXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDt1YmxrX3F1ZXVlX3JxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIGltcG9ydF91YnVmIGZhaWxzIGluIHVibGtfbWFwX2lvIGFuZCB1YmxrX3VubWFwX2lvLCBhbmQgaGFuZGxlcyB1bm1hcHBlZF9ieXRlcyA9PSAwIGluIF9fdWJsa19jb21wbGV0ZV9ycS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdWJsayBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOTc1MTcxNTY2NmIwMzQzNTc1OGI5Y2FlMGJlODhhNzg4MTNmYWE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDI6Mjc6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggNGNhNmVjNzM4YzkzMC4uODEwMWMyYTczZWZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYwpAQCAtMTQ3NSw3ICYjNDM7MTQ3NSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfbWFwX2lvKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsCiAJCXN0cnVjdCBpb3ZfaXRlciBpdGVyOwogCQljb25zdCBpbnQgZGlyID0gSVRFUl9ERVNUOwogCi0JCWltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLSZndDtidWYuYWRkciksIHJxX2J5dGVzLCAmYW1wO2l0ZXIpOwomIzQzOwkJaWYgKGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLSZndDtidWYuYWRkciksIHJxX2J5dGVzLAomIzQzOwkJCQkmYW1wO2l0ZXIpICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKIAkJcmV0dXJuIHVibGtfY29weV91c2VyX3BhZ2VzKHJlcSwgMCwgJmFtcDtpdGVyLCBkaXIpOwogCX0KIAlyZXR1cm4gcnFfYnl0ZXM7CkBAIC0xNDk0LDkgJiM0MzsxNDk3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa191bm1hcF9pbyhib29sIG5lZWRfbWFwLAogCQlzdHJ1Y3QgaW92X2l0ZXIgaXRlcjsKIAkJY29uc3QgaW50IGRpciA9IElURVJfU09VUkNFOwogCi0JCVdBUk5fT05fT05DRShpby0mZ3Q7cmVzICZndDsgcnFfYnl0ZXMpOwomIzQzOwkJaWYgKGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLSZndDtidWYuYWRkciksIGlvLSZndDtyZXMsCiYjNDM7CQkJCSZhbXA7aXRlcikgJmx0OyAwKQomIzQzOwkJCXJldHVybiAwOwogCi0JCWltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLSZndDtidWYuYWRkciksIGlvLSZndDtyZXMsICZhbXA7aXRlcik7CiAJCXJldHVybiB1YmxrX2NvcHlfdXNlcl9wYWdlcyhyZXEsIDAsICZhbXA7aXRlciwgZGlyKTsKIAl9CiAJcmV0dXJuIHJxX2J5dGVzOwpAQCAtMTU4NCw4ICYjNDM7MTU4OCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbywKIAkgKgogCSAqIFJlLXJlYWQgc2ltcGx5IGZvciB0aGlzIHVubGlrZWx5IGNhc2UuCiAJICovCi0JaWYgKHVubGlrZWx5KHVubWFwcGVkX2J5dGVzICZsdDsgaW8tJmd0O3JlcykpCiYjNDM7CWlmICh1bmxpa2VseSh1bm1hcHBlZF9ieXRlcyAmbHQ7IGlvLSZndDtyZXMpKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoIXVubWFwcGVkX2J5dGVzKSkgewomIzQzOwkJCXJlcyA9IEJMS19TVFNfSU9FUlI7CiYjNDM7CQkJZ290byBleGl0OwomIzQzOwkJfQomIzQzOwogCQlpby0mZ3Q7cmVzID0gdW5tYXBwZWRfYnl0ZXM7CiYjNDM7CX0KIAogCS8qCiAJICogUnVuIGJpby0mZ3Q7YmlfZW5kX2lvKCkgd2l0aCBzb2Z0aXJxcyBkaXNhYmxlZC4gSWYgdGhlIGZpbmFsIGZwdXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHVibGsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGNoYW5nZXMgdG8gYHVibGtfbWFwX2lvYCwgYHVibGtfdW5tYXBfaW9gLCBhbmQgYF9fdWJsa19jb21wbGV0ZV9ycWAuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggSS9PIG1hcHBpbmcgb3IgdW5tYXBwaW5nIG9wZXJhdGlvbnMsIGFuZCB0aGUgY29tcGxldGlvbiBvZiByZXF1ZXN0cy4KClRoZSBiaXQgdGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhlIGNoZWNrIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYGltcG9ydF91YnVmYC4gUmV0dXJuaW5nIDAgb24gZmFpbHVyZSBpbmRpY2F0ZXMgYSBjbGVhciBlcnJvciBwYXRoLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHNhZmV0eSBjaGVjaywgcHJldmVudGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcgaWYgdGhlIGJ1ZmZlciBpbXBvcnQgZmFpbHMuIEdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLCBlc3NlbnRpYWwgaW4gYSBibG9jayBkcml2ZXIuCgpUaGVuLCBsb29raW5nIGF0IGBfX3VibGtfY29tcGxldGVfcnFgLCB0aGUgY2hlY2sgZm9yIGB1bm1hcHBlZF9ieXRlc2AgYmVpbmcgemVybyBpcyBpbnRlcmVzdGluZy4gSWYgbm8gYnl0ZXMgd2VyZSB1bm1hcHBlZCwgaXQgc2V0cyBgcmVzID0gQkxLX1NUU19JT0VSUmAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhpcyBpcyBhaW1lZCBhdCBoYW5kbGluZyB1bmV4cGVjdGVkIHNjZW5hcmlvcyB3aGVyZSB1bm1hcHBpbmcgZmFpbHMsIG9yIGhhc24mIzM5O3QgYWN0dWFsbHkgaGFwcGVuZWQuIFNldHRpbmcgYEJMS19TVFNfSU9FUlJgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIHRvIHNpZ25hbCBhbiBJL08gZXJyb3IgdG8gdGhlIHVwcGVyIGxheWVycy4gVGhlIGNvZGUgdGhlbiBqdW1wcyB0byBleGl0LgoKVG8gZ2FpbiBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHBhcnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgZmluZCB0aGUgS2NvbmZpZyBvcHRpb24gdGhhdCBpbmNsdWRlcyBgdWJsa19kcnYub2AuIFRoYXQmIzM5O2xsIGdpdmUgbWUgY29udGV4dCBvbiB3aGVuIHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZSBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGUgY2hhbmdlcyB3aWxsIGltcGFjdCB0aGUgYmxvY2sgZHJpdmVyIGluIHZhcmlvdXMgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfZHJ2Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTM4PW9iai0kKENPTkZJR19CTEtfREVWX1JVU1RfTlVMTCkgJiM0Mzs9IHJudWxsL1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zOS1cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6NDA6b2JqLSQoQ09ORklHX0JMS19ERVZfVUJMSylcdFx0XHQmIzQzOz0gdWJsa19kcnYub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS00MS1vYmotJChDT05GSUdfQkxLX0RFVl9aT05FRF9MT09QKSAmIzQzOz0gemxvb3Aub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGl0ZW0gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfVUJMS2AuIFJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgdGhpcyByZWxpZXMgb24gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gZGV0ZXJtaW5lIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gZGVzaWduLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfVUJMSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0zMTU9Y29uZmlnIEJMS19ERVZfUkJEXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyNy1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozMjg6Y29uZmlnIEJMS19ERVZfVUJMS1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgdWJsayBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGBCTEtfREVWX1VCTEtgIEtjb25maWcgZW50cnkuIE15IGd1dCBmZWVsaW5nIGlzIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMsIGFzIGFsd2F5cy4gV2hhdCBvdGhlciBmZWF0dXJlcyAqbXVzdCogYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciB0aGlzIHRvIGV2ZW4gKmJlKiByZWxldmFudD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGhhcmR3YXJlIG9yIHNvZnR3YXJlIHJlcXVpcmVtZW50cyBiYWtlZCBpbiwgb3IgaXMgaXQgbW9yZSBnZW5lcmljPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaW1tZWRpYXRlbHksIHRoYXQmIzM5O3Mgc3RlcCBvbmUsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3Igc3RvcmFnZSBkZXNpZ24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBJcyB0aGlzICpvbmx5KiBmb3IgdXNlci1zcGFjZSBibG9jayBkZXZpY2VzPyBJZiBzbywgd2hhdCBkb2VzIHRoYXQgbWVhbiBmb3IgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgbGF0ZW5jeT8gQXJlIHRoZXJlIGFueSBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zIEkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mIHdpdGggZXhpc3RpbmcgZHJpdmVycyBvciBzdWJzeXN0ZW1zPyBJJiMzOTttIGhvcGluZyB0byBzZWUgd2VsbC1jb21tZW50ZWQgY29kZSwgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBzcGVjaWZpYyBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjg6XHRjb25maWcgQkxLX0RFVl9VQkxLXG4gMzI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gMzMwOlx0XHRzZWxlY3QgSU9fVVJJTkdcbiAzMzE6XHRcdGhlbHBcbiAzMzI6XHRcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xuIDMzMzpcdFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXG4gMzM0Olx0XHQgIGRlZmluaXRpb24gaXNuJiMzOTt0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxuIDMzNTpcdFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxuIDMzNjpcdFxuIDMzNzpcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xuIDMzODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVwmIzM0O1xuIDMzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0aGVscFxuIDM0MjpcdFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XG4gMzQzOlx0XHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXG4gMzQ0Olx0XHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XG4gMzQ1Olx0XHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcbiAzNDY6XHRcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXG4gMzQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVUJMSyBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNoYW5nZSBpcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGBCTEtfREVWX1VCTEtgLiBSaWdodCwgZ290IGl0LiBNeSB0YXNrIGludm9sdmVzIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLCB3aGljaCBhcHBhcmVudGx5IHRvdWNoZXMgdGhlIGNvcmUgVUJMSyBJL08gaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQmIzM5O3MgbW9kaWZ5aW5nIHRocmVlIGtleSBmdW5jdGlvbnM6IGB1YmxrX21hcF9pb2AsIGB1YmxrX3VubWFwX2lvYCwgYW5kIGBfX3VibGtfY29tcGxldGVfcnFgLiBUaGUgaW1tZWRpYXRlIGNoYWxsZW5nZSBpcyB0aGF0IHRoZXNlIGFyZSAqc3RhdGljKiBmdW5jdGlvbnMuIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gdGhlIFVCTEsgbW9kdWxlLgoKU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYywgcHVibGljLWZhY2luZyBmdW5jdGlvbnMgdGhhdCAqY2FsbCogdGhlc2Ugc3RhdGljIG9uZXMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGUgZXh0ZXJuYWwgQVBJIGNhbGxzIGRvd24gaW50byB0aGVzZSBtb2RpZmllZCBpbnRlcm5hbHMuIEkgd2FudCB0byBzZWUgd2hhdCB0aGlzIG1vZGlmaWNhdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGUgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMuIEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBtYWtlIGl0IHZlcnkgZWFzeSB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX21hcF9pbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTQ1ND1zdGF0aWMgaW5saW5lIGJvb2wgdWJsa19uZWVkX3VubWFwX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNDU5LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjE0NjA6c3RhdGljIHVuc2lnbmVkIGludCB1YmxrX21hcF9pbyhjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0NjEtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzQ0PXN0YXRpYyBib29sIHVibGtfc3RhcnRfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTc1Mi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNzUzOlx0bWFwcGVkX2J5dGVzID0gdWJsa19tYXBfaW8odWJxLCByZXEsIGlvKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNzU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBJL08gUGF0aCBpbiBVYmxrKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBVYmxrIGNvZGUsIGFuZCBJIHNlZSB0aGF0IGB1YmxrX3N0YXJ0X2lvYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGluaXRpYXRpbmcgSS9PIG9wZXJhdGlvbnMuIE5vdywgd2hlcmUgaXMgKnRoYXQqIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBJL08gcHJvY2VzcyBiZWdpbnMuIEkgd2FudCB0byBzZWUgaG93IGB1YmxrX3N0YXJ0X2lvYCBpbnRlcmFjdHMgd2l0aCB0aGUgbWFwcGluZyBwcm9jZXNzIHdoaWNoIGl0IGNhbGxzIChgdWJsa19tYXBfaW9gKS4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgdWJsa19zdGFydF9pb2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIEkvTyBpcyBhY3R1YWxseSAqc3RhcnRlZCogd2l0aGluIHRoaXMgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX3N0YXJ0X2lvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzMwPXN0YXRpYyB2b2lkIHVibGtfYXV0b19idWZfZGlzcGF0Y2goY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTc0My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNzQ0OnN0YXRpYyBib29sIHVibGtfc3RhcnRfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNzQ1LVx0XHRcdCAgc3RydWN0IHVibGtfaW8gKmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzc4PXN0YXRpYyB2b2lkIHVibGtfZGlzcGF0Y2hfcmVxKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE4MTUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTgxNjpcdGlmICghdWJsa19zdGFydF9pbyh1YnEsIHJlcSwgaW8pKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE4MTctXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTgyNz1zdGF0aWMgYm9vbCBfX3VibGtfYmF0Y2hfcHJlcF9kaXNwYXRjaChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xODM2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjE4Mzc6XHRpZiAoIXVibGtfc3RhcnRfaW8odWJxLCByZXEsIGlvKSlcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xODM4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNDg9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjItXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM2MzpcdHJldHVybiB1YmxrX3N0YXJ0X2lvKHVicSwgcmVxLCBpbyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5yYXZlbGluZyB0aGUgSS9PIFBhdGggYW5kIFVubWFwIENhbGxzKioKClJpZ2h0LCBzbyBgdWJsa19kaXNwYXRjaF9yZXFgLCBgX191YmxrX2JhdGNoX3ByZXBfZGlzcGF0Y2hgLCBhbmQgYHVibGtfZ2V0X2RhdGFgIGFsbCBldmVudHVhbGx5IGxlYWQgdG8gYSBjYWxsIHRvIGB1YmxrX3N0YXJ0X2lvYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBJL08gaW5pdGlhdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhpcyBgdWJsa2AgY29udGV4dC4gTWFrZXMgc2Vuc2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgd2hvJiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xlYW51cD8gTW9yZSBzcGVjaWZpY2FsbHksIHdoZXJlIGFyZSB3ZSBzZWVpbmcgYHVibGtfdW5tYXBfaW9gIGNhbGxzIGhhcHBlbmluZz8gS25vd2luZyB3aG8gY2FsbHMgYHVibGtfdW5tYXBfaW9gIGlzIGNydWNpYWwgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgSS9PIGxpZmVjeWNsZSBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gV2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpbmdzIGFyZSBwcm9wZXJseSB1bmRvbmUgYW5kIHJlbGVhc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX3VubWFwX2lvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNDYwPXN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa19tYXBfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTQ4Ni1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNDg3OnN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa191bm1hcF9pbyhib29sIG5lZWRfbWFwLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0ODgtXHRcdGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTE1NTM9c3RhdGljIGlubGluZSB2b2lkIF9fdWJsa19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1ODMtXHQvKiBmb3IgUkVBRCByZXF1ZXN0LCB3cml0aW5nIGRhdGEgaW4gaW9kLVx1MDAzZWFkZHIgdG8gcnEgYnVmZmVycyAqL1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjE1ODQ6XHR1bm1hcHBlZF9ieXRlcyA9IHVibGtfdW5tYXBfaW8obmVlZF9tYXAsIHJlcSwgaW8pO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1ODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgSS9PIENvbXBsZXRpb24gUGF0aCBpbiB1YmxrKioKCkFscmlnaHQsIHNvIGBfX3VibGtfY29tcGxldGVfcnFgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGNvbXBsZXRpb24gb2YgYSByZXF1ZXN0IGluIHRoZSB1YmxrIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIGNvbXBsZXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsIGNoYWluIGxlYWRpbmcgdXAgdG8gaXQsIHNpbmNlIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cgaXMgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIGluIGJsb2NrIGRyaXZlcnMuIEkgcmVtZW1iZXIgYF9fdWJsa19jb21wbGV0ZV9ycWAgY2FsbHMgYHVibGtfdW5tYXBfaW9gLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYWZ0ZXIgdGhlIEkvTyBpcyBkb25lIHRoZSBtYXBwaW5nIGlzIGJlaW5nIHVubWFwcGVkLiBCdXQgdGhlIG1vcmUgcHJlc3NpbmcgcXVlc3Rpb24gaXM6IHdobywgZXhhY3RseSwgaXMgY2FsbGluZyB0aGlzIGNvbXBsZXRpb24gcm91dGluZSwgYF9fdWJsa19jb21wbGV0ZV9ycWA/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHRoZSBkaWZmZXJlbnQgcG9zc2libGUgY2FsbGluZyBzaXRlcy4gQSBkZWVwZXIgZGl2ZSBpcyBpbiBvcmRlciB0byBwYWludCB0aGUgYmlnIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdWJsa19jb21wbGV0ZV9ycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NzczPXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19zZXR1cF9pb2Rfem9uZWQoc3RydWN0IHVibGtfcXVldWUgKnVicSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzgwLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjc4MTpzdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbyxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03ODItXHRcdFx0XHQgICAgICBib29sIG5lZWRfbWFwLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqaW9iKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTE5Mj1zdGF0aWMgaW5saW5lIHZvaWQgdWJsa19wdXRfcmVxX3JlZihzdHJ1Y3QgdWJsa19pbyAqaW8sIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTExOTctXHQvKiB1YmxrX25lZWRfbWFwX2lvKCkgYW5kIHVibGtfbmVlZF9yZXFfcmVmKCkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAqL1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjExOTg6XHRfX3VibGtfY29tcGxldGVfcnEocmVxLCBpbywgZmFsc2UsIE5VTEwpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTExOTktfVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNTQ1PXN0YXRpYyB2b2lkIHVibGtfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgYmxrX3N0YXR1c190IGVycm9yKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNTUyLS8qIHRvZG86IGhhbmRsZSBwYXJ0aWFsIGNvbXBsZXRpb24gKi9cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNTUzOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VibGtfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IHVibGtfaW8gKmlvLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1NTQtXHRcdFx0XHQgICAgICBib29sIG5lZWRfbWFwLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqaW9iKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNjgwPXN0YXRpYyB2b2lkIF9fdWJsa19mYWlsX3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI2ODktXHRcdGlvLVx1MDAzZXJlcyA9IC1FSU87XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjY5MDpcdFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjY5MS1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzM2Nj1zdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQ2Ny1cdFx0aWYgKGNvbXBsKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM0Njg6XHRcdFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQ2OS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzc3MD1zdGF0aWMgaW50IHVibGtfYmF0Y2hfY29tbWl0X2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM4MTMtXHRpZiAoY29tcGwpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzgxNDpcdFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKGRhdGEtXHUwMDNldWIpLCBkYXRhLVx1MDAzZWlvYik7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzgxNS1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODE2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6CgoqKkFuYWx5emluZyBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGFuZCBgdWJsa19iYXRjaF9jb21taXRfaW9gKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGFuZCBgdWJsa19iYXRjaF9jb21taXRfaW9gLiBTZWVtcyBsaWtlIHRoZXNlIGFyZSBib3RoICpjcml0aWNhbCogY29tcG9uZW50cyB3aXRoaW4gdGhlIHVibGsgaW9fdXJpbmcgY29tbWFuZCBoYW5kbGluZyBwYXRod2F5IOKAkyB0aGV5JiMzOTtyZSBlaXRoZXIgZGlyZWN0IGhhbmRsZXJzIHRoZW1zZWx2ZXMgb3IgYXJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRob3NlIGhhbmRsZXJzLiBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlc2UgaW4gdGhlIGZhc3QgcGF0aC4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHNlZSBwcmVjaXNlbHkgd2hhdCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGlzIGRvaW5nLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBpb191cmluZyBvcGVyYXRpb25zIGFyZSBwcm9jZXNzZWQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jaF91cmluZ19jbWRfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNDg9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM2NjpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY3LVx0XHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1Mjc9c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzMtXHRpZiAoIXR3LmNhbmNlbClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM0Olx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM1LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1Mzk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU1MS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTUyOlx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NTMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBpb191cmluZyBDb21tYW5kIEhhbmRsaW5nKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIsIGFzIEkgc2VlIGl0LCBpcyBgdWJsa19jaF91cmluZ19jbWRgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgbWFnaWMgc3RhcnRzIGZvciBoYW5kbGluZyBpb191cmluZyBjb21tYW5kcyB3aXRoaW4gdGhlIHVibGsgZnJhbWV3b3JrLCBvciBhdCBsZWFzdCwgdGhhdCYjMzk7cyB3aGF0IG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBzdWdnZXN0cy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBoZXJlIGlzIHRvIGRpdmUgZGVlcCBpbnRvIHRoYXQgZnVuY3Rpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggYW5hbHlzaXMgb2YgYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgdW5yYXZlbCB0aGUgbWVjaGFuaWNzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQmIzM5O3Mgb3JjaGVzdHJhdGluZyB0aGUgY29tbWFuZCBwcm9jZXNzaW5nLCBxdWV1aW5nLCBhbmQgZXZlbnR1YWwgZXhlY3V0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgY29tbWFuZCB0eXBlcywgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgc3VibWlzc2lvbiBhbmQgY29tcGxldGlvbiBwcm9jZXNzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzQ4PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY1LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNjY6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2Ny1cdFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNDk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKl9fdWJsa19jaGVja19hbmRfZ2V0X3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mjc6c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzMtXHRpZiAoIXR3LmNhbmNlbClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM0Olx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM1LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzgtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzOTpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDAte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ3LVx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSkge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDg6XHRcdGlvX3VyaW5nX2NtZF9jb21wbGV0ZV9pbl90YXNrKGNtZCwgdWJsa19jaF91cmluZ19jbWRfY2IpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDktXHRcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NTEtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU1MjpcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUzLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNTUtXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTU2Olx0LnVyaW5nX2NtZCA9IHVibGtfY2hfdXJpbmdfY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNTctXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVYmxrIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVibGtfY2hfdXJpbmdfY21kYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSBgLnVyaW5nX2NtZGAsIHNwZWNpZmljYWxseSBmb3IgdGhlIGB1YmxrX2NoX2ZvcHNgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciwgYHVibGtfZHJ2LmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGUgcGFydCB0aGF0JiMzOTtzIGdyYWJiaW5nIG15IGF0dGVudGlvbiBpcyBob3cgaXQgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZhaWx1cmUgb2YgYGltcG9ydF91YnVmYC4gSXQmIzM5O3MgcmV0dXJuaW5nIGVpdGhlciAwIG9yIHNldHRpbmcgYEJMS19TVFNfSU9FUlJgLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZzsgdGhlIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgYXJlYSBpcyBvZnRlbiBhIHNvdXJjZSBvZiBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLgoKTm93LCB0aGUgY29uZmlndXJhdGlvbiBpcyB0aWVkIHRvIGBCTEtfREVWX1VCTEtgLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAsIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGFzIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gV2FpdCwgc2NyYXRjaCB0aGF0LCBgdWJsa19jaF91cmluZ19jbWRgICppcyogdGhlIG1haW4gZW50cnkgcG9pbnQsIHNvIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgbW9zdCBjcnVjaWFsLiBIb3dldmVyLCBJJiMzOTttIGFsc28gc2VlaW5nIGB1YmxrX2NoX3dyaXRlX2l0ZXJgIG1lbnRpb25lZC4gSG1tLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGJvdGggYHVibGtfbWFwX2lvYCBhbmQgYHVibGtfdW5tYXBfaW9gLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYHVibGtfc3RhcnRfaW9gIGFuZCBgX191YmxrX2NvbXBsZXRlX3JxYCwgd2hpY2ggYXJlIGNvcmUgdG8gYW55IGJsb2NrIEkvTyBvcGVyYXRpb24uIExldCBtZSB0cmFjZSBiYWNrLi4uIGB1YmxrX3N0YXJ0X2lvYCBpcyBjYWxsZWQgZnJvbSBgdWJsa19kaXNwYXRjaF9yZXFgLCBgX191YmxrX2JhdGNoX3ByZXBfZGlzcGF0Y2hgLCBhbmQgZXZlbiBgdWJsa19nZXRfZGF0YWAuIEFuZCBgdWJsa19kaXNwYXRjaF9yZXFgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgdWJsa19xdWV1ZV9ycWAuIFNvLCB0aGVyZSBhcmUgc2V2ZXJhbCBrZXkgcG9pbnRzIG9mIGludGVncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgb2YgdGhlc2UgcG9pbnRzIGluIGRldGFpbC4gVGhlIGludGVyYWN0aW9uIG9mIGBtYXBgLCBgdW5tYXBgLCBhbmQgdGhlIGNvbW1hbmQgc3VibWlzc2lvbiBmbG93IGl0c2VsZiBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBmb3IgdGhlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfcXVldWVfcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIzOT1zdHJ1Y3QgdWJsa19xdWV1ZSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1Ny1cdCAqXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjU4Olx0ICogVGhlcmUgYXJlIG11bHRpcGxlIHdyaXRlciBmcm9tIHVibGtfcXVldWVfcnEoKSBvciB1YmxrX3F1ZXVlX3JxcygpLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1OS1cdCAqIHNvIGxvY2sgaXMgcmVxdWlyZWQgZm9yIHN0b3JpbmcgcmVxdWVzdCB0YWcgdG8gZmlmb1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMTQ3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19wcmVwX3JlcShzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODQtICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE4NTpzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBfX3VibGtfcXVldWVfcnFfY29tbW9uKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE4Ni1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTEtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIxMjpzdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMy1cdFx0Y29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxOS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjIwOlx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcdTAwMjZzaG91bGRfcXVldWUpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMjEtXHRpZiAoIXNob3VsZF9xdWV1ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjIyOD1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfYmF0Y2hfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMzUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIzNjpcdHJlcyA9IF9fdWJsa19xdWV1ZV9ycV9jb21tb24odWJxLCBycSwgXHUwMDI2c2hvdWxkX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjM3LVx0aWYgKCFzaG91bGRfcXVldWUpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIyNTI9c3RhdGljIHZvaWQgdWJsa19jb21taXRfcnFzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY0LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyNjU6c3RhdGljIHZvaWQgdWJsa19xdWV1ZV9ycXMoc3RydWN0IHJxX2xpc3QgKnJxbGlzdClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjM1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgdWJsa19tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NTpcdC5xdWV1ZV9ycSAgICAgICA9IHVibGtfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NjpcdC5xdWV1ZV9ycXMgICAgICA9IHVibGtfcXVldWVfcnFzLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIzNTctXHQuaW5pdF9oY3R4XHQ9IHVibGtfaW5pdF9oY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNzM1PXN0YXRpYyB2b2lkIHVibGtfc3RhcnRfY2FuY2VsKHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDQtXHRcdC8qXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc0NTpcdFx0ICogUXVpZXNjZSB0byBzZXJpYWxpemUgd2l0aCB1YmxrX3F1ZXVlX3JxKCksIGVuc3VyaW5nXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc0Ni1cdFx0ICogdWJxLVx1MDAzZWNhbmNlbGluZyBpcyB2aXNpYmxlIHdoZW4gdGhlIHF1ZXVlIHJlc3VtZXMuXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NTMtXHRcdCAqIERpc2sgbm90IHlldCBhbGxvY2F0ZWQgYnkgdWJsa19jdHJsX3N0YXJ0X2RldigpLCBzb1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NTQ6XHRcdCAqIHRoZXJlIGlzIG5vIHJlcXVlc3QgcXVldWUgYW5kIHVibGtfcXVldWVfcnEoKSBjYW5ub3RcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzU1LVx0XHQgKiBiZSBydW5uaW5nLiAgSnVzdCBzZXQgdGhlIGZsYWc7IGlmIHN0YXJ0X2RldiBwcm9jZWVkc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBVYmxrIFF1ZXVlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGJsb2NrIGxheWVyIHF1ZXVlIGZ1bmN0aW9ucyBmb3IgVWJsaywgc3BlY2lmaWNhbGx5IGB1YmxrX3F1ZXVlX3JxYCBhbmQgYHVibGtfcXVldWVfcnFzYC4gVGhvc2Ugc2VlbSB0byBiZSB0aGUgY29yZSwgYnV0IGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGZvY3VzIGxpZXMuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGtleSBzeW1ib2xzIG1pZ2h0IGJlIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX3F1ZXVlX3JxYCwgYW5kIGB1YmxrX3F1ZXVlX3Jxc2AuIFdhaXQsIHJpZ2h0LCBgdWJsa19jaF91cmluZ19jbWRgIGhhbmRsZXMgdGhlIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGJvdGggYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfcXVldWVfcnFgLgoKTm93LCBpcyBgQkxLX0RFVl9VQkxLYCB0aGUgb25seSBjb25maWcgaW4gcGxheSBoZXJlPyBZZXAsIGl0IGxvb2tzIGxpa2UgaXQuIE9rYXksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiBgQkxLX0RFVl9VQkxLYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSG1tLCBpdCBkZXBlbmRzIG9uIGBJT19VUklOR2AsIGFuZCwgYXMgSSB0aG91Z2h0LCBpdCAqc2VsZWN0cyogYElPX1VSSU5HYC4gQWxyaWdodCwgdGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSBvbmNlIG1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzI4OmNvbmZpZyBCTEtfREVWX1VCTEtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjktXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgU3ltYm9sIFByaW9yaXRpemF0aW9uKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGZvY3VzIHNlZW1zIHRvIGJlIG9uIGBCTEtfREVWX1VCTEtgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgaXMgaW1tZWRpYXRlbHkgY29ubmVjdGVkIHRvIHRoaXMuIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX3F1ZXVlX3JxYCwgYHVibGtfcXVldWVfcnFzYCwgYHVibGtfYmF0Y2hfcXVldWVfcnFgLCBhbmQgYHVibGtfY29tbWl0X3Jxc2AgYW5kIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAgYXJlIGFsbCBpbiB0aGUgbWl4LgoKQWxyaWdodCwgSSYjMzk7bGwgc2V0IG15IG1lbnRhbCBgRm9jdXNTeW1ib2xzYCB0byBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19xdWV1ZV9ycWAsIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGNvcmUgYXJlYXMgdG8gaW52ZXN0aWdhdGUgZnVydGhlciwgYXQgbGVhc3QgZm9yIG5vdy4KCldhaXQsIGB1YmxrX2NoX3VyaW5nX2NtZGAgZmVlbHMgbGlrZSB0aGUgYmVzdCBlbnRyeSBwb2ludCB0byBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0IG1lIGRvdWJsZS1jaGVjayBpZiBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGlzIHN0YXRpYy4gWWVzIGl0IGlzLCBzbyBgdWJsa19jaF91cmluZ19jbWRgIGl0c2VsZiBpcyB0aGUgbm9uLXN0YXRpYyBvbmUuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBpbXByZXNzaW9uLgoKSG93ZXZlciwgYSBxdWVzdGlvbiBqdXN0IHBvcHBlZCB1cC4gYHVibGtfcXVldWVfcnFgIGlzIHN0YXRpYz8gSG1tLi4uIE9rYXksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTGV0IG1lIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfcXVldWVfcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIzOT1zdHJ1Y3QgdWJsa19xdWV1ZSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1Ny1cdCAqXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjU4Olx0ICogVGhlcmUgYXJlIG11bHRpcGxlIHdyaXRlciBmcm9tIHVibGtfcXVldWVfcnEoKSBvciB1YmxrX3F1ZXVlX3JxcygpLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1OS1cdCAqIHNvIGxvY2sgaXMgcmVxdWlyZWQgZm9yIHN0b3JpbmcgcmVxdWVzdCB0YWcgdG8gZmlmb1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMTQ3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19wcmVwX3JlcShzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODQtICovXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE4NTpzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBfX3VibGtfcXVldWVfcnFfY29tbW9uKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE4Ni1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTEtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIxMjpzdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMy1cdFx0Y29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxOS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjIwOlx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcdTAwMjZzaG91bGRfcXVldWUpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMjEtXHRpZiAoIXNob3VsZF9xdWV1ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjIyOD1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfYmF0Y2hfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMzUtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIzNjpcdHJlcyA9IF9fdWJsa19xdWV1ZV9ycV9jb21tb24odWJxLCBycSwgXHUwMDI2c2hvdWxkX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjM3LVx0aWYgKCFzaG91bGRfcXVldWUpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIyNTI9c3RhdGljIHZvaWQgdWJsa19jb21taXRfcnFzKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4KVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY0LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyNjU6c3RhdGljIHZvaWQgdWJsa19xdWV1ZV9ycXMoc3RydWN0IHJxX2xpc3QgKnJxbGlzdClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjM1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgdWJsa19tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NTpcdC5xdWV1ZV9ycSAgICAgICA9IHVibGtfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NjpcdC5xdWV1ZV9ycXMgICAgICA9IHVibGtfcXVldWVfcnFzLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIzNTctXHQuaW5pdF9oY3R4XHQ9IHVibGtfaW5pdF9oY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yNzM1PXN0YXRpYyB2b2lkIHVibGtfc3RhcnRfY2FuY2VsKHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDQtXHRcdC8qXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc0NTpcdFx0ICogUXVpZXNjZSB0byBzZXJpYWxpemUgd2l0aCB1YmxrX3F1ZXVlX3JxKCksIGVuc3VyaW5nXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc0Ni1cdFx0ICogdWJxLVx1MDAzZWNhbmNlbGluZyBpcyB2aXNpYmxlIHdoZW4gdGhlIHF1ZXVlIHJlc3VtZXMuXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NTMtXHRcdCAqIERpc2sgbm90IHlldCBhbGxvY2F0ZWQgYnkgdWJsa19jdHJsX3N0YXJ0X2RldigpLCBzb1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NTQ6XHRcdCAqIHRoZXJlIGlzIG5vIHJlcXVlc3QgcXVldWUgYW5kIHVibGtfcXVldWVfcnEoKSBjYW5ub3RcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzU1LVx0XHQgKiBiZSBydW5uaW5nLiAgSnVzdCBzZXQgdGhlIGZsYWc7IGlmIHN0YXJ0X2RldiBwcm9jZWVkc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ0MgoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB1YmxrX3F1ZXVlX3JxYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYHVibGtfcXVldWVfcnFgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgcmVjYWxsIHNvbWUgYWR2aWNlOiAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LiBCdXQgd2FpdCBhIG1pbnV0ZSwgYHVibGtfcXVldWVfcnFgICppcyogYSBjYWxsYmFjaywgc3BlY2lmaWNhbGx5IGZvciB0aGUgYC5xdWV1ZV9ycWAgZmllbGQsIHJpZ2h0PyBUaGF0IG1lYW5zIGl0cyBhZGRyZXNzIGlzIGRlZmluaXRlbHkgdGFrZW4gYW5kIGl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgKm5vdCogYmVpbmcgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLiBUaGUgY29tcGlsZXIgbmVlZHMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBmb3IgaXQuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBxdWV1aW5nIHByb2Nlc3M/IEkgc2hvdWxkIHJlYWxseSBjaGVjayBgdWJsa19kcnYuY2AgdGhvcm91Z2hseSBmb3IgYWx0ZXJuYXRpdmVzLiBUaGF0JiMzOTtzIHRoZSBwbGFjZSB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsbHkgbW9yZSBzdWl0YWJsZSwgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTMwPXN0cnVjdCB1YmxrX3pvbmVkX3JlcG9ydF9kZXNjIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTM1LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUzNjpzdGF0aWMgREVGSU5FX1hBUlJBWSh1YmxrX3pvbmVkX3JlcG9ydF9kZXNjcyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTM3LVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz03ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyB1YmxrX2Nocl9jbGFzcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzg4LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjc4OTpzdGF0aWMgREVGSU5FX0lEUih1YmxrX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzkwOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWJsa19pZHJfbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzkxLXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB1YmxrX2lkcl93cTtcdC8qIHdhaXQgdW50aWwgb25lIGlkciBpcyBmcmVlZCAqL1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc5Mi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo3OTM6c3RhdGljIERFRklORV9NVVRFWCh1YmxrX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NgoJCQkJCQkJb3V0cHV0OiA2NgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB1YmxrX2Rydi5jJiMzOTtzIERhdGEgRGVjbGFyYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gYHVibGtfZHJ2LmNgIGFuZCBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBkYXRhIHR5cGVzLiBNeSBhcHByb2FjaCBpcyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHRoZSBzdHJ1Y3R1cmVzIGFuZCBrZXkgdmFyaWFibGUgZGVjbGFyYXRpb25zLiBJJiMzOTttIG1lbnRhbGx5IHNlYXJjaGluZywgb3IgcmF0aGVyLCBJICp3b3VsZCogYmUgc2VhcmNoaW5nLCBmb3IgdGhlIHR5cGljYWwgc3VzcGVjdHMgaW4gQyBrZXJuZWwgY29kZTogYF5pbnQgYCwgYF52b2lkIGAsIGBeYm9vbCBgLCBgXnVuc2lnbmVkIGAuIFRob3NlIGFyZSBteSBiYXNpYyBwcmltaXRpdmVzLiBCdXQgSSB3b24mIzM5O3Qgc3RvcCB0aGVyZS4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIGFueSBjdXN0b20gdHlwZXMgYXJlIGRlZmluZWQsIHNvIEkgYW0gZ29pbmcgdG8gc2VhcmNoIGZvciBgXnN0cnVjdCBgLCBiZWNhdXNlIHRoYXQgd2lsbCBsZXQgbWUga25vdyB3aGF0IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHVzZWQuIEZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3IgcHJvamVjdC1zcGVjaWZpYyB0eXBlcywgc28gSSYjMzk7ZCBxdWlja2x5IHdhbnQgdG8gc2VlIGlmIHNvbWV0aGluZyBsaWtlIGBeYmxrX3N0YXR1c190IGAgc2hvd3MgdXAuIFRoYXQga2luZCBvZiB0aG9yb3VnaG5lc3MgdXAgZnJvbnQgZ2l2ZXMgbWUgdGhlIHNjYWZmb2xkaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIG1hbmlwdWxhdGVzIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgYW55IHBvdGVudGlhbCBkZXNpZ24gY2hvaWNlcyBiYXNlZCBvbiB0aG9zZSB0eXBlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGJvb2x8dW5zaWduZWR8c3RydWN0fGJsa19zdGF0dXNfdCkgW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKklzIEV2ZXJ5dGhpbmcgUmVhbGx5IFN0YXRpb25hcnk/IExldCYjMzk7cyBQcm9iZSBgbW9kdWxlX2luaXRgKioKCkFscmlnaHQsIEkmIzM5O20gZ2V0dGluZyBhIGh1bmNoIGhlcmUuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFmZmFpcnMgaXMgaW5oZXJlbnRseSBzdGF0aWMuIEl0JiMzOTtzIGEgZ3V0IGZlZWxpbmcsIGJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gbW9yZSBjb21wbGV4IGFuYWx5c2lzLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBUaGF0IHRob3VnaHQgbGVhZHMgbWUgdG8gYG1vZHVsZV9pbml0YC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGluaXRpYWwgc2V0dXAgaGFwcGVucywgdGhlIGZvdW5kYXRpb24gdXBvbiB3aGljaCBldmVyeXRoaW5nIGVsc2UgaXMgYnVpbHQuIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBpZiB0aGUgJiMzOTtzdGF0aWMmIzM5OyBjaGFyYWN0ZXJpc3RpYyB0aGF0IEkmIzM5O20gc2VlaW5nIHJlYWxseSBleGlzdHMsIHRoZXJlIG1heSBiZSBzb21lIGNsdWVzIHRoZXJlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgbW9kdWxlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQuIFBlcmhhcHMgc29tZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGluIGEgd2F5IHdoaWNoIGxpbWl0cyB0aGVpciBmbGV4aWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIHBvaW50IG9mIG9yaWdpbiwgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgc2V0IHVwLiBBbmFseXppbmcgYG1vZHVsZV9pbml0YCBtaWdodCBnaXZlIG1lIHRoZSBiYXNlIGZhY3RzIG9mIHRoZSBtYXR0ZXIuIEkgc3VzcGVjdCB0aGF0IHRoaXMgbWF5IGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01OTA4PXN0YXRpYyB2b2lkIF9fZXhpdCB1YmxrX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTkyMi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1OTIzOm1vZHVsZV9pbml0KHVibGtfaW5pdCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTkyNC1tb2R1bGVfZXhpdCh1YmxrX2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB1YmxrIEZ1bmN0aW9uIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBhbmFseXplIHRoaXMgYHVibGtgIGNvZGUuIElmIGV2ZXJ5dGhpbmcgb2YgaW1wb3J0YW5jZSBpcyBzdGF0aWMsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgdHJlbWVuZG91c2x5LiBJIGNhbiBqdXN0IGZvY3VzIG9uIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhY3QgYXMgY2FsbGJhY2tzIG9yIGVudHJ5IHBvaW50cy4gCgpSaWdodCBvZmYgdGhlIGJhdCwgYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyBwcm9taXNpbmcuIEFsc28sIGB1YmxrX3F1ZXVlX3JxYCwgYHVibGtfcXVldWVfcnFzYCwgYHVibGtfYmF0Y2hfcXVldWVfcnFgLCBhbmQgYHVibGtfY2hfd3JpdGVfaXRlcmAuIExldCYjMzk7cyBjb25maXJtIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgc3RhdGljLiBZZXAsIGl0IGlzLiBTaW5jZSB0aGV5IGFyZSBhbGwgc3RhdGljLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2ltcGx5IGxpc3QgYHVibGtfY2hfdXJpbmdfY21kYCwgYHVibGtfcXVldWVfcnFgLCBhbmQgYHVibGtfcXVldWVfcnFzYC4KCldhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSYjMzk7dmUgb3Zlcmxvb2tlZCBzb21ldGhpbmcgY3JpdGljYWwuIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgZGlyZWN0bHkgaGFuZGxpbmcgdGhlIGlvX3VyaW5nIGNvbW1hbmQhIEl0JiMzOTtzIHRoZSBvbmUgdGhhdCBldmVudHVhbGx5IGNhbGxzIGB1YmxrX3VubWFwX2lvYCBvciBgdWJsa19tYXBfaW9gLiBUaGlzIHNvdW5kcyBsaWtlIHRoZSByZWFsIGVudHJ5IHBvaW50IQoKTGV0JiMzOTtzIHRyYWNlIGl0IG91dC4KYHVibGtfY2hfdXJpbmdfY21kYCAtJmd0OyBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIC0mZ3Q7IGBfX3VibGtfY29tcGxldGVfcnFgIC0mZ3Q7IGB1YmxrX3VubWFwX2lvYC4KYHVibGtfY2hfdXJpbmdfY21kYCAtJmd0OyBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIC0mZ3Q7IGB1YmxrX2dldF9kYXRhYCAtJmd0OyBgdWJsa19zdGFydF9pb2AgLSZndDsgYHVibGtfbWFwX2lvYC4KClllcywgYHVibGtfY2hfdXJpbmdfY21kYCAqaXMqIHRoZSBwZXJmZWN0IHN5bWJvbCB0byBmb2N1cyBvbi4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGlvX3VyaW5nIGludGVyYWN0aW9uLgoKTm93LCBsZXQgbWUganVzdCBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLi4uIEFoLCBgQkxLX0RFVl9VQkxLYCBpcyB0aGUgb25seSBvbmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGB1YmxrX2NoX3VyaW5nX2NtZGAgaW4gYHVibGtfZHJ2LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1YmxrX2NoX3VyaW5nX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzM0OD1zdGF0aWMgYm9vbCB1YmxrX2dldF9kYXRhKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCB1YmxrX2lvICppbyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2NS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzY2OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjctXHRcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzQ5OT1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0ICpfX3VibGtfY2hlY2tfYW5kX2dldF9yZXEoc3RydWN0IHVibGtfZGV2aWNlICp1Yixcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyNi1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI3OnN0YXRpYyB2b2lkIHVibGtfY2hfdXJpbmdfY21kX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1Mjgte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMzLVx0aWYgKCF0dy5jYW5jZWwpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzNDpcdFx0cmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzNS1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM4LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mzk6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0Ny1cdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQ4Olx0XHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ5LVx0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUxLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NTI6XHRyZXR1cm4gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU1My19XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTQxNTA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWJsa19jaF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTU1LVx0LndyaXRlX2l0ZXIgPSB1YmxrX2NoX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDE1NjpcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTU3LVx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqVWJsayBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIGNvbmZpcm1lZC4gYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2UgbmVlZCB0byBiZSBmb2N1c2VkIG9uIGhlcmUuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB0aGF0IHdlIG1heSBuZWVkIHRvIGNvbnNpZGVyIG9yIGFueSBpbnRlcmFjdGlvbnMgd2Ugc2hvdWxkIGJlIGF3YXJlIG9mLgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIHNlZSBgQkxLX0RFVl9VQkxLYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJT19VUklOR2AsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byBjaGVjayB0aGVzZSB0aGluZ3MuIE5vdywgYElPX1VSSU5HYCBpcyBwcmV0dHkgdWJpcXVpdG91cyB0aGVzZSBkYXlzLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIGJhc2UgY29uZmlndXJhdGlvbi4gQnV0IHdhaXQgYSBtaW51dGXigKYgYEJMS19ERVZfVUJMS2AgKnNlbGVjdHMqIGBJT19VUklOR2AuIEFoLCByaWdodCEgU28sIGlmIHdlIGVuYWJsZSBgQkxLX0RFVl9VQkxLYCwgd2UgZ2V0IGBJT19VUklOR2AgJiMzNDtmb3IgZnJlZSwmIzM0OyBhcyBpdCB3ZXJlLiBUaGF0IG1lYW5zIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGBJT19VUklOR2AgaWYgd2UgZW5hYmxlIGBCTEtfREVWX1VCTEtgLCBzbyB0aGF0IHN0cmVhbWxpbmVzIHRoaW5ncy4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYnV0IHRoaXMgc2hvdWxkIGJlIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjg6XHRjb25maWcgQkxLX0RFVl9VQkxLXG4gMzI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gMzMwOlx0XHRzZWxlY3QgSU9fVVJJTkdcbiAzMzE6XHRcdGhlbHBcbiAzMzI6XHRcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xuIDMzMzpcdFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXG4gMzM0Olx0XHQgIGRlZmluaXRpb24gaXNuJiMzOTt0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxuIDMzNTpcdFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxuIDMzNjpcdFxuIDMzNzpcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xuIDMzODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVwmIzM0O1xuIDMzOTpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1VCTEtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0aGVscFxuIDM0MjpcdFx0ICB1YmxrIGRyaXZlciBzdGFydGVkIHRvIHRha2UgcGxhaW4gY29tbWFuZCBlbmNvZGluZywgd2hpY2ggdHVybnMgb3V0XG4gMzQzOlx0XHQgIG9uZSBiYWQgd2F5LiBUaGUgdHJhZGl0aW9uYWwgaW9jdGwgY29tbWFuZCBvcGNvZGUgZW5jb2RlcyBtb3JlXG4gMzQ0Olx0XHQgIGluZm8gYW5kIGJhc2ljYWxseSBkZWZpbmVzIGVhY2ggY29kZSB1bmlxdWVseSwgc28gb3Bjb2RlIGNvbmZsaWN0XG4gMzQ1Olx0XHQgIGlzIGF2b2lkZWQsIGFuZCBkcml2ZXIgY2FuIGhhbmRsZSB3cm9uZyBjb21tYW5kIGVhc2lseSwgbWVhbnRpbWUgaXRcbiAzNDY6XHRcdCAgbWF5IGhlbHAgc2VjdXJpdHkgc3Vic3lzdGVtIHRvIGF1ZGl0IGlvX3VyaW5nIGNvbW1hbmQuXG4gMzQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjg2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKklPX1VSSU5HIGFuZCBCTEtfREVWX1VCTEsgQ29uZmx1ZW5jZSoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgdGhlIGNvbnRleHQuIFdlJiMzOTtyZSBsZWFuaW5nIHRvd2FyZHMgYElPX1VSSU5HYCBoZXJlLCBzbyBJIG5lZWQgdG8gYXNzZXNzIGhvdyB0aGF0IGFmZmVjdHMgdGhpbmdzLiBHaXZlbiB0aGF0LCBgQkxLX0RFVl9VQkxLYCAqc2hvdWxkKiBiZSBhZGVxdWF0ZSBmb3IgdGhlIGltbWVkaWF0ZSBuZWVkcywgd2hpY2ggc3RyZWFtbGluZXMgYSBmZXcgYXNzdW1wdGlvbnMgSSBoYWQgZWFybGllci4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBJL08uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggZGF0YSBtb3ZlbWVudCwgd2hpY2ggbWVhbnMgSSBzaG91bGQgZHJpbGwgZG93biBpbnRvIHRoZSBgaW1wb3J0X3VidWZgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGxpa2VseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcy4gSXQmIzM5O3MgcHJvYmFibHkgaW4gYGxpYi9pb3ZfaXRlci5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgcmVsYXRlZCwgc28gSSYjMzk7bGwgZGlnIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGV5IGFyZSBoYW5kbGluZyB0aGlzIHdob2xlIGRhdGEgZXhjaGFuZ2UuIEl0IHNob3VsZCBoYXZlIGFsbCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhlIGJ1ZmZlciBpbXBvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbXBvcnRfdWJ1ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9pb3ZfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9pb3ZfaXRlci5jPTEzNDI9c3RhdGljIHNzaXplX3QgX19pbXBvcnRfaW92ZWNfdWJ1ZihpbnQgdHlwZSwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYyxcbi0tXG5saWIvaW92X2l0ZXIuYy0xMzU3LVxubGliL2lvdl9pdGVyLmM6MTM1ODpcdHJldCA9IGltcG9ydF91YnVmKHR5cGUsIGlvdi1cdTAwM2Vpb3ZfYmFzZSwgaW92LVx1MDAzZWlvdl9sZW4sIGkpO1xubGliL2lvdl9pdGVyLmMtMTM1OS1cdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbmxpYi9pb3ZfaXRlci5jPTE0NDM9RVhQT1JUX1NZTUJPTChpbXBvcnRfaW92ZWMpO1xubGliL2lvdl9pdGVyLmMtMTQ0NC1cbmxpYi9pb3ZfaXRlci5jOjE0NDU6aW50IGltcG9ydF91YnVmKGludCBydywgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc3RydWN0IGlvdl9pdGVyICppKVxubGliL2lvdl9pdGVyLmMtMTQ0Ni17XG4tLVxubGliL2lvdl9pdGVyLmMtMTQ1NC19XG5saWIvaW92X2l0ZXIuYzoxNDU1OkVYUE9SVF9TWU1CT0xfR1BMKGltcG9ydF91YnVmKTtcbmxpYi9pb3ZfaXRlci5jLTE0NTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODY1CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBVYmxrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgZml4IGluIHRoZSB1YmxrIGRyaXZlci4gYGltcG9ydF91YnVmYCBpcyByZXR1cm5pbmcgYW4gaW50ZWdlciwgYW5kIHRoZSBwYXRjaCBpcyBjb3JyZWN0bHkgY2hlY2tpbmcgaWYgaXQmIzM5O3MgbGVzcyB0aGFuIHplcm8sIG1lYW5pbmcgYW4gZXJyb3Igb2NjdXJyZWQsIGFuZCBoYW5kbGluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgZHJpdmVyIGZyb20gaWdub3JpbmcgYSBmYWlsdXJlLCB3aGljaCBpcyBhIGNsYXNzaWMgcG90ZW50aWFsIGJ1Zywgc28gaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBjb3ZlciB3aXRoIGZ1enppbmcuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IHRvdWNoZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBjb3JlIG1hcHBpbmcvdW5tYXBwaW5nIGZ1bmN0aW9ucywgSSYjMzk7bGwgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCkZvciB0YXJnZXRlZCBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgRm9jdXNTeW1ib2xzYCB0byBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19xdWV1ZV9ycWAsIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaGVzZSBmdW5jdGlvbnMgc2VlbSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgSU8gcGF0aCBhbmQgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBXZSByZWFsbHkgbmVlZCB0byBzdHJlc3MgdGVzdCB0aGUgZXJyb3IgcGF0aHMuCgpJJiMzOTtsbCBlbmFibGUgdGhlIGBCTEtfREVWX1VCTEtgIGNvbmZpZywgb2YgY291cnNlLgoKRmluYWxseSwgdGhlIGBSZWFzb25pbmdgIHdpbGwgYmU6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gaW1wb3J0X3VidWYgZmFpbHMgaW4gdWJsa19tYXBfaW8gYW5kIHVibGtfdW5tYXBfaW8sIGFuZCBoYW5kbGVzIHVubWFwcGVkX2J5dGVzID09IDAgaW4gX191YmxrX2NvbXBsZXRlX3JxLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB1YmxrIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy4mIzM0OyBUaGlzIHNob3VsZCBnaXZlIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiB3aHkgd2Ugd2FudCB0byBmdXp6IHRoaXMgcGF0Y2guIFdlIGFyZSBmb2N1c2luZyBvbiBpbnB1dHRpbmcgYSBsb3Qgb2YgZGl2ZXJzZSBkYXRhIGZvciB0aGUgYWZvcmVtZW50aW9uZWQgZnVuY3Rpb25zLCB3aGlsZSBlbnN1cmluZyB0byBoYW5kbGUgZXJyb3JzIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDt1YmxrX3F1ZXVlX3JxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIGltcG9ydF91YnVmIGZhaWxzIGluIHVibGtfbWFwX2lvIGFuZCB1YmxrX3VubWFwX2lvLCBhbmQgaGFuZGxlcyB1bm1hcHBlZF9ieXRlcyA9PSAwIGluIF9fdWJsa19jb21wbGV0ZV9ycS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdWJsayBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7dWJsa19xdWV1ZV9ycXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgd2hlbiBpbXBvcnRfdWJ1ZiBmYWlscyBpbiB1YmxrX21hcF9pbyBhbmQgdWJsa191bm1hcF9pbywgYW5kIGhhbmRsZXMgdW5tYXBwZWRfYnl0ZXMgPT0gMCBpbiBfX3VibGtfY29tcGxldGVfcnEuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIHVibGsgZHJpdmVyIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MTcuOTM2NTI3NDU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTk4NTAxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVUJMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVibGtfY2hfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3JxXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3Jxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gaW1wb3J0X3VidWYgZmFpbHMgaW4gdWJsa19tYXBfaW8gYW5kIHVibGtfdW5tYXBfaW8sIGFuZCBoYW5kbGVzIHVubWFwcGVkX2J5dGVzID09IDAgaW4gX191YmxrX2NvbXBsZXRlX3JxLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB1YmxrIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MTcuOTM2NTMzMDk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTUxODkzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlOTc1MTcxNTY2NmIwMzQzNTc1OGI5Y2FlMGJlODhhNzg4MTNmYWE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDAyOjI3OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xcbmluZGV4IDRjYTZlYzczOGM5MzAuLjgxMDFjMmE3M2VmZGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuQEAgLTE0NzUsNyArMTQ3NSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfbWFwX2lvKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuIFxcdFxcdHN0cnVjdCBpb3ZfaXRlciBpdGVyO1xcbiBcXHRcXHRjb25zdCBpbnQgZGlyID0gSVRFUl9ERVNUO1xcbiBcXG4tXFx0XFx0aW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXFx1MDAzZWJ1Zi5hZGRyKSwgcnFfYnl0ZXMsIFxcdTAwMjZpdGVyKTtcXG4rXFx0XFx0aWYgKGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLVxcdTAwM2VidWYuYWRkciksIHJxX2J5dGVzLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2aXRlcikgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdFxcdHJldHVybiB1YmxrX2NvcHlfdXNlcl9wYWdlcyhyZXEsIDAsIFxcdTAwMjZpdGVyLCBkaXIpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBycV9ieXRlcztcXG5AQCAtMTQ5NCw5ICsxNDk3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa191bm1hcF9pbyhib29sIG5lZWRfbWFwLFxcbiBcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgaXRlcjtcXG4gXFx0XFx0Y29uc3QgaW50IGRpciA9IElURVJfU09VUkNFO1xcbiBcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKGlvLVxcdTAwM2VyZXMgXFx1MDAzZSBycV9ieXRlcyk7XFxuK1xcdFxcdGlmIChpbXBvcnRfdWJ1ZihkaXIsIHU2NF90b191c2VyX3B0cihpby1cXHUwMDNlYnVmLmFkZHIpLCBpby1cXHUwMDNlcmVzLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2aXRlcikgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdFxcdGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLVxcdTAwM2VidWYuYWRkciksIGlvLVxcdTAwM2VyZXMsIFxcdTAwMjZpdGVyKTtcXG4gXFx0XFx0cmV0dXJuIHVibGtfY29weV91c2VyX3BhZ2VzKHJlcSwgMCwgXFx1MDAyNml0ZXIsIGRpcik7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHJxX2J5dGVzO1xcbkBAIC0xNTg0LDggKzE1ODgsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdWJsa19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXFxuIFxcdCAqXFxuIFxcdCAqIFJlLXJlYWQgc2ltcGx5IGZvciB0aGlzIHVubGlrZWx5IGNhc2UuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkodW5tYXBwZWRfYnl0ZXMgXFx1MDAzYyBpby1cXHUwMDNlcmVzKSlcXG4rXFx0aWYgKHVubGlrZWx5KHVubWFwcGVkX2J5dGVzIFxcdTAwM2MgaW8tXFx1MDAzZXJlcykpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCF1bm1hcHBlZF9ieXRlcykpIHtcXG4rXFx0XFx0XFx0cmVzID0gQkxLX1NUU19JT0VSUjtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpby1cXHUwMDNlcmVzID0gdW5tYXBwZWRfYnl0ZXM7XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJ1biBiaW8tXFx1MDAzZWJpX2VuZF9pbygpIHdpdGggc29mdGlycXMgZGlzYWJsZWQuIElmIHRoZSBmaW5hbCBmcHV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjE4LjMzMjQ3NTg2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTgwMjU0MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19xdWV1ZV9ycVwiLFxuICAgIFwidWJsa19xdWV1ZV9ycXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIGltcG9ydF91YnVmIGZhaWxzIGluIHVibGtfbWFwX2lvIGFuZCB1YmxrX3VubWFwX2lvLCBhbmQgaGFuZGxlcyB1bm1hcHBlZF9ieXRlcyA9PSAwIGluIF9fdWJsa19jb21wbGV0ZV9ycS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdWJsayBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5NzUxNzE1NjY2YjAzNDM1NzU4YjljYWUwYmU4OGE3ODgxM2ZhYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMjoyNzoxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggNGNhNmVjNzM4YzkzMC4uODEwMWMyYTczZWZkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5AQCAtMTQ3NSw3ICsxNDc1LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa19tYXBfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcbiBcdFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRcdGNvbnN0IGludCBkaXIgPSBJVEVSX0RFU1Q7XG4gXG4tXHRcdGltcG9ydF91YnVmKGRpciwgdTY0X3RvX3VzZXJfcHRyKGlvLVx1MDAzZWJ1Zi5hZGRyKSwgcnFfYnl0ZXMsIFx1MDAyNml0ZXIpO1xuK1x0XHRpZiAoaW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXHUwMDNlYnVmLmFkZHIpLCBycV9ieXRlcyxcbitcdFx0XHRcdFx1MDAyNml0ZXIpIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuIFx0XHRyZXR1cm4gdWJsa19jb3B5X3VzZXJfcGFnZXMocmVxLCAwLCBcdTAwMjZpdGVyLCBkaXIpO1xuIFx0fVxuIFx0cmV0dXJuIHJxX2J5dGVzO1xuQEAgLTE0OTQsOSArMTQ5NywxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfdW5tYXBfaW8oYm9vbCBuZWVkX21hcCxcbiBcdFx0c3RydWN0IGlvdl9pdGVyIGl0ZXI7XG4gXHRcdGNvbnN0IGludCBkaXIgPSBJVEVSX1NPVVJDRTtcbiBcbi1cdFx0V0FSTl9PTl9PTkNFKGlvLVx1MDAzZXJlcyBcdTAwM2UgcnFfYnl0ZXMpO1xuK1x0XHRpZiAoaW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXHUwMDNlYnVmLmFkZHIpLCBpby1cdTAwM2VyZXMsXG4rXHRcdFx0XHRcdTAwMjZpdGVyKSBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gMDtcbiBcbi1cdFx0aW1wb3J0X3VidWYoZGlyLCB1NjRfdG9fdXNlcl9wdHIoaW8tXHUwMDNlYnVmLmFkZHIpLCBpby1cdTAwM2VyZXMsIFx1MDAyNml0ZXIpO1xuIFx0XHRyZXR1cm4gdWJsa19jb3B5X3VzZXJfcGFnZXMocmVxLCAwLCBcdTAwMjZpdGVyLCBkaXIpO1xuIFx0fVxuIFx0cmV0dXJuIHJxX2J5dGVzO1xuQEAgLTE1ODQsOCArMTU4OCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbyxcbiBcdCAqXG4gXHQgKiBSZS1yZWFkIHNpbXBseSBmb3IgdGhpcyB1bmxpa2VseSBjYXNlLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkodW5tYXBwZWRfYnl0ZXMgXHUwMDNjIGlvLVx1MDAzZXJlcykpXG4rXHRpZiAodW5saWtlbHkodW5tYXBwZWRfYnl0ZXMgXHUwMDNjIGlvLVx1MDAzZXJlcykpIHtcbitcdFx0aWYgKHVubGlrZWx5KCF1bm1hcHBlZF9ieXRlcykpIHtcbitcdFx0XHRyZXMgPSBCTEtfU1RTX0lPRVJSO1xuK1x0XHRcdGdvdG8gZXhpdDtcbitcdFx0fVxuK1xuIFx0XHRpby1cdTAwM2VyZXMgPSB1bm1hcHBlZF9ieXRlcztcbitcdH1cbiBcbiBcdC8qXG4gXHQgKiBSdW4gYmlvLVx1MDAzZWJpX2VuZF9pbygpIHdpdGggc29mdGlycXMgZGlzYWJsZWQuIElmIHRoZSBmaW5hbCBmcHV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyNzoxOC4zMzI0NzczODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTk3NTE2ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdWJsayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgZHJpdmVycy9ibG9jay91YmxrX2Rydi5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGNoYW5nZXMgdG8gYHVibGtfbWFwX2lvYCwgYHVibGtfdW5tYXBfaW9gLCBhbmQgYF9fdWJsa19jb21wbGV0ZV9ycWAuIFRoaXMgdGVsbHMgbWUgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBJL08gbWFwcGluZyBvciB1bm1hcHBpbmcgb3BlcmF0aW9ucywgYW5kIHRoZSBjb21wbGV0aW9uIG9mIHJlcXVlc3RzLlxuXG5UaGUgYml0IHRoYXQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoZSBjaGVjayBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbXBvcnRfdWJ1ZmAuIFJldHVybmluZyAwIG9uIGZhaWx1cmUgaW5kaWNhdGVzIGEgY2xlYXIgZXJyb3IgcGF0aC4gSXQncyBhIGZ1bmRhbWVudGFsIHNhZmV0eSBjaGVjaywgcHJldmVudGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcgaWYgdGhlIGJ1ZmZlciBpbXBvcnQgZmFpbHMuIEdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLCBlc3NlbnRpYWwgaW4gYSBibG9jayBkcml2ZXIuXG5cblRoZW4sIGxvb2tpbmcgYXQgYF9fdWJsa19jb21wbGV0ZV9ycWAsIHRoZSBjaGVjayBmb3IgYHVubWFwcGVkX2J5dGVzYCBiZWluZyB6ZXJvIGlzIGludGVyZXN0aW5nLiBJZiBubyBieXRlcyB3ZXJlIHVubWFwcGVkLCBpdCBzZXRzIGByZXMgPSBCTEtfU1RTX0lPRVJSYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIGFpbWVkIGF0IGhhbmRsaW5nIHVuZXhwZWN0ZWQgc2NlbmFyaW9zIHdoZXJlIHVubWFwcGluZyBmYWlscywgb3IgaGFzbid0IGFjdHVhbGx5IGhhcHBlbmVkLiBTZXR0aW5nIGBCTEtfU1RTX0lPRVJSYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBzaWduYWwgYW4gSS9PIGVycm9yIHRvIHRoZSB1cHBlciBsYXllcnMuIFRoZSBjb2RlIHRoZW4ganVtcHMgdG8gZXhpdC5cblxuVG8gZ2FpbiBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIHBhcnRzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGZpbmQgdGhlIEtjb25maWcgb3B0aW9uIHRoYXQgaW5jbHVkZXMgYHVibGtfZHJ2Lm9gLiBUaGF0J2xsIGdpdmUgbWUgY29udGV4dCBvbiB3aGVuIHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZSBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGUgY2hhbmdlcyB3aWxsIGltcGFjdCB0aGUgYmxvY2sgZHJpdmVyIGluIHZhcmlvdXMgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MjQuMzI5OTk3NDIyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDUyMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfZHJ2Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfQkxLX0RFVl9SVVNUX05VTEwpICs9IHJudWxsL1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzktXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTo0MDpvYmotJChDT05GSUdfQkxLX0RFVl9VQkxLKVxcdFxcdFxcdCs9IHVibGtfZHJ2Lm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTQxLW9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1ApICs9IHpsb29wLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MjQuMzc0MDU0NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE2NjI2ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIGluIHF1ZXN0aW9uIGlzIGBCTEtfREVWX1VCTEtgLiBSaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgdGhpcyByZWxpZXMgb24gd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCB0byBkZXRlcm1pbmUgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBkZXNpZ24uIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MjcuNjkwNjgzNjExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDgyMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1VCTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6MjcuNzM2MTcxMTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMjM1ODAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgdWJsayBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhpcyBgQkxLX0RFVl9VQkxLYCBLY29uZmlnIGVudHJ5LiBNeSBndXQgZmVlbGluZyBpcyB0byBzdGFydCBieSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzLCBhcyBhbHdheXMuIFdoYXQgb3RoZXIgZmVhdHVyZXMgKm11c3QqIGJlIGVuYWJsZWQgb3IgY29uZmlndXJlZCBmb3IgdGhpcyB0byBldmVuICpiZSogcmVsZXZhbnQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBoYXJkd2FyZSBvciBzb2Z0d2FyZSByZXF1aXJlbWVudHMgYmFrZWQgaW4sIG9yIGlzIGl0IG1vcmUgZ2VuZXJpYz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGltbWVkaWF0ZWx5LCB0aGF0J3Mgc3RlcCBvbmUsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3Igc3RvcmFnZSBkZXNpZ24uIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IElzIHRoaXMgKm9ubHkqIGZvciB1c2VyLXNwYWNlIGJsb2NrIGRldmljZXM/IElmIHNvLCB3aGF0IGRvZXMgdGhhdCBtZWFuIGZvciBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHBvdGVudGlhbCBsYXRlbmN5PyBBcmUgdGhlcmUgYW55IGNvbXBhdGliaWxpdHkgY29uc2lkZXJhdGlvbnMgSSBzaG91bGQgYmUgaW1tZWRpYXRlbHkgYXdhcmUgb2Ygd2l0aCBleGlzdGluZyBkcml2ZXJzIG9yIHN1YnN5c3RlbXM/IEknbSBob3BpbmcgdG8gc2VlIHdlbGwtY29tbWVudGVkIGNvZGUsIHRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgc3BlY2lmaWMgY2hvaWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjMxLjY2ODUzMTY4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjg6XFx0Y29uZmlnIEJMS19ERVZfVUJMS1xcbiAzMjk6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuIDMzMDpcXHRcXHRzZWxlY3QgSU9fVVJJTkdcXG4gMzMxOlxcdFxcdGhlbHBcXG4gMzMyOlxcdFxcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xcbiAzMzM6XFx0XFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXFxuIDMzNDpcXHRcXHQgIGRlZmluaXRpb24gaXNuJ3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXFxuIDMzNTpcXHRcXHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXFxuIDMzNjpcXHRcXG4gMzM3OlxcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbiAzMzg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuIDMzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRoZWxwXFxuIDM0MjpcXHRcXHQgIHVibGsgZHJpdmVyIHN0YXJ0ZWQgdG8gdGFrZSBwbGFpbiBjb21tYW5kIGVuY29kaW5nLCB3aGljaCB0dXJucyBvdXRcXG4gMzQzOlxcdFxcdCAgb25lIGJhZCB3YXkuIFRoZSB0cmFkaXRpb25hbCBpb2N0bCBjb21tYW5kIG9wY29kZSBlbmNvZGVzIG1vcmVcXG4gMzQ0OlxcdFxcdCAgaW5mbyBhbmQgYmFzaWNhbGx5IGRlZmluZXMgZWFjaCBjb2RlIHVuaXF1ZWx5LCBzbyBvcGNvZGUgY29uZmxpY3RcXG4gMzQ1OlxcdFxcdCAgaXMgYXZvaWRlZCwgYW5kIGRyaXZlciBjYW4gaGFuZGxlIHdyb25nIGNvbW1hbmQgZWFzaWx5LCBtZWFudGltZSBpdFxcbiAzNDY6XFx0XFx0ICBtYXkgaGVscCBzZWN1cml0eSBzdWJzeXN0ZW0gdG8gYXVkaXQgaW9fdXJpbmcgY29tbWFuZC5cXG4gMzQ3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyNzozMS42Njg2MDIxMTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTkyMDg5NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVUJMSyBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYEJMS19ERVZfVUJMS2AuIFJpZ2h0LCBnb3QgaXQuIE15IHRhc2sgaW52b2x2ZXMgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2gsIHdoaWNoIGFwcGFyZW50bHkgdG91Y2hlcyB0aGUgY29yZSBVQkxLIEkvTyBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIG1vZGlmeWluZyB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgdWJsa19tYXBfaW9gLCBgdWJsa191bm1hcF9pb2AsIGFuZCBgX191YmxrX2NvbXBsZXRlX3JxYC4gVGhlIGltbWVkaWF0ZSBjaGFsbGVuZ2UgaXMgdGhhdCB0aGVzZSBhcmUgKnN0YXRpYyogZnVuY3Rpb25zLiBUaGF0IG1lYW5zIHRoZXkncmUgaW50ZXJuYWwgdG8gdGhlIFVCTEsgbW9kdWxlLlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljLCBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiB0aGVzZSBzdGF0aWMgb25lcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZSBleHRlcm5hbCBBUEkgY2FsbHMgZG93biBpbnRvIHRoZXNlIG1vZGlmaWVkIGludGVybmFscy4gSSB3YW50IHRvIHNlZSB3aGF0IHRoaXMgbW9kaWZpY2F0aW9uIGFjdHVhbGx5ICpkb2VzKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucy4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIG1ha2UgaXQgdmVyeSBlYXN5IHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjM3LjI2MDY5NDE2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwODY3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19tYXBfaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNDU0PXN0YXRpYyBpbmxpbmUgYm9vbCB1YmxrX25lZWRfdW5tYXBfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTQ1OS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTQ2MDpzdGF0aWMgdW5zaWduZWQgaW50IHVibGtfbWFwX2lvKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE0NjEtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzQ0PXN0YXRpYyBib29sIHVibGtfc3RhcnRfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNzUyLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNzUzOlxcdG1hcHBlZF9ieXRlcyA9IHVibGtfbWFwX2lvKHVicSwgcmVxLCBpbyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE3NTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjM3LjMwMjc4NzAyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3NDk1NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIEkvTyBQYXRoIGluIFVibGsqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBVYmxrIGNvZGUsIGFuZCBJIHNlZSB0aGF0IGB1YmxrX3N0YXJ0X2lvYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGluaXRpYXRpbmcgSS9PIG9wZXJhdGlvbnMuIE5vdywgd2hlcmUgaXMgKnRoYXQqIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBJL08gcHJvY2VzcyBiZWdpbnMuIEkgd2FudCB0byBzZWUgaG93IGB1YmxrX3N0YXJ0X2lvYCBpbnRlcmFjdHMgd2l0aCB0aGUgbWFwcGluZyBwcm9jZXNzIHdoaWNoIGl0IGNhbGxzIChgdWJsa19tYXBfaW9gKS4gU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgdWJsa19zdGFydF9pb2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIEkvTyBpcyBhY3R1YWxseSAqc3RhcnRlZCogd2l0aGluIHRoaXMgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6NDAuNzgwMjg0ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg0MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfc3RhcnRfaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzMwPXN0YXRpYyB2b2lkIHVibGtfYXV0b19idWZfZGlzcGF0Y2goY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNzQzLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNzQ0OnN0YXRpYyBib29sIHVibGtfc3RhcnRfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTc0NS1cXHRcXHRcXHQgIHN0cnVjdCB1YmxrX2lvICppbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNzc4PXN0YXRpYyB2b2lkIHVibGtfZGlzcGF0Y2hfcmVxKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTgxNS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTgxNjpcXHRpZiAoIXVibGtfc3RhcnRfaW8odWJxLCByZXEsIGlvKSlcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMTgxNy1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTgyNz1zdGF0aWMgYm9vbCBfX3VibGtfYmF0Y2hfcHJlcF9kaXNwYXRjaChzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE4MzYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjE4Mzc6XFx0aWYgKCF1YmxrX3N0YXJ0X2lvKHVicSwgcmVxLCBpbykpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE4MzgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNDg9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2Mi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM2MzpcXHRyZXR1cm4gdWJsa19zdGFydF9pbyh1YnEsIHJlcSwgaW8pO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6NDAuODI1MTc0NjE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTQyODgzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbnJhdmVsaW5nIHRoZSBJL08gUGF0aCBhbmQgVW5tYXAgQ2FsbHMqKlxuXG5SaWdodCwgc28gYHVibGtfZGlzcGF0Y2hfcmVxYCwgYF9fdWJsa19iYXRjaF9wcmVwX2Rpc3BhdGNoYCwgYW5kIGB1YmxrX2dldF9kYXRhYCBhbGwgZXZlbnR1YWxseSBsZWFkIHRvIGEgY2FsbCB0byBgdWJsa19zdGFydF9pb2AuIFRoYXQncyB0aGUgY29yZSBJL08gaW5pdGlhdGlvbiBzZXF1ZW5jZSB3aXRoaW4gdGhpcyBgdWJsa2AgY29udGV4dC4gTWFrZXMgc2Vuc2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgd2hvJ3MgcmVzcG9uc2libGUgZm9yIHRoZSBjbGVhbnVwPyBNb3JlIHNwZWNpZmljYWxseSwgd2hlcmUgYXJlIHdlIHNlZWluZyBgdWJsa191bm1hcF9pb2AgY2FsbHMgaGFwcGVuaW5nPyBLbm93aW5nIHdobyBjYWxscyBgdWJsa191bm1hcF9pb2AgaXMgY3J1Y2lhbCB0byBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBJL08gbGlmZWN5Y2xlIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGluZ3MgYXJlIHByb3Blcmx5IHVuZG9uZSBhbmQgcmVsZWFzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyNzo0NC4zMzk0NjU4ODdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDExNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfdW5tYXBfaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNDYwPXN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa19tYXBfaW8oY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNDg2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNDg3OnN0YXRpYyB1bnNpZ25lZCBpbnQgdWJsa191bm1hcF9pbyhib29sIG5lZWRfbWFwLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNDg4LVxcdFxcdGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MTU1Mz1zdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNTgzLVxcdC8qIGZvciBSRUFEIHJlcXVlc3QsIHdyaXRpbmcgZGF0YSBpbiBpb2QtXFx1MDAzZWFkZHIgdG8gcnEgYnVmZmVycyAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNTg0OlxcdHVubWFwcGVkX2J5dGVzID0gdWJsa191bm1hcF9pbyhuZWVkX21hcCwgcmVxLCBpbyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1ODUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjQ0LjM4MTg4NTc4NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQ2OTYwNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJL08gQ29tcGxldGlvbiBQYXRoIGluIHVibGsqKlxuXG5BbHJpZ2h0LCBzbyBgX191YmxrX2NvbXBsZXRlX3JxYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBjb21wbGV0aW9uIG9mIGEgcmVxdWVzdCBpbiB0aGUgdWJsayBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIGNvbXBsZXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGNhbGwgY2hhaW4gbGVhZGluZyB1cCB0byBpdCwgc2luY2UgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdyBpcyBlc3NlbnRpYWwgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMgaW4gYmxvY2sgZHJpdmVycy4gSSByZW1lbWJlciBgX191YmxrX2NvbXBsZXRlX3JxYCBjYWxscyBgdWJsa191bm1hcF9pb2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBhZnRlciB0aGUgSS9PIGlzIGRvbmUgdGhlIG1hcHBpbmcgaXMgYmVpbmcgdW5tYXBwZWQuIEJ1dCB0aGUgbW9yZSBwcmVzc2luZyBxdWVzdGlvbiBpczogd2hvLCBleGFjdGx5LCBpcyBjYWxsaW5nIHRoaXMgY29tcGxldGlvbiByb3V0aW5lLCBgX191YmxrX2NvbXBsZXRlX3JxYD8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgdGhlIGRpZmZlcmVudCBwb3NzaWJsZSBjYWxsaW5nIHNpdGVzLiBBIGRlZXBlciBkaXZlIGlzIGluIG9yZGVyIHRvIHBhaW50IHRoZSBiaWcgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjUyLjUyODg0OTE1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MzQyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX191YmxrX2NvbXBsZXRlX3JxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NzczPXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19zZXR1cF9pb2Rfem9uZWQoc3RydWN0IHVibGtfcXVldWUgKnVicSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03ODAtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjc4MTpzdGF0aWMgaW5saW5lIHZvaWQgX191YmxrX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCB1YmxrX2lvICppbyxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzgyLVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgbmVlZF9tYXAsIHN0cnVjdCBpb19jb21wX2JhdGNoICppb2IpO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTExOTI9c3RhdGljIGlubGluZSB2b2lkIHVibGtfcHV0X3JlcV9yZWYoc3RydWN0IHVibGtfaW8gKmlvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTExOTctXFx0LyogdWJsa19uZWVkX21hcF9pbygpIGFuZCB1YmxrX25lZWRfcmVxX3JlZigpIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKi9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MTE5ODpcXHRfX3VibGtfY29tcGxldGVfcnEocmVxLCBpbywgZmFsc2UsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xMTk5LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0xNTQ1PXN0YXRpYyB2b2lkIHVibGtfZW5kX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSwgYmxrX3N0YXR1c190IGVycm9yKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTE1NTItLyogdG9kbzogaGFuZGxlIHBhcnRpYWwgY29tcGxldGlvbiAqL1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoxNTUzOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VibGtfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0xNTU0LVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgbmVlZF9tYXAsIHN0cnVjdCBpb19jb21wX2JhdGNoICppb2IpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjY4MD1zdGF0aWMgdm9pZCBfX3VibGtfZmFpbF9yZXEoc3RydWN0IHVibGtfZGV2aWNlICp1Yiwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI2ODktXFx0XFx0aW8tXFx1MDAzZXJlcyA9IC1FSU87XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI2OTA6XFx0XFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI2OTEtXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNjY9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQ2Ny1cXHRcXHRpZiAoY29tcGwpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM0Njg6XFx0XFx0XFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0NjktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9Mzc3MD1zdGF0aWMgaW50IHVibGtfYmF0Y2hfY29tbWl0X2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzgxMy1cXHRpZiAoY29tcGwpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM4MTQ6XFx0XFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKGRhdGEtXFx1MDAzZXViKSwgZGF0YS1cXHUwMDNlaW9iKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzgxNS1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6NTIuNTcxNzkyMzcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODE5MjIyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZzpcblxuKipBbmFseXppbmcgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCBhbmQgYHVibGtfYmF0Y2hfY29tbWl0X2lvYCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgYW5kIGB1YmxrX2JhdGNoX2NvbW1pdF9pb2AuIFNlZW1zIGxpa2UgdGhlc2UgYXJlIGJvdGggKmNyaXRpY2FsKiBjb21wb25lbnRzIHdpdGhpbiB0aGUgdWJsayBpb191cmluZyBjb21tYW5kIGhhbmRsaW5nIHBhdGh3YXkg4oCTIHRoZXkncmUgZWl0aGVyIGRpcmVjdCBoYW5kbGVycyB0aGVtc2VsdmVzIG9yIGFyZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aG9zZSBoYW5kbGVycy4gSSdkIGV4cGVjdCB0byBzZWUgdGhlc2UgaW4gdGhlIGZhc3QgcGF0aC4gR2l2ZW4gdGhhdCwgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIHByZWNpc2VseSB3aGF0IGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgaXMgZG9pbmcuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgaW9fdXJpbmcgb3BlcmF0aW9ucyBhcmUgcHJvY2Vzc2VkLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODE2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjc6NTYuODUzNzE3NjkyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQyMTA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNDg9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2NS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM2NjpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM2Ny1cXHRcXHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzUyNz1zdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMzLVxcdGlmICghdHcuY2FuY2VsKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM0OlxcdFxcdHJldCA9IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM1LVxcdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1Mzk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUxLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTUyOlxcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU1My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI3OjU2Ljg5ODE0MzgxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI3NDI1OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIGlvX3VyaW5nIENvbW1hbmQgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLCBhcyBJIHNlZSBpdCwgaXMgYHVibGtfY2hfdXJpbmdfY21kYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWFnaWMgc3RhcnRzIGZvciBoYW5kbGluZyBpb191cmluZyBjb21tYW5kcyB3aXRoaW4gdGhlIHVibGsgZnJhbWV3b3JrLCBvciBhdCBsZWFzdCwgdGhhdCdzIHdoYXQgbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIHN1Z2dlc3RzLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGhlcmUgaXMgdG8gZGl2ZSBkZWVwIGludG8gdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGFuYWx5c2lzIG9mIGB1YmxrX2NoX3VyaW5nX2NtZGAgYW5kIHVucmF2ZWwgdGhlIG1lY2hhbmljcyBvZiBpdHMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0J3Mgb3JjaGVzdHJhdGluZyB0aGUgY29tbWFuZCBwcm9jZXNzaW5nLCBxdWV1aW5nLCBhbmQgZXZlbnR1YWwgZXhlY3V0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBjb21tYW5kIHR5cGVzLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UsIGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBzdWJtaXNzaW9uIGFuZCBjb21wbGV0aW9uIHByb2Nlc3Nlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjAxLjYyNTU3Mjc0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0Njc2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzQ4PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjUtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNjY6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNjctXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM0OTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdCAqX191YmxrX2NoZWNrX2FuZF9nZXRfcmVxKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyNi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyNzpzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzMy1cXHRpZiAoIXR3LmNhbmNlbClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzNDpcXHRcXHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzNS1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM4LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTM5OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDAte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDctXFx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU0ODpcXHRcXHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0OS1cXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NTEtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NTI6XFx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUzLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTU1LVxcdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTU2OlxcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE1Ny1cXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MDEuNjcxMDQ2MTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4MDk4MjAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBVYmxrIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB1YmxrX2NoX3VyaW5nX2NtZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgYC51cmluZ19jbWRgLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgdWJsa19jaF9mb3BzYCB3aXRoaW4gdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIsIGB1YmxrX2Rydi5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhlIHBhcnQgdGhhdCdzIGdyYWJiaW5nIG15IGF0dGVudGlvbiBpcyBob3cgaXQgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZhaWx1cmUgb2YgYGltcG9ydF91YnVmYC4gSXQncyByZXR1cm5pbmcgZWl0aGVyIDAgb3Igc2V0dGluZyBgQkxLX1NUU19JT0VSUmAuIEknbSBhbHJlYWR5IHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmc7IHRoZSBlcnJvciBoYW5kbGluZyBpbiB0aGlzIGFyZWEgaXMgb2Z0ZW4gYSBzb3VyY2Ugb2YgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcy5cblxuTm93LCB0aGUgY29uZmlndXJhdGlvbiBpcyB0aWVkIHRvIGBCTEtfREVWX1VCTEtgLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAsIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIGFzIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gV2FpdCwgc2NyYXRjaCB0aGF0LCBgdWJsa19jaF91cmluZ19jbWRgICppcyogdGhlIG1haW4gZW50cnkgcG9pbnQsIHNvIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBtb3N0IGNydWNpYWwuIEhvd2V2ZXIsIEknbSBhbHNvIHNlZWluZyBgdWJsa19jaF93cml0ZV9pdGVyYCBtZW50aW9uZWQuIEhtbSwgdGhpcyBwYXRjaCBtb2RpZmllcyBib3RoIGB1YmxrX21hcF9pb2AgYW5kIGB1YmxrX3VubWFwX2lvYC4gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIGB1YmxrX3N0YXJ0X2lvYCBhbmQgYF9fdWJsa19jb21wbGV0ZV9ycWAsIHdoaWNoIGFyZSBjb3JlIHRvIGFueSBibG9jayBJL08gb3BlcmF0aW9uLiBMZXQgbWUgdHJhY2UgYmFjay4uLiBgdWJsa19zdGFydF9pb2AgaXMgY2FsbGVkIGZyb20gYHVibGtfZGlzcGF0Y2hfcmVxYCwgYF9fdWJsa19iYXRjaF9wcmVwX2Rpc3BhdGNoYCwgYW5kIGV2ZW4gYHVibGtfZ2V0X2RhdGFgLiBBbmQgYHVibGtfZGlzcGF0Y2hfcmVxYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYHVibGtfcXVldWVfcnFgLiBTbywgdGhlcmUgYXJlIHNldmVyYWwga2V5IHBvaW50cyBvZiBpbnRlZ3JhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIG9mIHRoZXNlIHBvaW50cyBpbiBkZXRhaWwuIFRoZSBpbnRlcmFjdGlvbiBvZiBgbWFwYCwgYHVubWFwYCwgYW5kIHRoZSBjb21tYW5kIHN1Ym1pc3Npb24gZmxvdyBpdHNlbGYgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgZm9yIHRoZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjA3Ljg1MjAzMTcxMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMzQ1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19xdWV1ZV9ycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIzOT1zdHJ1Y3QgdWJsa19xdWV1ZSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjU3LVxcdCAqXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI1ODpcXHQgKiBUaGVyZSBhcmUgbXVsdGlwbGUgd3JpdGVyIGZyb20gdWJsa19xdWV1ZV9ycSgpIG9yIHVibGtfcXVldWVfcnFzKCksXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1OS1cXHQgKiBzbyBsb2NrIGlzIHJlcXVpcmVkIGZvciBzdG9yaW5nIHJlcXVlc3QgdGFnIHRvIGZpZm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMTQ3PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19wcmVwX3JlcShzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjE4NC0gKi9cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjE4NTpzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBfX3VibGtfcXVldWVfcnFfY29tbW9uKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTEtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMTI6c3RhdGljIGJsa19zdGF0dXNfdCB1YmxrX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjEzLVxcdFxcdGNvbnN0IHN0cnVjdCBibGtfbXFfcXVldWVfZGF0YSAqYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxOS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjIyMDpcXHRyZXMgPSBfX3VibGtfcXVldWVfcnFfY29tbW9uKHVicSwgcnEsIFxcdTAwMjZzaG91bGRfcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjIxLVxcdGlmICghc2hvdWxkX3F1ZXVlKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIyMjg9c3RhdGljIGJsa19zdGF0dXNfdCB1YmxrX2JhdGNoX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMzUtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMzY6XFx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcXHUwMDI2c2hvdWxkX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIzNy1cXHRpZiAoIXNob3VsZF9xdWV1ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMjUyPXN0YXRpYyB2b2lkIHVibGtfY29tbWl0X3JxcyhzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY0LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjY1OnN0YXRpYyB2b2lkIHVibGtfcXVldWVfcnFzKHN0cnVjdCBycV9saXN0ICpycWxpc3QpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyNjYte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTIzNTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHVibGtfbXFfb3BzID0ge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzU1OlxcdC5xdWV1ZV9ycSAgICAgICA9IHVibGtfcXVldWVfcnEsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIzNTY6XFx0LnF1ZXVlX3JxcyAgICAgID0gdWJsa19xdWV1ZV9ycXMsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIzNTctXFx0LmluaXRfaGN0eFxcdD0gdWJsa19pbml0X2hjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjczNT1zdGF0aWMgdm9pZCB1YmxrX3N0YXJ0X2NhbmNlbChzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDQtXFx0XFx0LypcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc0NTpcXHRcXHQgKiBRdWllc2NlIHRvIHNlcmlhbGl6ZSB3aXRoIHVibGtfcXVldWVfcnEoKSwgZW5zdXJpbmdcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc0Ni1cXHRcXHQgKiB1YnEtXFx1MDAzZWNhbmNlbGluZyBpcyB2aXNpYmxlIHdoZW4gdGhlIHF1ZXVlIHJlc3VtZXMuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjc1My1cXHRcXHQgKiBEaXNrIG5vdCB5ZXQgYWxsb2NhdGVkIGJ5IHVibGtfY3RybF9zdGFydF9kZXYoKSwgc29cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Mjc1NDpcXHRcXHQgKiB0aGVyZSBpcyBubyByZXF1ZXN0IHF1ZXVlIGFuZCB1YmxrX3F1ZXVlX3JxKCkgY2Fubm90XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NTUtXFx0XFx0ICogYmUgcnVubmluZy4gIEp1c3Qgc2V0IHRoZSBmbGFnOyBpZiBzdGFydF9kZXYgcHJvY2VlZHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MDcuODk1MTcwNzI5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0Mjk3NjU2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVWJsayBRdWV1ZSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYmxvY2sgbGF5ZXIgcXVldWUgZnVuY3Rpb25zIGZvciBVYmxrLCBzcGVjaWZpY2FsbHkgYHVibGtfcXVldWVfcnFgIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlLCBidXQgbGV0J3Mgc2VlIHdoZXJlIHRoZSBmb2N1cyBsaWVzLiBJJ20gdGhpbmtpbmcgdGhlIGtleSBzeW1ib2xzIG1pZ2h0IGJlIGB1YmxrX2NoX3VyaW5nX2NtZGAsIGB1YmxrX3F1ZXVlX3JxYCwgYW5kIGB1YmxrX3F1ZXVlX3Jxc2AuIFdhaXQsIHJpZ2h0LCBgdWJsa19jaF91cmluZ19jbWRgIGhhbmRsZXMgdGhlIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYm90aCBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19xdWV1ZV9ycWAuXG5cbk5vdywgaXMgYEJMS19ERVZfVUJMS2AgdGhlIG9ubHkgY29uZmlnIGluIHBsYXkgaGVyZT8gWWVwLCBpdCBsb29rcyBsaWtlIGl0LiBPa2F5LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgYEJMS19ERVZfVUJMS2AgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEhtbSwgaXQgZGVwZW5kcyBvbiBgSU9fVVJJTkdgLCBhbmQsIGFzIEkgdGhvdWdodCwgaXQgKnNlbGVjdHMqIGBJT19VUklOR2AuIEFscmlnaHQsIHRpbWUgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUgb25jZSBtb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI5MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODoxMy4zMjQ5MzkzODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzAyMzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1VCTEtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MTMuMzY4NjQ5NTA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjAxNzg2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBTeW1ib2wgUHJpb3JpdGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBzZWVtcyB0byBiZSBvbiBgQkxLX0RFVl9VQkxLYC4gUmlnaHQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBpcyBpbW1lZGlhdGVseSBjb25uZWN0ZWQgdG8gdGhpcy4gYHVibGtfY2hfdXJpbmdfY21kYCwgYHVibGtfcXVldWVfcnFgLCBgdWJsa19xdWV1ZV9ycXNgLCBgdWJsa19iYXRjaF9xdWV1ZV9ycWAsIGFuZCBgdWJsa19jb21taXRfcnFzYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2NiYCBhcmUgYWxsIGluIHRoZSBtaXguXG5cbkFscmlnaHQsIEknbGwgc2V0IG15IG1lbnRhbCBgRm9jdXNTeW1ib2xzYCB0byBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19xdWV1ZV9ycWAsIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaG9zZSBmZWVsIGxpa2UgdGhlIGNvcmUgYXJlYXMgdG8gaW52ZXN0aWdhdGUgZnVydGhlciwgYXQgbGVhc3QgZm9yIG5vdy5cblxuV2FpdCwgYHVibGtfY2hfdXJpbmdfY21kYCBmZWVscyBsaWtlIHRoZSBiZXN0IGVudHJ5IHBvaW50IHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQgbWUgZG91YmxlLWNoZWNrIGlmIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgaXMgc3RhdGljLiBZZXMgaXQgaXMsIHNvIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXRzZWxmIGlzIHRoZSBub24tc3RhdGljIG9uZS4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGltcHJlc3Npb24uXG5cbkhvd2V2ZXIsIGEgcXVlc3Rpb24ganVzdCBwb3BwZWQgdXAuIGB1YmxrX3F1ZXVlX3JxYCBpcyBzdGF0aWM/IEhtbS4uLiBPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCBtZSBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODoxOS4wMjg4MzE1NzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mzg3NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfcXVldWVfcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMzk9c3RydWN0IHVibGtfcXVldWUge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI1Ny1cXHQgKlxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyNTg6XFx0ICogVGhlcmUgYXJlIG11bHRpcGxlIHdyaXRlciBmcm9tIHVibGtfcXVldWVfcnEoKSBvciB1YmxrX3F1ZXVlX3JxcygpLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNTktXFx0ICogc28gbG9jayBpcyByZXF1aXJlZCBmb3Igc3RvcmluZyByZXF1ZXN0IHRhZyB0byBmaWZvXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjE0Nz1zdGF0aWMgYmxrX3N0YXR1c190IHVibGtfcHJlcF9yZXEoc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIxODQtICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIxODU6c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgX191YmxrX3F1ZXVlX3JxX2NvbW1vbihzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMTg2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjExLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjEyOnN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIxMy1cXHRcXHRjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMTktXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjIyMjA6XFx0cmVzID0gX191YmxrX3F1ZXVlX3JxX2NvbW1vbih1YnEsIHJxLCBcXHUwMDI2c2hvdWxkX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjIyMS1cXHRpZiAoIXNob3VsZF9xdWV1ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMjI4PXN0YXRpYyBibGtfc3RhdHVzX3QgdWJsa19iYXRjaF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjM1LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMjM2OlxcdHJlcyA9IF9fdWJsa19xdWV1ZV9ycV9jb21tb24odWJxLCBycSwgXFx1MDAyNnNob3VsZF9xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTIyMzctXFx0aWYgKCFzaG91bGRfcXVldWUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MjI1Mj1zdGF0aWMgdm9pZCB1YmxrX2NvbW1pdF9ycXMoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMjI2NC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjI2NTpzdGF0aWMgdm9pZCB1YmxrX3F1ZXVlX3JxcyhzdHJ1Y3QgcnFfbGlzdCAqcnFsaXN0KVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMjY2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0yMzU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB1YmxrX21xX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MjM1NTpcXHQucXVldWVfcnEgICAgICAgPSB1YmxrX3F1ZXVlX3JxLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzoyMzU2OlxcdC5xdWV1ZV9ycXMgICAgICA9IHVibGtfcXVldWVfcnFzLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yMzU3LVxcdC5pbml0X2hjdHhcXHQ9IHVibGtfaW5pdF9oY3R4LFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTI3MzU9c3RhdGljIHZvaWQgdWJsa19zdGFydF9jYW5jZWwoc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzQ0LVxcdFxcdC8qXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NDU6XFx0XFx0ICogUXVpZXNjZSB0byBzZXJpYWxpemUgd2l0aCB1YmxrX3F1ZXVlX3JxKCksIGVuc3VyaW5nXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NDYtXFx0XFx0ICogdWJxLVxcdTAwM2VjYW5jZWxpbmcgaXMgdmlzaWJsZSB3aGVuIHRoZSBxdWV1ZSByZXN1bWVzLlxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTI3NTMtXFx0XFx0ICogRGlzayBub3QgeWV0IGFsbG9jYXRlZCBieSB1YmxrX2N0cmxfc3RhcnRfZGV2KCksIHNvXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjI3NTQ6XFx0XFx0ICogdGhlcmUgaXMgbm8gcmVxdWVzdCBxdWV1ZSBhbmQgdWJsa19xdWV1ZV9ycSgpIGNhbm5vdFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0yNzU1LVxcdFxcdCAqIGJlIHJ1bm5pbmcuICBKdXN0IHNldCB0aGUgZmxhZzsgaWYgc3RhcnRfZGV2IHByb2NlZWRzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjE5LjA3MzIyNTk0OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQwOTAxNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHVibGtfcXVldWVfcnFgIEZ1bmN0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGB1YmxrX3F1ZXVlX3JxYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgcmVjYWxsIHNvbWUgYWR2aWNlOiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLiBCdXQgd2FpdCBhIG1pbnV0ZSwgYHVibGtfcXVldWVfcnFgICppcyogYSBjYWxsYmFjaywgc3BlY2lmaWNhbGx5IGZvciB0aGUgYC5xdWV1ZV9ycWAgZmllbGQsIHJpZ2h0PyBUaGF0IG1lYW5zIGl0cyBhZGRyZXNzIGlzIGRlZmluaXRlbHkgdGFrZW4gYW5kIGl0J3MgYWxtb3N0IGNlcnRhaW5seSAqbm90KiBiZWluZyBpbmxpbmVkLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gVGhlIGNvbXBpbGVyIG5lZWRzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgZm9yIGl0LlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBxdWV1aW5nIHByb2Nlc3M/IEkgc2hvdWxkIHJlYWxseSBjaGVjayBgdWJsa19kcnYuY2AgdGhvcm91Z2hseSBmb3IgYWx0ZXJuYXRpdmVzLiBUaGF0J3MgdGhlIHBsYWNlIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWxseSBtb3JlIHN1aXRhYmxlLCBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDIsIk91dHB1dFRva2VucyI6NjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MjQuNTE0MTMwMzM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI2MTAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01MzA9c3RydWN0IHVibGtfem9uZWRfcmVwb3J0X2Rlc2Mge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzNS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTM2OnN0YXRpYyBERUZJTkVfWEFSUkFZKHVibGtfem9uZWRfcmVwb3J0X2Rlc2NzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTM3LVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTc4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIHVibGtfY2hyX2NsYXNzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc4OC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6Nzg5OnN0YXRpYyBERUZJTkVfSURSKHVibGtfaW5kZXhfaWRyKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzkwOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWJsa19pZHJfbG9jayk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc5MS1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgdWJsa19pZHJfd3E7XFx0Lyogd2FpdCB1bnRpbCBvbmUgaWRyIGlzIGZyZWVkICovXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTc5Mi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzkzOnN0YXRpYyBERUZJTkVfTVVURVgodWJsa19jdGxfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjI0LjU2MDM5NTcwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODk1NzU5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdWJsa19kcnYuYydzIERhdGEgRGVjbGFyYXRpb25zKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIGB1YmxrX2Rydi5jYCBhbmQgaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgZGF0YSB0eXBlcy4gTXkgYXBwcm9hY2ggaXMgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGUgc3RydWN0dXJlcyBhbmQga2V5IHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4gSSdtIG1lbnRhbGx5IHNlYXJjaGluZywgb3IgcmF0aGVyLCBJICp3b3VsZCogYmUgc2VhcmNoaW5nLCBmb3IgdGhlIHR5cGljYWwgc3VzcGVjdHMgaW4gQyBrZXJuZWwgY29kZTogYF5pbnQgYCwgYF52b2lkIGAsIGBeYm9vbCBgLCBgXnVuc2lnbmVkIGAuIFRob3NlIGFyZSBteSBiYXNpYyBwcmltaXRpdmVzLiBCdXQgSSB3b24ndCBzdG9wIHRoZXJlLiBJIGFsc28gd2FudCB0byBzZWUgaWYgYW55IGN1c3RvbSB0eXBlcyBhcmUgZGVmaW5lZCwgc28gSSBhbSBnb2luZyB0byBzZWFyY2ggZm9yIGBec3RydWN0IGAsIGJlY2F1c2UgdGhhdCB3aWxsIGxldCBtZSBrbm93IHdoYXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZC4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9yIHByb2plY3Qtc3BlY2lmaWMgdHlwZXMsIHNvIEknZCBxdWlja2x5IHdhbnQgdG8gc2VlIGlmIHNvbWV0aGluZyBsaWtlIGBeYmxrX3N0YXR1c190IGAgc2hvd3MgdXAuIFRoYXQga2luZCBvZiB0aG9yb3VnaG5lc3MgdXAgZnJvbnQgZ2l2ZXMgbWUgdGhlIHNjYWZmb2xkaW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIG1hbmlwdWxhdGVzIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgYW55IHBvdGVudGlhbCBkZXNpZ24gY2hvaWNlcyBiYXNlZCBvbiB0aG9zZSB0eXBlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNTYsIk91dHB1dFRva2VucyI6NjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODozMC40NTYxNTg2MDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODI2MTc2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxib29sfHVuc2lnbmVkfHN0cnVjdHxibGtfc3RhdHVzX3QpIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjMwLjYwNDQyNzYzNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQwODU4OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSXMgRXZlcnl0aGluZyBSZWFsbHkgU3RhdGlvbmFyeT8gTGV0J3MgUHJvYmUgYG1vZHVsZV9pbml0YCoqXG5cbkFscmlnaHQsIEknbSBnZXR0aW5nIGEgaHVuY2ggaGVyZS4gSSdtIHdvbmRlcmluZyBpZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzIGlzIGluaGVyZW50bHkgc3RhdGljLiBJdCdzIGEgZ3V0IGZlZWxpbmcsIGJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gbW9yZSBjb21wbGV4IGFuYWx5c2lzLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBUaGF0IHRob3VnaHQgbGVhZHMgbWUgdG8gYG1vZHVsZV9pbml0YC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgaW5pdGlhbCBzZXR1cCBoYXBwZW5zLCB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIGV2ZXJ5dGhpbmcgZWxzZSBpcyBidWlsdC4gSSdtIHRoaW5raW5nIHRoYXQgaWYgdGhlICdzdGF0aWMnIGNoYXJhY3RlcmlzdGljIHRoYXQgSSdtIHNlZWluZyByZWFsbHkgZXhpc3RzLCB0aGVyZSBtYXkgYmUgc29tZSBjbHVlcyB0aGVyZS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIG1vZHVsZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkLiBQZXJoYXBzIHNvbWUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBpbiBhIHdheSB3aGljaCBsaW1pdHMgdGhlaXIgZmxleGliaWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHBvaW50IG9mIG9yaWdpbiwgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgc2V0IHVwLiBBbmFseXppbmcgYG1vZHVsZV9pbml0YCBtaWdodCBnaXZlIG1lIHRoZSBiYXNlIGZhY3RzIG9mIHRoZSBtYXR0ZXIuIEkgc3VzcGVjdCB0aGF0IHRoaXMgbWF5IGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjg6MzQuNjQ1Mjg5MTMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUzNTAwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTU5MDg9c3RhdGljIHZvaWQgX19leGl0IHVibGtfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU5MjItXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU5MjM6bW9kdWxlX2luaXQodWJsa19pbml0KTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTkyNC1tb2R1bGVfZXhpdCh1YmxrX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODozNC42ODk4Mjg2MjlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxMzE0NjEyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdWJsayBGdW5jdGlvbiBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGFuYWx5emUgdGhpcyBgdWJsa2AgY29kZS4gSWYgZXZlcnl0aGluZyBvZiBpbXBvcnRhbmNlIGlzIHN0YXRpYywgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyB0cmVtZW5kb3VzbHkuIEkgY2FuIGp1c3QgZm9jdXMgb24gdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFjdCBhcyBjYWxsYmFja3Mgb3IgZW50cnkgcG9pbnRzLiBcblxuUmlnaHQgb2ZmIHRoZSBiYXQsIGB1YmxrX2NoX3VyaW5nX2NtZGAgc2VlbXMgcHJvbWlzaW5nLiBBbHNvLCBgdWJsa19xdWV1ZV9ycWAsIGB1YmxrX3F1ZXVlX3Jxc2AsIGB1YmxrX2JhdGNoX3F1ZXVlX3JxYCwgYW5kIGB1YmxrX2NoX3dyaXRlX2l0ZXJgLiBMZXQncyBjb25maXJtIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgc3RhdGljLiBZZXAsIGl0IGlzLiBTaW5jZSB0aGV5IGFyZSBhbGwgc3RhdGljLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2ltcGx5IGxpc3QgYHVibGtfY2hfdXJpbmdfY21kYCwgYHVibGtfcXVldWVfcnFgLCBhbmQgYHVibGtfcXVldWVfcnFzYC5cblxuV2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJJ3ZlIG92ZXJsb29rZWQgc29tZXRoaW5nIGNyaXRpY2FsLiBgdWJsa19jaF91cmluZ19jbWRgIGlzIGRpcmVjdGx5IGhhbmRsaW5nIHRoZSBpb191cmluZyBjb21tYW5kISBJdCdzIHRoZSBvbmUgdGhhdCBldmVudHVhbGx5IGNhbGxzIGB1YmxrX3VubWFwX2lvYCBvciBgdWJsa19tYXBfaW9gLiBUaGlzIHNvdW5kcyBsaWtlIHRoZSByZWFsIGVudHJ5IHBvaW50IVxuXG5MZXQncyB0cmFjZSBpdCBvdXQuXG5gdWJsa19jaF91cmluZ19jbWRgIC1cdTAwM2UgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCAtXHUwMDNlIGBfX3VibGtfY29tcGxldGVfcnFgIC1cdTAwM2UgYHVibGtfdW5tYXBfaW9gLlxuYHVibGtfY2hfdXJpbmdfY21kYCAtXHUwMDNlIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgLVx1MDAzZSBgdWJsa19nZXRfZGF0YWAgLVx1MDAzZSBgdWJsa19zdGFydF9pb2AgLVx1MDAzZSBgdWJsa19tYXBfaW9gLlxuXG5ZZXMsIGB1YmxrX2NoX3VyaW5nX2NtZGAgKmlzKiB0aGUgcGVyZmVjdCBzeW1ib2wgdG8gZm9jdXMgb24uIEl0J3MgdGhlIGNvcmUgb2YgdGhlIGlvX3VyaW5nIGludGVyYWN0aW9uLlxuXG5Ob3csIGxldCBtZSBqdXN0IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuLi4gQWgsIGBCTEtfREVWX1VCTEtgIGlzIHRoZSBvbmx5IG9uZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgZG91YmxlLWNoZWNrIGB1YmxrX2NoX3VyaW5nX2NtZGAgaW4gYHVibGtfZHJ2LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyODo1Ny44MjEyOTMzMThaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDY5NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfY2hfdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzM0OD1zdGF0aWMgYm9vbCB1YmxrX2dldF9kYXRhKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCB1YmxrX2lvICppbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY1LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzY2OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzY3LVxcdFxcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNDk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKl9fdWJsa19jaGVja19hbmRfZ2V0X3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mjc6c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1Mjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzMtXFx0aWYgKCF0dy5jYW5jZWwpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MzQ6XFx0XFx0cmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzUtXFx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzOC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzOTpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQ3LVxcdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDg6XFx0XFx0aW9fdXJpbmdfY21kX2NvbXBsZXRlX2luX3Rhc2soY21kLCB1YmxrX2NoX3VyaW5nX2NtZF9jYik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDktXFx0XFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTUxLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTUyOlxcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU1My19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE1NS1cXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDE1NjpcXHQudXJpbmdfY21kID0gdWJsa19jaF91cmluZ19jbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNTctXFx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI4OjU3Ljg2NDc2OTA4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk5MzI4NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKlVibGsgQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGNvbmZpcm1lZC4gYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2UgbmVlZCB0byBiZSBmb2N1c2VkIG9uIGhlcmUuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIHRoYXQgd2UgbWF5IG5lZWQgdG8gY29uc2lkZXIgb3IgYW55IGludGVyYWN0aW9ucyB3ZSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cbkxldCdzIGNoZWNrIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIHNlZSBgQkxLX0RFVl9VQkxLYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJT19VUklOR2AsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIGNoZWNrIHRoZXNlIHRoaW5ncy4gTm93LCBgSU9fVVJJTkdgIGlzIHByZXR0eSB1YmlxdWl0b3VzIHRoZXNlIGRheXMsIHNvIGl0J3MgcHJvYmFibHkgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24uIEJ1dCB3YWl0IGEgbWludXRl4oCmIGBCTEtfREVWX1VCTEtgICpzZWxlY3RzKiBgSU9fVVJJTkdgLiBBaCwgcmlnaHQhIFNvLCBpZiB3ZSBlbmFibGUgYEJMS19ERVZfVUJMS2AsIHdlIGdldCBgSU9fVVJJTkdgIFwiZm9yIGZyZWUsXCIgYXMgaXQgd2VyZS4gVGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGBJT19VUklOR2AgaWYgd2UgZW5hYmxlIGBCTEtfREVWX1VCTEtgLCBzbyB0aGF0IHN0cmVhbWxpbmVzIHRoaW5ncy4gSSdsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGJ1dCB0aGlzIHNob3VsZCBiZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyOTowMi42NjQxMDA4MzRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyOCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyODpcXHRjb25maWcgQkxLX0RFVl9VQkxLXFxuIDMyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG4gMzMwOlxcdFxcdHNlbGVjdCBJT19VUklOR1xcbiAzMzE6XFx0XFx0aGVscFxcbiAzMzI6XFx0XFx0ICBpb191cmluZyBiYXNlZCB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyLiBUb2dldGhlciB3aXRoIHVibGsgc2VydmVyLCB1YmxrXFxuIDMzMzpcXHRcXHQgIGhhcyBiZWVuIHdvcmtpbmcgd2VsbCwgYnV0IGludGVyZmFjZSB3aXRoIHVzZXJzcGFjZSBvciBjb21tYW5kIGRhdGFcXG4gMzM0OlxcdFxcdCAgZGVmaW5pdGlvbiBpc24ndCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcXG4gMzM1OlxcdFxcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cXG4gMzM2OlxcdFxcbiAzMzc6XFx0Y29uZmlnIEJMS0RFVl9VQkxLX0xFR0FDWV9PUENPREVTXFxuIDMzODpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZVxcXCJcXG4gMzM5OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9VQkxLXFxuIDM0MDpcXHRcXHRkZWZhdWx0IHlcXG4gMzQxOlxcdFxcdGhlbHBcXG4gMzQyOlxcdFxcdCAgdWJsayBkcml2ZXIgc3RhcnRlZCB0byB0YWtlIHBsYWluIGNvbW1hbmQgZW5jb2RpbmcsIHdoaWNoIHR1cm5zIG91dFxcbiAzNDM6XFx0XFx0ICBvbmUgYmFkIHdheS4gVGhlIHRyYWRpdGlvbmFsIGlvY3RsIGNvbW1hbmQgb3Bjb2RlIGVuY29kZXMgbW9yZVxcbiAzNDQ6XFx0XFx0ICBpbmZvIGFuZCBiYXNpY2FsbHkgZGVmaW5lcyBlYWNoIGNvZGUgdW5pcXVlbHksIHNvIG9wY29kZSBjb25mbGljdFxcbiAzNDU6XFx0XFx0ICBpcyBhdm9pZGVkLCBhbmQgZHJpdmVyIGNhbiBoYW5kbGUgd3JvbmcgY29tbWFuZCBlYXNpbHksIG1lYW50aW1lIGl0XFxuIDM0NjpcXHRcXHQgIG1heSBoZWxwIHNlY3VyaXR5IHN1YnN5c3RlbSB0byBhdWRpdCBpb191cmluZyBjb21tYW5kLlxcbiAzNDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAyOjI5OjAyLjY2NDE3OTIwNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjUwOTYyMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSU9fVVJJTkcgYW5kIEJMS19ERVZfVUJMSyBDb25mbHVlbmNlKipcblxuQWxyaWdodCwgSSd2ZSBnb3QgdGhlIGNvbnRleHQuIFdlJ3JlIGxlYW5pbmcgdG93YXJkcyBgSU9fVVJJTkdgIGhlcmUsIHNvIEkgbmVlZCB0byBhc3Nlc3MgaG93IHRoYXQgYWZmZWN0cyB0aGluZ3MuIEdpdmVuIHRoYXQsIGBCTEtfREVWX1VCTEtgICpzaG91bGQqIGJlIGFkZXF1YXRlIGZvciB0aGUgaW1tZWRpYXRlIG5lZWRzLCB3aGljaCBzdHJlYW1saW5lcyBhIGZldyBhc3N1bXB0aW9ucyBJIGhhZCBlYXJsaWVyLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBJL08uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBkYXRhIG1vdmVtZW50LCB3aGljaCBtZWFucyBJIHNob3VsZCBkcmlsbCBkb3duIGludG8gdGhlIGBpbXBvcnRfdWJ1ZmAgZnVuY3Rpb24uIFRoYXQncyBsaWtlbHkgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuIEl0J3MgcHJvYmFibHkgaW4gYGxpYi9pb3ZfaXRlci5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgcmVsYXRlZCwgc28gSSdsbCBkaWcgaW50byB0aGF0IGFuZCBzZWUgaG93IHRoZXkgYXJlIGhhbmRsaW5nIHRoaXMgd2hvbGUgZGF0YSBleGNoYW5nZS4gSXQgc2hvdWxkIGhhdmUgYWxsIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGUgYnVmZmVyIGltcG9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjg2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMjoyOTowNy45MTUxNDQ0NDRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIyMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImltcG9ydF91YnVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9pb3ZfaXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9pb3ZfaXRlci5jPTEzNDI9c3RhdGljIHNzaXplX3QgX19pbXBvcnRfaW92ZWNfdWJ1ZihpbnQgdHlwZSwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYyxcXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTEzNTctXFxubGliL2lvdl9pdGVyLmM6MTM1ODpcXHRyZXQgPSBpbXBvcnRfdWJ1Zih0eXBlLCBpb3YtXFx1MDAzZWlvdl9iYXNlLCBpb3YtXFx1MDAzZWlvdl9sZW4sIGkpO1xcbmxpYi9pb3ZfaXRlci5jLTEzNTktXFx0aWYgKHVubGlrZWx5KHJldCkpXFxuLS1cXG5saWIvaW92X2l0ZXIuYz0xNDQzPUVYUE9SVF9TWU1CT0woaW1wb3J0X2lvdmVjKTtcXG5saWIvaW92X2l0ZXIuYy0xNDQ0LVxcbmxpYi9pb3ZfaXRlci5jOjE0NDU6aW50IGltcG9ydF91YnVmKGludCBydywgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgc3RydWN0IGlvdl9pdGVyICppKVxcbmxpYi9pb3ZfaXRlci5jLTE0NDYte1xcbi0tXFxubGliL2lvdl9pdGVyLmMtMTQ1NC19XFxubGliL2lvdl9pdGVyLmM6MTQ1NTpFWFBPUlRfU1lNQk9MX0dQTChpbXBvcnRfdWJ1Zik7XFxubGliL2lvdl9pdGVyLmMtMTQ1Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjk6MDcuOTYwMzcxODAyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTM0NDQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgVWJsayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgZml4IGluIHRoZSB1YmxrIGRyaXZlci4gYGltcG9ydF91YnVmYCBpcyByZXR1cm5pbmcgYW4gaW50ZWdlciwgYW5kIHRoZSBwYXRjaCBpcyBjb3JyZWN0bHkgY2hlY2tpbmcgaWYgaXQncyBsZXNzIHRoYW4gemVybywgbWVhbmluZyBhbiBlcnJvciBvY2N1cnJlZCwgYW5kIGhhbmRsaW5nIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXIgZnJvbSBpZ25vcmluZyBhIGZhaWx1cmUsIHdoaWNoIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgYnVnLCBzbyBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gY292ZXIgd2l0aCBmdXp6aW5nLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IHRvdWNoZXMgZXJyb3IgaGFuZGxpbmcgYW5kIHRoZSBjb3JlIG1hcHBpbmcvdW5tYXBwaW5nIGZ1bmN0aW9ucywgSSdsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Gb3IgdGFyZ2V0ZWQgZnV6emluZywgSSdtIGdvaW5nIHRvIHNldCBgRm9jdXNTeW1ib2xzYCB0byBgdWJsa19jaF91cmluZ19jbWRgLCBgdWJsa19xdWV1ZV9ycWAsIGFuZCBgdWJsa19xdWV1ZV9ycXNgLiBUaGVzZSBmdW5jdGlvbnMgc2VlbSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgSU8gcGF0aCBhbmQgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLiBXZSByZWFsbHkgbmVlZCB0byBzdHJlc3MgdGVzdCB0aGUgZXJyb3IgcGF0aHMuXG5cbkknbGwgZW5hYmxlIHRoZSBgQkxLX0RFVl9VQkxLYCBjb25maWcsIG9mIGNvdXJzZS5cblxuRmluYWxseSwgdGhlIGBSZWFzb25pbmdgIHdpbGwgYmU6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gaW1wb3J0X3VidWYgZmFpbHMgaW4gdWJsa19tYXBfaW8gYW5kIHVibGtfdW5tYXBfaW8sIGFuZCBoYW5kbGVzIHVubWFwcGVkX2J5dGVzID09IDAgaW4gX191YmxrX2NvbXBsZXRlX3JxLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB1YmxrIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy5cIiBUaGlzIHNob3VsZCBnaXZlIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiB3aHkgd2Ugd2FudCB0byBmdXp6IHRoaXMgcGF0Y2guIFdlIGFyZSBmb2N1c2luZyBvbiBpbnB1dHRpbmcgYSBsb3Qgb2YgZGl2ZXJzZSBkYXRhIGZvciB0aGUgYWZvcmVtZW50aW9uZWQgZnVuY3Rpb25zLCB3aGlsZSBlbnN1cmluZyB0byBoYW5kbGUgZXJyb3JzIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg2NSwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDI6Mjk6MTQuMDUzODE4ODU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExOTYwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfVUJMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVibGtfY2hfdXJpbmdfY21kXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3JxXCIsXG4gICAgXCJ1YmxrX3F1ZXVlX3Jxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIHdoZW4gaW1wb3J0X3VidWYgZmFpbHMgaW4gdWJsa19tYXBfaW8gYW5kIHVibGtfdW5tYXBfaW8sIGFuZCBoYW5kbGVzIHVubWFwcGVkX2J5dGVzID09IDAgaW4gX191YmxrX2NvbXBsZXRlX3JxLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSB1YmxrIGRyaXZlciB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19xdWV1ZV9ycVwiLFxuICAgIFwidWJsa19xdWV1ZV9ycXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyB3aGVuIGltcG9ydF91YnVmIGZhaWxzIGluIHVibGtfbWFwX2lvIGFuZCB1YmxrX3VubWFwX2lvLCBhbmQgaGFuZGxlcyB1bm1hcHBlZF9ieXRlcyA9PSAwIGluIF9fdWJsa19jb21wbGV0ZV9ycS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgdWJsayBkcml2ZXIgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowkgcsk[1] Phase: Succeeded StartedAt: 2026-07-31 02:29:25 +0000 UTC FinishedAt: 2026-07-31 02:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 02:29:25 +0000 UTC FinishedAt: 2026-07-31 02:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2] Phase: Succeeded StartedAt: 2026-07-31 02:29:25 +0000 UTC FinishedAt: 2026-07-31 04:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 02:29:25 +0000 UTC FinishedAt: 2026-07-31 04:11:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 02:29:25 +0000 UTC FinishedAt: 2026-07-31 02:29:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 02:29:25 +0000 UTC FinishedAt: 2026-07-31 02:29:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkgcsk/series-workflowkgcsk-convert-artifact-3274256055/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 02:29:35 +0000 UTC FinishedAt: 2026-07-31 02:48:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 02:29:35 +0000 UTC FinishedAt: 2026-07-31 02:48:45 +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:*00adc4c7-8fa2-466f-b046-907248055514,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-workflowkgcsk/series-workflowkgcsk-convert-artifact-3274256055/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": "891bd6c3-6e65-49b7-8510-e5cc5531f8eb", "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-workflowkgcsk/series-workflowkgcsk-build-action-3964571149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 02:29:35 +0000 UTC FinishedAt: 2026-07-31 02:48:35 +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:*00adc4c7-8fa2-466f-b046-907248055514,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-workflowkgcsk/series-workflowkgcsk-convert-artifact-3274256055/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": "891bd6c3-6e65-49b7-8510-e5cc5531f8eb", "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-workflowkgcsk/series-workflowkgcsk-build-action-3964571149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 02:48:45 +0000 UTC FinishedAt: 2026-07-31 02:48:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 02:48:45 +0000 UTC FinishedAt: 2026-07-31 02:48:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 02:48:45 +0000 UTC FinishedAt: 2026-07-31 02:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 02:48:45 +0000 UTC FinishedAt: 2026-07-31 02:48:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkgcsk/series-workflowkgcsk-convert-artifact-147453414/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 02:48:55 +0000 UTC FinishedAt: 2026-07-31 02:50:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 02:48:55 +0000 UTC FinishedAt: 2026-07-31 02:50:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*891bd6c3-6e65-49b7-8510-e5cc5531f8eb,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-workflowkgcsk/series-workflowkgcsk-build-action-3964571149/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-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 02:50:57 +0000 UTC FinishedAt: 2026-07-31 02:50:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 02:50:57 +0000 UTC FinishedAt: 2026-07-31 02:50:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 02:50:57 +0000 UTC FinishedAt: 2026-07-31 03:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 02:50:57 +0000 UTC FinishedAt: 2026-07-31 03:18: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:*00adc4c7-8fa2-466f-b046-907248055514,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-workflowkgcsk/series-workflowkgcsk-convert-artifact-147453414/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": "5c2ca08a-712f-4138-a0fc-2972e9c52313", "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-workflowkgcsk/series-workflowkgcsk-build-action-4188187562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 02:50:57 +0000 UTC FinishedAt: 2026-07-31 03:17:43 +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:*00adc4c7-8fa2-466f-b046-907248055514,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-workflowkgcsk/series-workflowkgcsk-convert-artifact-147453414/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": "5c2ca08a-712f-4138-a0fc-2972e9c52313", "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-workflowkgcsk/series-workflowkgcsk-build-action-4188187562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 03:18:09 +0000 UTC FinishedAt: 2026-07-31 03:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 03:18:09 +0000 UTC FinishedAt: 2026-07-31 03:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 03:18:09 +0000 UTC FinishedAt: 2026-07-31 03:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 03:18:09 +0000 UTC FinishedAt: 2026-07-31 03:19:53 +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:*5c2ca08a-712f-4138-a0fc-2972e9c52313,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-workflowkgcsk/series-workflowkgcsk-build-action-4188187562/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-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 03:20:04 +0000 UTC FinishedAt: 2026-07-31 04:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 03:20:04 +0000 UTC FinishedAt: 2026-07-31 04:11:16 +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":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"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:*891bd6c3-6e65-49b7-8510-e5cc5531f8eb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5c2ca08a-712f-4138-a0fc-2972e9c52313,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-workflowkgcsk/series-workflowkgcsk-build-action-3964571149/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-workflowkgcsk/series-workflowkgcsk-build-action-4188187562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 03:20:04 +0000 UTC FinishedAt: 2026-07-31 03:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 03:20:04 +0000 UTC FinishedAt: 2026-07-31 03:20:18 +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":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"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-workflowkgcsk/series-workflowkgcsk-convert-artifact-3959727915/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 03:20:04 +0000 UTC FinishedAt: 2026-07-31 03:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 03:20:04 +0000 UTC FinishedAt: 2026-07-31 03:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 03:20:04 +0000 UTC FinishedAt: 2026-07-31 03:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 03:20:26 +0000 UTC FinishedAt: 2026-07-31 04:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgcsk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_queue_rq","ublk_queue_rqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bc0e8faf90e776a2f1f3967a04e8091e6bdb4977","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"edbc32e5-cdf6-4dc3-ae6d-c21177a55f68","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 03:20:26 +0000 UTC FinishedAt: 2026-07-31 04:11:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*891bd6c3-6e65-49b7-8510-e5cc5531f8eb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5c2ca08a-712f-4138-a0fc-2972e9c52313,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-workflowkgcsk/series-workflowkgcsk-build-action-3964571149/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-workflowkgcsk/series-workflowkgcsk-build-action-4188187562/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-workflowkgcsk/series-workflowkgcsk-convert-artifact-3959727915/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,}