Name: series-workflowm7q2t Phase: Succeeded StartedAt: 2026-09-02 08:57:40 +0000 UTC FinishedAt: 2026-09-02 12:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[0] Phase: Succeeded StartedAt: 2026-09-02 08:57:40 +0000 UTC FinishedAt: 2026-09-02 09:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 08:57:40 +0000 UTC FinishedAt: 2026-09-02 09:20:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_DAX", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "MEMORY_HOTPLUG", "FS_IOMAP", "DAX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_DAX", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "MEMORY_HOTPLUG", "FS_IOMAP", "DAX" ], "series_id": "6aa87b6c-d980-481a-8a76-2e214fb20142" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "dax_iomap_fault", "dax_layout_busy_page_range", "dax_delete_mapping_range", "dax_break_layout", "dax_iomap_rw" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9pb21hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZGF4X2JyZWFrX2xheW91dCYjMzQ7LAogICAgJiMzNDtkYXhfaW9tYXBfcncmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaW4gYGRheF9hc3NvY2lhdGVfZW50cnkoKWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KClgLCBhbmQgYGRheF9idXN5X3BhZ2UoKWAgc28gdGhhdCBpdCBpcyBvbmx5IGV4ZWN1dGVkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGBlbnRyeWAgaXMgbmVpdGhlciBhIHplcm8gZW50cnkgbm9yIGFuIGVtcHR5IGVudHJ5IChgZGF4X2lzX3plcm9fZW50cnkoKWAgLyBgZGF4X2lzX2VtcHR5X2VudHJ5KClgKS4gXG5cblRoaXMgY2hhbmdlIGF2b2lkcyBjYWxjdWxhdGluZyBpbnZhbGlkIGZvbGlvL3BhZ2UgcG9pbnRlcnMgZnJvbSBzcGVjaWFsIERBWCBlbnRyaWVzICh3aGljaCBjb3VsZCBsZWFkIHRvIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBzdHJ1Y3QgcGFnZSBhY2Nlc3NlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlciBhcml0aG1ldGljIG9yIGludmFsaWQgcGFnZSBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGNoZWNrcywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmV2ZW50cyBpbnZhbGlkIGZvbGlvL3BhZ2UgY29udmVyc2lvbiBvbiB6ZXJvIG9yIGVtcHR5IERBWCBlbnRyaWVzIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBkYXhfdG9fZm9saW8oKSBhZnRlciB0aGUgemVyby9lbXB0eSBlbnRyeSBjaGVja3MgaW4gZGF4X2Fzc29jaWF0ZV9lbnRyeSgpLCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KCksIGFuZCBkYXhfYnVzeV9wYWdlKCkuIFRoaXMgZml4ZXMgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1cmluZyBEQVggcGFnZSBmYXVsdCBoYW5kbGluZywgbGF5b3V0IGJyZWFraW5nLCBhbmQgbWFwcGluZyB0cnVuY2F0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzFmNWVlMzFmOWUwZjRjZGJjNTdiMDc1M2ZkZDZjZGM1OGYxNjk4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDk6MTM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguY1xuaW5kZXggNmJhNTAxNDJlZWIyZi4uOTAzMDU5OTZiMTA2NCAxMDA2NDRcbi0tLSBhL2ZzL2RheC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9kYXguY1xuQEAgLTQ4MCwxMSAmIzQzOzQ4MCwxMiBAQCBzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgYm9vbCBzaGFyZWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzaXplID0gZGF4X2VudHJ5X3NpemUoZW50cnkpLCBpbmRleDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyBcdTAwMjYgfihzaXplIC0gMSkpO1xuIFx0aWYgKHNoYXJlZCBcdTAwMjZcdTAwMjYgKGZvbGlvLVx1MDAzZW1hcHBpbmcgfHwgZGF4X2ZvbGlvX2lzX3NoYXJlZChmb2xpbykpKSB7XG4gXHRcdGlmIChmb2xpby1cdTAwM2VtYXBwaW5nKVxuQEAgLTUwNSwyMSAmIzQzOzUwNiwyMCBAQCBzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdGJvb2wgdHJ1bmMpXG4ge1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4tXG4gXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGRheF9mb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcbiBcdFx0cmV0dXJuIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2U7XG4gXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfREFYJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7REFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF4X2lvbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2RheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2RheF9kZWxldGVfbWFwcGluZ19yYW5nZSYjMzQ7LAogICAgJiMzNDtkYXhfYnJlYWtfbGF5b3V0JiMzNDssCiAgICAmIzM0O2RheF9pb21hcF9ydyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmV2ZW50cyBpbnZhbGlkIGZvbGlvL3BhZ2UgY29udmVyc2lvbiBvbiB6ZXJvIG9yIGVtcHR5IERBWCBlbnRyaWVzIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBkYXhfdG9fZm9saW8oKSBhZnRlciB0aGUgemVyby9lbXB0eSBlbnRyeSBjaGVja3MgaW4gZGF4X2Fzc29jaWF0ZV9lbnRyeSgpLCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KCksIGFuZCBkYXhfYnVzeV9wYWdlKCkuIFRoaXMgZml4ZXMgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1cmluZyBEQVggcGFnZSBmYXVsdCBoYW5kbGluZywgbGF5b3V0IGJyZWFraW5nLCBhbmQgbWFwcGluZyB0cnVuY2F0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzFmNWVlMzFmOWUwZjRjZGJjNTdiMDc1M2ZkZDZjZGM1OGYxNjk4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDk6MTM6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jCmluZGV4IDZiYTUwMTQyZWViMmYuLjkwMzA1OTk2YjEwNjQgMTAwNjQ0Ci0tLSBhL2ZzL2RheC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RheC5jCkBAIC00ODAsMTEgJiM0Mzs0ODAsMTIgQEAgc3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBib29sIHNoYXJlZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBkYXhfZW50cnlfc2l6ZShlbnRyeSksIGluZGV4OwotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJaWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKQogCQlyZXR1cm47CiAKJiM0MzsJZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwogCWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzICZhbXA7IH4oc2l6ZSAtIDEpKTsKIAlpZiAoc2hhcmVkICZhbXA7JmFtcDsgKGZvbGlvLSZndDttYXBwaW5nIHx8IGRheF9mb2xpb19pc19zaGFyZWQoZm9saW8pKSkgewogCQlpZiAoZm9saW8tJmd0O21hcHBpbmcpCkBAIC01MDUsMjEgJiM0Mzs1MDYsMjAgQEAgc3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiBzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlib29sIHRydW5jKQogewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwotCiAJaWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKQogCQlyZXR1cm47CiAKLQlkYXhfZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJZGF4X2ZvbGlvX3B1dChkYXhfdG9fZm9saW8oZW50cnkpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwYWdlICpkYXhfYnVzeV9wYWdlKHZvaWQgKmVudHJ5KQogewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJaWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7CiAJaWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSBmb2xpb19tYXBjb3VudChmb2xpbykpCiAJCXJldHVybiAmYW1wO2ZvbGlvLSZndDtwYWdlOwogCWVsc2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYW5kIGlmIHNvLCB3aGF0IG91ciB0YXJnZXQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBwcm9taXNpbmcsIGdpdmVuIHRoYXQgaXQmIzM5O3MgdG91Y2hpbmcgYGZzL2RheC5jYCwgd2hpY2ggaXMgYWx3YXlzIGFuIGludGVyZXN0aW5nIGFyZWEuCgpUaGUgcGF0Y2gmIzM5O3MgY29yZSBjaGFuZ2UgaXMgd2l0aGluIHRoZSBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGxpbmUgYHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO2AgaXMgbm93IGd1YXJkZWQgYnkgYSBjaGVjazogYGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSkgcmV0dXJuO2AuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGBkYXhfdG9fZm9saW8oZW50cnkpYCBjb3VsZCBsZWFkIHRvIGEgY3Jhc2gsIGRlcmVmZXJlbmNlIGludmFsaWQgbWVtb3J5LCBvciBwZXJmb3JtIGFuIGlsbGVnYWwgY29udmVyc2lvbiBpZiB0aGUgYGVudHJ5YCB2YWx1ZSBpcyBlaXRoZXIgemVybyBvciBlbXB0eS4gSXQgc3VnZ2VzdHMgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZSBpZiB0aG9zZSBjaGVja3Mgd2VyZW4mIzM5O3QgaW4gcGxhY2UuCgpTbywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBmdWxseSwgSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGBmcy9kYXguY2AgYXJvdW5kIGxpbmVzIDQ3MC01MzAuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIGdldCBhIGZlZWwgZm9yIGhvdyBgZW50cnlgIGlzIGhhbmRsZWQgaW4gZ2VuZXJhbC4gVGhpcyBzaG91bGQgaGVscCBtZSBpZGVudGlmeSBnb29kIGZ1enppbmcgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdCAqIGRheF9mb2xpb19wdXQoKSB3aGVuIHRoZXkgd2VyZSByZW1vdmVkIGZyb20gdGhlaXJcbiA0NjY6XHRcdCAqIGZpbmFsIG1hcHBpbmcuXG4gNDY3Olx0XHQgKi9cbiA0Njg6XHRcdFdBUk5fT05fT05DRShmb2xpb19vcmRlcihmb2xpbykpO1xuIDQ2OTpcdFxuIDQ3MDpcdFx0aWYgKG9yZGVyIFx1MDAzZSAwKSB7XG4gNDcxOlx0XHRcdHByZXBfY29tcG91bmRfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBvcmRlcik7XG4gNDcyOlx0XHRcdGlmIChvcmRlciBcdTAwM2UgMSlcbiA0NzM6XHRcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG4gNDc0Olx0XHRcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbiA0NzU6XHRcdH1cbiA0NzY6XHR9XG4gNDc3Olx0XG4gNDc4Olx0c3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gNDc5Olx0XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiA0ODA6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgYm9vbCBzaGFyZWQpXG4gNDgxOlx0e1xuIDQ4MjpcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gZGF4X2VudHJ5X3NpemUoZW50cnkpLCBpbmRleDtcbiA0ODM6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNDg0Olx0XG4gNDg1Olx0XHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gNDg2Olx0XHRcdHJldHVybjtcbiA0ODc6XHRcbiA0ODg6XHRcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0ODk6XHRcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFx1MDAyNiB+KHNpemUgLSAxKSk7XG4gNDkwOlx0XHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiAoZm9saW8tXHUwMDNlbWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHtcbiA0OTE6XHRcdFx0aWYgKGZvbGlvLVx1MDAzZW1hcHBpbmcpXG4gNDkyOlx0XHRcdFx0ZGF4X2ZvbGlvX21ha2Vfc2hhcmVkKGZvbGlvKTtcbiA0OTM6XHRcbiA0OTQ6XHRcdFx0V0FSTl9PTl9PTkNFKCFmb2xpby1cdTAwM2VzaGFyZSk7XG4gNDk1Olx0XHRcdFdBUk5fT05fT05DRShkYXhfZW50cnlfb3JkZXIoZW50cnkpICE9IGZvbGlvX29yZGVyKGZvbGlvKSk7XG4gNDk2Olx0XHRcdGZvbGlvLVx1MDAzZXNoYXJlJiM0MzsmIzQzOztcbiA0OTc6XHRcdH0gZWxzZSB7XG4gNDk4Olx0XHRcdFdBUk5fT05fT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKTtcbiA0OTk6XHRcdFx0ZGF4X2ZvbGlvX2luaXQoZW50cnkpO1xuIDUwMDpcdFx0XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gNTAxOlx0XHRcdGZvbGlvLVx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xuIDUwMjpcdFx0XHRmb2xpby1cdTAwM2VpbmRleCA9IGluZGV4O1xuIDUwMzpcdFx0fVxuIDUwNDpcdH1cbiA1MDU6XHRcbiA1MDY6XHRzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiA1MDc6XHRcdFx0XHRcdGJvb2wgdHJ1bmMpXG4gNTA4Olx0e1xuIDUwOTpcdFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIDUxMDpcdFx0XHRyZXR1cm47XG4gNTExOlx0XG4gNTEyOlx0XHRkYXhfZm9saW9fcHV0KGRheF90b19mb2xpbyhlbnRyeSkpO1xuIDUxMzpcdH1cbiA1MTQ6XHRcbiA1MTU6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXG4gNTE2Olx0e1xuIDUxNzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA1MTg6XHRcbiA1MTk6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTIxOlx0XG4gNTIyOlx0XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gNTIzOlx0XHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcbiA1MjQ6XHRcdFx0cmV0dXJuIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2U7XG4gNTI1Olx0XHRlbHNlXG4gNTI2Olx0XHRcdHJldHVybiBOVUxMO1xuIDUyNzpcdH1cbiA1Mjg6XHRcbiA1Mjk6XHQvKipcbiA1MzA6XHQgKiBkYXhfbG9ja19mb2xpbyAtIExvY2sgdGhlIERBWCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGEgZm9saW9cbiA1MzE6XHQgKiBAZm9saW86IFRoZSBmb2xpbyB3aG9zZSBlbnRyeSB3ZSB3YW50IHRvIGxvY2tcbiA1MzI6XHQgKlxuIDUzMzpcdCAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC5cbiA1MzQ6XHQgKiBSZXR1cm46IEEgY29va2llIHRvIHBhc3MgdG8gZGF4X3VubG9ja19mb2xpbygpIG9yIDAgaWYgdGhlIGVudHJ5IGNvdWxkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGRheF90b19mb2xpb2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBkYXhfdG9fZm9saW9gIGZ1bmN0aW9uIG9yIHNjcmlwdCBpcyBhbGwgYWJvdXQuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgYWx3YXlzIHRoZSBzYW1lOiBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIGl0JiMzOTtzICp1c2VkKi4gSSYjMzk7bGwganVtcCByaWdodCBpbnRvIGdyZXBwaW5nIGZvciB0aGUgdGVybSAmIzM0O2RheF90b19mb2xpbyYjMzQ7IHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayBvdmVydmlldyBvZiBob3cgaXQmIzM5O3MgaW52b2tlZCwgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgd2hhdCBraW5kIG9mIGlucHV0cyBhbmQgb3V0cHV0cyBpdCYjMzk7cyBkZWFsaW5nIHdpdGguIFRoYXQgY29udGV4dCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBJdCBzaG91bGQgZ2l2ZSBtZSBhIGRlY2VudCBzdGFydGluZyBwb2ludCBmcm9tIHdoaWNoIHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X3RvX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTY3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF90b19wZm4odm9pZCAqZW50cnkpXG4tLVxuZnMvZGF4LmMtNzEtXG5mcy9kYXguYzo3MjpzdGF0aWMgc3RydWN0IGZvbGlvICpkYXhfdG9fZm9saW8odm9pZCAqZW50cnkpXG5mcy9kYXguYy03My17XG4tLVxuZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtNDU5LXtcbmZzL2RheC5jOjQ2MDpcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuZnMvZGF4LmMtNDYxLVx0aW50IG9yZGVyID0gZGF4X2VudHJ5X29yZGVyKGVudHJ5KTtcbi0tXG5mcy9kYXguYz00Nzg9c3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZGF4LmMtNDg3LVxuZnMvZGF4LmM6NDg4Olx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuZnMvZGF4LmMtNDg5LVx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MgXHUwMDI2IH4oc2l6ZSAtIDEpKTtcbi0tXG5mcy9kYXguYy00OTktXHRcdGRheF9mb2xpb19pbml0KGVudHJ5KTtcbmZzL2RheC5jOjUwMDpcdFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuZnMvZGF4LmMtNTAxLVx0XHRmb2xpby1cdTAwM2VtYXBwaW5nID0gbWFwcGluZztcbi0tXG5mcy9kYXguYz01MDY9c3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZGF4LmMtNTExLVxuZnMvZGF4LmM6NTEyOlx0ZGF4X2ZvbGlvX3B1dChkYXhfdG9fZm9saW8oZW50cnkpKTtcbmZzL2RheC5jLTUxMy19XG4tLVxuZnMvZGF4LmM9NTE1PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbi0tXG5mcy9kYXguYy01MjEtXG5mcy9kYXguYzo1MjI6XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG5mcy9kYXguYy01MjMtXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcbi0tXG5mcy9kYXguYz0xODQyPXN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9pdGVyKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE4ODQtXG5mcy9kYXguYzoxODg1Olx0Zm9saW8gPSBkYXhfdG9fZm9saW8oKmVudHJ5KTtcbmZzL2RheC5jLTE4ODYtXHRpZiAoZGF4X2ZhdWx0X2lzX3N5bmNocm9ub3VzKGl0ZXIsIHZtZi1cdTAwM2V2bWEpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGBmcy9kYXguY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBEQVggRGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA2MC04MCBvZiBgZnMvZGF4LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHdoZXJlIHdlJiMzOTtyZSBzZWVpbmcgc29tZSBjb3JlIERBWCAoRGlyZWN0IEFjY2VzcykgZnVuY3Rpb25hbGl0eSBraWNraW5nIGluLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYWN0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IHNjYW5uaW5nIGZvciB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgZnVuY3Rpb24/IFdoYXQmIzM5O3MgdGhlIGNhbGxpbmcgcG9pbnQ/IE15IGludHVpdGlvbiwgYmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgaXMgdGhhdCB0aGVzZSBsaW5lcyBhcmUgbGlrZWx5IGhhbmRsaW5nIGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnkgZnJvbSBhIGZpbGUgc3lzdGVtIHBlcnNwZWN0aXZlLgoKT2theSwgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlJiMzOTtzIG9iamVjdGl2ZS4gV2UgYXJlIGxpa2VseSBsb29raW5nIGF0IGZpbGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnRlbmRlZCB0byBnaXZlIHVzZXJsYW5kIHRoZSBhYmlsaXR5IHRvIGFjY2VzcyBkYXRhIGRpcmVjdGx5IGZyb20gcGVyc2lzdGVudCBtZW1vcnkuIFRoZSBkZXRhaWxzIGFyZSBtb3N0IHByb2JhYmx5IGFib3V0IGhvdyBEQVggaW50ZWdyYXRlcyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBvciBzb21lIGZvcm0gb2YgbWVtb3J5IG1hcHBpbmcuIEkmIzM5O20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIGBpb21hcGAsIHBvdGVudGlhbGx5IHNvbWUgZGlyZWN0IEkvTyBsb2dpYywgb3IgbWF5YmUgZXZlbiBhZGRyZXNzaW5nIGNoYWxsZW5nZXMgYXJvdW5kIHBhZ2UgZmF1bHRzIGFuZCBjb2hlcmVuY2UuIEkgYWxzbyBhc3N1bWUgdGhlcmUgYXJlIGNoZWNrcyBmb3IgcGVybWlzc2lvbnMgYW5kIGRhdGEgYWxpZ25tZW50LiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nLCB0aGF0JiMzOTtzIGNydWNpYWwgaGVyZSwgZXNwZWNpYWxseSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyB3aXRoIHRoZSBEQVggYWNjZXNzIHBhdGguCgpOb3cgSSBhbSBnb2luZyB0byBzZWUgaWYgYW55IG9mIHRoZSBjaGVja3MgYW5kIGRhdGEgbWFwcGluZ3MgYXJlIGZhbWlsaWFyLCBvciBoYXZlIGNoYW5nZWQgcmVjZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHQgKi9cbiAgNjE6XHQjZGVmaW5lIERBWF9TSElGVFx0KDQpXG4gIDYyOlx0I2RlZmluZSBEQVhfTE9DS0VEXHQoMVVMIFx1MDAzY1x1MDAzYyAwKVxuICA2MzpcdCNkZWZpbmUgREFYX1BNRFx0XHQoMVVMIFx1MDAzY1x1MDAzYyAxKVxuICA2NDpcdCNkZWZpbmUgREFYX1pFUk9fUEFHRVx0KDFVTCBcdTAwM2NcdTAwM2MgMilcbiAgNjU6XHQjZGVmaW5lIERBWF9FTVBUWVx0KDFVTCBcdTAwM2NcdTAwM2MgMylcbiAgNjY6XHRcbiAgNjc6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxuICA2ODpcdHtcbiAgNjk6XHRcdHJldHVybiB4YV90b192YWx1ZShlbnRyeSkgXHUwMDNlXHUwMDNlIERBWF9TSElGVDtcbiAgNzA6XHR9XG4gIDcxOlx0XG4gIDcyOlx0c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxuICA3MzpcdHtcbiAgNzQ6XHRcdHJldHVybiBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKGRheF90b19wZm4oZW50cnkpKSk7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyB2b2lkICpkYXhfbWFrZV9lbnRyeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiAgNzg6XHR7XG4gIDc5Olx0XHRyZXR1cm4geGFfbWtfdmFsdWUoZmxhZ3MgfCAocGZuIFx1MDAzY1x1MDAzYyBEQVhfU0hJRlQpKTtcbiAgODA6XHR9XG4gIDgxOlx0XG4gIDgyOlx0c3RhdGljIGJvb2wgZGF4X2lzX2xvY2tlZCh2b2lkICplbnRyeSlcbiAgODM6XHR7XG4gIDg0Olx0XHRyZXR1cm4geGFfdG9fdmFsdWUoZW50cnkpIFx1MDAyNiBEQVhfTE9DS0VEO1xuICA4NTpcdH1cbiAgODY6XHRcbiAgODc6XHRzdGF0aWMgdW5zaWduZWQgaW50IGRheF9lbnRyeV9vcmRlcih2b2lkICplbnRyeSlcbiAgODg6XHR7XG4gIDg5Olx0XHRpZiAoeGFfdG9fdmFsdWUoZW50cnkpIFx1MDAyNiBEQVhfUE1EKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBEQVggRmlsZXN5c3RlbSBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSBpbiBgZnMvZGF4LmNgIGFuZCBJJiMzOTt2ZSBzcG90dGVkIGEgcG90ZW50aWFsIGlzc3VlLiBTcGVjaWZpY2FsbHksIHRoZSBjYWxsIHRvIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcyBoYXBwZW5pbmcgYmVmb3JlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGBlbnRyeWAgdmFsdWVzLCBzcGVjaWZpY2FsbHkgYERBWF9aRVJPX1BBR0VgIG9yIGBEQVhfRU1QVFlgLiAgCgpUaGUgcHJvYmxlbSBpcyB0aGF0IGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcywgdW5kZXIgdGhlIGhvb2QsIGNhbGxpbmcgYHBhZ2VfZm9saW8ocGZuX3RvX3BhZ2UoZGF4X3RvX3BmbihlbnRyeSkpKWAuIElmIGBlbnRyeWAgaXMgZWl0aGVyIGBEQVhfWkVST19QQUdFYCBvciBgREFYX0VNUFRZYCwgdGhlbiBgZGF4X3RvX3BmbihlbnRyeSlgIGlzIGdvaW5nIHRvIHJlc3VsdCBpbiBhIFBGTiBvZiAwLiAgCgpOb3cgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBgcGZuX3RvX3BhZ2UoMClgICptaWdodCogcmV0dXJuIGFuIGludmFsaWQgcGFnZSBwb2ludGVyLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBvciB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoaXMgY291bGQgZWFzaWx5IGxlYWQgdG8gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzIG9yLCB3b3JzZSwgYSBrZXJuZWwgcGFuaWMuICAKCkVmZmVjdGl2ZWx5LCBpbml0aWFsaXppbmcgYGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KWAgKmJlZm9yZSogY2hlY2tpbmcgaWYgYGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpYCBpcyBnb2luZyB0byByZXN1bHQgaW4gdGhhdCBgcGZuX3RvX3BhZ2VgIGJlaW5nIGV2YWx1YXRlZCB1bmNvbmRpdGlvbmFsbHksIGV2ZW4gd2hlbiB3ZSAqa25vdyogaXQmIzM5O3MgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBidWcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLCBhbmQgYGRheF9idXN5X3BhZ2VgIGFyZSBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggZW50cnlwb2ludHMsIGVzcGVjaWFsbHkgZXhwb3J0ZWQgb25lcywgY2FsbCB0aGVzZSBmdW5jdGlvbnMgc28gSSBjYW4gc2VlIHRoZSBpbXBhY3Qgb2YgdGhpcyBidWcuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgdXNlZCB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBzZXZlcml0eSBhbmQgdGhlIGJlc3Qgd2F5IHRvIGZpeCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2Fzc29jaWF0ZV9lbnRyeXxkYXhfZGlzYXNzb2NpYXRlX2VudHJ5fGRheF9idXN5X3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxuLS1cbmZzL2RheC5jLTQ3Ny1cbmZzL2RheC5jOjQ3ODpzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2RheC5jLTQ3OS1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL2RheC5jLTUwNS1cbmZzL2RheC5jOjUwNjpzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2RheC5jLTUwNy1cdFx0XHRcdGJvb2wgdHJ1bmMpXG4tLVxuZnMvZGF4LmMtNTE0LVxuZnMvZGF4LmM6NTE1OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbmZzL2RheC5jLTUxNi17XG4tLVxuZnMvZGF4LmM9Njg3PXN0YXRpYyB2b2lkICpncmFiX21hcHBpbmdfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsXG4tLVxuZnMvZGF4LmMtNzM2LVxuZnMvZGF4LmM6NzM3Olx0XHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCBmYWxzZSk7XG5mcy9kYXguYy03MzgtXHRcdHhhc19zdG9yZSh4YXMsIE5VTEwpO1x0LyogdW5kbyB0aGUgUE1EIGpvaW4gKi9cbi0tXG5mcy9kYXguYz03OTE9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTgyOC1cdFx0aWYgKGVudHJ5KVxuZnMvZGF4LmM6ODI5Olx0XHRcdHBhZ2UgPSBkYXhfYnVzeV9wYWdlKGVudHJ5KTtcbmZzL2RheC5jLTgzMC1cdFx0cHV0X3VubG9ja2VkX2VudHJ5KFx1MDAyNnhhcywgZW50cnksIFdBS0VfTkVYVCk7XG4tLVxuZnMvZGF4LmM9ODUyPXN0YXRpYyBpbnQgX19kYXhfaW52YWxpZGF0ZV9lbnRyeShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy04NjYtXHRcdGdvdG8gb3V0O1xuZnMvZGF4LmM6ODY3Olx0ZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeShlbnRyeSwgbWFwcGluZywgdHJ1bmMpO1xuZnMvZGF4LmMtODY4LVx0eGFzX3N0b3JlKFx1MDAyNnhhcywgTlVMTCk7XG4tLVxuZnMvZGF4LmM9OTI1PXZvaWQgZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTk0NS1cdFx0XHRjb250aW51ZTtcbmZzL2RheC5jOjk0NjpcdFx0ZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeShlbnRyeSwgbWFwcGluZywgdHJ1ZSk7XG5mcy9kYXguYy05NDctXHRcdHhhc19zdG9yZShcdTAwMjZ4YXMsIE5VTEwpO1xuLS1cbmZzL2RheC5jPTEwNzk9c3RhdGljIHZvaWQgKmRheF9pbnNlcnRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTExMDYtXG5mcy9kYXguYzoxMTA3Olx0XHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCBmYWxzZSk7XG5mcy9kYXguYzoxMTA4Olx0XHRkYXhfYXNzb2NpYXRlX2VudHJ5KG5ld19lbnRyeSwgbWFwcGluZywgdm1mLVx1MDAzZXZtYSxcbmZzL2RheC5jLTExMDktXHRcdFx0XHRcdHZtZi1cdTAwM2VhZGRyZXNzLCBzaGFyZWQpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0zMzQ9dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0zNjctICogQHNoYXJlOiBudW1iZXIgb2YgREFYIG1hcHBpbmdzIHRoYXQgcmVmZXJlbmNlIHRoaXMgZm9saW8uIFNlZVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjM2ODogKiAgICBkYXhfYXNzb2NpYXRlX2VudHJ5LlxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTM2OS0gKiBAcHJpdmF0ZTogRmlsZXN5c3RlbSBwZXItZm9saW8gZGF0YSAoc2VlIGZvbGlvX2F0dGFjaF9wcml2YXRlKCkpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjMyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQVggTWFwcGluZyBPcGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCByZXZlYWxzIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYCBhcmUgY2VudHJhbCB0byB0aGlzIERBWCBhcmNoaXRlY3R1cmUsIGFuZCB0aGV5JiMzOTtyZSBjYWxsZWQgcHJpbWFyaWx5IGJ5IGEgc2VsZWN0IHNldCBvZiBmdW5jdGlvbnM6IGBncmFiX21hcHBpbmdfZW50cnlgLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCBgX19kYXhfaW52YWxpZGF0ZV9lbnRyeWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBhbmQgYGRheF9pbnNlcnRfZW50cnlgLgoKSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhhdCBgZ3JhYl9tYXBwaW5nX2VudHJ5YCBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IGxlYWRzIGRvd24gdGhlIGZhdWx0IGhhbmRsaW5nIHBhdGhzIHdpdGggYGRheF9pb21hcF9mYXVsdGAgYW5kIGBkYXhfZmF1bHRfaXRlcmAsIHdoaWNoIGFyZSBib3RoIGltcG9ydGFudCBmb3IgREFYIGZhdWx0IGhhbmRsaW5nLiBBbHNvLCBmdW5jdGlvbnMgbGlrZSBgZGF4X2luc2VydF9lbnRyeWAgYWxzbyBjYWxsIHRoaXMuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aG9zZSBzZWNvbmQtbGV2ZWwgY2FsbHMuIEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgYGRheF9kZWxldGVfbWFwcGluZ19yYW5nZWAsIGBkYXhfaW5zZXJ0X2VudHJ5YCwgYW5kIGFsc28gdGhlIGBkYXhfaW9tYXBfZmF1bHRgIHZhcmlhbnRzLCBhbmQgYGRheF9mYXVsdF9pdGVyYCwgdG8gZGV0ZXJtaW5lIGhvdyB0aGV5IGZpdCBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYWxsIGNhbGxzIHRvIGFsbCBvZiB0aGUgaW1wb3J0YW50IG1ldGhvZHMuCgpNeSBpbnR1aXRpb24gc2F5cyB0aGUgc291cmNlIGNvZGUgd2lsbCBsaXZlIGluIGBmcy9kYXguY2AsIHNvIEkmIzM5O2xsIHN0YXJ0IGRpZ2dpbmcgdGhlcmUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtekEtWjAtOV8qIF0mIzQzOylcXCgoLiopXFwpJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTM5PXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3RhYmxlW0RBWF9XQUlUX1RBQkxFX0VOVFJJRVNdO1xuZnMvZGF4LmMtNDAtXG5mcy9kYXguYzo0MTpzdGF0aWMgaW50IF9faW5pdCBpbml0X2RheF93YWl0X3RhYmxlKHZvaWQpXG5mcy9kYXguYy00Mi17XG4tLVxuZnMvZGF4LmM9NDk9ZnNfaW5pdGNhbGwoaW5pdF9kYXhfd2FpdF90YWJsZSk7XG4tLVxuZnMvZGF4LmMtNjYtXG5mcy9kYXguYzo2NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtNjgte1xuLS1cbmZzL2RheC5jLTcxLVxuZnMvZGF4LmM6NzI6c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtNzMte1xuLS1cbmZzL2RheC5jLTc2LVxuZnMvZGF4LmM6Nzc6c3RhdGljIHZvaWQgKmRheF9tYWtlX2VudHJ5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuZnMvZGF4LmMtNzgte1xuLS1cbmZzL2RheC5jLTgxLVxuZnMvZGF4LmM6ODI6c3RhdGljIGJvb2wgZGF4X2lzX2xvY2tlZCh2b2lkICplbnRyeSlcbmZzL2RheC5jLTgzLXtcbi0tXG5mcy9kYXguYy04Ni1cbmZzL2RheC5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGF4X2VudHJ5X29yZGVyKHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtODgte1xuLS1cbmZzL2RheC5jLTkzLVxuZnMvZGF4LmM6OTQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGF4X2lzX3BtZF9lbnRyeSh2b2lkICplbnRyeSlcbmZzL2RheC5jLTk1LXtcbi0tXG5mcy9kYXguYy05OC1cbmZzL2RheC5jOjk5OnN0YXRpYyBib29sIGRheF9pc19wdGVfZW50cnkodm9pZCAqZW50cnkpXG5mcy9kYXguYy0xMDAte1xuLS1cbmZzL2RheC5jLTEwMy1cbmZzL2RheC5jOjEwNDpzdGF0aWMgaW50IGRheF9pc196ZXJvX2VudHJ5KHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtMTA1LXtcbi0tXG5mcy9kYXguYy0xMDgtXG5mcy9kYXguYzoxMDk6c3RhdGljIGludCBkYXhfaXNfZW1wdHlfZW50cnkodm9pZCAqZW50cnkpXG5mcy9kYXguYy0xMTAte1xuLS1cbmZzL2RheC5jLTExNy0gKi9cbmZzL2RheC5jOjExODpzdGF0aWMgYm9vbCBkYXhfaXNfY29uZmxpY3Qodm9pZCAqZW50cnkpXG5mcy9kYXguYy0xMTkte1xuLS1cbmZzL2RheC5jPTE4ND1zdGF0aWMgdm9pZCBkYXhfd2FrZV9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksXG4tLVxuZnMvZGF4LmMtMjA0LSAqIGlzIGEgREFYIGVudHJ5IGFuZCByZXR1cm4gaXQuICBUaGUgY2FsbGVyIG11c3Qgc3Vic2VxdWVudGx5IGNhbGxcbmZzL2RheC5jOjIwNTogKiBwdXRfdW5sb2NrZWRfZW50cnkoKSBpZiBpdCBkaWQgbm90IGxvY2sgdGhlIGVudHJ5IG9yIGRheF91bmxvY2tfZW50cnkoKVxuZnMvZGF4LmMtMjA2LSAqIGlmIGl0IGRpZC4gIFRoZSBlbnRyeSByZXR1cm5lZCBtYXkgaGF2ZSBhIGxhcmdlciBvcmRlciB0aGFuIEBvcmRlci5cbi0tXG5mcy9kYXguYy0yMTEtICovXG5mcy9kYXguYzoyMTI6c3RhdGljIHZvaWQgKmdldF9uZXh0X3VubG9ja2VkX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5mcy9kYXguYy0yMTMte1xuLS1cbmZzL2RheC5jLTI0NS0gKi9cbmZzL2RheC5jOjI0NjpzdGF0aWMgdm9pZCAqd2FpdF9lbnRyeV91bmxvY2tlZF9leGNsdXNpdmUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtMjQ3LXtcbi0tXG5mcy9kYXguYy0yNzMtICogVGhlIG9ubHkgdGhpbmcga2VlcGluZyB0aGUgYWRkcmVzcyBzcGFjZSBhcm91bmQgaXMgdGhlIGlfcGFnZXMgbG9ja1xuZnMvZGF4LmM6Mjc0OiAqIChpdCYjMzk7cyBjeWNsZWQgaW4gY2xlYXJfaW5vZGUoKSBhZnRlciByZW1vdmluZyB0aGUgZW50cmllcyBmcm9tIGlfcGFnZXMpXG5mcy9kYXguYy0yNzUtICogQWZ0ZXIgd2UgY2FsbCB4YXNfdW5sb2NrX2lycSgpLCB3ZSBjYW5ub3QgdG91Y2ggeGFzLVx1MDAzZXhhLlxuZnMvZGF4LmMtMjc2LSAqL1xuZnMvZGF4LmM6Mjc3OnN0YXRpYyB2b2lkIHdhaXRfZW50cnlfdW5sb2NrZWQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtMjc4LXtcbi0tXG5mcy9kYXguYz0yOTg9c3RhdGljIHZvaWQgcHV0X3VubG9ja2VkX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSxcbi0tXG5mcy9kYXguYy0zMDktICovXG5mcy9kYXguYzozMTA6c3RhdGljIHZvaWQgZGF4X3VubG9ja19lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnkpXG5mcy9kYXguYy0zMTEte1xuLS1cbmZzL2RheC5jLTMyNS0gKi9cbmZzL2RheC5jOjMyNjpzdGF0aWMgdm9pZCAqZGF4X2xvY2tfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtMzI3LXtcbi0tXG5mcy9kYXguYy0zMzEtXG5mcy9kYXguYzozMzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGF4X2VudHJ5X3NpemUodm9pZCAqZW50cnkpXG5mcy9kYXguYy0zMzMte1xuLS1cbmZzL2RheC5jLTM0OS0gKi9cbmZzL2RheC5jOjM1MDpzdGF0aWMgaW5saW5lIGJvb2wgZGF4X2ZvbGlvX2lzX3NoYXJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvZGF4LmMtMzUxLXtcbi0tXG5mcy9kYXguYy0zNjQtICovXG5mcy9kYXguYzozNjU6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX21ha2Vfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9kYXguYy0zNjYte1xuLS1cbmZzL2RheC5jLTM4OC0gKi9cbmZzL2RheC5jOjM4OTppbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9kYXguYy0zOTAte1xuLS1cbmZzL2RheC5jPTQzMT1FWFBPUlRfU1lNQk9MX0dQTChkYXhfZm9saW9fcmVzZXRfb3JkZXIpO1xuZnMvZGF4LmMtNDMyLVxuZnMvZGF4LmM6NDMzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYXhfZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9kYXguYy00MzQte1xuLS1cbmZzL2RheC5jLTQ1Ny1cbmZzL2RheC5jOjQ1ODpzdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcbmZzL2RheC5jLTQ1OS17XG4tLVxuZnMvZGF4LmM9NTA2PXN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTUxNC1cbmZzL2RheC5jOjUxNTpzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXG5mcy9kYXguYy01MTYte1xuLS1cbmZzL2RheC5jLTUzNi0gKi9cbmZzL2RheC5jOjUzNzpkYXhfZW50cnlfdCBkYXhfbG9ja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvZGF4LmMtNTM4LXtcbi0tXG5mcy9kYXguYy01ODMtXG5mcy9kYXguYzo1ODQ6dm9pZCBkYXhfdW5sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGRheF9lbnRyeV90IGNvb2tpZSlcbmZzL2RheC5jLTU4NS17XG4tLVxuZnMvZGF4LmM9ODQ0PUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTtcbmZzL2RheC5jLTg0NS1cbmZzL2RheC5jOjg0NjpzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG5mcy9kYXguYy04NDcte1xuLS1cbmZzL2RheC5jPTg3Nz1zdGF0aWMgaW50IF9fZGF4X2NsZWFyX2RpcnR5X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTkwOS0gKi9cbmZzL2RheC5jOjkxMDppbnQgZGF4X2RlbGV0ZV9tYXBwaW5nX2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4KVxuZnMvZGF4LmMtOTExLXtcbi0tXG5mcy9kYXguYz0xMDAzPUVYUE9SVF9TWU1CT0xfR1BMKGRheF9icmVha19sYXlvdXQpO1xuZnMvZGF4LmMtMTAwNC1cbmZzL2RheC5jOjEwMDU6dm9pZCBkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9kYXguYy0xMDA2LXtcbi0tXG5mcy9kYXguYz0xMDI5PWludCBkYXhfaW52YWxpZGF0ZV9tYXBwaW5nX2VudHJ5X3N5bmMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZGF4LmMtMTAzNC1cbmZzL2RheC5jOjEwMzU6c3RhdGljIHBnb2ZmX3QgZGF4X2lvbWFwX3Bnb2ZmKGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAsIGxvZmZfdCBwb3MpXG5mcy9kYXguYy0xMDM2LXtcbi0tXG5mcy9kYXguYy0xMDM5LVxuZnMvZGF4LmM6MTA0MDpzdGF0aWMgaW50IGNvcHlfY293X3BhZ2VfZGF4KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcilcbmZzL2RheC5jLTEwNDEte1xuLS1cbmZzL2RheC5jPTE0MzU9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE0NDEtXG5mcy9kYXguYzoxNDQyOnN0YXRpYyBpbnQgZGF4X3Vuc2hhcmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcilcbmZzL2RheC5jLTE0NDMte1xuLS1cbmZzL2RheC5jPTE1MTM9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2ZpbGVfdW5zaGFyZSk7XG5mcy9kYXguYy0xNTE0LVxuZnMvZGF4LmM6MTUxNTpzdGF0aWMgaW50IGRheF9tZW16ZXJvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3Qgc2l6ZSlcbmZzL2RheC5jLTE1MTYte1xuLS1cbmZzL2RheC5jLTE1MzctXG5mcy9kYXguYzoxNTM4OnN0YXRpYyBpbnQgZGF4X3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8pXG5mcy9kYXguYy0xNTM5LXtcbi0tXG5mcy9kYXguYz0xNjE0PUVYUE9SVF9TWU1CT0xfR1BMKGRheF90cnVuY2F0ZV9wYWdlKTtcbmZzL2RheC5jLTE2MTUtXG5mcy9kYXguYzoxNjE2OnN0YXRpYyBpbnQgZGF4X2lvbWFwX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbmZzL2RheC5jLTE2MTcte1xuLS1cbmZzL2RheC5jPTE3Nzk9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2lvbWFwX3J3KTtcbmZzL2RheC5jLTE3ODAtXG5mcy9kYXguYzoxNzgxOnN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9yZXR1cm4oaW50IGVycm9yKVxuZnMvZGF4LmMtMTc4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDY1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIGBmcy9kYXguY2AgY29udGV4dCwgZm9jdXNpbmcgb24gdGhlIGJ1aWxkIHN5c3RlbSBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBvZiBmcy9kYXguYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBob3cgYGZzL2RheC5jYCBnZXRzIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIGJ1aWxkLiBUaGUgZmlyc3Qgc3RvcCwgbmF0dXJhbGx5LCBpcyB0aGUgYE1ha2VmaWxlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgYXJlIGluIHBsYXksIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZW4gYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFdoYXQgb3RoZXIgc291cmNlIGZpbGVzLCBvYmplY3QgZmlsZXMsIG9yIGxpYnJhcmllcyBkb2VzIGl0IHJlbHkgb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBpbmNsdWRlIHBhdGhzIGl0IG5lZWRzPyBBcmUgdGhlcmUgYW55IGNsZXZlciBidWlsZCBvcHRpbWl6YXRpb25zIGJlaW5nIGVtcGxveWVkPyBVbmRlcnN0YW5kaW5nIHRoZSBNYWtlZmlsZSBpcyBrZXkgdG8gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLgoKVGhlbiwgSSYjMzk7bGwgaW1tZWRpYXRlbHkganVtcCBvdmVyIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBtYXR0ZXIgbGllcyBmb3IgbWUuIEkgbmVlZCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB3aGV0aGVyIG9yIG5vdCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnQsIGFuZCBieSBleHRlbnNpb24gYGZzL2RheC5jYCwgaXMgZW5hYmxlZC4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGBDT05GSUdfYCBvcHRpb25zPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzIG9yIGhhcmR3YXJlPyBXaGF0JiMzOTtzIHRoZSBoZWxwIHRleHQgZGVzY3JpYmluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBEQVg/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIG1lbW9yeSB0eXBlcywgZmlsZSBzeXN0ZW1zLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29uZGl0aW9ucyogdW5kZXIgd2hpY2ggREFYIGZ1bmN0aW9uYWxpdHkgaXMgb2ZmZXJlZCB0byB0aGUga2VybmVsIHVzZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nIGFuZCB1bmRlcnN0YW5kaW5nIGNvbXBhdGliaWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBjYW4gcmVhbGx5IHNlZSB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBmaWxlIG9uIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBhbmQgZnVuY3Rpb25hbGl0eS4gQmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlIEkmIzM5O2xsIGhhdmUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGtlcm5lbCBleHBvc2VzIERBWCBjYXBhYmlsaXRpZXMgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG5lZWQgdG8gYmUgc2F0aXNmaWVkIHRvIGxldmVyYWdlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXhcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgJiM0Mzs9IGFpby5vXG5mcy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfRlNfREFYKVx0XHQmIzQzOz0gZGF4Lm9cbmZzL01ha2VmaWxlLTMyLW9iai0kKENPTkZJR19GU19FTkNSWVBUSU9OKVx0JiM0Mzs9IGNyeXB0by9cbi0tXG5mcy9mdXNlL01ha2VmaWxlPTE2PWZ1c2UteSAmIzQzOz0gaW9tb2RlLm9cbmZzL2Z1c2UvTWFrZWZpbGU6MTc6ZnVzZS0kKENPTkZJR19GVVNFX0RBWCkgJiM0Mzs9IGRheC5vXG5mcy9mdXNlL01ha2VmaWxlLTE4LWZ1c2UtJChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkgJiM0Mzs9IHBhc3N0aHJvdWdoLm8gYmFja2luZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDM0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgQ09ORklHX0ZTX0RBWCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgQ09ORklHX0ZTX0RBWGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBnby10byBwbGFjZSBmb3IgdW5kZXJzdGFuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZWlyIGRlZmluaXRpb25zLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYW55IGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgYENPTkZJR19GU19EQVhgIGlzIGRlZmluZWQg4oCTIGlzIGl0IGEgYm9vbGVhbiwgYSB0cmlzdGF0ZT8gV2hhdCYjMzk7cyB0aGUgaGVscCB0ZXh0IHNheT8gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBjb250ZXh0LiBNb3JlIGltcG9ydGFudGx5LCB3aGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IE9yIHBlcmhhcHMgd2hpY2ggb3B0aW9ucyBkZXBlbmQgb24gKml0Kj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvciBmaWxlc3lzdGVtIHJlcXVpcmVtZW50cyBiYWtlZCBpbj8gS25vd2luZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIHdvcmtzIHdpdGhpbiB0aGUgYmlnZ2VyIGtlcm5lbCBwaWN0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCB1c2UgY2FzZXMgYW5kIGFyY2hpdGVjdHVyZXMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBLY29uZmlnIGZpbGVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfREFYXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xuZnMvS2NvbmZpZy01Ny1cbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxuZnMvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBmaWxlIHN5c3RlbSBjb25maWd1cmF0aW9uLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGBmcy9LY29uZmlnYCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU4LiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyBmb3IgZmlsZSBzeXN0ZW0gZmVhdHVyZXMsIG9yIGF0IGxlYXN0IGEga2V5IHNlY3Rpb24gcmVsYXRlZCB0byB0aGVtLCB3aWxsIGJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhlIGxvZ2ljIGlzIHN0cnVjdHVyZWQuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIHNuaXBwZXQgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eSBvbiB0aGUgYnJvYWRlciBkZXNpZ24gZGVjaXNpb25zIGluIHBsYXksIGFuZCBzaGVkIGxpZ2h0IG9uIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBUaGUgcGxhbiBpcyB0byBnZXQgYW4gb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGRlY2lkZSB3aGV0aGVyIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBpbmNsdWRlIHBhdGhzLCBvciBpZiB0aGUgcmVsZXZhbnQgYml0cyBhcmUgZGVmaW5lZCByaWdodCB0aGVyZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdFxuICA1NjpcdGVuZGlmICMgQkxPQ0tcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgRlNfREFYXG4gIDU5Olx0XHRib29sIFwmIzM0O0ZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFwmIzM0O1xuICA2MDpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAgNjE6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbiAgNjI6XHRcdHNlbGVjdCBGU19JT01BUFxuICA2MzpcdFx0c2VsZWN0IERBWFxuICA2NDpcdFx0aGVscFxuICA2NTpcdFx0ICBEaXJlY3QgQWNjZXNzIChEQVgpIGNhbiBiZSB1c2VkIG9uIG1lbW9yeS1iYWNrZWQgYmxvY2sgZGV2aWNlcy5cbiAgNjY6XHRcdCAgSWYgdGhlIGJsb2NrIGRldmljZSBzdXBwb3J0cyBEQVggYW5kIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIERBWCxcbiAgNjc6XHRcdCAgdGhlbiB5b3UgY2FuIGF2b2lkIHVzaW5nIHRoZSBwYWdlY2FjaGUgdG8gYnVmZmVyIEkvT3MuICBUdXJuaW5nXG4gIDY4Olx0XHQgIG9uIHRoaXMgb3B0aW9uIHdpbGwgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBEQVguXG4gIDY5Olx0XG4gIDcwOlx0XHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxuICA3MTpcdFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXG4gIDcyOlx0XHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxuICA3MzpcdFxuICA3NDpcdFx0XHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxuICA3NTpcdFx0XHRcdC0tbW9kZT1mc2RheCAtLW1hcD1tZW1cbiAgNzY6XHRcbiAgNzc6XHRcdCAgU2VlIHRoZSAmIzM5O2NyZWF0ZS1uYW1lc3BhY2UmIzM5OyBtYW4gcGFnZSBmb3IgZGV0YWlscyBvbiB0aGUgb3ZlcmhlYWQgb2ZcbiAgNzg6XHRcdCAgLS1tYXA9bWVtOlxuICA3OTpcdFx0ICBodHRwczovL2RvY3MucG1lbS5pby9uZGN0bC11c2VyLWd1aWRlL25kY3RsLW1hbi1wYWdlcy9uZGN0bC1jcmVhdGUtbmFtZXNwYWNlXG4gIDgwOlx0XG4gIDgxOlx0XHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcbiAgODI6XHRcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcbiAgODM6XHRcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxuICA4NDpcdFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHlvdSBkbyBub3QgaGF2ZSBhIGJsb2NrIGRldmljZSB0aGF0IGlzIGNhcGFibGUgb2YgdXNpbmcgdGhpcyxcbiAgODc6XHRcdCAgb3IgaWYgdW5zdXJlLCBzYXkgTi4gIFNheWluZyBZIHdpbGwgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbFxuICA4ODpcdFx0ICBieSBhYm91dCA1a0IuXG4gIDg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIERlcGVuZGVuY2llcyBmb3IgWk9ORV9ERVZJQ0UqKgoKQWxyaWdodCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHByb3Blcmx5IGludGVncmF0ZWQgYW5kIHRoYXQgYWxsIG9mIGl0cyBkZXBlbmRlbmNpZXMgYXJlIGFjY291bnRlZCBmb3IuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgYmVmb3JlIGFueSBtYWpvciBjaGFuZ2VzIG9yIGRlcGxveW1lbnQsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdHkgb2Ygc3VjaCBhIGNvbXBvbmVudC4gSSBuZWVkIHRvIG1ha2UgYSB0aG9yb3VnaCBwYXNzIHRocm91Z2ggdGhlIGNvZGUgYmFzZSBhbmQgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzIGZpcnN0IOKAkyB0aGUgb2J2aW91cyBsaWJyYXJpZXMgYW5kIG1vZHVsZXMgdGhhdCBgWk9ORV9ERVZJQ0VgIHJlbGllcyBvbiBkaXJlY3RseS4gVGhlbiwgSSBuZWVkIHRvIGRpZyBkZWVwZXIsIHRyYWNpbmcgdGhlIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNvbm5lY3Rpb25zIHRoYXQgY291bGQgY2F1c2Ugc3VidGxlIGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmU/IFdlIG5lZWQgdG8gdmVyaWZ5IHZlcnNpb24gY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIGVudGlyZSBkZXBlbmRlbmN5IHRyZWUuIEFyZSB3ZSB1c2luZyB0aGUgbGF0ZXN0IHNlY3VyZSB2ZXJzaW9ucywgYW5kIGFyZSB3ZSBpbiBhbGlnbm1lbnQgd2l0aCB0aGUgd2lkZXIgcHJvamVjdCYjMzk7cyBkZXBlbmRlbmN5IG1hbmFnZW1lbnQgc3RyYXRlZ3k/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzdGF0aWMgYW5hbHlzaXMsIHVzaW5nIHdoYXRldmVyIHRvb2xzIHdlIGhhdmUgYXZhaWxhYmxlIChsaW50aW5nLCBkZXBlbmRlbmN5IGdyYXBocywgZXRjLikgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldy4gQWZ0ZXIgdGhhdCwgSSB3aWxsIGNvbmR1Y3QgdGhvcm91Z2ggdW5pdCB0ZXN0cyB3aXRoIG1vY2sgZGVwZW5kZW5jaWVzLCBmb2xsb3dlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIHJlbGV2YW50IG90aGVyIGNvbXBvbmVudHMgdGhhdCBjb3VsZCBhZmZlY3QgZGVwZW5kZW5jaWVzLiBUaGUgZ29hbCBpcyB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBiZWZvcmUgdGhleSBiZWNvbWUgcHJvYmxlbXMgaW4gYSBtb3JlIGNvbXBsZXggdGVzdGluZyBzY2VuYXJpbyBvciwgd29yc2UsIHByb2R1Y3Rpb24uIEl0JiMzOTtzIGEgYml0IHRlZGlvdXMsIGJ1dCB3b3J0aCBpdCB0byBhdm9pZCBhbnkgaGVhZGFjaGVzIGxhdGVyLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZ1bmN0aW9uYWxpdHk7IGl0JiMzOTtzIGFib3V0IHNlY3VyaXR5LCBwZXJmb3JtYW5jZSwgYW5kIG1haW50YWluYWJpbGl0eS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgWk9ORV9ERVZJQ0VgJiMzOTtzIGRlcGVuZGVuY2llcyBhcmUgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjA9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjQtXG5tbS9LY29uZmlnOjEyMjU6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjYtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1ODMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBiZXR0ZXIsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHNlZW4gaXQgZGVmaW5lZCBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzZWVtIHRvIHJlbWVtYmVyIGl0IGFyb3VuZCBsaW5lIDEyMjUsIGdpdmUgb3IgdGFrZS4gVGltZSB0byBqdW1wIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgaG93IHRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgaGVscCB0ZXh0cyBJIGNhbiBnbGVhbi4gSXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIHlvdSYjMzk7cmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIG9mIGEgcGFydGljdWxhciBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBvcHRpb25zLCBhbmQgcGVyaGFwcyBzcG90IGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHR5cGljYWwgZm9ybWF0IGhlcmU6IGEgYGNvbmZpZ2Aga2V5d29yZCwgYSB0eXBlIGRlZmluaXRpb24gKGJvb2wsIHRyaXN0YXRlLCBldGMuKSwgdGhlIGhlbHAgdGV4dCwgYW5kIGxpa2VseSBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBXaXRoIGEgYml0IG9mIGx1Y2ssIHRoZSBmaWxlIGNvbW1lbnRzIHdpbGwgYmUgdXAtdG8tZGF0ZSBhbmQgcHJvdmlkZSBzb21lIHVzZWZ1bCBjb250ZXh0LiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIyMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjIyOlx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMjM6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIyNDpcdFxuMTIyNTpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyNjpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjk6XHRcbjEyMzA6XHRcdGhlbHBcbjEyMzE6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMzI6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyMzM6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjM0Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTIzNTpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjM2Olx0XG4xMjM3Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyMzg6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTIzOTpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjQwOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI0MTpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNDI6XHRcbjEyNDM6XHQjXG4xMjQ0Olx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzIwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gTWVtb3J5IEhvdC1SZW1vdmFsIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTUVNT1JZX0hPVFJFTU9WRWAuJiMzNDsgSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSBhIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgYmVmb3JlIHByb2NlZWRpbmcuIFRoaXMgbWVhbnMgSSYjMzk7bSBub3QganVzdCBsb29raW5nIGF0IHRoZSBvYnZpb3VzIGNvbXBvbmVudHMsIGJ1dCBhbnRpY2lwYXRpbmcgYWxsIHRoZSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBrZXJuZWwgaW50ZXJhY3Rpb25zLCB0aGUgdXNlcnNwYWNlIHRvb2xzIHRoYXQgcmVseSBvbiBtZW1vcnkgaG90LXJlbW92YWwsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhbmQgaG93IGRpZmZlcmVudCBrZXJuZWwgdmVyc2lvbnMgbWlnaHQgaGFuZGxlIHRoaXMgZmVhdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgaWRlbnRpZnkgYWxsIHBvdGVudGlhbCB0cm91YmxlIHNwb3RzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01ODA9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTU4MS1cbm1tL0tjb25maWc6NTgyOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTU4My1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTgyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgcHJvYmFibHkgdG8gdW5kZXJzdGFuZCBhIHBhcnRpY3VsYXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBwb3NzaWJsZSBkZWZhdWx0IHZhbHVlcywgYW5kIGhvdyB0aGVzZSBzZXR0aW5ncyByZWxhdGUgdG8gdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIG1heWJlIGFuIGBpZmAgYmxvY2ssIHRoYXQgZ292ZXJucyB3aGV0aGVyIGEgc3BlY2lmaWMgb3B0aW9uIGlzIGVuYWJsZWQgb3Igc2hvd24gdG8gdGhlIHVzZXIuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgS2NvbmZpZyBzeW50YXg6IGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGBkZWZhdWx0YCwgYGJvb2xgLCBldGMuIOKAkyB0cnlpbmcgdG8gcmVjb25zdHJ1Y3QgdGhlIGxvZ2ljIGluIG15IGhlYWQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgbGluZSA1ODIgaG9sZHMgdGhlIGtleSB0byB0aGUgY29uZGl0aW9uIG9yIHJlbGF0aW9uIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIHByb2JhYmx5IGJyYW5jaCBvdXQsIGxvb2tpbmcgYXQgcmVsYXRlZCBvcHRpb25zIG9yIHBlcmhhcHMgZXZlbiB0aGUgY29kZSB0aGF0IHVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGEgc2hhcnAgZXllIG91dCBmb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODA6XHRlbmRjaG9pY2VcbiA1ODE6XHRcbiA1ODI6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MzpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODQ6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODU6XHRcbiA1ODY6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODc6XHRcdGRlZl9ib29sIHlcbiA1ODg6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODk6XHRcbiA1OTA6XHRlbmRpZiAjIE1FTU9SWV9IT1RQTFVHXG4gNTkxOlx0XG4gNTkyOlx0Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXG4gNTkzOlx0ICAgICAgIGJvb2xcbiA1OTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBGaWxlc3lzdGVtIERBWCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBEQVggKERpcmVjdCBBY2Nlc3MpIGlzIHV0aWxpemVkIHdpdGhpbiB0aGUgTGludXggZmlsZXN5c3RlbSBsYW5kc2NhcGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoaWNoIGZpbGVzeXN0ZW1zIGFjdGl2ZWx5IGxldmVyYWdlIERBWC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIG9uZXMgbWFrZSB1c2Ugb2YgdGhlIGBmcy9kYXguY2AgY29kZSBhbmQgaXRzIGZ1bmN0aW9uYWxpdHkuCgpUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbXMgcHJvdmlkZWQuIFRvIGRvIHRoYXQgSSB3aWxsIGJlIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgc3ltYm9scy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyBpbiBgZnMvZGF4LmNgIHRoYXQgYXJlICpleHBvcnRlZCog4oCTIHRoZSBub24tc3RhdGljIG9uZXMg4oCTIHNvIEkgY2FuIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGludGVuZGVkIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRvIGNhbGwgdXBvbi4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIERBWC1zcGVjaWZpYyBpbnRlcmZhY2UgYW5kIGl0cyBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCBvdGhlciBmaWxlc3lzdGVtcyBvciBrZXJuZWwgY29tcG9uZW50cy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTM4OT1pbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZGF4LmMtNDMwLX1cbmZzL2RheC5jOjQzMTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfZm9saW9fcmVzZXRfb3JkZXIpO1xuZnMvZGF4LmMtNDMyLVxuLS1cbmZzL2RheC5jPTc5MT1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZGF4LmMtODQzLX1cbmZzL2RheC5jOjg0NDpFWFBPUlRfU1lNQk9MX0dQTChkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSk7XG5mcy9kYXguYy04NDUtXG5mcy9kYXguYz04NDY9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuLS1cbmZzL2RheC5jLTg0OS19XG5mcy9kYXguYzo4NTA6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2xheW91dF9idXN5X3BhZ2UpO1xuZnMvZGF4LmMtODUxLVxuLS1cbmZzL2RheC5jPTkyNT12b2lkIGRheF9kZWxldGVfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy05NTItfVxuZnMvZGF4LmM6OTUzOkVYUE9SVF9TWU1CT0xfR1BMKGRheF9kZWxldGVfbWFwcGluZ19yYW5nZSk7XG5mcy9kYXguYy05NTQtXG4tLVxuZnMvZGF4LmM9OTc3PWludCBkYXhfYnJlYWtfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5mcy9kYXguYy0xMDAyLX1cbmZzL2RheC5jOjEwMDM6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dCk7XG5mcy9kYXguYy0xMDA0LVxuZnMvZGF4LmM9MTAwNT12b2lkIGRheF9icmVha19sYXlvdXRfZmluYWwoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9kYXguYy0xMDIzLX1cbmZzL2RheC5jOjEwMjQ6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dF9maW5hbCk7XG5mcy9kYXguYy0xMDI1LVxuLS1cbmZzL2RheC5jPTEyMzY9aW50IGRheF93cml0ZWJhY2tfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy0xMjc0LX1cbmZzL2RheC5jOjEyNzU6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3dyaXRlYmFja19tYXBwaW5nX3JhbmdlKTtcbmZzL2RheC5jLTEyNzYtXG4tLVxuZnMvZGF4LmM9MTQ5ND1pbnQgZGF4X2ZpbGVfdW5zaGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLFxuLS1cbmZzL2RheC5jLTE1MTItfVxuZnMvZGF4LmM6MTUxMzpFWFBPUlRfU1lNQk9MX0dQTChkYXhfZmlsZV91bnNoYXJlKTtcbmZzL2RheC5jLTE1MTQtXG4tLVxuZnMvZGF4LmM9MTU4Nj1pbnQgZGF4X3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXG4tLVxuZnMvZGF4LmMtMTYwMC19XG5mcy9kYXguYzoxNjAxOkVYUE9SVF9TWU1CT0xfR1BMKGRheF96ZXJvX3JhbmdlKTtcbmZzL2RheC5jLTE2MDItXG5mcy9kYXguYz0xNjAzPWludCBkYXhfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcbi0tXG5mcy9kYXguYy0xNjEzLX1cbmZzL2RheC5jOjE2MTQ6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3RydW5jYXRlX3BhZ2UpO1xuZnMvZGF4LmMtMTYxNS1cbi0tXG5mcy9kYXguYz0xNzQ0PWRheF9pb21hcF9ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9kYXguYy0xNzc4LX1cbmZzL2RheC5jOjE3Nzk6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2lvbWFwX3J3KTtcbmZzL2RheC5jLTE3ODAtXG4tLVxuZnMvZGF4LmM9MjEwOD12bV9mYXVsdF90IGRheF9pb21hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbmZzL2RheC5jLTIxMTgtfVxuZnMvZGF4LmM6MjExOTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfaW9tYXBfZmF1bHQpO1xuZnMvZGF4LmMtMjEyMC1cbi0tXG5mcy9kYXguYz0yMTc5PXZtX2ZhdWx0X3QgZGF4X2ZpbmlzaF9zeW5jX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxuZnMvZGF4LmMtMjE5MC19XG5mcy9kYXguYzoyMTkxOkVYUE9SVF9TWU1CT0xfR1BMKGRheF9maW5pc2hfc3luY19mYXVsdCk7XG5mcy9kYXguYy0yMTkyLVxuLS1cbmZzL2RheC5jPTIyNzA9aW50IGRheF9yZW1hcF9maWxlX3JhbmdlX3ByZXAoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4tLVxuZnMvZGF4LmMtMjI3Ny19XG5mcy9kYXguYzoyMjc4OkVYUE9SVF9TWU1CT0xfR1BMKGRheF9yZW1hcF9maWxlX3JhbmdlX3ByZXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NAoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiA2NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFYIEVudHJ5IFBvaW50IEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIERBWCBlbnRyeSBwb2ludHMuIEkgc2VlIHRoZSBjb3JlIG9uZXM6IGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBgZGF4X2lvbWFwX3J3YCwgYGRheF9pb21hcF9mYXVsdGAsIGBkYXhfYnJlYWtfbGF5b3V0YCwgYGRheF96ZXJvX3JhbmdlYCwgYW5kIGBkYXhfZmlsZV91bnNoYXJlYC4gSSYjMzk7bSBub3RpbmcgdGhlIGludGVybmFsIGNhbGxzOiBgZGF4X2lvbWFwX2ZhdWx0YCB1c2VzIGBkYXhfaW5zZXJ0X2VudHJ5YCB3aGljaCB0aGVuIGdvZXMgdG8gZWl0aGVyIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCBvciBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeWAuIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgIGFsc28gdXRpbGl6ZXMgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLiBUaGVuIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAgdXNlcyBgZGF4X2J1c3lfcGFnZWAsIGFuZCBgZGF4X2JyZWFrX2xheW91dGAgZG9lcyBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIHRoZW4gYGRheF9idXN5X3BhZ2VgLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGVudmlyb25tZW50LiBDYW4gdGhpcyBEQVggZnVuY3Rpb25hbGl0eSBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nIGxpa2UgUUVNVSBvciBHQ0U/IFllcywgaXQgY2FuLCB1c2luZyBwbWVtIGRldmljZXMuIFRoaW5rIGVtdWxhdGVkIG52ZGltbSwgcG1lbSBpbiBRRU1VLCByYW1kaXNrcywgYnJkIG9yIGEgYGRheF9wbWVtYCBkZXZpY2Ugd2l0aCBgZXh0NC94ZnMgLW8gZGF4YC4gVGhhdCYjMzk7cyBnb29kOyBpdCBpbmNyZWFzZXMgdGhlIGFjY2Vzc2liaWxpdHkgZm9yIHRlc3RpbmcuCgpJcyB0aGlzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzISBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdGhlIGxvZ2ljIGRlYWxpbmcgd2l0aCByYWRpeC10cmVlL3hhcnJheSBlbnRyeSBtYW5hZ2VtZW50IOKAkyBzcGVjaWZpY2FsbHksIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLCBhbmQgYGRheF9idXN5X3BhZ2VgIOKAkyBhbmQgdGhlIGdvYWwgaXMgdG8gcHJldmVudCBpbnZhbGlkIHBhZ2UvZm9saW8gcG9pbnRlciBjb252ZXJzaW9ucyBvbiB6ZXJvIGFuZCBlbXB0eSBlbnRyaWVzLiBJbXBvcnRhbnQgc3R1ZmYuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBtYWtlIHRoaXMgd29yay4gV2UmIzM5O3ZlIGdvdDogYEZTX0RBWGAgaXMgZnVuZGFtZW50YWwuIEl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUkVNT1ZFYCB3aGljaCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUExVR2AsIGFuZCBhbHNvIGBNTVVgLiBPa2F5LCBsZXQmIzM5O3Mga2VlcCB0cmFjayBvZiBhbGwgdGhvc2U6IGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBNRU1PUllfSE9UUExVR2AsIGBGU19JT01BUGAsIGBEQVhgLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGltcG9ydGFudCBzeW1ib2xzOgpHb29kIG5vbi1zdGF0aWMgc3ltYm9scyBhcmUsIGFzIG5vdGVkIGFib3ZlOiBgZGF4X2lvbWFwX2ZhdWx0YCwgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgYGRheF9kZWxldGVfbWFwcGluZ19yYW5nZWAsIGBkYXhfYnJlYWtfbGF5b3V0YCwgYW5kIGBkYXhfaW9tYXBfcndgLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmc6Ci0gICBXb3J0aEZ1enppbmc6IFRydWUgKHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCB0aGlzKS4KLSAgIEZvY3VzU3ltYm9sczogYGRheF9pb21hcF9mYXVsdGAsIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBgZGF4X2JyZWFrX2xheW91dGAsIGBkYXhfaW9tYXBfcndgCi0gICBFbmFibGVDb25maWdzOiBgRlNfREFYYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgTUVNT1JZX0hPVFBMVUdgLCBgRlNfSU9NQVBgLCBgREFYYAotICAgUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBidWcgZml4IGluIERBWCBmb2xpbyBjb252ZXJzaW9uIHdoZW4gaGFuZGxpbmcgemVybyBhbmQgZW1wdHkgREFYIGVudHJpZXMgaW4gYGZzL2RheC5jYC4gVGhpcyBpcyB0aGUgY29yZSBvZiBpdC4KCk9rYXksIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19EQVgmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtEQVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfaW9tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7ZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlJiMzNDssCiAgICAmIzM0O2RheF9icmVha19sYXlvdXQmIzM0OywKICAgICYjMzQ7ZGF4X2lvbWFwX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGludmFsaWQgZm9saW8vcGFnZSBjb252ZXJzaW9uIG9uIHplcm8gb3IgZW1wdHkgREFYIGVudHJpZXMgYnkgbW92aW5nIHRoZSBjYWxsIHRvIGRheF90b19mb2xpbygpIGFmdGVyIHRoZSB6ZXJvL2VtcHR5IGVudHJ5IGNoZWNrcyBpbiBkYXhfYXNzb2NpYXRlX2VudHJ5KCksIGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKSwgYW5kIGRheF9idXN5X3BhZ2UoKS4gVGhpcyBmaXhlcyBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVyaW5nIERBWCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBsYXlvdXQgYnJlYWtpbmcsIGFuZCBtYXBwaW5nIHRydW5jYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9pb21hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZGF4X2JyZWFrX2xheW91dCYjMzQ7LAogICAgJiMzNDtkYXhfaW9tYXBfcncmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgaW52YWxpZCBmb2xpby9wYWdlIGNvbnZlcnNpb24gb24gemVybyBvciBlbXB0eSBEQVggZW50cmllcyBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gZGF4X3RvX2ZvbGlvKCkgYWZ0ZXIgdGhlIHplcm8vZW1wdHkgZW50cnkgY2hlY2tzIGluIGRheF9hc3NvY2lhdGVfZW50cnkoKSwgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSgpLCBhbmQgZGF4X2J1c3lfcGFnZSgpLiBUaGlzIGZpeGVzIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdXJpbmcgREFYIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIGxheW91dCBicmVha2luZywgYW5kIG1hcHBpbmcgdHJ1bmNhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpbiBgZGF4X2Fzc29jaWF0ZV9lbnRyeSgpYCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKWAsIGFuZCBgZGF4X2J1c3lfcGFnZSgpYCBzbyB0aGF0IGl0IGlzIG9ubHkgZXhlY3V0ZWQgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgYGVudHJ5YCBpcyBuZWl0aGVyIGEgemVybyBlbnRyeSBub3IgYW4gZW1wdHkgZW50cnkgKGBkYXhfaXNfemVyb19lbnRyeSgpYCAvIGBkYXhfaXNfZW1wdHlfZW50cnkoKWApLiBcblxuVGhpcyBjaGFuZ2UgYXZvaWRzIGNhbGN1bGF0aW5nIGludmFsaWQgZm9saW8vcGFnZSBwb2ludGVycyBmcm9tIHNwZWNpYWwgREFYIGVudHJpZXMgKHdoaWNoIGNvdWxkIGxlYWQgdG8gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdXQtb2YtYm91bmRzIHN0cnVjdCBwYWdlIGFjY2Vzc2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gaW52YWxpZCBwb2ludGVyIGFyaXRobWV0aWMgb3IgaW52YWxpZCBwYWdlIGFjY2Vzc2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgY2hlY2tzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxZjVlZTMxZjllMGY0Y2RiYzU3YjA3NTNmZGQ2Y2RjNThmMTY5ODgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDA5OjEzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguYwppbmRleCA2YmE1MDE0MmVlYjJmLi45MDMwNTk5NmIxMDY0IDEwMDY0NAotLS0gYS9mcy9kYXguYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kYXguYwpAQCAtNDgwLDExICYjNDM7NDgwLDEyIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgYm9vbCBzaGFyZWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gZGF4X2VudHJ5X3NpemUoZW50cnkpLCBpbmRleDsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKIAogCWlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSkKIAkJcmV0dXJuOwogCiYjNDM7CWZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTsKIAlpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyAmYW1wOyB+KHNpemUgLSAxKSk7CiAJaWYgKHNoYXJlZCAmYW1wOyZhbXA7IChmb2xpby0mZ3Q7bWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHsKIAkJaWYgKGZvbGlvLSZndDttYXBwaW5nKQpAQCAtNTA1LDIxICYjNDM7NTA2LDIwIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogc3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJYm9vbCB0cnVuYykKIHsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTsKLQogCWlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSkKIAkJcmV0dXJuOwogCi0JZGF4X2ZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CWRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSkKIHsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKIAogCWlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwogCWlmIChmb2xpb19yZWZfY291bnQoZm9saW8pIC0gZm9saW9fbWFwY291bnQoZm9saW8pKQogCQlyZXR1cm4gJmFtcDtmb2xpby0mZ3Q7cGFnZTsKIAllbHNlCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYGZzL2RheC5jYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciYjMzk7cyBhc2tpbmcgaWYgdGhpcyBwYXRjaCB0byBgZnMvZGF4LmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgcmlzayBhc3Nlc3NtZW50IGZpcnN0LiBUaGUgcmVxdWVzdCBpcyBhIHByZXR0eSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgUUEgdGhpbmcg4oCTIGV2YWx1YXRpbmcgYSBwYXRjaCBkaWZmIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLCBwcmltYXJpbHkgd2VpZ2hpbmcgdGhvc2Ugcmlza3MgYWdhaW5zdCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIEl0JiMzOTtzIGEgbG93LXNldmVyaXR5LCBiZW5pZ24gc2NlbmFyaW8uIEZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIHRvdGFsbHkgc2FmZSB0byBwcm9jZWVkOyBubyBleHBsb2l0IGdlbmVyYXRpb24gb3IgYW55dGhpbmcgbWFsaWNpb3VzIGludm9sdmVkLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggaXRzZWxmLiBJIHNlZSBhIGBkaWZmYCBoZXJlLCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHNldmVyYWwgZnVuY3Rpb25zOiBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYC4gVGhlIG1haW4gdGhpbmcgc2VlbXMgdG8gYmUgdGhhdCB0aGV5JiMzOTtyZSByZW9yZGVyaW5nIHNvbWUgbGluZXMgYW5kIGRlY2xhcmluZyBgc3RydWN0IGZvbGlvICpmb2xpb2AgYmVmb3JlIGl0cyB1c2FnZSBpbiB0aGVzZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBgZm9saW9gIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCBkaXJlY3RseSB3aGVuIGNhbGxpbmcgYGRheF90b19mb2xpbyhlbnRyeSlgLCBidXQgbm93IGl0JiMzOTtzIGRlY2xhcmVkIHNlcGFyYXRlbHkuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0cnlpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KCkxldCBtZSBzZWUgd2hhdCBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaXMgZG9pbmcuIExldCBtZSB1c2UgZ3JlcHBlciBvciBtYXliZSBqdXN0IGByZWFkLWZpbGVgIHRvIGNoZWNrIGBmcy9kYXguY2AgdG8gdW5kZXJzdGFuZCB0aGUgYGRheF90b19mb2xpb2AgZnVuY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXhfdG9fZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz02Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxuLS1cbmZzL2RheC5jLTcxLVxuZnMvZGF4LmM6NzI6c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtNzMte1xuLS1cbmZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcbmZzL2RheC5jLTQ1OS17XG5mcy9kYXguYzo0NjA6XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbmZzL2RheC5jLTQ2MS1cdGludCBvcmRlciA9IGRheF9lbnRyeV9vcmRlcihlbnRyeSk7XG4tLVxuZnMvZGF4LmM9NDc4PXN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTQ4Ny1cbmZzL2RheC5jOjQ4ODpcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbmZzL2RheC5jLTQ4OS1cdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFx1MDAyNiB+KHNpemUgLSAxKSk7XG4tLVxuZnMvZGF4LmMtNDk5LVx0XHRkYXhfZm9saW9faW5pdChlbnRyeSk7XG5mcy9kYXguYzo1MDA6XHRcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbmZzL2RheC5jLTUwMS1cdFx0Zm9saW8tXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XG4tLVxuZnMvZGF4LmM9NTA2PXN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTUxMS1cbmZzL2RheC5jOjUxMjpcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XG5mcy9kYXguYy01MTMtfVxuLS1cbmZzL2RheC5jPTUxNT1zdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXG4tLVxuZnMvZGF4LmMtNTIxLVxuZnMvZGF4LmM6NTIyOlx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuZnMvZGF4LmMtNTIzLVx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSBmb2xpb19tYXBjb3VudChmb2xpbykpXG4tLVxuZnMvZGF4LmM9MTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfZmF1bHRfaXRlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xODg0LVxuZnMvZGF4LmM6MTg4NTpcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKCplbnRyeSk7XG5mcy9kYXguYy0xODg2LVx0aWYgKGRheF9mYXVsdF9pc19zeW5jaHJvbm91cyhpdGVyLCB2bWYtXHUwMDNldm1hKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZGF4X3RvX2ZvbGlvYCBmdW5jdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBsaW5lcyA2NS0xMDAgb2YgYGZzL2RheC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBsaWtlbHkgcmVzaWRlcy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBkaXJlY3QgYWNjZXNzIChEQVgpIGludGVyYWN0cyB3aXRoIGZvbGlvIHN0cnVjdHVyZXMuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBEQVggYWRkcmVzcyBzcGFjZSBhbmQgdGhlIHBoeXNpY2FsIG1lbW9yeSByZXByZXNlbnRlZCBieSBmb2xpb3MuIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCB0byBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IGluIGhpZ2gtcGVyZm9ybWFuY2Ugc3RvcmFnZSBzY2VuYXJpb3MsIGFuZCBzbyBpdCBzaG91bGQgaG9wZWZ1bGx5IGJlIGlsbHVtaW5hdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjU6XHQjZGVmaW5lIERBWF9FTVBUWVx0KDFVTCBcdTAwM2NcdTAwM2MgMylcbiAgNjY6XHRcbiAgNjc6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxuICA2ODpcdHtcbiAgNjk6XHRcdHJldHVybiB4YV90b192YWx1ZShlbnRyeSkgXHUwMDNlXHUwMDNlIERBWF9TSElGVDtcbiAgNzA6XHR9XG4gIDcxOlx0XG4gIDcyOlx0c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxuICA3MzpcdHtcbiAgNzQ6XHRcdHJldHVybiBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKGRheF90b19wZm4oZW50cnkpKSk7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyB2b2lkICpkYXhfbWFrZV9lbnRyeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiAgNzg6XHR7XG4gIDc5Olx0XHRyZXR1cm4geGFfbWtfdmFsdWUoZmxhZ3MgfCAocGZuIFx1MDAzY1x1MDAzYyBEQVhfU0hJRlQpKTtcbiAgODA6XHR9XG4gIDgxOlx0XG4gIDgyOlx0c3RhdGljIGJvb2wgZGF4X2lzX2xvY2tlZCh2b2lkICplbnRyeSlcbiAgODM6XHR7XG4gIDg0Olx0XHRyZXR1cm4geGFfdG9fdmFsdWUoZW50cnkpIFx1MDAyNiBEQVhfTE9DS0VEO1xuICA4NTpcdH1cbiAgODY6XHRcbiAgODc6XHRzdGF0aWMgdW5zaWduZWQgaW50IGRheF9lbnRyeV9vcmRlcih2b2lkICplbnRyeSlcbiAgODg6XHR7XG4gIDg5Olx0XHRpZiAoeGFfdG9fdmFsdWUoZW50cnkpIFx1MDAyNiBEQVhfUE1EKVxuICA5MDpcdFx0XHRyZXR1cm4gUE1EX09SREVSO1xuICA5MTpcdFx0cmV0dXJuIDA7XG4gIDkyOlx0fVxuICA5MzpcdFxuICA5NDpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF9pc19wbWRfZW50cnkodm9pZCAqZW50cnkpXG4gIDk1Olx0e1xuICA5NjpcdFx0cmV0dXJuIHhhX3RvX3ZhbHVlKGVudHJ5KSBcdTAwMjYgREFYX1BNRDtcbiAgOTc6XHR9XG4gIDk4Olx0XG4gIDk5Olx0c3RhdGljIGJvb2wgZGF4X2lzX3B0ZV9lbnRyeSh2b2lkICplbnRyeSlcbiAxMDA6XHR7XG4gMTAxOlx0XHRyZXR1cm4gISh4YV90b192YWx1ZShlbnRyeSkgXHUwMDI2IERBWF9QTUQpO1xuIDEwMjpcdH1cbiAxMDM6XHRcbiAxMDQ6XHRzdGF0aWMgaW50IGRheF9pc196ZXJvX2VudHJ5KHZvaWQgKmVudHJ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTA3CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZpeCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBhcHBlYXJzIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gaG93IHdlIGhhbmRsZSBEQVggZW50cmllcywgc3BlY2lmaWNhbGx5LCB3aGVuIHRob3NlIGVudHJpZXMgYXJlIHplcm8gb3IgZW1wdHkuIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaXMgYmVpbmcgY2FsbGVkICpiZWZvcmUqIHdlJiMzOTtyZSBjaGVja2luZyBpZiBgZW50cnlgIGlzIGEgemVybyBvciBlbXB0eSBlbnRyeS4gVGhpcyBtZWFucyB3ZSBjb3VsZCBiZSB0cnlpbmcgdG8gY29tcHV0ZSBhIGZvbGlvLCBhbmQgdGhlcmVmb3JlIGRlcmVmZXJlbmNpbmcgYSBwb3RlbnRpYWxseSBpbnZhbGlkIHBhZ2UsIGxlYWRpbmcgdG8gcG9pbnRlciBkZXJlZmVyZW5jZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgZXZlbiBhIGNyYXNoIGlmIHdlIHRyeSB0byBhY2Nlc3MgYSBib2d1cyBgc3RydWN0IHBhZ2VgLgoKVGhlIHNvbHV0aW9uLCB3aGljaCBJIGFncmVlIHdpdGgsIGlzIHRvIG1vdmUgdGhlIGBkYXhfdG9fZm9saW8oZW50cnkpYCBjYWxsICphZnRlciogdGhlIGBpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpIHJldHVybjtgIGNoZWNrLiBUaGlzIHByZXZlbnRzIHRoZSBjb21wdXRhdGlvbiBhbmQgcG90ZW50aWFsIGRlcmVmZXJlbmNlIG9uIGludmFsaWQgZW50cmllcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBvciBpbnRlcmFjdHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIEtNU0FOIGNvbWVzIGludG8gcGxheS4gTGV0JiMzOTtzIG1ldGhvZGljYWxseSBjaGVjazoKCiogICBEb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8sIG5vdCBhdCBhbGwuCiogICBEb2VzIGl0IGludHJvZHVjZSBvciBtb2RpZnkgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBvciBwb3RlbnRpYWxseSBjcmVhdGUgaW5mb3JtYXRpb24gbGVha3M/IE5vLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9mIHRoYXQuIFRoZSBgZm9saW9gIHZhcmlhYmxlIGdldHMgYXNzaWduZWQgYSB2YWx1ZSBvbmx5ICphZnRlciogdGhlIGd1YXJkIGNoZWNrLCBhbmQgdGhlIGBlbnRyeWAgaXMgYW4gYXJndW1lbnQgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBpbml0aWFsaXplZCBiZWZvcmUuCiogICBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSwgYXMgbWVudGlvbmVkLCB0aGUgYGZvbGlvYCBpcyBvbmx5IGFzc2lnbmVkIGFmdGVyIHRoZSBjaGVjayBhbmQgdGhlIGVudHJ5IGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiogICBVbHRpbWF0ZWx5LCB0aGUgYnVnIGZpeGVkIGlzIGFib3V0IGNvbXB1dGluZyBhIGZvbGlvIHBvaW50ZXIgZnJvbSBzcGVjaWFsIHplcm8vZW1wdHkgZW50cmllcywgc28gYW4gaW52YWxpZCBwb2ludGVyIGNhbGN1bGF0aW9uLgoqICAgRGlkIEtNU0FOIGRldGVjdCBpdD8gTm8uCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgcG9pbnRlci9jb250cm9sIGZsb3cgZml4LiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIG1vcmUgb2YgYSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBLQVNBTiBzaG91bGQgaGFuZGxlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIHJlYXNvbmluZywgZXNwZWNpYWxseSByZWdhcmRpbmcgd2h5IHdlICpkb24mIzM5O3QqIG5lZWQgS01TQU4gaGVyZS4gV2UgbmVlZCBhIGNsZWFyIGV4cGxhbmF0aW9uIHRoYXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtNU0FOOgoKKiAgICoqS2V5IERpc3RpbmN0aW9uKio6IFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgYWxyZWFkeSBlZmZlY3RpdmVseSBjYXRjaCB0aG9zZSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcywgb3V0LW9mLWJvdW5kcyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGxvY2tpbmcgcHJvYmxlbXMsIGV0Yy4gVGhhdCYjMzk7cyB3aGF0IGl0JiMzOTtzIGJ1aWx0IGZvci4KKiAgIEtNU0FOJiMzOTtzIHNwZWNpZmljIHJvbGUgaXMgdG8gZGV0ZWN0ICpyZWFkcyogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGNhdGNoIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGF0JiMzOTtzIGl0cyBuaWNoZS4KKiAgIEluIHRoaXMgcGFydGljdWxhciBwYXRjaCwgYWxsIHdlJiMzOTtyZSBkb2luZyBpcyByZWFycmFuZ2luZyB0aGUgZXZhbHVhdGlvbiBvZiBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgdG8gaGFwcGVuICphZnRlciogdGhlIGd1YXJkLiBJdCYjMzk7cyBpbiBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYC4KKiAgIFdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgb3IgYWxsb2NhdGluZyBhbnkgbmV3IG1lbW9yeSwgbGVhdmluZyBhbnkgbWVtb3J5IHVuaW5pdGlhbGl6ZWQsIGNvcHlpbmcgYW55IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCByZWFkcy4KClRoaXMgaXMgYWxsIHN0YW5kYXJkIG1lbW9yeSBhY2Nlc3MgYW5kIGNvbnRyb2wgZmxvdy4gVGhlcmUmIzM5O3Mgbm90aGluZyBLTVNBTi1zcGVjaWZpYyBhYm91dCBpdC4KCk9rYXksIHRoYXQmIzM5O3MgY29tcHJlaGVuc2l2ZS4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaW4gYGRheF9hc3NvY2lhdGVfZW50cnkoKWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KClgLCBhbmQgYGRheF9idXN5X3BhZ2UoKWAgc28gdGhhdCBpdCBpcyBvbmx5IGV4ZWN1dGVkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGBlbnRyeWAgaXMgbmVpdGhlciBhIHplcm8gZW50cnkgbm9yIGFuIGVtcHR5IGVudHJ5IChgZGF4X2lzX3plcm9fZW50cnkoKWAgLyBgZGF4X2lzX2VtcHR5X2VudHJ5KClgKS4gXG5cblRoaXMgY2hhbmdlIGF2b2lkcyBjYWxjdWxhdGluZyBpbnZhbGlkIGZvbGlvL3BhZ2UgcG9pbnRlcnMgZnJvbSBzcGVjaWFsIERBWCBlbnRyaWVzICh3aGljaCBjb3VsZCBsZWFkIHRvIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBzdHJ1Y3QgcGFnZSBhY2Nlc3NlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlciBhcml0aG1ldGljIG9yIGludmFsaWQgcGFnZSBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGNoZWNrcywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRheF90b19mb2xpbyhlbnRyeSlgIGluIGBkYXhfYXNzb2NpYXRlX2VudHJ5KClgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSgpYCwgYW5kIGBkYXhfYnVzeV9wYWdlKClgIHNvIHRoYXQgaXQgaXMgb25seSBleGVjdXRlZCBhZnRlciB2ZXJpZnlpbmcgdGhhdCBgZW50cnlgIGlzIG5laXRoZXIgYSB6ZXJvIGVudHJ5IG5vciBhbiBlbXB0eSBlbnRyeSAoYGRheF9pc196ZXJvX2VudHJ5KClgIC8gYGRheF9pc19lbXB0eV9lbnRyeSgpYCkuIFxuXG5UaGlzIGNoYW5nZSBhdm9pZHMgY2FsY3VsYXRpbmcgaW52YWxpZCBmb2xpby9wYWdlIHBvaW50ZXJzIGZyb20gc3BlY2lhbCBEQVggZW50cmllcyAod2hpY2ggY291bGQgbGVhZCB0byBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgc3RydWN0IHBhZ2UgYWNjZXNzZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYyBvciBpbnZhbGlkIHBhZ2UgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjaGVja3MsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6MTMuMjA0OTkwMjI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3Mzg0MDI4ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX0RBWFwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiREFYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2lvbWFwX2ZhdWx0XCIsXG4gICAgXCJkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZVwiLFxuICAgIFwiZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlXCIsXG4gICAgXCJkYXhfYnJlYWtfbGF5b3V0XCIsXG4gICAgXCJkYXhfaW9tYXBfcndcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpbiBgZGF4X2Fzc29jaWF0ZV9lbnRyeSgpYCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKWAsIGFuZCBgZGF4X2J1c3lfcGFnZSgpYCBzbyB0aGF0IGl0IGlzIG9ubHkgZXhlY3V0ZWQgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgYGVudHJ5YCBpcyBuZWl0aGVyIGEgemVybyBlbnRyeSBub3IgYW4gZW1wdHkgZW50cnkgKGBkYXhfaXNfemVyb19lbnRyeSgpYCAvIGBkYXhfaXNfZW1wdHlfZW50cnkoKWApLiBcXG5cXG5UaGlzIGNoYW5nZSBhdm9pZHMgY2FsY3VsYXRpbmcgaW52YWxpZCBmb2xpby9wYWdlIHBvaW50ZXJzIGZyb20gc3BlY2lhbCBEQVggZW50cmllcyAod2hpY2ggY291bGQgbGVhZCB0byBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgc3RydWN0IHBhZ2UgYWNjZXNzZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYyBvciBpbnZhbGlkIHBhZ2UgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjaGVja3MsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwcmV2ZW50cyBpbnZhbGlkIGZvbGlvL3BhZ2UgY29udmVyc2lvbiBvbiB6ZXJvIG9yIGVtcHR5IERBWCBlbnRyaWVzIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBkYXhfdG9fZm9saW8oKSBhZnRlciB0aGUgemVyby9lbXB0eSBlbnRyeSBjaGVja3MgaW4gZGF4X2Fzc29jaWF0ZV9lbnRyeSgpLCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KCksIGFuZCBkYXhfYnVzeV9wYWdlKCkuIFRoaXMgZml4ZXMgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1cmluZyBEQVggcGFnZSBmYXVsdCBoYW5kbGluZywgbGF5b3V0IGJyZWFraW5nLCBhbmQgbWFwcGluZyB0cnVuY2F0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxMzoxMy4yMDQ5OTgwNDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDQ0MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMxZjVlZTMxZjllMGY0Y2RiYzU3YjA3NTNmZGQ2Y2RjNThmMTY5ODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAwOToxMzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jXFxuaW5kZXggNmJhNTAxNDJlZWIyZi4uOTAzMDU5OTZiMTA2NCAxMDA2NDRcXG4tLS0gYS9mcy9kYXguY1xcbisrKyBiL2ZzL2RheC5jXFxuQEAgLTQ4MCwxMSArNDgwLDEyIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGJvb2wgc2hhcmVkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbitcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4gXFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIFxcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFxcdTAwMjYgfihzaXplIC0gMSkpO1xcbiBcXHRpZiAoc2hhcmVkIFxcdTAwMjZcXHUwMDI2IChmb2xpby1cXHUwMDNlbWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHtcXG4gXFx0XFx0aWYgKGZvbGlvLVxcdTAwM2VtYXBwaW5nKVxcbkBAIC01MDUsMjEgKzUwNiwyMCBAQCBzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gc3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdGJvb2wgdHJ1bmMpXFxuIHtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuLVxcbiBcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGRheF9mb2xpb19wdXQoZm9saW8pO1xcbitcXHRkYXhfZm9saW9fcHV0KGRheF90b19mb2xpbyhlbnRyeSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXFxuIHtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcbiBcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiBcXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZTtcXG4gXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxMzoxMy42MzYxMjkxMTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM3NDQ2NzM0NjA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19EQVhcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIkRBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRheF9pb21hcF9mYXVsdFwiLFxuICAgIFwiZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VcIixcbiAgICBcImRheF9kZWxldGVfbWFwcGluZ19yYW5nZVwiLFxuICAgIFwiZGF4X2JyZWFrX2xheW91dFwiLFxuICAgIFwiZGF4X2lvbWFwX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgaW52YWxpZCBmb2xpby9wYWdlIGNvbnZlcnNpb24gb24gemVybyBvciBlbXB0eSBEQVggZW50cmllcyBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gZGF4X3RvX2ZvbGlvKCkgYWZ0ZXIgdGhlIHplcm8vZW1wdHkgZW50cnkgY2hlY2tzIGluIGRheF9hc3NvY2lhdGVfZW50cnkoKSwgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSgpLCBhbmQgZGF4X2J1c3lfcGFnZSgpLiBUaGlzIGZpeGVzIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdXJpbmcgREFYIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIGxheW91dCBicmVha2luZywgYW5kIG1hcHBpbmcgdHJ1bmNhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzFmNWVlMzFmOWUwZjRjZGJjNTdiMDc1M2ZkZDZjZGM1OGYxNjk4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDk6MTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jXG5pbmRleCA2YmE1MDE0MmVlYjJmLi45MDMwNTk5NmIxMDY0IDEwMDY0NFxuLS0tIGEvZnMvZGF4LmNcbisrKyBiL2ZzL2RheC5jXG5AQCAtNDgwLDExICs0ODAsMTIgQEAgc3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGJvb2wgc2hhcmVkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gXHRcdHJldHVybjtcbiBcbitcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiBcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFx1MDAyNiB+KHNpemUgLSAxKSk7XG4gXHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiAoZm9saW8tXHUwMDNlbWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHtcbiBcdFx0aWYgKGZvbGlvLVx1MDAzZW1hcHBpbmcpXG5AQCAtNTA1LDIxICs1MDYsMjAgQEAgc3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gc3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHRib29sIHRydW5jKVxuIHtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuLVxuIFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRkYXhfZm9saW9fcHV0KGZvbGlvKTtcbitcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuIFx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSBmb2xpb19tYXBjb3VudChmb2xpbykpXG4gXHRcdHJldHVybiBcdTAwMjZmb2xpby1cdTAwM2VwYWdlO1xuIFx0ZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6MTMuNjM2MTMwNzczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzMTcwMzMwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBpZiBzbywgd2hhdCBvdXIgdGFyZ2V0IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3MgcHJvbWlzaW5nLCBnaXZlbiB0aGF0IGl0J3MgdG91Y2hpbmcgYGZzL2RheC5jYCwgd2hpY2ggaXMgYWx3YXlzIGFuIGludGVyZXN0aW5nIGFyZWEuXG5cblRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIGlzIHdpdGhpbiB0aGUgYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeWAsIGFuZCBgZGF4X2J1c3lfcGFnZWAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBsaW5lIGBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtgIGlzIG5vdyBndWFyZGVkIGJ5IGEgY2hlY2s6IGBpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpIHJldHVybjtgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgY291bGQgbGVhZCB0byBhIGNyYXNoLCBkZXJlZmVyZW5jZSBpbnZhbGlkIG1lbW9yeSwgb3IgcGVyZm9ybSBhbiBpbGxlZ2FsIGNvbnZlcnNpb24gaWYgdGhlIGBlbnRyeWAgdmFsdWUgaXMgZWl0aGVyIHplcm8gb3IgZW1wdHkuIEl0IHN1Z2dlc3RzIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZSBpZiB0aG9zZSBjaGVja3Mgd2VyZW4ndCBpbiBwbGFjZS5cblxuU28sIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgZnVsbHksIEknbGwgbmVlZCB0byBleHBsb3JlIGBmcy9kYXguY2AgYXJvdW5kIGxpbmVzIDQ3MC01MzAuIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBhbmQgZ2V0IGEgZmVlbCBmb3IgaG93IGBlbnRyeWAgaXMgaGFuZGxlZCBpbiBnZW5lcmFsLiBUaGlzIHNob3VsZCBoZWxwIG1lIGlkZW50aWZ5IGdvb2QgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6NTEuOTUzMTY1OTYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RheC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2NTpcXHRcXHQgKiBkYXhfZm9saW9fcHV0KCkgd2hlbiB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZWlyXFxuIDQ2NjpcXHRcXHQgKiBmaW5hbCBtYXBwaW5nLlxcbiA0Njc6XFx0XFx0ICovXFxuIDQ2ODpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fb3JkZXIoZm9saW8pKTtcXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCkge1xcbiA0NzE6XFx0XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb3JkZXIpO1xcbiA0NzI6XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSlcXG4gNDczOlxcdFxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QpO1xcbiA0NzQ6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbiA0NzU6XFx0XFx0fVxcbiA0NzY6XFx0fVxcbiA0Nzc6XFx0XFxuIDQ3ODpcXHRzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gNDc5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA0ODA6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBib29sIHNoYXJlZClcXG4gNDgxOlxcdHtcXG4gNDgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XFxuIDQ4MzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIDQ4NjpcXHRcXHRcXHRyZXR1cm47XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdFxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNDg5OlxcdFxcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFxcdTAwMjYgfihzaXplIC0gMSkpO1xcbiA0OTA6XFx0XFx0aWYgKHNoYXJlZCBcXHUwMDI2XFx1MDAyNiAoZm9saW8tXFx1MDAzZW1hcHBpbmcgfHwgZGF4X2ZvbGlvX2lzX3NoYXJlZChmb2xpbykpKSB7XFxuIDQ5MTpcXHRcXHRcXHRpZiAoZm9saW8tXFx1MDAzZW1hcHBpbmcpXFxuIDQ5MjpcXHRcXHRcXHRcXHRkYXhfZm9saW9fbWFrZV9zaGFyZWQoZm9saW8pO1xcbiA0OTM6XFx0XFxuIDQ5NDpcXHRcXHRcXHRXQVJOX09OX09OQ0UoIWZvbGlvLVxcdTAwM2VzaGFyZSk7XFxuIDQ5NTpcXHRcXHRcXHRXQVJOX09OX09OQ0UoZGF4X2VudHJ5X29yZGVyKGVudHJ5KSAhPSBmb2xpb19vcmRlcihmb2xpbykpO1xcbiA0OTY6XFx0XFx0XFx0Zm9saW8tXFx1MDAzZXNoYXJlKys7XFxuIDQ5NzpcXHRcXHR9IGVsc2Uge1xcbiA0OTg6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvLVxcdTAwM2VtYXBwaW5nKTtcXG4gNDk5OlxcdFxcdFxcdGRheF9mb2xpb19pbml0KGVudHJ5KTtcXG4gNTAwOlxcdFxcdFxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNTAxOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VtYXBwaW5nID0gbWFwcGluZztcXG4gNTAyOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VpbmRleCA9IGluZGV4O1xcbiA1MDM6XFx0XFx0fVxcbiA1MDQ6XFx0fVxcbiA1MDU6XFx0XFxuIDUwNjpcXHRzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gNTA3OlxcdFxcdFxcdFxcdFxcdGJvb2wgdHJ1bmMpXFxuIDUwODpcXHR7XFxuIDUwOTpcXHRcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIDUxMDpcXHRcXHRcXHRyZXR1cm47XFxuIDUxMTpcXHRcXG4gNTEyOlxcdFxcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XFxuIDUxMzpcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcXG4gNTE2OlxcdHtcXG4gNTE3OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcXG4gNTIwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIDUyMzpcXHRcXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcXG4gNTI0OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2U7XFxuIDUyNTpcXHRcXHRlbHNlXFxuIDUyNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTI3OlxcdH1cXG4gNTI4OlxcdFxcbiA1Mjk6XFx0LyoqXFxuIDUzMDpcXHQgKiBkYXhfbG9ja19mb2xpbyAtIExvY2sgdGhlIERBWCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGEgZm9saW9cXG4gNTMxOlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvIHdob3NlIGVudHJ5IHdlIHdhbnQgdG8gbG9ja1xcbiA1MzI6XFx0ICpcXG4gNTMzOlxcdCAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC5cXG4gNTM0OlxcdCAqIFJldHVybjogQSBjb29raWUgdG8gcGFzcyB0byBkYXhfdW5sb2NrX2ZvbGlvKCkgb3IgMCBpZiB0aGUgZW50cnkgY291bGRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6NTEuOTUzMzEwODkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU2MTIwMTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgZGF4X3RvX2ZvbGlvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZGF4X3RvX2ZvbGlvYCBmdW5jdGlvbiBvciBzY3JpcHQgaXMgYWxsIGFib3V0LiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIGl0J3MgKnVzZWQqLiBJJ2xsIGp1bXAgcmlnaHQgaW50byBncmVwcGluZyBmb3IgdGhlIHRlcm0gXCJkYXhfdG9fZm9saW9cIiB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgb3ZlcnZpZXcgb2YgaG93IGl0J3MgaW52b2tlZCwgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgd2hhdCBraW5kIG9mIGlucHV0cyBhbmQgb3V0cHV0cyBpdCdzIGRlYWxpbmcgd2l0aC4gVGhhdCBjb250ZXh0IGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIEl0IHNob3VsZCBnaXZlIG1lIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6NTguNTE0NTE0Nzg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTc0OTk3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF4X3RvX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTY3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF90b19wZm4odm9pZCAqZW50cnkpXFxuLS1cXG5mcy9kYXguYy03MS1cXG5mcy9kYXguYzo3MjpzdGF0aWMgc3RydWN0IGZvbGlvICpkYXhfdG9fZm9saW8odm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNzMte1xcbi0tXFxuZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTQ1OS17XFxuZnMvZGF4LmM6NDYwOlxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbmZzL2RheC5jLTQ2MS1cXHRpbnQgb3JkZXIgPSBkYXhfZW50cnlfb3JkZXIoZW50cnkpO1xcbi0tXFxuZnMvZGF4LmM9NDc4PXN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtNDg3LVxcbmZzL2RheC5jOjQ4ODpcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuZnMvZGF4LmMtNDg5LVxcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFxcdTAwMjYgfihzaXplIC0gMSkpO1xcbi0tXFxuZnMvZGF4LmMtNDk5LVxcdFxcdGRheF9mb2xpb19pbml0KGVudHJ5KTtcXG5mcy9kYXguYzo1MDA6XFx0XFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbmZzL2RheC5jLTUwMS1cXHRcXHRmb2xpby1cXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XFxuLS1cXG5mcy9kYXguYz01MDY9c3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9kYXguYy01MTEtXFxuZnMvZGF4LmM6NTEyOlxcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XFxuZnMvZGF4LmMtNTEzLX1cXG4tLVxcbmZzL2RheC5jPTUxNT1zdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXFxuLS1cXG5mcy9kYXguYy01MjEtXFxuZnMvZGF4LmM6NTIyOlxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG5mcy9kYXguYy01MjMtXFx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSBmb2xpb19tYXBjb3VudChmb2xpbykpXFxuLS1cXG5mcy9kYXguYz0xODQyPXN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9pdGVyKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTg4NC1cXG5mcy9kYXguYzoxODg1OlxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKCplbnRyeSk7XFxuZnMvZGF4LmMtMTg4Ni1cXHRpZiAoZGF4X2ZhdWx0X2lzX3N5bmNocm9ub3VzKGl0ZXIsIHZtZi1cXHUwMDNldm1hKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MDAuMzMyMDIwNzk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY5ODg4NDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgYGZzL2RheC5jYDpcblxuKipEaXZpbmcgaW50byB0aGUgREFYIERldGFpbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDYwLTgwIG9mIGBmcy9kYXguY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgd2hlcmUgd2UncmUgc2VlaW5nIHNvbWUgY29yZSBEQVggKERpcmVjdCBBY2Nlc3MpIGZ1bmN0aW9uYWxpdHkga2lja2luZyBpbiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGFjdGlvbi4gSSdtIGltbWVkaWF0ZWx5IHNjYW5uaW5nIGZvciB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBmdW5jdGlvbj8gV2hhdCdzIHRoZSBjYWxsaW5nIHBvaW50PyBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIGlzIHRoYXQgdGhlc2UgbGluZXMgYXJlIGxpa2VseSBoYW5kbGluZyBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5IGZyb20gYSBmaWxlIHN5c3RlbSBwZXJzcGVjdGl2ZS5cblxuT2theSwgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvZGUncyBvYmplY3RpdmUuIFdlIGFyZSBsaWtlbHkgbG9va2luZyBhdCBmaWxlIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gZ2l2ZSB1c2VybGFuZCB0aGUgYWJpbGl0eSB0byBhY2Nlc3MgZGF0YSBkaXJlY3RseSBmcm9tIHBlcnNpc3RlbnQgbWVtb3J5LiBUaGUgZGV0YWlscyBhcmUgbW9zdCBwcm9iYWJseSBhYm91dCBob3cgREFYIGludGVncmF0ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2Ugb3Igc29tZSBmb3JtIG9mIG1lbW9yeSBtYXBwaW5nLiBJJ20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIGBpb21hcGAsIHBvdGVudGlhbGx5IHNvbWUgZGlyZWN0IEkvTyBsb2dpYywgb3IgbWF5YmUgZXZlbiBhZGRyZXNzaW5nIGNoYWxsZW5nZXMgYXJvdW5kIHBhZ2UgZmF1bHRzIGFuZCBjb2hlcmVuY2UuIEkgYWxzbyBhc3N1bWUgdGhlcmUgYXJlIGNoZWNrcyBmb3IgcGVybWlzc2lvbnMgYW5kIGRhdGEgYWxpZ25tZW50LiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nLCB0aGF0J3MgY3J1Y2lhbCBoZXJlLCBlc3BlY2lhbGx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIERBWCBhY2Nlc3MgcGF0aC5cblxuTm93IEkgYW0gZ29pbmcgdG8gc2VlIGlmIGFueSBvZiB0aGUgY2hlY2tzIGFuZCBkYXRhIG1hcHBpbmdzIGFyZSBmYW1pbGlhciwgb3IgaGF2ZSBjaGFuZ2VkIHJlY2VudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MTAuMDMwOTA4MDI4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RheC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdCAqL1xcbiAgNjE6XFx0I2RlZmluZSBEQVhfU0hJRlRcXHQoNClcXG4gIDYyOlxcdCNkZWZpbmUgREFYX0xPQ0tFRFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDYzOlxcdCNkZWZpbmUgREFYX1BNRFxcdFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMSlcXG4gIDY0OlxcdCNkZWZpbmUgREFYX1pFUk9fUEFHRVxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMilcXG4gIDY1OlxcdCNkZWZpbmUgREFYX0VNUFRZXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgNjY6XFx0XFxuICA2NzpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxcbiAgNjg6XFx0e1xcbiAgNjk6XFx0XFx0cmV0dXJuIHhhX3RvX3ZhbHVlKGVudHJ5KSBcXHUwMDNlXFx1MDAzZSBEQVhfU0hJRlQ7XFxuICA3MDpcXHR9XFxuICA3MTpcXHRcXG4gIDcyOlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRheF90b19mb2xpbyh2b2lkICplbnRyeSlcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdHJldHVybiBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKGRheF90b19wZm4oZW50cnkpKSk7XFxuICA3NTpcXHR9XFxuICA3NjpcXHRcXG4gIDc3OlxcdHN0YXRpYyB2b2lkICpkYXhfbWFrZV9lbnRyeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4gIDc4OlxcdHtcXG4gIDc5OlxcdFxcdHJldHVybiB4YV9ta192YWx1ZShmbGFncyB8IChwZm4gXFx1MDAzY1xcdTAwM2MgREFYX1NISUZUKSk7XFxuICA4MDpcXHR9XFxuICA4MTpcXHRcXG4gIDgyOlxcdHN0YXRpYyBib29sIGRheF9pc19sb2NrZWQodm9pZCAqZW50cnkpXFxuICA4MzpcXHR7XFxuICA4NDpcXHRcXHRyZXR1cm4geGFfdG9fdmFsdWUoZW50cnkpIFxcdTAwMjYgREFYX0xPQ0tFRDtcXG4gIDg1OlxcdH1cXG4gIDg2OlxcdFxcbiAgODc6XFx0c3RhdGljIHVuc2lnbmVkIGludCBkYXhfZW50cnlfb3JkZXIodm9pZCAqZW50cnkpXFxuICA4ODpcXHR7XFxuICA4OTpcXHRcXHRpZiAoeGFfdG9fdmFsdWUoZW50cnkpIFxcdTAwMjYgREFYX1BNRClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MTAuMDMxMDI0NzE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM4MDQ4NDczMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBEQVggRmlsZXN5c3RlbSBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUgaW4gYGZzL2RheC5jYCBhbmQgSSd2ZSBzcG90dGVkIGEgcG90ZW50aWFsIGlzc3VlLiBTcGVjaWZpY2FsbHksIHRoZSBjYWxsIHRvIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcyBoYXBwZW5pbmcgYmVmb3JlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGBlbnRyeWAgdmFsdWVzLCBzcGVjaWZpY2FsbHkgYERBWF9aRVJPX1BBR0VgIG9yIGBEQVhfRU1QVFlgLiAgXG5cblRoZSBwcm9ibGVtIGlzIHRoYXQgYGRheF90b19mb2xpbyhlbnRyeSlgIGlzLCB1bmRlciB0aGUgaG9vZCwgY2FsbGluZyBgcGFnZV9mb2xpbyhwZm5fdG9fcGFnZShkYXhfdG9fcGZuKGVudHJ5KSkpYC4gSWYgYGVudHJ5YCBpcyBlaXRoZXIgYERBWF9aRVJPX1BBR0VgIG9yIGBEQVhfRU1QVFlgLCB0aGVuIGBkYXhfdG9fcGZuKGVudHJ5KWAgaXMgZ29pbmcgdG8gcmVzdWx0IGluIGEgUEZOIG9mIDAuICBcblxuTm93IGhlcmUncyB0aGUga2lja2VyOiBgcGZuX3RvX3BhZ2UoMClgICptaWdodCogcmV0dXJuIGFuIGludmFsaWQgcGFnZSBwb2ludGVyLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBvciB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoaXMgY291bGQgZWFzaWx5IGxlYWQgdG8gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzIG9yLCB3b3JzZSwgYSBrZXJuZWwgcGFuaWMuICBcblxuRWZmZWN0aXZlbHksIGluaXRpYWxpemluZyBgZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpYCAqYmVmb3JlKiBjaGVja2luZyBpZiBgZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSlgIGlzIGdvaW5nIHRvIHJlc3VsdCBpbiB0aGF0IGBwZm5fdG9fcGFnZWAgYmVpbmcgZXZhbHVhdGVkIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIHdlICprbm93KiBpdCdzIGxpa2VseSB0byBjYXVzZSBwcm9ibGVtcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgYnVnLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLCBhbmQgYGRheF9idXN5X3BhZ2VgIGFyZSBjYWxsZWQuIEknbGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBlbnRyeXBvaW50cywgZXNwZWNpYWxseSBleHBvcnRlZCBvbmVzLCBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBzbyBJIGNhbiBzZWUgdGhlIGltcGFjdCBvZiB0aGlzIGJ1Zy4gS25vd2luZyB3aGVyZSBpdCdzIHVzZWQgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgc2V2ZXJpdHkgYW5kIHRoZSBiZXN0IHdheSB0byBmaXggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNDo0My44MzU4NzQ5MDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjM1MzI2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF4X2Fzc29jaWF0ZV9lbnRyeXxkYXhfZGlzYXNzb2NpYXRlX2VudHJ5fGRheF9idXN5X3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxcbi0tXFxuZnMvZGF4LmMtNDc3LVxcbmZzL2RheC5jOjQ3ODpzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9kYXguYy00NzktXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9kYXguYy01MDUtXFxuZnMvZGF4LmM6NTA2OnN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2RheC5jLTUwNy1cXHRcXHRcXHRcXHRib29sIHRydW5jKVxcbi0tXFxuZnMvZGF4LmMtNTE0LVxcbmZzL2RheC5jOjUxNTpzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNTE2LXtcXG4tLVxcbmZzL2RheC5jPTY4Nz1zdGF0aWMgdm9pZCAqZ3JhYl9tYXBwaW5nX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbi0tXFxuZnMvZGF4LmMtNzM2LVxcbmZzL2RheC5jOjczNzpcXHRcXHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCBmYWxzZSk7XFxuZnMvZGF4LmMtNzM4LVxcdFxcdHhhc19zdG9yZSh4YXMsIE5VTEwpO1xcdC8qIHVuZG8gdGhlIFBNRCBqb2luICovXFxuLS1cXG5mcy9kYXguYz03OTE9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtODI4LVxcdFxcdGlmIChlbnRyeSlcXG5mcy9kYXguYzo4Mjk6XFx0XFx0XFx0cGFnZSA9IGRheF9idXN5X3BhZ2UoZW50cnkpO1xcbmZzL2RheC5jLTgzMC1cXHRcXHRwdXRfdW5sb2NrZWRfZW50cnkoXFx1MDAyNnhhcywgZW50cnksIFdBS0VfTkVYVCk7XFxuLS1cXG5mcy9kYXguYz04NTI9c3RhdGljIGludCBfX2RheF9pbnZhbGlkYXRlX2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtODY2LVxcdFxcdGdvdG8gb3V0O1xcbmZzL2RheC5jOjg2NzpcXHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCB0cnVuYyk7XFxuZnMvZGF4LmMtODY4LVxcdHhhc19zdG9yZShcXHUwMDI2eGFzLCBOVUxMKTtcXG4tLVxcbmZzL2RheC5jPTkyNT12b2lkIGRheF9kZWxldGVfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTk0NS1cXHRcXHRcXHRjb250aW51ZTtcXG5mcy9kYXguYzo5NDY6XFx0XFx0ZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeShlbnRyeSwgbWFwcGluZywgdHJ1ZSk7XFxuZnMvZGF4LmMtOTQ3LVxcdFxcdHhhc19zdG9yZShcXHUwMDI2eGFzLCBOVUxMKTtcXG4tLVxcbmZzL2RheC5jPTEwNzk9c3RhdGljIHZvaWQgKmRheF9pbnNlcnRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTEwNi1cXG5mcy9kYXguYzoxMTA3OlxcdFxcdGRheF9kaXNhc3NvY2lhdGVfZW50cnkoZW50cnksIG1hcHBpbmcsIGZhbHNlKTtcXG5mcy9kYXguYzoxMTA4OlxcdFxcdGRheF9hc3NvY2lhdGVfZW50cnkobmV3X2VudHJ5LCBtYXBwaW5nLCB2bWYtXFx1MDAzZXZtYSxcXG5mcy9kYXguYy0xMTA5LVxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlYWRkcmVzcywgc2hhcmVkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0zMzQ9dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTM2Ny0gKiBAc2hhcmU6IG51bWJlciBvZiBEQVggbWFwcGluZ3MgdGhhdCByZWZlcmVuY2UgdGhpcyBmb2xpby4gU2VlXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjM2ODogKiAgICBkYXhfYXNzb2NpYXRlX2VudHJ5LlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0zNjktICogQHByaXZhdGU6IEZpbGVzeXN0ZW0gcGVyLWZvbGlvIGRhdGEgKHNlZSBmb2xpb19hdHRhY2hfcHJpdmF0ZSgpKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6NDYuMjk5NDE1MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0NzgzMDAxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQVggTWFwcGluZyBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcmV2ZWFscyB0aGF0IHRoZSBmdW5jdGlvbnMgYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeWAsIGFuZCBgZGF4X2J1c3lfcGFnZWAgYXJlIGNlbnRyYWwgdG8gdGhpcyBEQVggYXJjaGl0ZWN0dXJlLCBhbmQgdGhleSdyZSBjYWxsZWQgcHJpbWFyaWx5IGJ5IGEgc2VsZWN0IHNldCBvZiBmdW5jdGlvbnM6IGBncmFiX21hcHBpbmdfZW50cnlgLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCBgX19kYXhfaW52YWxpZGF0ZV9lbnRyeWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBhbmQgYGRheF9pbnNlcnRfZW50cnlgLlxuXG5JIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGBncmFiX21hcHBpbmdfZW50cnlgIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgbGVhZHMgZG93biB0aGUgZmF1bHQgaGFuZGxpbmcgcGF0aHMgd2l0aCBgZGF4X2lvbWFwX2ZhdWx0YCBhbmQgYGRheF9mYXVsdF9pdGVyYCwgd2hpY2ggYXJlIGJvdGggaW1wb3J0YW50IGZvciBEQVggZmF1bHQgaGFuZGxpbmcuIEFsc28sIGZ1bmN0aW9ucyBsaWtlIGBkYXhfaW5zZXJ0X2VudHJ5YCBhbHNvIGNhbGwgdGhpcy5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhvc2Ugc2Vjb25kLWxldmVsIGNhbGxzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBgZGF4X2luc2VydF9lbnRyeWAsIGFuZCBhbHNvIHRoZSBgZGF4X2lvbWFwX2ZhdWx0YCB2YXJpYW50cywgYW5kIGBkYXhfZmF1bHRfaXRlcmAsIHRvIGRldGVybWluZSBob3cgdGhleSBmaXQgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJJ2xsIHNlYXJjaCBmb3IgYWxsIGNhbGxzIHRvIGFsbCBvZiB0aGUgaW1wb3J0YW50IG1ldGhvZHMuXG5cbk15IGludHVpdGlvbiBzYXlzIHRoZSBzb3VyY2UgY29kZSB3aWxsIGxpdmUgaW4gYGZzL2RheC5jYCwgc28gSSdsbCBzdGFydCBkaWdnaW5nIHRoZXJlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjMyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjMxLjA4MjQxOTcyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyODc4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihbYS16QS1aMC05XyogXSspXFxcXCgoLiopXFxcXCkkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RheC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTM5PXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3RhYmxlW0RBWF9XQUlUX1RBQkxFX0VOVFJJRVNdO1xcbmZzL2RheC5jLTQwLVxcbmZzL2RheC5jOjQxOnN0YXRpYyBpbnQgX19pbml0IGluaXRfZGF4X3dhaXRfdGFibGUodm9pZClcXG5mcy9kYXguYy00Mi17XFxuLS1cXG5mcy9kYXguYz00OT1mc19pbml0Y2FsbChpbml0X2RheF93YWl0X3RhYmxlKTtcXG4tLVxcbmZzL2RheC5jLTY2LVxcbmZzL2RheC5jOjY3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF90b19wZm4odm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNjgte1xcbi0tXFxuZnMvZGF4LmMtNzEtXFxuZnMvZGF4LmM6NzI6c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTczLXtcXG4tLVxcbmZzL2RheC5jLTc2LVxcbmZzL2RheC5jOjc3OnN0YXRpYyB2b2lkICpkYXhfbWFrZV9lbnRyeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG5mcy9kYXguYy03OC17XFxuLS1cXG5mcy9kYXguYy04MS1cXG5mcy9kYXguYzo4MjpzdGF0aWMgYm9vbCBkYXhfaXNfbG9ja2VkKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTgzLXtcXG4tLVxcbmZzL2RheC5jLTg2LVxcbmZzL2RheC5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGF4X2VudHJ5X29yZGVyKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTg4LXtcXG4tLVxcbmZzL2RheC5jLTkzLVxcbmZzL2RheC5jOjk0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF9pc19wbWRfZW50cnkodm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtOTUte1xcbi0tXFxuZnMvZGF4LmMtOTgtXFxuZnMvZGF4LmM6OTk6c3RhdGljIGJvb2wgZGF4X2lzX3B0ZV9lbnRyeSh2b2lkICplbnRyeSlcXG5mcy9kYXguYy0xMDAte1xcbi0tXFxuZnMvZGF4LmMtMTAzLVxcbmZzL2RheC5jOjEwNDpzdGF0aWMgaW50IGRheF9pc196ZXJvX2VudHJ5KHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTEwNS17XFxuLS1cXG5mcy9kYXguYy0xMDgtXFxuZnMvZGF4LmM6MTA5OnN0YXRpYyBpbnQgZGF4X2lzX2VtcHR5X2VudHJ5KHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTExMC17XFxuLS1cXG5mcy9kYXguYy0xMTctICovXFxuZnMvZGF4LmM6MTE4OnN0YXRpYyBib29sIGRheF9pc19jb25mbGljdCh2b2lkICplbnRyeSlcXG5mcy9kYXguYy0xMTkte1xcbi0tXFxuZnMvZGF4LmM9MTg0PXN0YXRpYyB2b2lkIGRheF93YWtlX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSxcXG4tLVxcbmZzL2RheC5jLTIwNC0gKiBpcyBhIERBWCBlbnRyeSBhbmQgcmV0dXJuIGl0LiAgVGhlIGNhbGxlciBtdXN0IHN1YnNlcXVlbnRseSBjYWxsXFxuZnMvZGF4LmM6MjA1OiAqIHB1dF91bmxvY2tlZF9lbnRyeSgpIGlmIGl0IGRpZCBub3QgbG9jayB0aGUgZW50cnkgb3IgZGF4X3VubG9ja19lbnRyeSgpXFxuZnMvZGF4LmMtMjA2LSAqIGlmIGl0IGRpZC4gIFRoZSBlbnRyeSByZXR1cm5lZCBtYXkgaGF2ZSBhIGxhcmdlciBvcmRlciB0aGFuIEBvcmRlci5cXG4tLVxcbmZzL2RheC5jLTIxMS0gKi9cXG5mcy9kYXguYzoyMTI6c3RhdGljIHZvaWQgKmdldF9uZXh0X3VubG9ja2VkX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuZnMvZGF4LmMtMjEzLXtcXG4tLVxcbmZzL2RheC5jLTI0NS0gKi9cXG5mcy9kYXguYzoyNDY6c3RhdGljIHZvaWQgKndhaXRfZW50cnlfdW5sb2NrZWRfZXhjbHVzaXZlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSlcXG5mcy9kYXguYy0yNDcte1xcbi0tXFxuZnMvZGF4LmMtMjczLSAqIFRoZSBvbmx5IHRoaW5nIGtlZXBpbmcgdGhlIGFkZHJlc3Mgc3BhY2UgYXJvdW5kIGlzIHRoZSBpX3BhZ2VzIGxvY2tcXG5mcy9kYXguYzoyNzQ6ICogKGl0J3MgY3ljbGVkIGluIGNsZWFyX2lub2RlKCkgYWZ0ZXIgcmVtb3ZpbmcgdGhlIGVudHJpZXMgZnJvbSBpX3BhZ2VzKVxcbmZzL2RheC5jLTI3NS0gKiBBZnRlciB3ZSBjYWxsIHhhc191bmxvY2tfaXJxKCksIHdlIGNhbm5vdCB0b3VjaCB4YXMtXFx1MDAzZXhhLlxcbmZzL2RheC5jLTI3Ni0gKi9cXG5mcy9kYXguYzoyNzc6c3RhdGljIHZvaWQgd2FpdF9lbnRyeV91bmxvY2tlZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtMjc4LXtcXG4tLVxcbmZzL2RheC5jPTI5OD1zdGF0aWMgdm9pZCBwdXRfdW5sb2NrZWRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5LFxcbi0tXFxuZnMvZGF4LmMtMzA5LSAqL1xcbmZzL2RheC5jOjMxMDpzdGF0aWMgdm9pZCBkYXhfdW5sb2NrX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSlcXG5mcy9kYXguYy0zMTEte1xcbi0tXFxuZnMvZGF4LmMtMzI1LSAqL1xcbmZzL2RheC5jOjMyNjpzdGF0aWMgdm9pZCAqZGF4X2xvY2tfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTMyNy17XFxuLS1cXG5mcy9kYXguYy0zMzEtXFxuZnMvZGF4LmM6MzMyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF9lbnRyeV9zaXplKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTMzMy17XFxuLS1cXG5mcy9kYXguYy0zNDktICovXFxuZnMvZGF4LmM6MzUwOnN0YXRpYyBpbmxpbmUgYm9vbCBkYXhfZm9saW9faXNfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZGF4LmMtMzUxLXtcXG4tLVxcbmZzL2RheC5jLTM2NC0gKi9cXG5mcy9kYXguYzozNjU6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX21ha2Vfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZGF4LmMtMzY2LXtcXG4tLVxcbmZzL2RheC5jLTM4OC0gKi9cXG5mcy9kYXguYzozODk6aW50IGRheF9mb2xpb19yZXNldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL2RheC5jLTM5MC17XFxuLS1cXG5mcy9kYXguYz00MzE9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKTtcXG5mcy9kYXguYy00MzItXFxuZnMvZGF4LmM6NDMzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYXhfZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZGF4LmMtNDM0LXtcXG4tLVxcbmZzL2RheC5jLTQ1Ny1cXG5mcy9kYXguYzo0NTg6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNDU5LXtcXG4tLVxcbmZzL2RheC5jPTUwNj1zdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTUxNC1cXG5mcy9kYXguYzo1MTU6c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfYnVzeV9wYWdlKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTUxNi17XFxuLS1cXG5mcy9kYXguYy01MzYtICovXFxuZnMvZGF4LmM6NTM3OmRheF9lbnRyeV90IGRheF9sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZGF4LmMtNTM4LXtcXG4tLVxcbmZzL2RheC5jLTU4My1cXG5mcy9kYXguYzo1ODQ6dm9pZCBkYXhfdW5sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGRheF9lbnRyeV90IGNvb2tpZSlcXG5mcy9kYXguYy01ODUte1xcbi0tXFxuZnMvZGF4LmM9ODQ0PUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTtcXG5mcy9kYXguYy04NDUtXFxuZnMvZGF4LmM6ODQ2OnN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG5mcy9kYXguYy04NDcte1xcbi0tXFxuZnMvZGF4LmM9ODc3PXN0YXRpYyBpbnQgX19kYXhfY2xlYXJfZGlydHlfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9kYXguYy05MDktICovXFxuZnMvZGF4LmM6OTEwOmludCBkYXhfZGVsZXRlX21hcHBpbmdfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgpXFxuZnMvZGF4LmMtOTExLXtcXG4tLVxcbmZzL2RheC5jPTEwMDM9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dCk7XFxuZnMvZGF4LmMtMTAwNC1cXG5mcy9kYXguYzoxMDA1OnZvaWQgZGF4X2JyZWFrX2xheW91dF9maW5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2RheC5jLTEwMDYte1xcbi0tXFxuZnMvZGF4LmM9MTAyOT1pbnQgZGF4X2ludmFsaWRhdGVfbWFwcGluZ19lbnRyeV9zeW5jKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtMTAzNC1cXG5mcy9kYXguYzoxMDM1OnN0YXRpYyBwZ29mZl90IGRheF9pb21hcF9wZ29mZihjb25zdCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBsb2ZmX3QgcG9zKVxcbmZzL2RheC5jLTEwMzYte1xcbi0tXFxuZnMvZGF4LmMtMTAzOS1cXG5mcy9kYXguYzoxMDQwOnN0YXRpYyBpbnQgY29weV9jb3dfcGFnZV9kYXgoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyKVxcbmZzL2RheC5jLTEwNDEte1xcbi0tXFxuZnMvZGF4LmM9MTQzNT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9kYXguYy0xNDQxLVxcbmZzL2RheC5jOjE0NDI6c3RhdGljIGludCBkYXhfdW5zaGFyZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyKVxcbmZzL2RheC5jLTE0NDMte1xcbi0tXFxuZnMvZGF4LmM9MTUxMz1FWFBPUlRfU1lNQk9MX0dQTChkYXhfZmlsZV91bnNoYXJlKTtcXG5mcy9kYXguYy0xNTE0LVxcbmZzL2RheC5jOjE1MTU6c3RhdGljIGludCBkYXhfbWVtemVybyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90IHBvcywgc2l6ZV90IHNpemUpXFxuZnMvZGF4LmMtMTUxNi17XFxuLS1cXG5mcy9kYXguYy0xNTM3LVxcbmZzL2RheC5jOjE1Mzg6c3RhdGljIGludCBkYXhfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybylcXG5mcy9kYXguYy0xNTM5LXtcXG4tLVxcbmZzL2RheC5jPTE2MTQ9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3RydW5jYXRlX3BhZ2UpO1xcbmZzL2RheC5jLTE2MTUtXFxuZnMvZGF4LmM6MTYxNjpzdGF0aWMgaW50IGRheF9pb21hcF9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuZnMvZGF4LmMtMTYxNy17XFxuLS1cXG5mcy9kYXguYz0xNzc5PUVYUE9SVF9TWU1CT0xfR1BMKGRheF9pb21hcF9ydyk7XFxuZnMvZGF4LmMtMTc4MC1cXG5mcy9kYXguYzoxNzgxOnN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9yZXR1cm4oaW50IGVycm9yKVxcbmZzL2RheC5jLTE3ODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjozMS4xMzA3MTIzNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk4ODgxNjIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBgZnMvZGF4LmNgIGNvbnRleHQsIGZvY3VzaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBvZiBmcy9kYXguYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBob3cgYGZzL2RheC5jYCBnZXRzIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIGJ1aWxkLiBUaGUgZmlyc3Qgc3RvcCwgbmF0dXJhbGx5LCBpcyB0aGUgYE1ha2VmaWxlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgYXJlIGluIHBsYXksIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZW4gYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFdoYXQgb3RoZXIgc291cmNlIGZpbGVzLCBvYmplY3QgZmlsZXMsIG9yIGxpYnJhcmllcyBkb2VzIGl0IHJlbHkgb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBpbmNsdWRlIHBhdGhzIGl0IG5lZWRzPyBBcmUgdGhlcmUgYW55IGNsZXZlciBidWlsZCBvcHRpbWl6YXRpb25zIGJlaW5nIGVtcGxveWVkPyBVbmRlcnN0YW5kaW5nIHRoZSBNYWtlZmlsZSBpcyBrZXkgdG8gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5UaGVuLCBJJ2xsIGltbWVkaWF0ZWx5IGp1bXAgb3ZlciB0byB0aGUgYEtjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbWF0dGVyIGxpZXMgZm9yIG1lLiBJIG5lZWQgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gd2hldGhlciBvciBub3QgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0LCBhbmQgYnkgZXh0ZW5zaW9uIGBmcy9kYXguY2AsIGlzIGVuYWJsZWQuIFdoYXQgYXJlIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucz8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcyBvciBoYXJkd2FyZT8gV2hhdCdzIHRoZSBoZWxwIHRleHQgZGVzY3JpYmluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBEQVg/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIG1lbW9yeSB0eXBlcywgZmlsZSBzeXN0ZW1zLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29uZGl0aW9ucyogdW5kZXIgd2hpY2ggREFYIGZ1bmN0aW9uYWxpdHkgaXMgb2ZmZXJlZCB0byB0aGUga2VybmVsIHVzZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nIGFuZCB1bmRlcnN0YW5kaW5nIGNvbXBhdGliaWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBjYW4gcmVhbGx5IHNlZSB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBmaWxlIG9uIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBhbmQgZnVuY3Rpb25hbGl0eS4gQmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlIEknbGwgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgREFYIGNhcGFiaWxpdGllcyBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBzYXRpc2ZpZWQgdG8gbGV2ZXJhZ2UgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MzkuMTE5NTMxMDg0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDkxNTYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgKz0gYWlvLm9cXG5mcy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfRlNfREFYKVxcdFxcdCs9IGRheC5vXFxuZnMvTWFrZWZpbGUtMzItb2JqLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXFx0Kz0gY3J5cHRvL1xcbi0tXFxuZnMvZnVzZS9NYWtlZmlsZT0xNj1mdXNlLXkgKz0gaW9tb2RlLm9cXG5mcy9mdXNlL01ha2VmaWxlOjE3OmZ1c2UtJChDT05GSUdfRlVTRV9EQVgpICs9IGRheC5vXFxuZnMvZnVzZS9NYWtlZmlsZS0xOC1mdXNlLSQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpICs9IHBhc3N0aHJvdWdoLm8gYmFja2luZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjM5LjE5NDQ1MjI4OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk4NzIzMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBDT05GSUdfRlNfREFYIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYENPTkZJR19GU19EQVhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlaXIgZGVmaW5pdGlvbnMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBhbnkgZGVwZW5kZW5jaWVzIHRoZXkgbWlnaHQgaGF2ZS4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBgQ09ORklHX0ZTX0RBWGAgaXMgZGVmaW5lZCDigJMgaXMgaXQgYSBib29sZWFuLCBhIHRyaXN0YXRlPyBXaGF0J3MgdGhlIGhlbHAgdGV4dCBzYXk/IFRoYXQnbGwgZ2l2ZSBtZSBjb250ZXh0LiBNb3JlIGltcG9ydGFudGx5LCB3aGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IE9yIHBlcmhhcHMgd2hpY2ggb3B0aW9ucyBkZXBlbmQgb24gKml0Kj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvciBmaWxlc3lzdGVtIHJlcXVpcmVtZW50cyBiYWtlZCBpbj8gS25vd2luZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIHdvcmtzIHdpdGhpbiB0aGUgYmlnZ2VyIGtlcm5lbCBwaWN0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCB1c2UgY2FzZXMgYW5kIGFyY2hpdGVjdHVyZXMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBLY29uZmlnIGZpbGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjQxLjI5MzE5MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDQ3MjUxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0RBWFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjQzLjQzNzkyNDcyN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjExNjI0OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgYW5kIG15IGd1dCB0ZWxscyBtZSBgZnMvS2NvbmZpZ2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU4LiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciBmaWxlIHN5c3RlbSBmZWF0dXJlcywgb3IgYXQgbGVhc3QgYSBrZXkgc2VjdGlvbiByZWxhdGVkIHRvIHRoZW0sIHdpbGwgYmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhlIGxvZ2ljIGlzIHN0cnVjdHVyZWQuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIHNuaXBwZXQgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eSBvbiB0aGUgYnJvYWRlciBkZXNpZ24gZGVjaXNpb25zIGluIHBsYXksIGFuZCBzaGVkIGxpZ2h0IG9uIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSdtIGludGVyZXN0ZWQgaW4uIFRoZSBwbGFuIGlzIHRvIGdldCBhbiBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIHdoZXRoZXIgSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGluY2x1ZGUgcGF0aHMsIG9yIGlmIHRoZSByZWxldmFudCBiaXRzIGFyZSBkZWZpbmVkIHJpZ2h0IHRoZXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzQ5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6NDcuMDQ5NTUzMTI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFxuICA1NjpcXHRlbmRpZiAjIEJMT0NLXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBGU19EQVhcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIkZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuICA2MTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuICA2MjpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gIDYzOlxcdFxcdHNlbGVjdCBEQVhcXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgRGlyZWN0IEFjY2VzcyAoREFYKSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuXFxuICA2NjpcXHRcXHQgIElmIHRoZSBibG9jayBkZXZpY2Ugc3VwcG9ydHMgREFYIGFuZCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBEQVgsXFxuICA2NzpcXHRcXHQgIHRoZW4geW91IGNhbiBhdm9pZCB1c2luZyB0aGUgcGFnZWNhY2hlIHRvIGJ1ZmZlciBJL09zLiAgVHVybmluZ1xcbiAgNjg6XFx0XFx0ICBvbiB0aGlzIG9wdGlvbiB3aWxsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgREFYLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxcbiAgNzE6XFx0XFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXFxuICA3MjpcXHRcXHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxcXFxuICA3NTpcXHRcXHRcXHRcXHQtLW1vZGU9ZnNkYXggLS1tYXA9bWVtXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgU2VlIHRoZSAnY3JlYXRlLW5hbWVzcGFjZScgbWFuIHBhZ2UgZm9yIGRldGFpbHMgb24gdGhlIG92ZXJoZWFkIG9mXFxuICA3ODpcXHRcXHQgIC0tbWFwPW1lbTpcXG4gIDc5OlxcdFxcdCAgaHR0cHM6Ly9kb2NzLnBtZW0uaW8vbmRjdGwtdXNlci1ndWlkZS9uZGN0bC1tYW4tcGFnZXMvbmRjdGwtY3JlYXRlLW5hbWVzcGFjZVxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcXG4gIDgyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcXG4gIDgzOlxcdFxcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxcbiAgODQ6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgeW91IGRvIG5vdCBoYXZlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLFxcbiAgODc6XFx0XFx0ICBvciBpZiB1bnN1cmUsIHNheSBOLiAgU2F5aW5nIFkgd2lsbCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsXFxuICA4ODpcXHRcXHQgIGJ5IGFib3V0IDVrQi5cXG4gIDg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjo0Ny4wNDk2Mjg3NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIyNTI4MTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIERlcGVuZGVuY2llcyBmb3IgWk9ORV9ERVZJQ0UqKlxuXG5BbHJpZ2h0LCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBaT05FX0RFVklDRWAgaXMgcHJvcGVybHkgaW50ZWdyYXRlZCBhbmQgdGhhdCBhbGwgb2YgaXRzIGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvci4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBiZWZvcmUgYW55IG1ham9yIGNoYW5nZXMgb3IgZGVwbG95bWVudCwgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0eSBvZiBzdWNoIGEgY29tcG9uZW50LiBJIG5lZWQgdG8gbWFrZSBhIHRob3JvdWdoIHBhc3MgdGhyb3VnaCB0aGUgY29kZSBiYXNlIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgZmlyc3Qg4oCTIHRoZSBvYnZpb3VzIGxpYnJhcmllcyBhbmQgbW9kdWxlcyB0aGF0IGBaT05FX0RFVklDRWAgcmVsaWVzIG9uIGRpcmVjdGx5LiBUaGVuLCBJIG5lZWQgdG8gZGlnIGRlZXBlciwgdHJhY2luZyB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgY29ubmVjdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSBzdWJ0bGUgY29uZmxpY3RzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZT8gV2UgbmVlZCB0byB2ZXJpZnkgdmVyc2lvbiBjb21wYXRpYmlsaXR5IGFjcm9zcyB0aGUgZW50aXJlIGRlcGVuZGVuY3kgdHJlZS4gQXJlIHdlIHVzaW5nIHRoZSBsYXRlc3Qgc2VjdXJlIHZlcnNpb25zLCBhbmQgYXJlIHdlIGluIGFsaWdubWVudCB3aXRoIHRoZSB3aWRlciBwcm9qZWN0J3MgZGVwZW5kZW5jeSBtYW5hZ2VtZW50IHN0cmF0ZWd5PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzdGF0aWMgYW5hbHlzaXMsIHVzaW5nIHdoYXRldmVyIHRvb2xzIHdlIGhhdmUgYXZhaWxhYmxlIChsaW50aW5nLCBkZXBlbmRlbmN5IGdyYXBocywgZXRjLikgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldy4gQWZ0ZXIgdGhhdCwgSSB3aWxsIGNvbmR1Y3QgdGhvcm91Z2ggdW5pdCB0ZXN0cyB3aXRoIG1vY2sgZGVwZW5kZW5jaWVzLCBmb2xsb3dlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIHJlbGV2YW50IG90aGVyIGNvbXBvbmVudHMgdGhhdCBjb3VsZCBhZmZlY3QgZGVwZW5kZW5jaWVzLiBUaGUgZ29hbCBpcyB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBiZWZvcmUgdGhleSBiZWNvbWUgcHJvYmxlbXMgaW4gYSBtb3JlIGNvbXBsZXggdGVzdGluZyBzY2VuYXJpbyBvciwgd29yc2UsIHByb2R1Y3Rpb24uIEl0J3MgYSBiaXQgdGVkaW91cywgYnV0IHdvcnRoIGl0IHRvIGF2b2lkIGFueSBoZWFkYWNoZXMgbGF0ZXIuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBmdW5jdGlvbmFsaXR5OyBpdCdzIGFib3V0IHNlY3VyaXR5LCBwZXJmb3JtYW5jZSwgYW5kIG1haW50YWluYWJpbGl0eS4gTGV0J3MgbWFrZSBzdXJlIGBaT05FX0RFVklDRWAncyBkZXBlbmRlbmNpZXMgYXJlIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6NTAuMjc0OTEyNjY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI0ODk1NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIyMD1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjI0LVxcbm1tL0tjb25maWc6MTIyNTpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMjYtXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6NTIuNDk5ODE0ODY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTU3ODkzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gYmV0dGVyLCBhbmQgSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiBpdCBkZWZpbmVkIGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNlZW0gdG8gcmVtZW1iZXIgaXQgYXJvdW5kIGxpbmUgMTIyNSwgZ2l2ZSBvciB0YWtlLiBUaW1lIHRvIGp1bXAgb3ZlciB0aGVyZSBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgaG93IHRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgaGVscCB0ZXh0cyBJIGNhbiBnbGVhbi4gSXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4geW91J3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZWhhdmlvciBvZiBhIHBhcnRpY3VsYXIgY29uZmlnIG9wdGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSSdtIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBvcHRpb25zLCBhbmQgcGVyaGFwcyBzcG90IGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0eXBpY2FsIGZvcm1hdCBoZXJlOiBhIGBjb25maWdgIGtleXdvcmQsIGEgdHlwZSBkZWZpbml0aW9uIChib29sLCB0cmlzdGF0ZSwgZXRjLiksIHRoZSBoZWxwIHRleHQsIGFuZCBsaWtlbHkgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4gV2l0aCBhIGJpdCBvZiBsdWNrLCB0aGUgZmlsZSBjb21tZW50cyB3aWxsIGJlIHVwLXRvLWRhdGUgYW5kIHByb3ZpZGUgc29tZSB1c2VmdWwgY29udGV4dC4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjU1LjQxNTYwNzAzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA6XFx0Y29uZmlnIFpPTkVfRE1BMzJcXG4xMjIxOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgRE1BMzIgem9uZVxcXCIgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXFxuMTIyMjpcXHRcXHRkZXBlbmRzIG9uICFYODZfMzJcXG4xMjIzOlxcdFxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbjEyMjQ6XFx0XFxuMTIyNTpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjI2OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIyNzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjI4OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjI5OlxcdFxcbjEyMzA6XFx0XFx0aGVscFxcbjEyMzE6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyMzI6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyMzM6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjM0OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjM1OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyMzY6XFx0XFxuMTIzNzpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjM4OlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyMzk6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTI0MDpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyNDE6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjQyOlxcdFxcbjEyNDM6XFx0I1xcbjEyNDQ6XFx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjU1LjQxNTcwNjA1MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTM5MDQ4Mjc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEhvdC1SZW1vdmFsIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE1FTU9SWV9IT1RSRU1PVkVgLlwiIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgYW5kIEkgbmVlZCB0byBlbnN1cmUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGlzIG1lYW5zIEknbSBub3QganVzdCBsb29raW5nIGF0IHRoZSBvYnZpb3VzIGNvbXBvbmVudHMsIGJ1dCBhbnRpY2lwYXRpbmcgYWxsIHRoZSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGtlcm5lbCBpbnRlcmFjdGlvbnMsIHRoZSB1c2Vyc3BhY2UgdG9vbHMgdGhhdCByZWx5IG9uIG1lbW9yeSBob3QtcmVtb3ZhbCwgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBtaWdodCBoYW5kbGUgdGhpcyBmZWF0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBpZGVudGlmeSBhbGwgcG90ZW50aWFsIHRyb3VibGUgc3BvdHMuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzIwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNzoxNi44MDYxOTE0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwOTcxNjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgwPWVuZGNob2ljZVxcbm1tL0tjb25maWctNTgxLVxcbm1tL0tjb25maWc6NTgyOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNzoxOS4xMTU5MTM1MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA1NzczODQ0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1ODIuIE15IGluaXRpYWwgdGhvdWdodCBpcyBwcm9iYWJseSB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgcG9zc2libGUgZGVmYXVsdCB2YWx1ZXMsIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIG1heWJlIGFuIGBpZmAgYmxvY2ssIHRoYXQgZ292ZXJucyB3aGV0aGVyIGEgc3BlY2lmaWMgb3B0aW9uIGlzIGVuYWJsZWQgb3Igc2hvd24gdG8gdGhlIHVzZXIuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBLY29uZmlnIHN5bnRheDogYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYGRlZmF1bHRgLCBgYm9vbGAsIGV0Yy4g4oCTIHRyeWluZyB0byByZWNvbnN0cnVjdCB0aGUgbG9naWMgaW4gbXkgaGVhZC4gSSdtIGFudGljaXBhdGluZyB0aGF0IGxpbmUgNTgyIGhvbGRzIHRoZSBrZXkgdG8gdGhlIGNvbmRpdGlvbiBvciByZWxhdGlvbiBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEZyb20gdGhlcmUsIEknbGwgcHJvYmFibHkgYnJhbmNoIG91dCwgbG9va2luZyBhdCByZWxhdGVkIG9wdGlvbnMgb3IgcGVyaGFwcyBldmVuIHRoZSBjb2RlIHRoYXQgdXNlcyB0aGUgY29ycmVzcG9uZGluZyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEknbGwgYmUga2VlcGluZyBhIHNoYXJwIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6MjkuNjkzMzAwOTczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MDpcXHRlbmRjaG9pY2VcXG4gNTgxOlxcdFxcbiA1ODI6XFx0Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4gNTgzOlxcdFxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG4gNTg0OlxcdFxcdHNlbGVjdCBNSUdSQVRJT05cXG4gNTg1OlxcdFxcbiA1ODY6XFx0Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXFxuIDU4NzpcXHRcXHRkZWZfYm9vbCB5XFxuIDU4ODpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuIDU4OTpcXHRcXG4gNTkwOlxcdGVuZGlmICMgTUVNT1JZX0hPVFBMVUdcXG4gNTkxOlxcdFxcbiA1OTI6XFx0Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuIDU5MzpcXHQgICAgICAgYm9vbFxcbiA1OTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE3OjI5LjY5MzQzOTgzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM3MjQyNDYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIEZpbGVzeXN0ZW0gREFYIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFYIChEaXJlY3QgQWNjZXNzKSBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIExpbnV4IGZpbGVzeXN0ZW0gbGFuZHNjYXBlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGljaCBmaWxlc3lzdGVtcyBhY3RpdmVseSBsZXZlcmFnZSBEQVguIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIG9uZXMgbWFrZSB1c2Ugb2YgdGhlIGBmcy9kYXguY2AgY29kZSBhbmQgaXRzIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtcyBwcm92aWRlZC4gVG8gZG8gdGhhdCBJIHdpbGwgYmUgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIGluIGBmcy9kYXguY2AgdGhhdCBhcmUgKmV4cG9ydGVkKiDigJMgdGhlIG5vbi1zdGF0aWMgb25lcyDigJMgc28gSSBjYW4gc2VlIHdoYXQncyBhY3R1YWxseSBpbnRlbmRlZCBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCB0byBjYWxsIHVwb24uIFRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSBEQVgtc3BlY2lmaWMgaW50ZXJmYWNlIGFuZCBpdHMgaW50ZXJhY3Rpb24gcG9pbnRzIHdpdGggb3RoZXIgZmlsZXN5c3RlbXMgb3Iga2VybmVsIGNvbXBvbmVudHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDY2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNzo1OS4wNjU4Njc4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMDU5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kYXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz0zODk9aW50IGRheF9mb2xpb19yZXNldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZGF4LmMtNDMwLX1cXG5mcy9kYXguYzo0MzE6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKTtcXG5mcy9kYXguYy00MzItXFxuLS1cXG5mcy9kYXguYz03OTE9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtODQzLX1cXG5mcy9kYXguYzo4NDQ6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UpO1xcbmZzL2RheC5jLTg0NS1cXG5mcy9kYXguYz04NDY9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbi0tXFxuZnMvZGF4LmMtODQ5LX1cXG5mcy9kYXguYzo4NTA6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2xheW91dF9idXN5X3BhZ2UpO1xcbmZzL2RheC5jLTg1MS1cXG4tLVxcbmZzL2RheC5jPTkyNT12b2lkIGRheF9kZWxldGVfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTk1Mi19XFxuZnMvZGF4LmM6OTUzOkVYUE9SVF9TWU1CT0xfR1BMKGRheF9kZWxldGVfbWFwcGluZ19yYW5nZSk7XFxuZnMvZGF4LmMtOTU0LVxcbi0tXFxuZnMvZGF4LmM9OTc3PWludCBkYXhfYnJlYWtfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tLVxcbmZzL2RheC5jLTEwMDItfVxcbmZzL2RheC5jOjEwMDM6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dCk7XFxuZnMvZGF4LmMtMTAwNC1cXG5mcy9kYXguYz0xMDA1PXZvaWQgZGF4X2JyZWFrX2xheW91dF9maW5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZGF4LmMtMTAyMy19XFxuZnMvZGF4LmM6MTAyNDpFWFBPUlRfU1lNQk9MX0dQTChkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKTtcXG5mcy9kYXguYy0xMDI1LVxcbi0tXFxuZnMvZGF4LmM9MTIzNj1pbnQgZGF4X3dyaXRlYmFja19tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtMTI3NC19XFxuZnMvZGF4LmM6MTI3NTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2UpO1xcbmZzL2RheC5jLTEyNzYtXFxuLS1cXG5mcy9kYXguYz0xNDk0PWludCBkYXhfZmlsZV91bnNoYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sXFxuLS1cXG5mcy9kYXguYy0xNTEyLX1cXG5mcy9kYXguYzoxNTEzOkVYUE9SVF9TWU1CT0xfR1BMKGRheF9maWxlX3Vuc2hhcmUpO1xcbmZzL2RheC5jLTE1MTQtXFxuLS1cXG5mcy9kYXguYz0xNTg2PWludCBkYXhfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLCBib29sICpkaWRfemVybyxcXG4tLVxcbmZzL2RheC5jLTE2MDAtfVxcbmZzL2RheC5jOjE2MDE6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3plcm9fcmFuZ2UpO1xcbmZzL2RheC5jLTE2MDItXFxuZnMvZGF4LmM9MTYwMz1pbnQgZGF4X3RydW5jYXRlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgYm9vbCAqZGlkX3plcm8sXFxuLS1cXG5mcy9kYXguYy0xNjEzLX1cXG5mcy9kYXguYzoxNjE0OkVYUE9SVF9TWU1CT0xfR1BMKGRheF90cnVuY2F0ZV9wYWdlKTtcXG5mcy9kYXguYy0xNjE1LVxcbi0tXFxuZnMvZGF4LmM9MTc0ND1kYXhfaW9tYXBfcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9kYXguYy0xNzc4LX1cXG5mcy9kYXguYzoxNzc5OkVYUE9SVF9TWU1CT0xfR1BMKGRheF9pb21hcF9ydyk7XFxuZnMvZGF4LmMtMTc4MC1cXG4tLVxcbmZzL2RheC5jPTIxMDg9dm1fZmF1bHRfdCBkYXhfaW9tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbmZzL2RheC5jLTIxMTgtfVxcbmZzL2RheC5jOjIxMTk6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2lvbWFwX2ZhdWx0KTtcXG5mcy9kYXguYy0yMTIwLVxcbi0tXFxuZnMvZGF4LmM9MjE3OT12bV9mYXVsdF90IGRheF9maW5pc2hfc3luY19mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxuZnMvZGF4LmMtMjE5MC19XFxuZnMvZGF4LmM6MjE5MTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfZmluaXNoX3N5bmNfZmF1bHQpO1xcbmZzL2RheC5jLTIxOTItXFxuLS1cXG5mcy9kYXguYz0yMjcwPWludCBkYXhfcmVtYXBfZmlsZV9yYW5nZV9wcmVwKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxcbi0tXFxuZnMvZGF4LmMtMjI3Ny19XFxuZnMvZGF4LmM6MjI3ODpFWFBPUlRfU1lNQk9MX0dQTChkYXhfcmVtYXBfZmlsZV9yYW5nZV9wcmVwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTkuMTExODc5MDY3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4OTE5OTM5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBWCBFbnRyeSBQb2ludCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgREFYIGVudHJ5IHBvaW50cy4gSSBzZWUgdGhlIGNvcmUgb25lczogYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgYGRheF9kZWxldGVfbWFwcGluZ19yYW5nZWAsIGBkYXhfaW9tYXBfcndgLCBgZGF4X2lvbWFwX2ZhdWx0YCwgYGRheF9icmVha19sYXlvdXRgLCBgZGF4X3plcm9fcmFuZ2VgLCBhbmQgYGRheF9maWxlX3Vuc2hhcmVgLiBJJ20gbm90aW5nIHRoZSBpbnRlcm5hbCBjYWxsczogYGRheF9pb21hcF9mYXVsdGAgdXNlcyBgZGF4X2luc2VydF9lbnRyeWAgd2hpY2ggdGhlbiBnb2VzIHRvIGVpdGhlciBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAgb3IgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLiBgZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlYCBhbHNvIHV0aWxpemVzIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YC4gVGhlbiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIHVzZXMgYGRheF9idXN5X3BhZ2VgLCBhbmQgYGRheF9icmVha19sYXlvdXRgIGRvZXMgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCB0aGVuIGBkYXhfYnVzeV9wYWdlYC5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGVudmlyb25tZW50LiBDYW4gdGhpcyBEQVggZnVuY3Rpb25hbGl0eSBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nIGxpa2UgUUVNVSBvciBHQ0U/IFllcywgaXQgY2FuLCB1c2luZyBwbWVtIGRldmljZXMuIFRoaW5rIGVtdWxhdGVkIG52ZGltbSwgcG1lbSBpbiBRRU1VLCByYW1kaXNrcywgYnJkIG9yIGEgYGRheF9wbWVtYCBkZXZpY2Ugd2l0aCBgZXh0NC94ZnMgLW8gZGF4YC4gVGhhdCdzIGdvb2Q7IGl0IGluY3JlYXNlcyB0aGUgYWNjZXNzaWJpbGl0eSBmb3IgdGVzdGluZy5cblxuSXMgdGhpcyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/IEFic29sdXRlbHksIHllcyEgVGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBsb2dpYyBkZWFsaW5nIHdpdGggcmFkaXgtdHJlZS94YXJyYXkgZW50cnkgbWFuYWdlbWVudCDigJMgc3BlY2lmaWNhbGx5LCBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYCDigJMgYW5kIHRoZSBnb2FsIGlzIHRvIHByZXZlbnQgaW52YWxpZCBwYWdlL2ZvbGlvIHBvaW50ZXIgY29udmVyc2lvbnMgb24gemVybyBhbmQgZW1wdHkgZW50cmllcy4gSW1wb3J0YW50IHN0dWZmLlxuXG5MZXQncyBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIG1ha2UgdGhpcyB3b3JrLiBXZSd2ZSBnb3Q6IGBGU19EQVhgIGlzIGZ1bmRhbWVudGFsLiBJdCBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAgd2hpY2ggZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYWxzbyBgTU1VYC4gT2theSwgbGV0J3Mga2VlcCB0cmFjayBvZiBhbGwgdGhvc2U6IGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBNRU1PUllfSE9UUExVR2AsIGBGU19JT01BUGAsIGBEQVhgLlxuXG5MZXQncyBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBpbXBvcnRhbnQgc3ltYm9sczpcbkdvb2Qgbm9uLXN0YXRpYyBzeW1ib2xzIGFyZSwgYXMgbm90ZWQgYWJvdmU6IGBkYXhfaW9tYXBfZmF1bHRgLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCBgZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlYCwgYGRheF9icmVha19sYXlvdXRgLCBhbmQgYGRheF9pb21hcF9yd2AuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmc6XG4tICAgV29ydGhGdXp6aW5nOiBUcnVlICh3ZSd2ZSBlc3RhYmxpc2hlZCB0aGlzKS5cbi0gICBGb2N1c1N5bWJvbHM6IGBkYXhfaW9tYXBfZmF1bHRgLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCBgZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlYCwgYGRheF9icmVha19sYXlvdXRgLCBgZGF4X2lvbWFwX3J3YFxuLSAgIEVuYWJsZUNvbmZpZ3M6IGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBNRU1PUllfSE9UUExVR2AsIGBGU19JT01BUGAsIGBEQVhgXG4tICAgUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBidWcgZml4IGluIERBWCBmb2xpbyBjb252ZXJzaW9uIHdoZW4gaGFuZGxpbmcgemVybyBhbmQgZW1wdHkgREFYIGVudHJpZXMgaW4gYGZzL2RheC5jYC4gVGhpcyBpcyB0aGUgY29yZSBvZiBpdC5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gTGV0J3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ0LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxOToyOC4wMzE4MjE0NDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTY1MTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfREFYXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJEQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXhfaW9tYXBfZmF1bHRcIixcbiAgICBcImRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlXCIsXG4gICAgXCJkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VcIixcbiAgICBcImRheF9icmVha19sYXlvdXRcIixcbiAgICBcImRheF9pb21hcF9yd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIGludmFsaWQgZm9saW8vcGFnZSBjb252ZXJzaW9uIG9uIHplcm8gb3IgZW1wdHkgREFYIGVudHJpZXMgYnkgbW92aW5nIHRoZSBjYWxsIHRvIGRheF90b19mb2xpbygpIGFmdGVyIHRoZSB6ZXJvL2VtcHR5IGVudHJ5IGNoZWNrcyBpbiBkYXhfYXNzb2NpYXRlX2VudHJ5KCksIGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKSwgYW5kIGRheF9idXN5X3BhZ2UoKS4gVGhpcyBmaXhlcyBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVyaW5nIERBWCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBsYXlvdXQgYnJlYWtpbmcsIGFuZCBtYXBwaW5nIHRydW5jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfREFYXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJEQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXhfaW9tYXBfZmF1bHRcIixcbiAgICBcImRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlXCIsXG4gICAgXCJkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VcIixcbiAgICBcImRheF9icmVha19sYXlvdXRcIixcbiAgICBcImRheF9pb21hcF9yd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIGludmFsaWQgZm9saW8vcGFnZSBjb252ZXJzaW9uIG9uIHplcm8gb3IgZW1wdHkgREFYIGVudHJpZXMgYnkgbW92aW5nIHRoZSBjYWxsIHRvIGRheF90b19mb2xpbygpIGFmdGVyIHRoZSB6ZXJvL2VtcHR5IGVudHJ5IGNoZWNrcyBpbiBkYXhfYXNzb2NpYXRlX2VudHJ5KCksIGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKSwgYW5kIGRheF9idXN5X3BhZ2UoKS4gVGhpcyBmaXhlcyBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVyaW5nIERBWCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBsYXlvdXQgYnJlYWtpbmcsIGFuZCBtYXBwaW5nIHRydW5jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE5OjI4LjEwMzQ3ODc1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0ODU1MzAzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxOToyOC4xMDM5MDI4NThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjQ4NTEwMjA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRheF90b19mb2xpbyhlbnRyeSlgIGluIGBkYXhfYXNzb2NpYXRlX2VudHJ5KClgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSgpYCwgYW5kIGBkYXhfYnVzeV9wYWdlKClgIHNvIHRoYXQgaXQgaXMgb25seSBleGVjdXRlZCBhZnRlciB2ZXJpZnlpbmcgdGhhdCBgZW50cnlgIGlzIG5laXRoZXIgYSB6ZXJvIGVudHJ5IG5vciBhbiBlbXB0eSBlbnRyeSAoYGRheF9pc196ZXJvX2VudHJ5KClgIC8gYGRheF9pc19lbXB0eV9lbnRyeSgpYCkuIFxcblxcblRoaXMgY2hhbmdlIGF2b2lkcyBjYWxjdWxhdGluZyBpbnZhbGlkIGZvbGlvL3BhZ2UgcG9pbnRlcnMgZnJvbSBzcGVjaWFsIERBWCBlbnRyaWVzICh3aGljaCBjb3VsZCBsZWFkIHRvIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBzdHJ1Y3QgcGFnZSBhY2Nlc3NlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlciBhcml0aG1ldGljIG9yIGludmFsaWQgcGFnZSBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGNoZWNrcywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMxZjVlZTMxZjllMGY0Y2RiYzU3YjA3NTNmZGQ2Y2RjNThmMTY5ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA5OjEzOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguY1xuaW5kZXggNmJhNTAxNDJlZWIyZi4uOTAzMDU5OTZiMTA2NCAxMDA2NDRcbi0tLSBhL2ZzL2RheC5jXG4rKysgYi9mcy9kYXguY1xuQEAgLTQ4MCwxMSArNDgwLDEyIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBib29sIHNoYXJlZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNpemUgPSBkYXhfZW50cnlfc2l6ZShlbnRyeSksIGluZGV4O1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyBcdTAwMjYgfihzaXplIC0gMSkpO1xuIFx0aWYgKHNoYXJlZCBcdTAwMjZcdTAwMjYgKGZvbGlvLVx1MDAzZW1hcHBpbmcgfHwgZGF4X2ZvbGlvX2lzX3NoYXJlZChmb2xpbykpKSB7XG4gXHRcdGlmIChmb2xpby1cdTAwM2VtYXBwaW5nKVxuQEAgLTUwNSwyMSArNTA2LDIwIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIHN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0Ym9vbCB0cnVuYylcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbi1cbiBcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZGF4X2ZvbGlvX3B1dChmb2xpbyk7XG4rXHRkYXhfZm9saW9fcHV0KGRheF90b19mb2xpbyhlbnRyeSkpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXG4ge1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiBcdGlmIChmb2xpb19yZWZfY291bnQoZm9saW8pIC0gZm9saW9fbWFwY291bnQoZm9saW8pKVxuIFx0XHRyZXR1cm4gXHUwMDI2Zm9saW8tXHUwMDNlcGFnZTtcbiBcdGVsc2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE5OjI4LjEwMzkwNDA4OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDk4MzczMjYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGBmcy9kYXguY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlcidzIGFza2luZyBpZiB0aGlzIHBhdGNoIHRvIGBmcy9kYXguY2Agd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBkbyBhIHF1aWNrIHJpc2sgYXNzZXNzbWVudCBmaXJzdC4gVGhlIHJlcXVlc3QgaXMgYSBwcmV0dHkgc3RhbmRhcmQgTGludXgga2VybmVsIFFBIHRoaW5nIOKAkyBldmFsdWF0aW5nIGEgcGF0Y2ggZGlmZiBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcywgcHJpbWFyaWx5IHdlaWdoaW5nIHRob3NlIHJpc2tzIGFnYWluc3QgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBJdCdzIGEgbG93LXNldmVyaXR5LCBiZW5pZ24gc2NlbmFyaW8uIEZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIGl0J3MgdG90YWxseSBzYWZlIHRvIHByb2NlZWQ7IG5vIGV4cGxvaXQgZ2VuZXJhdGlvbiBvciBhbnl0aGluZyBtYWxpY2lvdXMgaW52b2x2ZWQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggaXRzZWxmLiBJIHNlZSBhIGBkaWZmYCBoZXJlLCBhbmQgaXQncyBtb2RpZnlpbmcgc2V2ZXJhbCBmdW5jdGlvbnM6IGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLCBhbmQgYGRheF9idXN5X3BhZ2VgLiBUaGUgbWFpbiB0aGluZyBzZWVtcyB0byBiZSB0aGF0IHRoZXkncmUgcmVvcmRlcmluZyBzb21lIGxpbmVzIGFuZCBkZWNsYXJpbmcgYHN0cnVjdCBmb2xpbyAqZm9saW9gIGJlZm9yZSBpdHMgdXNhZ2UgaW4gdGhlc2UgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGluIHRoZSBvcmlnaW5hbCBjb2RlLCB0aGUgYGZvbGlvYCB2YXJpYWJsZSB3YXMgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgd2hlbiBjYWxsaW5nIGBkYXhfdG9fZm9saW8oZW50cnkpYCwgYnV0IG5vdyBpdCdzIGRlY2xhcmVkIHNlcGFyYXRlbHkuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0cnlpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS5cblxuTGV0IG1lIHNlZSB3aGF0IGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcyBkb2luZy4gTGV0IG1lIHVzZSBncmVwcGVyIG9yIG1heWJlIGp1c3QgYHJlYWQtZmlsZWAgdG8gY2hlY2sgYGZzL2RheC5jYCB0byB1bmRlcnN0YW5kIHRoZSBgZGF4X3RvX2ZvbGlvYCBmdW5jdGlvbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxOTo1My4wODc2NDA1ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDI5MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF90b19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kYXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz02Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxcbi0tXFxuZnMvZGF4LmMtNzEtXFxuZnMvZGF4LmM6NzI6c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTczLXtcXG4tLVxcbmZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG5mcy9kYXguYy00NTkte1xcbmZzL2RheC5jOjQ2MDpcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG5mcy9kYXguYy00NjEtXFx0aW50IG9yZGVyID0gZGF4X2VudHJ5X29yZGVyKGVudHJ5KTtcXG4tLVxcbmZzL2RheC5jPTQ3OD1zdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTQ4Ny1cXG5mcy9kYXguYzo0ODg6XFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbmZzL2RheC5jLTQ4OS1cXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyBcXHUwMDI2IH4oc2l6ZSAtIDEpKTtcXG4tLVxcbmZzL2RheC5jLTQ5OS1cXHRcXHRkYXhfZm9saW9faW5pdChlbnRyeSk7XFxuZnMvZGF4LmM6NTAwOlxcdFxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG5mcy9kYXguYy01MDEtXFx0XFx0Zm9saW8tXFx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xcbi0tXFxuZnMvZGF4LmM9NTA2PXN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtNTExLVxcbmZzL2RheC5jOjUxMjpcXHRkYXhfZm9saW9fcHV0KGRheF90b19mb2xpbyhlbnRyeSkpO1xcbmZzL2RheC5jLTUxMy19XFxuLS1cXG5mcy9kYXguYz01MTU9c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfYnVzeV9wYWdlKHZvaWQgKmVudHJ5KVxcbi0tXFxuZnMvZGF4LmMtNTIxLVxcbmZzL2RheC5jOjUyMjpcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuZnMvZGF4LmMtNTIzLVxcdGlmIChmb2xpb19yZWZfY291bnQoZm9saW8pIC0gZm9saW9fbWFwY291bnQoZm9saW8pKVxcbi0tXFxuZnMvZGF4LmM9MTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfZmF1bHRfaXRlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE4ODQtXFxuZnMvZGF4LmM6MTg4NTpcXHRmb2xpbyA9IGRheF90b19mb2xpbygqZW50cnkpO1xcbmZzL2RheC5jLTE4ODYtXFx0aWYgKGRheF9mYXVsdF9pc19zeW5jaHJvbm91cyhpdGVyLCB2bWYtXFx1MDAzZXZtYSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE5OjUzLjEzNDA3NjUwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM3OTE1NDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZGF4X3RvX2ZvbGlvYCBmdW5jdGlvbnMsIHNvIEknbSBnb2luZyB0byBsb29rIGF0IGxpbmVzIDY1LTEwMCBvZiBgZnMvZGF4LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgZGlyZWN0IGFjY2VzcyAoREFYKSBpbnRlcmFjdHMgd2l0aCBmb2xpbyBzdHJ1Y3R1cmVzLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBEQVggYWRkcmVzcyBzcGFjZSBhbmQgdGhlIHBoeXNpY2FsIG1lbW9yeSByZXByZXNlbnRlZCBieSBmb2xpb3MuIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCB0byBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IGluIGhpZ2gtcGVyZm9ybWFuY2Ugc3RvcmFnZSBzY2VuYXJpb3MsIGFuZCBzbyBpdCBzaG91bGQgaG9wZWZ1bGx5IGJlIGlsbHVtaW5hdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIwOjAzLjUxMzIzMzYyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kYXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHQjZGVmaW5lIERBWF9FTVBUWVxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMylcXG4gIDY2OlxcdFxcbiAgNjc6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGF4X3RvX3Bmbih2b2lkICplbnRyeSlcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHJldHVybiB4YV90b192YWx1ZShlbnRyeSkgXFx1MDAzZVxcdTAwM2UgREFYX1NISUZUO1xcbiAgNzA6XFx0fVxcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgc3RydWN0IGZvbGlvICpkYXhfdG9fZm9saW8odm9pZCAqZW50cnkpXFxuICA3MzpcXHR7XFxuICA3NDpcXHRcXHRyZXR1cm4gcGFnZV9mb2xpbyhwZm5fdG9fcGFnZShkYXhfdG9fcGZuKGVudHJ5KSkpO1xcbiAgNzU6XFx0fVxcbiAgNzY6XFx0XFxuICA3NzpcXHRzdGF0aWMgdm9pZCAqZGF4X21ha2VfZW50cnkodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHRyZXR1cm4geGFfbWtfdmFsdWUoZmxhZ3MgfCAocGZuIFxcdTAwM2NcXHUwMDNjIERBWF9TSElGVCkpO1xcbiAgODA6XFx0fVxcbiAgODE6XFx0XFxuICA4MjpcXHRzdGF0aWMgYm9vbCBkYXhfaXNfbG9ja2VkKHZvaWQgKmVudHJ5KVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0cmV0dXJuIHhhX3RvX3ZhbHVlKGVudHJ5KSBcXHUwMDI2IERBWF9MT0NLRUQ7XFxuICA4NTpcXHR9XFxuICA4NjpcXHRcXG4gIDg3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZGF4X2VudHJ5X29yZGVyKHZvaWQgKmVudHJ5KVxcbiAgODg6XFx0e1xcbiAgODk6XFx0XFx0aWYgKHhhX3RvX3ZhbHVlKGVudHJ5KSBcXHUwMDI2IERBWF9QTUQpXFxuICA5MDpcXHRcXHRcXHRyZXR1cm4gUE1EX09SREVSO1xcbiAgOTE6XFx0XFx0cmV0dXJuIDA7XFxuICA5MjpcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF9pc19wbWRfZW50cnkodm9pZCAqZW50cnkpXFxuICA5NTpcXHR7XFxuICA5NjpcXHRcXHRyZXR1cm4geGFfdG9fdmFsdWUoZW50cnkpIFxcdTAwMjYgREFYX1BNRDtcXG4gIDk3OlxcdH1cXG4gIDk4OlxcdFxcbiAgOTk6XFx0c3RhdGljIGJvb2wgZGF4X2lzX3B0ZV9lbnRyeSh2b2lkICplbnRyeSlcXG4gMTAwOlxcdHtcXG4gMTAxOlxcdFxcdHJldHVybiAhKHhhX3RvX3ZhbHVlKGVudHJ5KSBcXHUwMDI2IERBWF9QTUQpO1xcbiAxMDI6XFx0fVxcbiAxMDM6XFx0XFxuIDEwNDpcXHRzdGF0aWMgaW50IGRheF9pc196ZXJvX2VudHJ5KHZvaWQgKmVudHJ5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMDowMy41MTM0MTY4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDc1NTY3ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRml4IGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBhcHBlYXJzIHdlJ3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiBob3cgd2UgaGFuZGxlIERBWCBlbnRyaWVzLCBzcGVjaWZpY2FsbHksIHdoZW4gdGhvc2UgZW50cmllcyBhcmUgemVybyBvciBlbXB0eS4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcyBiZWluZyBjYWxsZWQgKmJlZm9yZSogd2UncmUgY2hlY2tpbmcgaWYgYGVudHJ5YCBpcyBhIHplcm8gb3IgZW1wdHkgZW50cnkuIFRoaXMgbWVhbnMgd2UgY291bGQgYmUgdHJ5aW5nIHRvIGNvbXB1dGUgYSBmb2xpbywgYW5kIHRoZXJlZm9yZSBkZXJlZmVyZW5jaW5nIGEgcG90ZW50aWFsbHkgaW52YWxpZCBwYWdlLCBsZWFkaW5nIHRvIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGV2ZW4gYSBjcmFzaCBpZiB3ZSB0cnkgdG8gYWNjZXNzIGEgYm9ndXMgYHN0cnVjdCBwYWdlYC5cblxuVGhlIHNvbHV0aW9uLCB3aGljaCBJIGFncmVlIHdpdGgsIGlzIHRvIG1vdmUgdGhlIGBkYXhfdG9fZm9saW8oZW50cnkpYCBjYWxsICphZnRlciogdGhlIGBpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpIHJldHVybjtgIGNoZWNrLiBUaGlzIHByZXZlbnRzIHRoZSBjb21wdXRhdGlvbiBhbmQgcG90ZW50aWFsIGRlcmVmZXJlbmNlIG9uIGludmFsaWQgZW50cmllcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIG9yIGludGVyYWN0cyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBiZWNhdXNlIHRoYXQncyB3aGVyZSBLTVNBTiBjb21lcyBpbnRvIHBsYXkuIExldCdzIG1ldGhvZGljYWxseSBjaGVjazpcblxuKiAgIERvZXMgdGhpcyBwYXRjaCB0b3VjaCBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlPyBObywgbm90IGF0IGFsbC5cbiogICBEb2VzIGl0IGludHJvZHVjZSBvciBtb2RpZnkgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBvciBwb3RlbnRpYWxseSBjcmVhdGUgaW5mb3JtYXRpb24gbGVha3M/IE5vLCBJIGRvbid0IHNlZSBhbnkgb2YgdGhhdC4gVGhlIGBmb2xpb2AgdmFyaWFibGUgZ2V0cyBhc3NpZ25lZCBhIHZhbHVlIG9ubHkgKmFmdGVyKiB0aGUgZ3VhcmQgY2hlY2ssIGFuZCB0aGUgYGVudHJ5YCBpcyBhbiBhcmd1bWVudCBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24sIHNvIGl0J3MgaW5pdGlhbGl6ZWQgYmVmb3JlLlxuKiAgIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlLCBhcyBtZW50aW9uZWQsIHRoZSBgZm9saW9gIGlzIG9ubHkgYXNzaWduZWQgYWZ0ZXIgdGhlIGNoZWNrIGFuZCB0aGUgZW50cnkgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiogICBVbHRpbWF0ZWx5LCB0aGUgYnVnIGZpeGVkIGlzIGFib3V0IGNvbXB1dGluZyBhIGZvbGlvIHBvaW50ZXIgZnJvbSBzcGVjaWFsIHplcm8vZW1wdHkgZW50cmllcywgc28gYW4gaW52YWxpZCBwb2ludGVyIGNhbGN1bGF0aW9uLlxuKiAgIERpZCBLTVNBTiBkZXRlY3QgaXQ/IE5vLlxuXG5TbywgdGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgcG9pbnRlci9jb250cm9sIGZsb3cgZml4LiBJdCBkb2Vzbid0IHNlZW0gdG8gYmUgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQncyBtb3JlIG9mIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoZSByZWFzb25pbmcsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHdoeSB3ZSAqZG9uJ3QqIG5lZWQgS01TQU4gaGVyZS4gV2UgbmVlZCBhIGNsZWFyIGV4cGxhbmF0aW9uIHRoYXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtNU0FOOlxuXG4qICAgKipLZXkgRGlzdGluY3Rpb24qKjogU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyBhbHJlYWR5IGVmZmVjdGl2ZWx5IGNhdGNoIHRob3NlIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBvdXQtb2YtYm91bmRzIGVycm9ycywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbG9ja2luZyBwcm9ibGVtcywgZXRjLiBUaGF0J3Mgd2hhdCBpdCdzIGJ1aWx0IGZvci5cbiogICBLTVNBTidzIHNwZWNpZmljIHJvbGUgaXMgdG8gZGV0ZWN0ICpyZWFkcyogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGNhdGNoIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGF0J3MgaXRzIG5pY2hlLlxuKiAgIEluIHRoaXMgcGFydGljdWxhciBwYXRjaCwgYWxsIHdlJ3JlIGRvaW5nIGlzIHJlYXJyYW5naW5nIHRoZSBldmFsdWF0aW9uIG9mIGBkYXhfdG9fZm9saW8oZW50cnkpYCB0byBoYXBwZW4gKmFmdGVyKiB0aGUgZ3VhcmQuIEl0J3MgaW4gYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeWAsIGFuZCBgZGF4X2J1c3lfcGFnZWAuXG4qICAgV2UncmUgbm90IGludHJvZHVjaW5nIG9yIGFsbG9jYXRpbmcgYW55IG5ldyBtZW1vcnksIGxlYXZpbmcgYW55IG1lbW9yeSB1bmluaXRpYWxpemVkLCBjb3B5aW5nIGFueSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zaW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMuXG5cblRoaXMgaXMgYWxsIHN0YW5kYXJkIG1lbW9yeSBhY2Nlc3MgYW5kIGNvbnRyb2wgZmxvdy4gVGhlcmUncyBub3RoaW5nIEtNU0FOLXNwZWNpZmljIGFib3V0IGl0LlxuXG5Pa2F5LCB0aGF0J3MgY29tcHJlaGVuc2l2ZS4gSSdtIGNvbmZpZGVudCBpbiB0aGUgYW5hbHlzaXMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNywiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMDoyMC41ODg5ODc3NTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpbiBgZGF4X2Fzc29jaWF0ZV9lbnRyeSgpYCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKWAsIGFuZCBgZGF4X2J1c3lfcGFnZSgpYCBzbyB0aGF0IGl0IGlzIG9ubHkgZXhlY3V0ZWQgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgYGVudHJ5YCBpcyBuZWl0aGVyIGEgemVybyBlbnRyeSBub3IgYW4gZW1wdHkgZW50cnkgKGBkYXhfaXNfemVyb19lbnRyeSgpYCAvIGBkYXhfaXNfZW1wdHlfZW50cnkoKWApLiBcXG5cXG5UaGlzIGNoYW5nZSBhdm9pZHMgY2FsY3VsYXRpbmcgaW52YWxpZCBmb2xpby9wYWdlIHBvaW50ZXJzIGZyb20gc3BlY2lhbCBEQVggZW50cmllcyAod2hpY2ggY291bGQgbGVhZCB0byBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgc3RydWN0IHBhZ2UgYWNjZXNzZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYyBvciBpbnZhbGlkIHBhZ2UgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjaGVja3MsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaW4gYGRheF9hc3NvY2lhdGVfZW50cnkoKWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KClgLCBhbmQgYGRheF9idXN5X3BhZ2UoKWAgc28gdGhhdCBpdCBpcyBvbmx5IGV4ZWN1dGVkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGBlbnRyeWAgaXMgbmVpdGhlciBhIHplcm8gZW50cnkgbm9yIGFuIGVtcHR5IGVudHJ5IChgZGF4X2lzX3plcm9fZW50cnkoKWAgLyBgZGF4X2lzX2VtcHR5X2VudHJ5KClgKS4gXFxuXFxuVGhpcyBjaGFuZ2UgYXZvaWRzIGNhbGN1bGF0aW5nIGludmFsaWQgZm9saW8vcGFnZSBwb2ludGVycyBmcm9tIHNwZWNpYWwgREFYIGVudHJpZXMgKHdoaWNoIGNvdWxkIGxlYWQgdG8gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdXQtb2YtYm91bmRzIHN0cnVjdCBwYWdlIGFjY2Vzc2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gaW52YWxpZCBwb2ludGVyIGFyaXRobWV0aWMgb3IgaW52YWxpZCBwYWdlIGFjY2Vzc2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgY2hlY2tzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 08:57:40 +0000 UTC FinishedAt: 2026-09-02 09:20:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_DAX", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "MEMORY_HOTPLUG", "FS_IOMAP", "DAX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_DAX", "ZONE_DEVICE", "MEMORY_HOTREMOVE", "MEMORY_HOTPLUG", "FS_IOMAP", "DAX" ], "series_id": "6aa87b6c-d980-481a-8a76-2e214fb20142" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "dax_iomap_fault", "dax_layout_busy_page_range", "dax_delete_mapping_range", "dax_break_layout", "dax_iomap_rw" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9pb21hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZGF4X2JyZWFrX2xheW91dCYjMzQ7LAogICAgJiMzNDtkYXhfaW9tYXBfcncmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaW4gYGRheF9hc3NvY2lhdGVfZW50cnkoKWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KClgLCBhbmQgYGRheF9idXN5X3BhZ2UoKWAgc28gdGhhdCBpdCBpcyBvbmx5IGV4ZWN1dGVkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGBlbnRyeWAgaXMgbmVpdGhlciBhIHplcm8gZW50cnkgbm9yIGFuIGVtcHR5IGVudHJ5IChgZGF4X2lzX3plcm9fZW50cnkoKWAgLyBgZGF4X2lzX2VtcHR5X2VudHJ5KClgKS4gXG5cblRoaXMgY2hhbmdlIGF2b2lkcyBjYWxjdWxhdGluZyBpbnZhbGlkIGZvbGlvL3BhZ2UgcG9pbnRlcnMgZnJvbSBzcGVjaWFsIERBWCBlbnRyaWVzICh3aGljaCBjb3VsZCBsZWFkIHRvIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBzdHJ1Y3QgcGFnZSBhY2Nlc3NlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlciBhcml0aG1ldGljIG9yIGludmFsaWQgcGFnZSBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGNoZWNrcywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmV2ZW50cyBpbnZhbGlkIGZvbGlvL3BhZ2UgY29udmVyc2lvbiBvbiB6ZXJvIG9yIGVtcHR5IERBWCBlbnRyaWVzIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBkYXhfdG9fZm9saW8oKSBhZnRlciB0aGUgemVyby9lbXB0eSBlbnRyeSBjaGVja3MgaW4gZGF4X2Fzc29jaWF0ZV9lbnRyeSgpLCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KCksIGFuZCBkYXhfYnVzeV9wYWdlKCkuIFRoaXMgZml4ZXMgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1cmluZyBEQVggcGFnZSBmYXVsdCBoYW5kbGluZywgbGF5b3V0IGJyZWFraW5nLCBhbmQgbWFwcGluZyB0cnVuY2F0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzFmNWVlMzFmOWUwZjRjZGJjNTdiMDc1M2ZkZDZjZGM1OGYxNjk4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDk6MTM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguY1xuaW5kZXggNmJhNTAxNDJlZWIyZi4uOTAzMDU5OTZiMTA2NCAxMDA2NDRcbi0tLSBhL2ZzL2RheC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9kYXguY1xuQEAgLTQ4MCwxMSAmIzQzOzQ4MCwxMiBAQCBzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgYm9vbCBzaGFyZWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzaXplID0gZGF4X2VudHJ5X3NpemUoZW50cnkpLCBpbmRleDtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyBcdTAwMjYgfihzaXplIC0gMSkpO1xuIFx0aWYgKHNoYXJlZCBcdTAwMjZcdTAwMjYgKGZvbGlvLVx1MDAzZW1hcHBpbmcgfHwgZGF4X2ZvbGlvX2lzX3NoYXJlZChmb2xpbykpKSB7XG4gXHRcdGlmIChmb2xpby1cdTAwM2VtYXBwaW5nKVxuQEAgLTUwNSwyMSAmIzQzOzUwNiwyMCBAQCBzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRcdGJvb2wgdHJ1bmMpXG4ge1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4tXG4gXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGRheF9mb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcbiBcdFx0cmV0dXJuIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2U7XG4gXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfREFYJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7REFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGF4X2lvbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2RheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlJiMzNDssCiAgICAmIzM0O2RheF9kZWxldGVfbWFwcGluZ19yYW5nZSYjMzQ7LAogICAgJiMzNDtkYXhfYnJlYWtfbGF5b3V0JiMzNDssCiAgICAmIzM0O2RheF9pb21hcF9ydyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmV2ZW50cyBpbnZhbGlkIGZvbGlvL3BhZ2UgY29udmVyc2lvbiBvbiB6ZXJvIG9yIGVtcHR5IERBWCBlbnRyaWVzIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBkYXhfdG9fZm9saW8oKSBhZnRlciB0aGUgemVyby9lbXB0eSBlbnRyeSBjaGVja3MgaW4gZGF4X2Fzc29jaWF0ZV9lbnRyeSgpLCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KCksIGFuZCBkYXhfYnVzeV9wYWdlKCkuIFRoaXMgZml4ZXMgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1cmluZyBEQVggcGFnZSBmYXVsdCBoYW5kbGluZywgbGF5b3V0IGJyZWFraW5nLCBhbmQgbWFwcGluZyB0cnVuY2F0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzFmNWVlMzFmOWUwZjRjZGJjNTdiMDc1M2ZkZDZjZGM1OGYxNjk4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDk6MTM6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jCmluZGV4IDZiYTUwMTQyZWViMmYuLjkwMzA1OTk2YjEwNjQgMTAwNjQ0Ci0tLSBhL2ZzL2RheC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RheC5jCkBAIC00ODAsMTEgJiM0Mzs0ODAsMTIgQEAgc3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBib29sIHNoYXJlZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBkYXhfZW50cnlfc2l6ZShlbnRyeSksIGluZGV4OwotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJaWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKQogCQlyZXR1cm47CiAKJiM0MzsJZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwogCWluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzICZhbXA7IH4oc2l6ZSAtIDEpKTsKIAlpZiAoc2hhcmVkICZhbXA7JmFtcDsgKGZvbGlvLSZndDttYXBwaW5nIHx8IGRheF9mb2xpb19pc19zaGFyZWQoZm9saW8pKSkgewogCQlpZiAoZm9saW8tJmd0O21hcHBpbmcpCkBAIC01MDUsMjEgJiM0Mzs1MDYsMjAgQEAgc3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiBzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlib29sIHRydW5jKQogewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwotCiAJaWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKQogCQlyZXR1cm47CiAKLQlkYXhfZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJZGF4X2ZvbGlvX3B1dChkYXhfdG9fZm9saW8oZW50cnkpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwYWdlICpkYXhfYnVzeV9wYWdlKHZvaWQgKmVudHJ5KQogewotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJaWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7CiAJaWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSBmb2xpb19tYXBjb3VudChmb2xpbykpCiAJCXJldHVybiAmYW1wO2ZvbGlvLSZndDtwYWdlOwogCWVsc2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYW5kIGlmIHNvLCB3aGF0IG91ciB0YXJnZXQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBwcm9taXNpbmcsIGdpdmVuIHRoYXQgaXQmIzM5O3MgdG91Y2hpbmcgYGZzL2RheC5jYCwgd2hpY2ggaXMgYWx3YXlzIGFuIGludGVyZXN0aW5nIGFyZWEuCgpUaGUgcGF0Y2gmIzM5O3MgY29yZSBjaGFuZ2UgaXMgd2l0aGluIHRoZSBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGxpbmUgYHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO2AgaXMgbm93IGd1YXJkZWQgYnkgYSBjaGVjazogYGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSkgcmV0dXJuO2AuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGBkYXhfdG9fZm9saW8oZW50cnkpYCBjb3VsZCBsZWFkIHRvIGEgY3Jhc2gsIGRlcmVmZXJlbmNlIGludmFsaWQgbWVtb3J5LCBvciBwZXJmb3JtIGFuIGlsbGVnYWwgY29udmVyc2lvbiBpZiB0aGUgYGVudHJ5YCB2YWx1ZSBpcyBlaXRoZXIgemVybyBvciBlbXB0eS4gSXQgc3VnZ2VzdHMgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZSBpZiB0aG9zZSBjaGVja3Mgd2VyZW4mIzM5O3QgaW4gcGxhY2UuCgpTbywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBmdWxseSwgSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGBmcy9kYXguY2AgYXJvdW5kIGxpbmVzIDQ3MC01MzAuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYW5kIGdldCBhIGZlZWwgZm9yIGhvdyBgZW50cnlgIGlzIGhhbmRsZWQgaW4gZ2VuZXJhbC4gVGhpcyBzaG91bGQgaGVscCBtZSBpZGVudGlmeSBnb29kIGZ1enppbmcgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdCAqIGRheF9mb2xpb19wdXQoKSB3aGVuIHRoZXkgd2VyZSByZW1vdmVkIGZyb20gdGhlaXJcbiA0NjY6XHRcdCAqIGZpbmFsIG1hcHBpbmcuXG4gNDY3Olx0XHQgKi9cbiA0Njg6XHRcdFdBUk5fT05fT05DRShmb2xpb19vcmRlcihmb2xpbykpO1xuIDQ2OTpcdFxuIDQ3MDpcdFx0aWYgKG9yZGVyIFx1MDAzZSAwKSB7XG4gNDcxOlx0XHRcdHByZXBfY29tcG91bmRfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBvcmRlcik7XG4gNDcyOlx0XHRcdGlmIChvcmRlciBcdTAwM2UgMSlcbiA0NzM6XHRcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG4gNDc0Olx0XHRcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbiA0NzU6XHRcdH1cbiA0NzY6XHR9XG4gNDc3Olx0XG4gNDc4Olx0c3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gNDc5Olx0XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiA0ODA6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgYm9vbCBzaGFyZWQpXG4gNDgxOlx0e1xuIDQ4MjpcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gZGF4X2VudHJ5X3NpemUoZW50cnkpLCBpbmRleDtcbiA0ODM6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gNDg0Olx0XG4gNDg1Olx0XHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gNDg2Olx0XHRcdHJldHVybjtcbiA0ODc6XHRcbiA0ODg6XHRcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiA0ODk6XHRcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFx1MDAyNiB+KHNpemUgLSAxKSk7XG4gNDkwOlx0XHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiAoZm9saW8tXHUwMDNlbWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHtcbiA0OTE6XHRcdFx0aWYgKGZvbGlvLVx1MDAzZW1hcHBpbmcpXG4gNDkyOlx0XHRcdFx0ZGF4X2ZvbGlvX21ha2Vfc2hhcmVkKGZvbGlvKTtcbiA0OTM6XHRcbiA0OTQ6XHRcdFx0V0FSTl9PTl9PTkNFKCFmb2xpby1cdTAwM2VzaGFyZSk7XG4gNDk1Olx0XHRcdFdBUk5fT05fT05DRShkYXhfZW50cnlfb3JkZXIoZW50cnkpICE9IGZvbGlvX29yZGVyKGZvbGlvKSk7XG4gNDk2Olx0XHRcdGZvbGlvLVx1MDAzZXNoYXJlJiM0MzsmIzQzOztcbiA0OTc6XHRcdH0gZWxzZSB7XG4gNDk4Olx0XHRcdFdBUk5fT05fT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKTtcbiA0OTk6XHRcdFx0ZGF4X2ZvbGlvX2luaXQoZW50cnkpO1xuIDUwMDpcdFx0XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gNTAxOlx0XHRcdGZvbGlvLVx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xuIDUwMjpcdFx0XHRmb2xpby1cdTAwM2VpbmRleCA9IGluZGV4O1xuIDUwMzpcdFx0fVxuIDUwNDpcdH1cbiA1MDU6XHRcbiA1MDY6XHRzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiA1MDc6XHRcdFx0XHRcdGJvb2wgdHJ1bmMpXG4gNTA4Olx0e1xuIDUwOTpcdFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIDUxMDpcdFx0XHRyZXR1cm47XG4gNTExOlx0XG4gNTEyOlx0XHRkYXhfZm9saW9fcHV0KGRheF90b19mb2xpbyhlbnRyeSkpO1xuIDUxMzpcdH1cbiA1MTQ6XHRcbiA1MTU6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXG4gNTE2Olx0e1xuIDUxNzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiA1MTg6XHRcbiA1MTk6XHRcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiA1MjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNTIxOlx0XG4gNTIyOlx0XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gNTIzOlx0XHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcbiA1MjQ6XHRcdFx0cmV0dXJuIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2U7XG4gNTI1Olx0XHRlbHNlXG4gNTI2Olx0XHRcdHJldHVybiBOVUxMO1xuIDUyNzpcdH1cbiA1Mjg6XHRcbiA1Mjk6XHQvKipcbiA1MzA6XHQgKiBkYXhfbG9ja19mb2xpbyAtIExvY2sgdGhlIERBWCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGEgZm9saW9cbiA1MzE6XHQgKiBAZm9saW86IFRoZSBmb2xpbyB3aG9zZSBlbnRyeSB3ZSB3YW50IHRvIGxvY2tcbiA1MzI6XHQgKlxuIDUzMzpcdCAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC5cbiA1MzQ6XHQgKiBSZXR1cm46IEEgY29va2llIHRvIHBhc3MgdG8gZGF4X3VubG9ja19mb2xpbygpIG9yIDAgaWYgdGhlIGVudHJ5IGNvdWxkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGRheF90b19mb2xpb2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBkYXhfdG9fZm9saW9gIGZ1bmN0aW9uIG9yIHNjcmlwdCBpcyBhbGwgYWJvdXQuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgYWx3YXlzIHRoZSBzYW1lOiBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIGl0JiMzOTtzICp1c2VkKi4gSSYjMzk7bGwganVtcCByaWdodCBpbnRvIGdyZXBwaW5nIGZvciB0aGUgdGVybSAmIzM0O2RheF90b19mb2xpbyYjMzQ7IHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayBvdmVydmlldyBvZiBob3cgaXQmIzM5O3MgaW52b2tlZCwgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgd2hhdCBraW5kIG9mIGlucHV0cyBhbmQgb3V0cHV0cyBpdCYjMzk7cyBkZWFsaW5nIHdpdGguIFRoYXQgY29udGV4dCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBJdCBzaG91bGQgZ2l2ZSBtZSBhIGRlY2VudCBzdGFydGluZyBwb2ludCBmcm9tIHdoaWNoIHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X3RvX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTY3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF90b19wZm4odm9pZCAqZW50cnkpXG4tLVxuZnMvZGF4LmMtNzEtXG5mcy9kYXguYzo3MjpzdGF0aWMgc3RydWN0IGZvbGlvICpkYXhfdG9fZm9saW8odm9pZCAqZW50cnkpXG5mcy9kYXguYy03My17XG4tLVxuZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtNDU5LXtcbmZzL2RheC5jOjQ2MDpcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuZnMvZGF4LmMtNDYxLVx0aW50IG9yZGVyID0gZGF4X2VudHJ5X29yZGVyKGVudHJ5KTtcbi0tXG5mcy9kYXguYz00Nzg9c3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZGF4LmMtNDg3LVxuZnMvZGF4LmM6NDg4Olx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuZnMvZGF4LmMtNDg5LVx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MgXHUwMDI2IH4oc2l6ZSAtIDEpKTtcbi0tXG5mcy9kYXguYy00OTktXHRcdGRheF9mb2xpb19pbml0KGVudHJ5KTtcbmZzL2RheC5jOjUwMDpcdFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuZnMvZGF4LmMtNTAxLVx0XHRmb2xpby1cdTAwM2VtYXBwaW5nID0gbWFwcGluZztcbi0tXG5mcy9kYXguYz01MDY9c3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZGF4LmMtNTExLVxuZnMvZGF4LmM6NTEyOlx0ZGF4X2ZvbGlvX3B1dChkYXhfdG9fZm9saW8oZW50cnkpKTtcbmZzL2RheC5jLTUxMy19XG4tLVxuZnMvZGF4LmM9NTE1PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbi0tXG5mcy9kYXguYy01MjEtXG5mcy9kYXguYzo1MjI6XHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG5mcy9kYXguYy01MjMtXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcbi0tXG5mcy9kYXguYz0xODQyPXN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9pdGVyKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE4ODQtXG5mcy9kYXguYzoxODg1Olx0Zm9saW8gPSBkYXhfdG9fZm9saW8oKmVudHJ5KTtcbmZzL2RheC5jLTE4ODYtXHRpZiAoZGF4X2ZhdWx0X2lzX3N5bmNocm9ub3VzKGl0ZXIsIHZtZi1cdTAwM2V2bWEpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGBmcy9kYXguY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBEQVggRGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyA2MC04MCBvZiBgZnMvZGF4LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHdoZXJlIHdlJiMzOTtyZSBzZWVpbmcgc29tZSBjb3JlIERBWCAoRGlyZWN0IEFjY2VzcykgZnVuY3Rpb25hbGl0eSBraWNraW5nIGluLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYWN0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IHNjYW5uaW5nIGZvciB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgZnVuY3Rpb24/IFdoYXQmIzM5O3MgdGhlIGNhbGxpbmcgcG9pbnQ/IE15IGludHVpdGlvbiwgYmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgaXMgdGhhdCB0aGVzZSBsaW5lcyBhcmUgbGlrZWx5IGhhbmRsaW5nIGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnkgZnJvbSBhIGZpbGUgc3lzdGVtIHBlcnNwZWN0aXZlLgoKT2theSwgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlJiMzOTtzIG9iamVjdGl2ZS4gV2UgYXJlIGxpa2VseSBsb29raW5nIGF0IGZpbGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnRlbmRlZCB0byBnaXZlIHVzZXJsYW5kIHRoZSBhYmlsaXR5IHRvIGFjY2VzcyBkYXRhIGRpcmVjdGx5IGZyb20gcGVyc2lzdGVudCBtZW1vcnkuIFRoZSBkZXRhaWxzIGFyZSBtb3N0IHByb2JhYmx5IGFib3V0IGhvdyBEQVggaW50ZWdyYXRlcyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBvciBzb21lIGZvcm0gb2YgbWVtb3J5IG1hcHBpbmcuIEkmIzM5O20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIGBpb21hcGAsIHBvdGVudGlhbGx5IHNvbWUgZGlyZWN0IEkvTyBsb2dpYywgb3IgbWF5YmUgZXZlbiBhZGRyZXNzaW5nIGNoYWxsZW5nZXMgYXJvdW5kIHBhZ2UgZmF1bHRzIGFuZCBjb2hlcmVuY2UuIEkgYWxzbyBhc3N1bWUgdGhlcmUgYXJlIGNoZWNrcyBmb3IgcGVybWlzc2lvbnMgYW5kIGRhdGEgYWxpZ25tZW50LiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nLCB0aGF0JiMzOTtzIGNydWNpYWwgaGVyZSwgZXNwZWNpYWxseSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyB3aXRoIHRoZSBEQVggYWNjZXNzIHBhdGguCgpOb3cgSSBhbSBnb2luZyB0byBzZWUgaWYgYW55IG9mIHRoZSBjaGVja3MgYW5kIGRhdGEgbWFwcGluZ3MgYXJlIGZhbWlsaWFyLCBvciBoYXZlIGNoYW5nZWQgcmVjZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHQgKi9cbiAgNjE6XHQjZGVmaW5lIERBWF9TSElGVFx0KDQpXG4gIDYyOlx0I2RlZmluZSBEQVhfTE9DS0VEXHQoMVVMIFx1MDAzY1x1MDAzYyAwKVxuICA2MzpcdCNkZWZpbmUgREFYX1BNRFx0XHQoMVVMIFx1MDAzY1x1MDAzYyAxKVxuICA2NDpcdCNkZWZpbmUgREFYX1pFUk9fUEFHRVx0KDFVTCBcdTAwM2NcdTAwM2MgMilcbiAgNjU6XHQjZGVmaW5lIERBWF9FTVBUWVx0KDFVTCBcdTAwM2NcdTAwM2MgMylcbiAgNjY6XHRcbiAgNjc6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxuICA2ODpcdHtcbiAgNjk6XHRcdHJldHVybiB4YV90b192YWx1ZShlbnRyeSkgXHUwMDNlXHUwMDNlIERBWF9TSElGVDtcbiAgNzA6XHR9XG4gIDcxOlx0XG4gIDcyOlx0c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxuICA3MzpcdHtcbiAgNzQ6XHRcdHJldHVybiBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKGRheF90b19wZm4oZW50cnkpKSk7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyB2b2lkICpkYXhfbWFrZV9lbnRyeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiAgNzg6XHR7XG4gIDc5Olx0XHRyZXR1cm4geGFfbWtfdmFsdWUoZmxhZ3MgfCAocGZuIFx1MDAzY1x1MDAzYyBEQVhfU0hJRlQpKTtcbiAgODA6XHR9XG4gIDgxOlx0XG4gIDgyOlx0c3RhdGljIGJvb2wgZGF4X2lzX2xvY2tlZCh2b2lkICplbnRyeSlcbiAgODM6XHR7XG4gIDg0Olx0XHRyZXR1cm4geGFfdG9fdmFsdWUoZW50cnkpIFx1MDAyNiBEQVhfTE9DS0VEO1xuICA4NTpcdH1cbiAgODY6XHRcbiAgODc6XHRzdGF0aWMgdW5zaWduZWQgaW50IGRheF9lbnRyeV9vcmRlcih2b2lkICplbnRyeSlcbiAgODg6XHR7XG4gIDg5Olx0XHRpZiAoeGFfdG9fdmFsdWUoZW50cnkpIFx1MDAyNiBEQVhfUE1EKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBEQVggRmlsZXN5c3RlbSBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSBpbiBgZnMvZGF4LmNgIGFuZCBJJiMzOTt2ZSBzcG90dGVkIGEgcG90ZW50aWFsIGlzc3VlLiBTcGVjaWZpY2FsbHksIHRoZSBjYWxsIHRvIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcyBoYXBwZW5pbmcgYmVmb3JlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGBlbnRyeWAgdmFsdWVzLCBzcGVjaWZpY2FsbHkgYERBWF9aRVJPX1BBR0VgIG9yIGBEQVhfRU1QVFlgLiAgCgpUaGUgcHJvYmxlbSBpcyB0aGF0IGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcywgdW5kZXIgdGhlIGhvb2QsIGNhbGxpbmcgYHBhZ2VfZm9saW8ocGZuX3RvX3BhZ2UoZGF4X3RvX3BmbihlbnRyeSkpKWAuIElmIGBlbnRyeWAgaXMgZWl0aGVyIGBEQVhfWkVST19QQUdFYCBvciBgREFYX0VNUFRZYCwgdGhlbiBgZGF4X3RvX3BmbihlbnRyeSlgIGlzIGdvaW5nIHRvIHJlc3VsdCBpbiBhIFBGTiBvZiAwLiAgCgpOb3cgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBgcGZuX3RvX3BhZ2UoMClgICptaWdodCogcmV0dXJuIGFuIGludmFsaWQgcGFnZSBwb2ludGVyLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBvciB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoaXMgY291bGQgZWFzaWx5IGxlYWQgdG8gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzIG9yLCB3b3JzZSwgYSBrZXJuZWwgcGFuaWMuICAKCkVmZmVjdGl2ZWx5LCBpbml0aWFsaXppbmcgYGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KWAgKmJlZm9yZSogY2hlY2tpbmcgaWYgYGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpYCBpcyBnb2luZyB0byByZXN1bHQgaW4gdGhhdCBgcGZuX3RvX3BhZ2VgIGJlaW5nIGV2YWx1YXRlZCB1bmNvbmRpdGlvbmFsbHksIGV2ZW4gd2hlbiB3ZSAqa25vdyogaXQmIzM5O3MgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBidWcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLCBhbmQgYGRheF9idXN5X3BhZ2VgIGFyZSBjYWxsZWQuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggZW50cnlwb2ludHMsIGVzcGVjaWFsbHkgZXhwb3J0ZWQgb25lcywgY2FsbCB0aGVzZSBmdW5jdGlvbnMgc28gSSBjYW4gc2VlIHRoZSBpbXBhY3Qgb2YgdGhpcyBidWcuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgdXNlZCB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBzZXZlcml0eSBhbmQgdGhlIGJlc3Qgd2F5IHRvIGZpeCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2Fzc29jaWF0ZV9lbnRyeXxkYXhfZGlzYXNzb2NpYXRlX2VudHJ5fGRheF9idXN5X3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxuLS1cbmZzL2RheC5jLTQ3Ny1cbmZzL2RheC5jOjQ3ODpzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2RheC5jLTQ3OS1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL2RheC5jLTUwNS1cbmZzL2RheC5jOjUwNjpzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2RheC5jLTUwNy1cdFx0XHRcdGJvb2wgdHJ1bmMpXG4tLVxuZnMvZGF4LmMtNTE0LVxuZnMvZGF4LmM6NTE1OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbmZzL2RheC5jLTUxNi17XG4tLVxuZnMvZGF4LmM9Njg3PXN0YXRpYyB2b2lkICpncmFiX21hcHBpbmdfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsXG4tLVxuZnMvZGF4LmMtNzM2LVxuZnMvZGF4LmM6NzM3Olx0XHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCBmYWxzZSk7XG5mcy9kYXguYy03MzgtXHRcdHhhc19zdG9yZSh4YXMsIE5VTEwpO1x0LyogdW5kbyB0aGUgUE1EIGpvaW4gKi9cbi0tXG5mcy9kYXguYz03OTE9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTgyOC1cdFx0aWYgKGVudHJ5KVxuZnMvZGF4LmM6ODI5Olx0XHRcdHBhZ2UgPSBkYXhfYnVzeV9wYWdlKGVudHJ5KTtcbmZzL2RheC5jLTgzMC1cdFx0cHV0X3VubG9ja2VkX2VudHJ5KFx1MDAyNnhhcywgZW50cnksIFdBS0VfTkVYVCk7XG4tLVxuZnMvZGF4LmM9ODUyPXN0YXRpYyBpbnQgX19kYXhfaW52YWxpZGF0ZV9lbnRyeShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy04NjYtXHRcdGdvdG8gb3V0O1xuZnMvZGF4LmM6ODY3Olx0ZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeShlbnRyeSwgbWFwcGluZywgdHJ1bmMpO1xuZnMvZGF4LmMtODY4LVx0eGFzX3N0b3JlKFx1MDAyNnhhcywgTlVMTCk7XG4tLVxuZnMvZGF4LmM9OTI1PXZvaWQgZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTk0NS1cdFx0XHRjb250aW51ZTtcbmZzL2RheC5jOjk0NjpcdFx0ZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeShlbnRyeSwgbWFwcGluZywgdHJ1ZSk7XG5mcy9kYXguYy05NDctXHRcdHhhc19zdG9yZShcdTAwMjZ4YXMsIE5VTEwpO1xuLS1cbmZzL2RheC5jPTEwNzk9c3RhdGljIHZvaWQgKmRheF9pbnNlcnRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTExMDYtXG5mcy9kYXguYzoxMTA3Olx0XHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCBmYWxzZSk7XG5mcy9kYXguYzoxMTA4Olx0XHRkYXhfYXNzb2NpYXRlX2VudHJ5KG5ld19lbnRyeSwgbWFwcGluZywgdm1mLVx1MDAzZXZtYSxcbmZzL2RheC5jLTExMDktXHRcdFx0XHRcdHZtZi1cdTAwM2VhZGRyZXNzLCBzaGFyZWQpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0zMzQ9dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0zNjctICogQHNoYXJlOiBudW1iZXIgb2YgREFYIG1hcHBpbmdzIHRoYXQgcmVmZXJlbmNlIHRoaXMgZm9saW8uIFNlZVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjM2ODogKiAgICBkYXhfYXNzb2NpYXRlX2VudHJ5LlxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTM2OS0gKiBAcHJpdmF0ZTogRmlsZXN5c3RlbSBwZXItZm9saW8gZGF0YSAoc2VlIGZvbGlvX2F0dGFjaF9wcml2YXRlKCkpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjMyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQVggTWFwcGluZyBPcGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCByZXZlYWxzIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYCBhcmUgY2VudHJhbCB0byB0aGlzIERBWCBhcmNoaXRlY3R1cmUsIGFuZCB0aGV5JiMzOTtyZSBjYWxsZWQgcHJpbWFyaWx5IGJ5IGEgc2VsZWN0IHNldCBvZiBmdW5jdGlvbnM6IGBncmFiX21hcHBpbmdfZW50cnlgLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCBgX19kYXhfaW52YWxpZGF0ZV9lbnRyeWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBhbmQgYGRheF9pbnNlcnRfZW50cnlgLgoKSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhhdCBgZ3JhYl9tYXBwaW5nX2VudHJ5YCBpcyBjcml0aWNhbCBiZWNhdXNlIGl0IGxlYWRzIGRvd24gdGhlIGZhdWx0IGhhbmRsaW5nIHBhdGhzIHdpdGggYGRheF9pb21hcF9mYXVsdGAgYW5kIGBkYXhfZmF1bHRfaXRlcmAsIHdoaWNoIGFyZSBib3RoIGltcG9ydGFudCBmb3IgREFYIGZhdWx0IGhhbmRsaW5nLiBBbHNvLCBmdW5jdGlvbnMgbGlrZSBgZGF4X2luc2VydF9lbnRyeWAgYWxzbyBjYWxsIHRoaXMuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aG9zZSBzZWNvbmQtbGV2ZWwgY2FsbHMuIEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgYGRheF9kZWxldGVfbWFwcGluZ19yYW5nZWAsIGBkYXhfaW5zZXJ0X2VudHJ5YCwgYW5kIGFsc28gdGhlIGBkYXhfaW9tYXBfZmF1bHRgIHZhcmlhbnRzLCBhbmQgYGRheF9mYXVsdF9pdGVyYCwgdG8gZGV0ZXJtaW5lIGhvdyB0aGV5IGZpdCBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYWxsIGNhbGxzIHRvIGFsbCBvZiB0aGUgaW1wb3J0YW50IG1ldGhvZHMuCgpNeSBpbnR1aXRpb24gc2F5cyB0aGUgc291cmNlIGNvZGUgd2lsbCBsaXZlIGluIGBmcy9kYXguY2AsIHNvIEkmIzM5O2xsIHN0YXJ0IGRpZ2dpbmcgdGhlcmUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtekEtWjAtOV8qIF0mIzQzOylcXCgoLiopXFwpJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTM5PXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3RhYmxlW0RBWF9XQUlUX1RBQkxFX0VOVFJJRVNdO1xuZnMvZGF4LmMtNDAtXG5mcy9kYXguYzo0MTpzdGF0aWMgaW50IF9faW5pdCBpbml0X2RheF93YWl0X3RhYmxlKHZvaWQpXG5mcy9kYXguYy00Mi17XG4tLVxuZnMvZGF4LmM9NDk9ZnNfaW5pdGNhbGwoaW5pdF9kYXhfd2FpdF90YWJsZSk7XG4tLVxuZnMvZGF4LmMtNjYtXG5mcy9kYXguYzo2NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtNjgte1xuLS1cbmZzL2RheC5jLTcxLVxuZnMvZGF4LmM6NzI6c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtNzMte1xuLS1cbmZzL2RheC5jLTc2LVxuZnMvZGF4LmM6Nzc6c3RhdGljIHZvaWQgKmRheF9tYWtlX2VudHJ5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuZnMvZGF4LmMtNzgte1xuLS1cbmZzL2RheC5jLTgxLVxuZnMvZGF4LmM6ODI6c3RhdGljIGJvb2wgZGF4X2lzX2xvY2tlZCh2b2lkICplbnRyeSlcbmZzL2RheC5jLTgzLXtcbi0tXG5mcy9kYXguYy04Ni1cbmZzL2RheC5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGF4X2VudHJ5X29yZGVyKHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtODgte1xuLS1cbmZzL2RheC5jLTkzLVxuZnMvZGF4LmM6OTQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGF4X2lzX3BtZF9lbnRyeSh2b2lkICplbnRyeSlcbmZzL2RheC5jLTk1LXtcbi0tXG5mcy9kYXguYy05OC1cbmZzL2RheC5jOjk5OnN0YXRpYyBib29sIGRheF9pc19wdGVfZW50cnkodm9pZCAqZW50cnkpXG5mcy9kYXguYy0xMDAte1xuLS1cbmZzL2RheC5jLTEwMy1cbmZzL2RheC5jOjEwNDpzdGF0aWMgaW50IGRheF9pc196ZXJvX2VudHJ5KHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtMTA1LXtcbi0tXG5mcy9kYXguYy0xMDgtXG5mcy9kYXguYzoxMDk6c3RhdGljIGludCBkYXhfaXNfZW1wdHlfZW50cnkodm9pZCAqZW50cnkpXG5mcy9kYXguYy0xMTAte1xuLS1cbmZzL2RheC5jLTExNy0gKi9cbmZzL2RheC5jOjExODpzdGF0aWMgYm9vbCBkYXhfaXNfY29uZmxpY3Qodm9pZCAqZW50cnkpXG5mcy9kYXguYy0xMTkte1xuLS1cbmZzL2RheC5jPTE4ND1zdGF0aWMgdm9pZCBkYXhfd2FrZV9lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnksXG4tLVxuZnMvZGF4LmMtMjA0LSAqIGlzIGEgREFYIGVudHJ5IGFuZCByZXR1cm4gaXQuICBUaGUgY2FsbGVyIG11c3Qgc3Vic2VxdWVudGx5IGNhbGxcbmZzL2RheC5jOjIwNTogKiBwdXRfdW5sb2NrZWRfZW50cnkoKSBpZiBpdCBkaWQgbm90IGxvY2sgdGhlIGVudHJ5IG9yIGRheF91bmxvY2tfZW50cnkoKVxuZnMvZGF4LmMtMjA2LSAqIGlmIGl0IGRpZC4gIFRoZSBlbnRyeSByZXR1cm5lZCBtYXkgaGF2ZSBhIGxhcmdlciBvcmRlciB0aGFuIEBvcmRlci5cbi0tXG5mcy9kYXguYy0yMTEtICovXG5mcy9kYXguYzoyMTI6c3RhdGljIHZvaWQgKmdldF9uZXh0X3VubG9ja2VkX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5mcy9kYXguYy0yMTMte1xuLS1cbmZzL2RheC5jLTI0NS0gKi9cbmZzL2RheC5jOjI0NjpzdGF0aWMgdm9pZCAqd2FpdF9lbnRyeV91bmxvY2tlZF9leGNsdXNpdmUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtMjQ3LXtcbi0tXG5mcy9kYXguYy0yNzMtICogVGhlIG9ubHkgdGhpbmcga2VlcGluZyB0aGUgYWRkcmVzcyBzcGFjZSBhcm91bmQgaXMgdGhlIGlfcGFnZXMgbG9ja1xuZnMvZGF4LmM6Mjc0OiAqIChpdCYjMzk7cyBjeWNsZWQgaW4gY2xlYXJfaW5vZGUoKSBhZnRlciByZW1vdmluZyB0aGUgZW50cmllcyBmcm9tIGlfcGFnZXMpXG5mcy9kYXguYy0yNzUtICogQWZ0ZXIgd2UgY2FsbCB4YXNfdW5sb2NrX2lycSgpLCB3ZSBjYW5ub3QgdG91Y2ggeGFzLVx1MDAzZXhhLlxuZnMvZGF4LmMtMjc2LSAqL1xuZnMvZGF4LmM6Mjc3OnN0YXRpYyB2b2lkIHdhaXRfZW50cnlfdW5sb2NrZWQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtMjc4LXtcbi0tXG5mcy9kYXguYz0yOTg9c3RhdGljIHZvaWQgcHV0X3VubG9ja2VkX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSxcbi0tXG5mcy9kYXguYy0zMDktICovXG5mcy9kYXguYzozMTA6c3RhdGljIHZvaWQgZGF4X3VubG9ja19lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnkpXG5mcy9kYXguYy0zMTEte1xuLS1cbmZzL2RheC5jLTMyNS0gKi9cbmZzL2RheC5jOjMyNjpzdGF0aWMgdm9pZCAqZGF4X2xvY2tfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtMzI3LXtcbi0tXG5mcy9kYXguYy0zMzEtXG5mcy9kYXguYzozMzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGF4X2VudHJ5X3NpemUodm9pZCAqZW50cnkpXG5mcy9kYXguYy0zMzMte1xuLS1cbmZzL2RheC5jLTM0OS0gKi9cbmZzL2RheC5jOjM1MDpzdGF0aWMgaW5saW5lIGJvb2wgZGF4X2ZvbGlvX2lzX3NoYXJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvZGF4LmMtMzUxLXtcbi0tXG5mcy9kYXguYy0zNjQtICovXG5mcy9kYXguYzozNjU6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX21ha2Vfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9kYXguYy0zNjYte1xuLS1cbmZzL2RheC5jLTM4OC0gKi9cbmZzL2RheC5jOjM4OTppbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9kYXguYy0zOTAte1xuLS1cbmZzL2RheC5jPTQzMT1FWFBPUlRfU1lNQk9MX0dQTChkYXhfZm9saW9fcmVzZXRfb3JkZXIpO1xuZnMvZGF4LmMtNDMyLVxuZnMvZGF4LmM6NDMzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYXhfZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9kYXguYy00MzQte1xuLS1cbmZzL2RheC5jLTQ1Ny1cbmZzL2RheC5jOjQ1ODpzdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcbmZzL2RheC5jLTQ1OS17XG4tLVxuZnMvZGF4LmM9NTA2PXN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTUxNC1cbmZzL2RheC5jOjUxNTpzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXG5mcy9kYXguYy01MTYte1xuLS1cbmZzL2RheC5jLTUzNi0gKi9cbmZzL2RheC5jOjUzNzpkYXhfZW50cnlfdCBkYXhfbG9ja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvZGF4LmMtNTM4LXtcbi0tXG5mcy9kYXguYy01ODMtXG5mcy9kYXguYzo1ODQ6dm9pZCBkYXhfdW5sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGRheF9lbnRyeV90IGNvb2tpZSlcbmZzL2RheC5jLTU4NS17XG4tLVxuZnMvZGF4LmM9ODQ0PUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTtcbmZzL2RheC5jLTg0NS1cbmZzL2RheC5jOjg0NjpzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG5mcy9kYXguYy04NDcte1xuLS1cbmZzL2RheC5jPTg3Nz1zdGF0aWMgaW50IF9fZGF4X2NsZWFyX2RpcnR5X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTkwOS0gKi9cbmZzL2RheC5jOjkxMDppbnQgZGF4X2RlbGV0ZV9tYXBwaW5nX2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4KVxuZnMvZGF4LmMtOTExLXtcbi0tXG5mcy9kYXguYz0xMDAzPUVYUE9SVF9TWU1CT0xfR1BMKGRheF9icmVha19sYXlvdXQpO1xuZnMvZGF4LmMtMTAwNC1cbmZzL2RheC5jOjEwMDU6dm9pZCBkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9kYXguYy0xMDA2LXtcbi0tXG5mcy9kYXguYz0xMDI5PWludCBkYXhfaW52YWxpZGF0ZV9tYXBwaW5nX2VudHJ5X3N5bmMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZGF4LmMtMTAzNC1cbmZzL2RheC5jOjEwMzU6c3RhdGljIHBnb2ZmX3QgZGF4X2lvbWFwX3Bnb2ZmKGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAsIGxvZmZfdCBwb3MpXG5mcy9kYXguYy0xMDM2LXtcbi0tXG5mcy9kYXguYy0xMDM5LVxuZnMvZGF4LmM6MTA0MDpzdGF0aWMgaW50IGNvcHlfY293X3BhZ2VfZGF4KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcilcbmZzL2RheC5jLTEwNDEte1xuLS1cbmZzL2RheC5jPTE0MzU9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE0NDEtXG5mcy9kYXguYzoxNDQyOnN0YXRpYyBpbnQgZGF4X3Vuc2hhcmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcilcbmZzL2RheC5jLTE0NDMte1xuLS1cbmZzL2RheC5jPTE1MTM9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2ZpbGVfdW5zaGFyZSk7XG5mcy9kYXguYy0xNTE0LVxuZnMvZGF4LmM6MTUxNTpzdGF0aWMgaW50IGRheF9tZW16ZXJvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3Qgc2l6ZSlcbmZzL2RheC5jLTE1MTYte1xuLS1cbmZzL2RheC5jLTE1MzctXG5mcy9kYXguYzoxNTM4OnN0YXRpYyBpbnQgZGF4X3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8pXG5mcy9kYXguYy0xNTM5LXtcbi0tXG5mcy9kYXguYz0xNjE0PUVYUE9SVF9TWU1CT0xfR1BMKGRheF90cnVuY2F0ZV9wYWdlKTtcbmZzL2RheC5jLTE2MTUtXG5mcy9kYXguYzoxNjE2OnN0YXRpYyBpbnQgZGF4X2lvbWFwX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbmZzL2RheC5jLTE2MTcte1xuLS1cbmZzL2RheC5jPTE3Nzk9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2lvbWFwX3J3KTtcbmZzL2RheC5jLTE3ODAtXG5mcy9kYXguYzoxNzgxOnN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9yZXR1cm4oaW50IGVycm9yKVxuZnMvZGF4LmMtMTc4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDY1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIGBmcy9kYXguY2AgY29udGV4dCwgZm9jdXNpbmcgb24gdGhlIGJ1aWxkIHN5c3RlbSBjb25maWd1cmF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBvZiBmcy9kYXguYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBob3cgYGZzL2RheC5jYCBnZXRzIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIGJ1aWxkLiBUaGUgZmlyc3Qgc3RvcCwgbmF0dXJhbGx5LCBpcyB0aGUgYE1ha2VmaWxlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgYXJlIGluIHBsYXksIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZW4gYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFdoYXQgb3RoZXIgc291cmNlIGZpbGVzLCBvYmplY3QgZmlsZXMsIG9yIGxpYnJhcmllcyBkb2VzIGl0IHJlbHkgb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBpbmNsdWRlIHBhdGhzIGl0IG5lZWRzPyBBcmUgdGhlcmUgYW55IGNsZXZlciBidWlsZCBvcHRpbWl6YXRpb25zIGJlaW5nIGVtcGxveWVkPyBVbmRlcnN0YW5kaW5nIHRoZSBNYWtlZmlsZSBpcyBrZXkgdG8gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLgoKVGhlbiwgSSYjMzk7bGwgaW1tZWRpYXRlbHkganVtcCBvdmVyIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBtYXR0ZXIgbGllcyBmb3IgbWUuIEkgbmVlZCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGdvdmVybiB3aGV0aGVyIG9yIG5vdCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnQsIGFuZCBieSBleHRlbnNpb24gYGZzL2RheC5jYCwgaXMgZW5hYmxlZC4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IGBDT05GSUdfYCBvcHRpb25zPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzIG9yIGhhcmR3YXJlPyBXaGF0JiMzOTtzIHRoZSBoZWxwIHRleHQgZGVzY3JpYmluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBEQVg/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIG1lbW9yeSB0eXBlcywgZmlsZSBzeXN0ZW1zLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29uZGl0aW9ucyogdW5kZXIgd2hpY2ggREFYIGZ1bmN0aW9uYWxpdHkgaXMgb2ZmZXJlZCB0byB0aGUga2VybmVsIHVzZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nIGFuZCB1bmRlcnN0YW5kaW5nIGNvbXBhdGliaWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBjYW4gcmVhbGx5IHNlZSB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBmaWxlIG9uIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBhbmQgZnVuY3Rpb25hbGl0eS4gQmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlIEkmIzM5O2xsIGhhdmUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGtlcm5lbCBleHBvc2VzIERBWCBjYXBhYmlsaXRpZXMgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG5lZWQgdG8gYmUgc2F0aXNmaWVkIHRvIGxldmVyYWdlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXhcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgJiM0Mzs9IGFpby5vXG5mcy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfRlNfREFYKVx0XHQmIzQzOz0gZGF4Lm9cbmZzL01ha2VmaWxlLTMyLW9iai0kKENPTkZJR19GU19FTkNSWVBUSU9OKVx0JiM0Mzs9IGNyeXB0by9cbi0tXG5mcy9mdXNlL01ha2VmaWxlPTE2PWZ1c2UteSAmIzQzOz0gaW9tb2RlLm9cbmZzL2Z1c2UvTWFrZWZpbGU6MTc6ZnVzZS0kKENPTkZJR19GVVNFX0RBWCkgJiM0Mzs9IGRheC5vXG5mcy9mdXNlL01ha2VmaWxlLTE4LWZ1c2UtJChDT05GSUdfRlVTRV9QQVNTVEhST1VHSCkgJiM0Mzs9IHBhc3N0aHJvdWdoLm8gYmFja2luZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDM0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgQ09ORklHX0ZTX0RBWCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgQ09ORklHX0ZTX0RBWGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBnby10byBwbGFjZSBmb3IgdW5kZXJzdGFuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZWlyIGRlZmluaXRpb25zLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYW55IGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgYENPTkZJR19GU19EQVhgIGlzIGRlZmluZWQg4oCTIGlzIGl0IGEgYm9vbGVhbiwgYSB0cmlzdGF0ZT8gV2hhdCYjMzk7cyB0aGUgaGVscCB0ZXh0IHNheT8gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBjb250ZXh0LiBNb3JlIGltcG9ydGFudGx5LCB3aGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IE9yIHBlcmhhcHMgd2hpY2ggb3B0aW9ucyBkZXBlbmQgb24gKml0Kj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvciBmaWxlc3lzdGVtIHJlcXVpcmVtZW50cyBiYWtlZCBpbj8gS25vd2luZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIHdvcmtzIHdpdGhpbiB0aGUgYmlnZ2VyIGtlcm5lbCBwaWN0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCB1c2UgY2FzZXMgYW5kIGFyY2hpdGVjdHVyZXMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBLY29uZmlnIGZpbGVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfREFYXFxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xuZnMvS2NvbmZpZy01Ny1cbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxuZnMvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBmaWxlIHN5c3RlbSBjb25maWd1cmF0aW9uLCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGBmcy9LY29uZmlnYCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU4LiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyBmb3IgZmlsZSBzeXN0ZW0gZmVhdHVyZXMsIG9yIGF0IGxlYXN0IGEga2V5IHNlY3Rpb24gcmVsYXRlZCB0byB0aGVtLCB3aWxsIGJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhlIGxvZ2ljIGlzIHN0cnVjdHVyZWQuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIHNuaXBwZXQgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eSBvbiB0aGUgYnJvYWRlciBkZXNpZ24gZGVjaXNpb25zIGluIHBsYXksIGFuZCBzaGVkIGxpZ2h0IG9uIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBUaGUgcGxhbiBpcyB0byBnZXQgYW4gb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGRlY2lkZSB3aGV0aGVyIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSBpbmNsdWRlIHBhdGhzLCBvciBpZiB0aGUgcmVsZXZhbnQgYml0cyBhcmUgZGVmaW5lZCByaWdodCB0aGVyZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdFxuICA1NjpcdGVuZGlmICMgQkxPQ0tcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgRlNfREFYXG4gIDU5Olx0XHRib29sIFwmIzM0O0ZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFwmIzM0O1xuICA2MDpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAgNjE6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbiAgNjI6XHRcdHNlbGVjdCBGU19JT01BUFxuICA2MzpcdFx0c2VsZWN0IERBWFxuICA2NDpcdFx0aGVscFxuICA2NTpcdFx0ICBEaXJlY3QgQWNjZXNzIChEQVgpIGNhbiBiZSB1c2VkIG9uIG1lbW9yeS1iYWNrZWQgYmxvY2sgZGV2aWNlcy5cbiAgNjY6XHRcdCAgSWYgdGhlIGJsb2NrIGRldmljZSBzdXBwb3J0cyBEQVggYW5kIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIERBWCxcbiAgNjc6XHRcdCAgdGhlbiB5b3UgY2FuIGF2b2lkIHVzaW5nIHRoZSBwYWdlY2FjaGUgdG8gYnVmZmVyIEkvT3MuICBUdXJuaW5nXG4gIDY4Olx0XHQgIG9uIHRoaXMgb3B0aW9uIHdpbGwgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBEQVguXG4gIDY5Olx0XG4gIDcwOlx0XHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxuICA3MTpcdFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXG4gIDcyOlx0XHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxuICA3MzpcdFxuICA3NDpcdFx0XHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxuICA3NTpcdFx0XHRcdC0tbW9kZT1mc2RheCAtLW1hcD1tZW1cbiAgNzY6XHRcbiAgNzc6XHRcdCAgU2VlIHRoZSAmIzM5O2NyZWF0ZS1uYW1lc3BhY2UmIzM5OyBtYW4gcGFnZSBmb3IgZGV0YWlscyBvbiB0aGUgb3ZlcmhlYWQgb2ZcbiAgNzg6XHRcdCAgLS1tYXA9bWVtOlxuICA3OTpcdFx0ICBodHRwczovL2RvY3MucG1lbS5pby9uZGN0bC11c2VyLWd1aWRlL25kY3RsLW1hbi1wYWdlcy9uZGN0bC1jcmVhdGUtbmFtZXNwYWNlXG4gIDgwOlx0XG4gIDgxOlx0XHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcbiAgODI6XHRcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcbiAgODM6XHRcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxuICA4NDpcdFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHlvdSBkbyBub3QgaGF2ZSBhIGJsb2NrIGRldmljZSB0aGF0IGlzIGNhcGFibGUgb2YgdXNpbmcgdGhpcyxcbiAgODc6XHRcdCAgb3IgaWYgdW5zdXJlLCBzYXkgTi4gIFNheWluZyBZIHdpbGwgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbFxuICA4ODpcdFx0ICBieSBhYm91dCA1a0IuXG4gIDg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTQzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIERlcGVuZGVuY2llcyBmb3IgWk9ORV9ERVZJQ0UqKgoKQWxyaWdodCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHByb3Blcmx5IGludGVncmF0ZWQgYW5kIHRoYXQgYWxsIG9mIGl0cyBkZXBlbmRlbmNpZXMgYXJlIGFjY291bnRlZCBmb3IuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgYmVmb3JlIGFueSBtYWpvciBjaGFuZ2VzIG9yIGRlcGxveW1lbnQsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdHkgb2Ygc3VjaCBhIGNvbXBvbmVudC4gSSBuZWVkIHRvIG1ha2UgYSB0aG9yb3VnaCBwYXNzIHRocm91Z2ggdGhlIGNvZGUgYmFzZSBhbmQgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzIGZpcnN0IOKAkyB0aGUgb2J2aW91cyBsaWJyYXJpZXMgYW5kIG1vZHVsZXMgdGhhdCBgWk9ORV9ERVZJQ0VgIHJlbGllcyBvbiBkaXJlY3RseS4gVGhlbiwgSSBuZWVkIHRvIGRpZyBkZWVwZXIsIHRyYWNpbmcgdGhlIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNvbm5lY3Rpb25zIHRoYXQgY291bGQgY2F1c2Ugc3VidGxlIGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmU/IFdlIG5lZWQgdG8gdmVyaWZ5IHZlcnNpb24gY29tcGF0aWJpbGl0eSBhY3Jvc3MgdGhlIGVudGlyZSBkZXBlbmRlbmN5IHRyZWUuIEFyZSB3ZSB1c2luZyB0aGUgbGF0ZXN0IHNlY3VyZSB2ZXJzaW9ucywgYW5kIGFyZSB3ZSBpbiBhbGlnbm1lbnQgd2l0aCB0aGUgd2lkZXIgcHJvamVjdCYjMzk7cyBkZXBlbmRlbmN5IG1hbmFnZW1lbnQgc3RyYXRlZ3k/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzdGF0aWMgYW5hbHlzaXMsIHVzaW5nIHdoYXRldmVyIHRvb2xzIHdlIGhhdmUgYXZhaWxhYmxlIChsaW50aW5nLCBkZXBlbmRlbmN5IGdyYXBocywgZXRjLikgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldy4gQWZ0ZXIgdGhhdCwgSSB3aWxsIGNvbmR1Y3QgdGhvcm91Z2ggdW5pdCB0ZXN0cyB3aXRoIG1vY2sgZGVwZW5kZW5jaWVzLCBmb2xsb3dlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIHJlbGV2YW50IG90aGVyIGNvbXBvbmVudHMgdGhhdCBjb3VsZCBhZmZlY3QgZGVwZW5kZW5jaWVzLiBUaGUgZ29hbCBpcyB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBiZWZvcmUgdGhleSBiZWNvbWUgcHJvYmxlbXMgaW4gYSBtb3JlIGNvbXBsZXggdGVzdGluZyBzY2VuYXJpbyBvciwgd29yc2UsIHByb2R1Y3Rpb24uIEl0JiMzOTtzIGEgYml0IHRlZGlvdXMsIGJ1dCB3b3J0aCBpdCB0byBhdm9pZCBhbnkgaGVhZGFjaGVzIGxhdGVyLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZ1bmN0aW9uYWxpdHk7IGl0JiMzOTtzIGFib3V0IHNlY3VyaXR5LCBwZXJmb3JtYW5jZSwgYW5kIG1haW50YWluYWJpbGl0eS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgWk9ORV9ERVZJQ0VgJiMzOTtzIGRlcGVuZGVuY2llcyBhcmUgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRVxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMjA9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjQtXG5tbS9LY29uZmlnOjEyMjU6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjYtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1ODMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBiZXR0ZXIsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHNlZW4gaXQgZGVmaW5lZCBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzZWVtIHRvIHJlbWVtYmVyIGl0IGFyb3VuZCBsaW5lIDEyMjUsIGdpdmUgb3IgdGFrZS4gVGltZSB0byBqdW1wIG92ZXIgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgaG93IHRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgaGVscCB0ZXh0cyBJIGNhbiBnbGVhbi4gSXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIHlvdSYjMzk7cmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIG9mIGEgcGFydGljdWxhciBjb25maWcgb3B0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBvcHRpb25zLCBhbmQgcGVyaGFwcyBzcG90IGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHR5cGljYWwgZm9ybWF0IGhlcmU6IGEgYGNvbmZpZ2Aga2V5d29yZCwgYSB0eXBlIGRlZmluaXRpb24gKGJvb2wsIHRyaXN0YXRlLCBldGMuKSwgdGhlIGhlbHAgdGV4dCwgYW5kIGxpa2VseSBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBXaXRoIGEgYml0IG9mIGx1Y2ssIHRoZSBmaWxlIGNvbW1lbnRzIHdpbGwgYmUgdXAtdG8tZGF0ZSBhbmQgcHJvdmlkZSBzb21lIHVzZWZ1bCBjb250ZXh0LiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIyMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjIyOlx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMjM6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIyNDpcdFxuMTIyNTpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyNjpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjI3Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjk6XHRcbjEyMzA6XHRcdGhlbHBcbjEyMzE6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMzI6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyMzM6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjM0Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTIzNTpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjM2Olx0XG4xMjM3Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyMzg6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTIzOTpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjQwOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI0MTpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNDI6XHRcbjEyNDM6XHQjXG4xMjQ0Olx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzIwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gTWVtb3J5IEhvdC1SZW1vdmFsIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTUVNT1JZX0hPVFJFTU9WRWAuJiMzNDsgSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSBhIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgYmVmb3JlIHByb2NlZWRpbmcuIFRoaXMgbWVhbnMgSSYjMzk7bSBub3QganVzdCBsb29raW5nIGF0IHRoZSBvYnZpb3VzIGNvbXBvbmVudHMsIGJ1dCBhbnRpY2lwYXRpbmcgYWxsIHRoZSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBrZXJuZWwgaW50ZXJhY3Rpb25zLCB0aGUgdXNlcnNwYWNlIHRvb2xzIHRoYXQgcmVseSBvbiBtZW1vcnkgaG90LXJlbW92YWwsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhbmQgaG93IGRpZmZlcmVudCBrZXJuZWwgdmVyc2lvbnMgbWlnaHQgaGFuZGxlIHRoaXMgZmVhdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgaWRlbnRpZnkgYWxsIHBvdGVudGlhbCB0cm91YmxlIHNwb3RzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01ODA9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTU4MS1cbm1tL0tjb25maWc6NTgyOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXG5tbS9LY29uZmlnLTU4My1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTgyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgcHJvYmFibHkgdG8gdW5kZXJzdGFuZCBhIHBhcnRpY3VsYXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBsaWtlbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBwb3NzaWJsZSBkZWZhdWx0IHZhbHVlcywgYW5kIGhvdyB0aGVzZSBzZXR0aW5ncyByZWxhdGUgdG8gdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIG1heWJlIGFuIGBpZmAgYmxvY2ssIHRoYXQgZ292ZXJucyB3aGV0aGVyIGEgc3BlY2lmaWMgb3B0aW9uIGlzIGVuYWJsZWQgb3Igc2hvd24gdG8gdGhlIHVzZXIuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgS2NvbmZpZyBzeW50YXg6IGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGBkZWZhdWx0YCwgYGJvb2xgLCBldGMuIOKAkyB0cnlpbmcgdG8gcmVjb25zdHJ1Y3QgdGhlIGxvZ2ljIGluIG15IGhlYWQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgbGluZSA1ODIgaG9sZHMgdGhlIGtleSB0byB0aGUgY29uZGl0aW9uIG9yIHJlbGF0aW9uIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIHByb2JhYmx5IGJyYW5jaCBvdXQsIGxvb2tpbmcgYXQgcmVsYXRlZCBvcHRpb25zIG9yIHBlcmhhcHMgZXZlbiB0aGUgY29kZSB0aGF0IHVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGEgc2hhcnAgZXllIG91dCBmb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODA6XHRlbmRjaG9pY2VcbiA1ODE6XHRcbiA1ODI6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MzpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODQ6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODU6XHRcbiA1ODY6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODc6XHRcdGRlZl9ib29sIHlcbiA1ODg6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODk6XHRcbiA1OTA6XHRlbmRpZiAjIE1FTU9SWV9IT1RQTFVHXG4gNTkxOlx0XG4gNTkyOlx0Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXG4gNTkzOlx0ICAgICAgIGJvb2xcbiA1OTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBGaWxlc3lzdGVtIERBWCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBEQVggKERpcmVjdCBBY2Nlc3MpIGlzIHV0aWxpemVkIHdpdGhpbiB0aGUgTGludXggZmlsZXN5c3RlbSBsYW5kc2NhcGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoaWNoIGZpbGVzeXN0ZW1zIGFjdGl2ZWx5IGxldmVyYWdlIERBWC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIG9uZXMgbWFrZSB1c2Ugb2YgdGhlIGBmcy9kYXguY2AgY29kZSBhbmQgaXRzIGZ1bmN0aW9uYWxpdHkuCgpUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbXMgcHJvdmlkZWQuIFRvIGRvIHRoYXQgSSB3aWxsIGJlIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgc3ltYm9scy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyBpbiBgZnMvZGF4LmNgIHRoYXQgYXJlICpleHBvcnRlZCog4oCTIHRoZSBub24tc3RhdGljIG9uZXMg4oCTIHNvIEkgY2FuIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGludGVuZGVkIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRvIGNhbGwgdXBvbi4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIERBWC1zcGVjaWZpYyBpbnRlcmZhY2UgYW5kIGl0cyBpbnRlcmFjdGlvbiBwb2ludHMgd2l0aCBvdGhlciBmaWxlc3lzdGVtcyBvciBrZXJuZWwgY29tcG9uZW50cy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2RheC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTM4OT1pbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZGF4LmMtNDMwLX1cbmZzL2RheC5jOjQzMTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfZm9saW9fcmVzZXRfb3JkZXIpO1xuZnMvZGF4LmMtNDMyLVxuLS1cbmZzL2RheC5jPTc5MT1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZGF4LmMtODQzLX1cbmZzL2RheC5jOjg0NDpFWFBPUlRfU1lNQk9MX0dQTChkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSk7XG5mcy9kYXguYy04NDUtXG5mcy9kYXguYz04NDY9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuLS1cbmZzL2RheC5jLTg0OS19XG5mcy9kYXguYzo4NTA6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2xheW91dF9idXN5X3BhZ2UpO1xuZnMvZGF4LmMtODUxLVxuLS1cbmZzL2RheC5jPTkyNT12b2lkIGRheF9kZWxldGVfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy05NTItfVxuZnMvZGF4LmM6OTUzOkVYUE9SVF9TWU1CT0xfR1BMKGRheF9kZWxldGVfbWFwcGluZ19yYW5nZSk7XG5mcy9kYXguYy05NTQtXG4tLVxuZnMvZGF4LmM9OTc3PWludCBkYXhfYnJlYWtfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5mcy9kYXguYy0xMDAyLX1cbmZzL2RheC5jOjEwMDM6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dCk7XG5mcy9kYXguYy0xMDA0LVxuZnMvZGF4LmM9MTAwNT12b2lkIGRheF9icmVha19sYXlvdXRfZmluYWwoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9kYXguYy0xMDIzLX1cbmZzL2RheC5jOjEwMjQ6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dF9maW5hbCk7XG5mcy9kYXguYy0xMDI1LVxuLS1cbmZzL2RheC5jPTEyMzY9aW50IGRheF93cml0ZWJhY2tfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9kYXguYy0xMjc0LX1cbmZzL2RheC5jOjEyNzU6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3dyaXRlYmFja19tYXBwaW5nX3JhbmdlKTtcbmZzL2RheC5jLTEyNzYtXG4tLVxuZnMvZGF4LmM9MTQ5ND1pbnQgZGF4X2ZpbGVfdW5zaGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLFxuLS1cbmZzL2RheC5jLTE1MTItfVxuZnMvZGF4LmM6MTUxMzpFWFBPUlRfU1lNQk9MX0dQTChkYXhfZmlsZV91bnNoYXJlKTtcbmZzL2RheC5jLTE1MTQtXG4tLVxuZnMvZGF4LmM9MTU4Nj1pbnQgZGF4X3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXG4tLVxuZnMvZGF4LmMtMTYwMC19XG5mcy9kYXguYzoxNjAxOkVYUE9SVF9TWU1CT0xfR1BMKGRheF96ZXJvX3JhbmdlKTtcbmZzL2RheC5jLTE2MDItXG5mcy9kYXguYz0xNjAzPWludCBkYXhfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcbi0tXG5mcy9kYXguYy0xNjEzLX1cbmZzL2RheC5jOjE2MTQ6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3RydW5jYXRlX3BhZ2UpO1xuZnMvZGF4LmMtMTYxNS1cbi0tXG5mcy9kYXguYz0xNzQ0PWRheF9pb21hcF9ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9kYXguYy0xNzc4LX1cbmZzL2RheC5jOjE3Nzk6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2lvbWFwX3J3KTtcbmZzL2RheC5jLTE3ODAtXG4tLVxuZnMvZGF4LmM9MjEwOD12bV9mYXVsdF90IGRheF9pb21hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbmZzL2RheC5jLTIxMTgtfVxuZnMvZGF4LmM6MjExOTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfaW9tYXBfZmF1bHQpO1xuZnMvZGF4LmMtMjEyMC1cbi0tXG5mcy9kYXguYz0yMTc5PXZtX2ZhdWx0X3QgZGF4X2ZpbmlzaF9zeW5jX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxuZnMvZGF4LmMtMjE5MC19XG5mcy9kYXguYzoyMTkxOkVYUE9SVF9TWU1CT0xfR1BMKGRheF9maW5pc2hfc3luY19mYXVsdCk7XG5mcy9kYXguYy0yMTkyLVxuLS1cbmZzL2RheC5jPTIyNzA9aW50IGRheF9yZW1hcF9maWxlX3JhbmdlX3ByZXAoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4tLVxuZnMvZGF4LmMtMjI3Ny19XG5mcy9kYXguYzoyMjc4OkVYUE9SVF9TWU1CT0xfR1BMKGRheF9yZW1hcF9maWxlX3JhbmdlX3ByZXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NAoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiA2NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFYIEVudHJ5IFBvaW50IEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIERBWCBlbnRyeSBwb2ludHMuIEkgc2VlIHRoZSBjb3JlIG9uZXM6IGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBgZGF4X2lvbWFwX3J3YCwgYGRheF9pb21hcF9mYXVsdGAsIGBkYXhfYnJlYWtfbGF5b3V0YCwgYGRheF96ZXJvX3JhbmdlYCwgYW5kIGBkYXhfZmlsZV91bnNoYXJlYC4gSSYjMzk7bSBub3RpbmcgdGhlIGludGVybmFsIGNhbGxzOiBgZGF4X2lvbWFwX2ZhdWx0YCB1c2VzIGBkYXhfaW5zZXJ0X2VudHJ5YCB3aGljaCB0aGVuIGdvZXMgdG8gZWl0aGVyIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCBvciBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeWAuIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgIGFsc28gdXRpbGl6ZXMgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLiBUaGVuIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAgdXNlcyBgZGF4X2J1c3lfcGFnZWAsIGFuZCBgZGF4X2JyZWFrX2xheW91dGAgZG9lcyBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIHRoZW4gYGRheF9idXN5X3BhZ2VgLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGVudmlyb25tZW50LiBDYW4gdGhpcyBEQVggZnVuY3Rpb25hbGl0eSBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nIGxpa2UgUUVNVSBvciBHQ0U/IFllcywgaXQgY2FuLCB1c2luZyBwbWVtIGRldmljZXMuIFRoaW5rIGVtdWxhdGVkIG52ZGltbSwgcG1lbSBpbiBRRU1VLCByYW1kaXNrcywgYnJkIG9yIGEgYGRheF9wbWVtYCBkZXZpY2Ugd2l0aCBgZXh0NC94ZnMgLW8gZGF4YC4gVGhhdCYjMzk7cyBnb29kOyBpdCBpbmNyZWFzZXMgdGhlIGFjY2Vzc2liaWxpdHkgZm9yIHRlc3RpbmcuCgpJcyB0aGlzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzISBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdGhlIGxvZ2ljIGRlYWxpbmcgd2l0aCByYWRpeC10cmVlL3hhcnJheSBlbnRyeSBtYW5hZ2VtZW50IOKAkyBzcGVjaWZpY2FsbHksIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLCBhbmQgYGRheF9idXN5X3BhZ2VgIOKAkyBhbmQgdGhlIGdvYWwgaXMgdG8gcHJldmVudCBpbnZhbGlkIHBhZ2UvZm9saW8gcG9pbnRlciBjb252ZXJzaW9ucyBvbiB6ZXJvIGFuZCBlbXB0eSBlbnRyaWVzLiBJbXBvcnRhbnQgc3R1ZmYuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBtYWtlIHRoaXMgd29yay4gV2UmIzM5O3ZlIGdvdDogYEZTX0RBWGAgaXMgZnVuZGFtZW50YWwuIEl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUkVNT1ZFYCB3aGljaCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUExVR2AsIGFuZCBhbHNvIGBNTVVgLiBPa2F5LCBsZXQmIzM5O3Mga2VlcCB0cmFjayBvZiBhbGwgdGhvc2U6IGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBNRU1PUllfSE9UUExVR2AsIGBGU19JT01BUGAsIGBEQVhgLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGltcG9ydGFudCBzeW1ib2xzOgpHb29kIG5vbi1zdGF0aWMgc3ltYm9scyBhcmUsIGFzIG5vdGVkIGFib3ZlOiBgZGF4X2lvbWFwX2ZhdWx0YCwgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgYGRheF9kZWxldGVfbWFwcGluZ19yYW5nZWAsIGBkYXhfYnJlYWtfbGF5b3V0YCwgYW5kIGBkYXhfaW9tYXBfcndgLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmc6Ci0gICBXb3J0aEZ1enppbmc6IFRydWUgKHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCB0aGlzKS4KLSAgIEZvY3VzU3ltYm9sczogYGRheF9pb21hcF9mYXVsdGAsIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBgZGF4X2JyZWFrX2xheW91dGAsIGBkYXhfaW9tYXBfcndgCi0gICBFbmFibGVDb25maWdzOiBgRlNfREFYYCwgYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgTUVNT1JZX0hPVFBMVUdgLCBgRlNfSU9NQVBgLCBgREFYYAotICAgUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBidWcgZml4IGluIERBWCBmb2xpbyBjb252ZXJzaW9uIHdoZW4gaGFuZGxpbmcgemVybyBhbmQgZW1wdHkgREFYIGVudHJpZXMgaW4gYGZzL2RheC5jYC4gVGhpcyBpcyB0aGUgY29yZSBvZiBpdC4KCk9rYXksIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19EQVgmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtEQVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYXhfaW9tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7ZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlJiMzNDssCiAgICAmIzM0O2RheF9icmVha19sYXlvdXQmIzM0OywKICAgICYjMzQ7ZGF4X2lvbWFwX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGludmFsaWQgZm9saW8vcGFnZSBjb252ZXJzaW9uIG9uIHplcm8gb3IgZW1wdHkgREFYIGVudHJpZXMgYnkgbW92aW5nIHRoZSBjYWxsIHRvIGRheF90b19mb2xpbygpIGFmdGVyIHRoZSB6ZXJvL2VtcHR5IGVudHJ5IGNoZWNrcyBpbiBkYXhfYXNzb2NpYXRlX2VudHJ5KCksIGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKSwgYW5kIGRheF9idXN5X3BhZ2UoKS4gVGhpcyBmaXhlcyBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVyaW5nIERBWCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBsYXlvdXQgYnJlYWtpbmcsIGFuZCBtYXBwaW5nIHRydW5jYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O0ZTX0lPTUFQJiMzNDssCiAgICAmIzM0O0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RheF9pb21hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDtkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZGF4X2JyZWFrX2xheW91dCYjMzQ7LAogICAgJiMzNDtkYXhfaW9tYXBfcncmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgaW52YWxpZCBmb2xpby9wYWdlIGNvbnZlcnNpb24gb24gemVybyBvciBlbXB0eSBEQVggZW50cmllcyBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gZGF4X3RvX2ZvbGlvKCkgYWZ0ZXIgdGhlIHplcm8vZW1wdHkgZW50cnkgY2hlY2tzIGluIGRheF9hc3NvY2lhdGVfZW50cnkoKSwgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSgpLCBhbmQgZGF4X2J1c3lfcGFnZSgpLiBUaGlzIGZpeGVzIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdXJpbmcgREFYIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIGxheW91dCBicmVha2luZywgYW5kIG1hcHBpbmcgdHJ1bmNhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpbiBgZGF4X2Fzc29jaWF0ZV9lbnRyeSgpYCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKWAsIGFuZCBgZGF4X2J1c3lfcGFnZSgpYCBzbyB0aGF0IGl0IGlzIG9ubHkgZXhlY3V0ZWQgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgYGVudHJ5YCBpcyBuZWl0aGVyIGEgemVybyBlbnRyeSBub3IgYW4gZW1wdHkgZW50cnkgKGBkYXhfaXNfemVyb19lbnRyeSgpYCAvIGBkYXhfaXNfZW1wdHlfZW50cnkoKWApLiBcblxuVGhpcyBjaGFuZ2UgYXZvaWRzIGNhbGN1bGF0aW5nIGludmFsaWQgZm9saW8vcGFnZSBwb2ludGVycyBmcm9tIHNwZWNpYWwgREFYIGVudHJpZXMgKHdoaWNoIGNvdWxkIGxlYWQgdG8gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdXQtb2YtYm91bmRzIHN0cnVjdCBwYWdlIGFjY2Vzc2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gaW52YWxpZCBwb2ludGVyIGFyaXRobWV0aWMgb3IgaW52YWxpZCBwYWdlIGFjY2Vzc2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgY2hlY2tzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxZjVlZTMxZjllMGY0Y2RiYzU3YjA3NTNmZGQ2Y2RjNThmMTY5ODgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDA5OjEzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguYwppbmRleCA2YmE1MDE0MmVlYjJmLi45MDMwNTk5NmIxMDY0IDEwMDY0NAotLS0gYS9mcy9kYXguYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kYXguYwpAQCAtNDgwLDExICYjNDM7NDgwLDEyIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgYm9vbCBzaGFyZWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gZGF4X2VudHJ5X3NpemUoZW50cnkpLCBpbmRleDsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKIAogCWlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSkKIAkJcmV0dXJuOwogCiYjNDM7CWZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTsKIAlpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyAmYW1wOyB+KHNpemUgLSAxKSk7CiAJaWYgKHNoYXJlZCAmYW1wOyZhbXA7IChmb2xpby0mZ3Q7bWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHsKIAkJaWYgKGZvbGlvLSZndDttYXBwaW5nKQpAQCAtNTA1LDIxICYjNDM7NTA2LDIwIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogc3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJYm9vbCB0cnVuYykKIHsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTsKLQogCWlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSkKIAkJcmV0dXJuOwogCi0JZGF4X2ZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CWRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSkKIHsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTsKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKIAogCWlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpOwogCWlmIChmb2xpb19yZWZfY291bnQoZm9saW8pIC0gZm9saW9fbWFwY291bnQoZm9saW8pKQogCQlyZXR1cm4gJmFtcDtmb2xpby0mZ3Q7cGFnZTsKIAllbHNlCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYGZzL2RheC5jYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciYjMzk7cyBhc2tpbmcgaWYgdGhpcyBwYXRjaCB0byBgZnMvZGF4LmNgIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgcmlzayBhc3Nlc3NtZW50IGZpcnN0LiBUaGUgcmVxdWVzdCBpcyBhIHByZXR0eSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgUUEgdGhpbmcg4oCTIGV2YWx1YXRpbmcgYSBwYXRjaCBkaWZmIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLCBwcmltYXJpbHkgd2VpZ2hpbmcgdGhvc2Ugcmlza3MgYWdhaW5zdCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIEl0JiMzOTtzIGEgbG93LXNldmVyaXR5LCBiZW5pZ24gc2NlbmFyaW8uIEZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIHRvdGFsbHkgc2FmZSB0byBwcm9jZWVkOyBubyBleHBsb2l0IGdlbmVyYXRpb24gb3IgYW55dGhpbmcgbWFsaWNpb3VzIGludm9sdmVkLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggaXRzZWxmLiBJIHNlZSBhIGBkaWZmYCBoZXJlLCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHNldmVyYWwgZnVuY3Rpb25zOiBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYC4gVGhlIG1haW4gdGhpbmcgc2VlbXMgdG8gYmUgdGhhdCB0aGV5JiMzOTtyZSByZW9yZGVyaW5nIHNvbWUgbGluZXMgYW5kIGRlY2xhcmluZyBgc3RydWN0IGZvbGlvICpmb2xpb2AgYmVmb3JlIGl0cyB1c2FnZSBpbiB0aGVzZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBgZm9saW9gIHZhcmlhYmxlIHdhcyBpbml0aWFsaXplZCBkaXJlY3RseSB3aGVuIGNhbGxpbmcgYGRheF90b19mb2xpbyhlbnRyeSlgLCBidXQgbm93IGl0JiMzOTtzIGRlY2xhcmVkIHNlcGFyYXRlbHkuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0cnlpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KCkxldCBtZSBzZWUgd2hhdCBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaXMgZG9pbmcuIExldCBtZSB1c2UgZ3JlcHBlciBvciBtYXliZSBqdXN0IGByZWFkLWZpbGVgIHRvIGNoZWNrIGBmcy9kYXguY2AgdG8gdW5kZXJzdGFuZCB0aGUgYGRheF90b19mb2xpb2AgZnVuY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYXhfdG9fZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kYXguYz02Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxuLS1cbmZzL2RheC5jLTcxLVxuZnMvZGF4LmM6NzI6c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxuZnMvZGF4LmMtNzMte1xuLS1cbmZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcbmZzL2RheC5jLTQ1OS17XG5mcy9kYXguYzo0NjA6XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbmZzL2RheC5jLTQ2MS1cdGludCBvcmRlciA9IGRheF9lbnRyeV9vcmRlcihlbnRyeSk7XG4tLVxuZnMvZGF4LmM9NDc4PXN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTQ4Ny1cbmZzL2RheC5jOjQ4ODpcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbmZzL2RheC5jLTQ4OS1cdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFx1MDAyNiB+KHNpemUgLSAxKSk7XG4tLVxuZnMvZGF4LmMtNDk5LVx0XHRkYXhfZm9saW9faW5pdChlbnRyeSk7XG5mcy9kYXguYzo1MDA6XHRcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbmZzL2RheC5jLTUwMS1cdFx0Zm9saW8tXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XG4tLVxuZnMvZGF4LmM9NTA2PXN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2RheC5jLTUxMS1cbmZzL2RheC5jOjUxMjpcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XG5mcy9kYXguYy01MTMtfVxuLS1cbmZzL2RheC5jPTUxNT1zdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXG4tLVxuZnMvZGF4LmMtNTIxLVxuZnMvZGF4LmM6NTIyOlx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuZnMvZGF4LmMtNTIzLVx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSBmb2xpb19tYXBjb3VudChmb2xpbykpXG4tLVxuZnMvZGF4LmM9MTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfZmF1bHRfaXRlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9kYXguYy0xODg0LVxuZnMvZGF4LmM6MTg4NTpcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKCplbnRyeSk7XG5mcy9kYXguYy0xODg2LVx0aWYgKGRheF9mYXVsdF9pc19zeW5jaHJvbm91cyhpdGVyLCB2bWYtXHUwMDNldm1hKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZGF4X3RvX2ZvbGlvYCBmdW5jdGlvbnMsIHNvIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBsaW5lcyA2NS0xMDAgb2YgYGZzL2RheC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBsaWtlbHkgcmVzaWRlcy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBkaXJlY3QgYWNjZXNzIChEQVgpIGludGVyYWN0cyB3aXRoIGZvbGlvIHN0cnVjdHVyZXMuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBEQVggYWRkcmVzcyBzcGFjZSBhbmQgdGhlIHBoeXNpY2FsIG1lbW9yeSByZXByZXNlbnRlZCBieSBmb2xpb3MuIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCB0byBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IGluIGhpZ2gtcGVyZm9ybWFuY2Ugc3RvcmFnZSBzY2VuYXJpb3MsIGFuZCBzbyBpdCBzaG91bGQgaG9wZWZ1bGx5IGJlIGlsbHVtaW5hdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjU6XHQjZGVmaW5lIERBWF9FTVBUWVx0KDFVTCBcdTAwM2NcdTAwM2MgMylcbiAgNjY6XHRcbiAgNjc6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxuICA2ODpcdHtcbiAgNjk6XHRcdHJldHVybiB4YV90b192YWx1ZShlbnRyeSkgXHUwMDNlXHUwMDNlIERBWF9TSElGVDtcbiAgNzA6XHR9XG4gIDcxOlx0XG4gIDcyOlx0c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxuICA3MzpcdHtcbiAgNzQ6XHRcdHJldHVybiBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKGRheF90b19wZm4oZW50cnkpKSk7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyB2b2lkICpkYXhfbWFrZV9lbnRyeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiAgNzg6XHR7XG4gIDc5Olx0XHRyZXR1cm4geGFfbWtfdmFsdWUoZmxhZ3MgfCAocGZuIFx1MDAzY1x1MDAzYyBEQVhfU0hJRlQpKTtcbiAgODA6XHR9XG4gIDgxOlx0XG4gIDgyOlx0c3RhdGljIGJvb2wgZGF4X2lzX2xvY2tlZCh2b2lkICplbnRyeSlcbiAgODM6XHR7XG4gIDg0Olx0XHRyZXR1cm4geGFfdG9fdmFsdWUoZW50cnkpIFx1MDAyNiBEQVhfTE9DS0VEO1xuICA4NTpcdH1cbiAgODY6XHRcbiAgODc6XHRzdGF0aWMgdW5zaWduZWQgaW50IGRheF9lbnRyeV9vcmRlcih2b2lkICplbnRyeSlcbiAgODg6XHR7XG4gIDg5Olx0XHRpZiAoeGFfdG9fdmFsdWUoZW50cnkpIFx1MDAyNiBEQVhfUE1EKVxuICA5MDpcdFx0XHRyZXR1cm4gUE1EX09SREVSO1xuICA5MTpcdFx0cmV0dXJuIDA7XG4gIDkyOlx0fVxuICA5MzpcdFxuICA5NDpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF9pc19wbWRfZW50cnkodm9pZCAqZW50cnkpXG4gIDk1Olx0e1xuICA5NjpcdFx0cmV0dXJuIHhhX3RvX3ZhbHVlKGVudHJ5KSBcdTAwMjYgREFYX1BNRDtcbiAgOTc6XHR9XG4gIDk4Olx0XG4gIDk5Olx0c3RhdGljIGJvb2wgZGF4X2lzX3B0ZV9lbnRyeSh2b2lkICplbnRyeSlcbiAxMDA6XHR7XG4gMTAxOlx0XHRyZXR1cm4gISh4YV90b192YWx1ZShlbnRyeSkgXHUwMDI2IERBWF9QTUQpO1xuIDEwMjpcdH1cbiAxMDM6XHRcbiAxMDQ6XHRzdGF0aWMgaW50IGRheF9pc196ZXJvX2VudHJ5KHZvaWQgKmVudHJ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTA3CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZpeCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBhcHBlYXJzIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaW4gaG93IHdlIGhhbmRsZSBEQVggZW50cmllcywgc3BlY2lmaWNhbGx5LCB3aGVuIHRob3NlIGVudHJpZXMgYXJlIHplcm8gb3IgZW1wdHkuIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaXMgYmVpbmcgY2FsbGVkICpiZWZvcmUqIHdlJiMzOTtyZSBjaGVja2luZyBpZiBgZW50cnlgIGlzIGEgemVybyBvciBlbXB0eSBlbnRyeS4gVGhpcyBtZWFucyB3ZSBjb3VsZCBiZSB0cnlpbmcgdG8gY29tcHV0ZSBhIGZvbGlvLCBhbmQgdGhlcmVmb3JlIGRlcmVmZXJlbmNpbmcgYSBwb3RlbnRpYWxseSBpbnZhbGlkIHBhZ2UsIGxlYWRpbmcgdG8gcG9pbnRlciBkZXJlZmVyZW5jZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgZXZlbiBhIGNyYXNoIGlmIHdlIHRyeSB0byBhY2Nlc3MgYSBib2d1cyBgc3RydWN0IHBhZ2VgLgoKVGhlIHNvbHV0aW9uLCB3aGljaCBJIGFncmVlIHdpdGgsIGlzIHRvIG1vdmUgdGhlIGBkYXhfdG9fZm9saW8oZW50cnkpYCBjYWxsICphZnRlciogdGhlIGBpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpIHJldHVybjtgIGNoZWNrLiBUaGlzIHByZXZlbnRzIHRoZSBjb21wdXRhdGlvbiBhbmQgcG90ZW50aWFsIGRlcmVmZXJlbmNlIG9uIGludmFsaWQgZW50cmllcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBvciBpbnRlcmFjdHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIEtNU0FOIGNvbWVzIGludG8gcGxheS4gTGV0JiMzOTtzIG1ldGhvZGljYWxseSBjaGVjazoKCiogICBEb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8sIG5vdCBhdCBhbGwuCiogICBEb2VzIGl0IGludHJvZHVjZSBvciBtb2RpZnkgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBvciBwb3RlbnRpYWxseSBjcmVhdGUgaW5mb3JtYXRpb24gbGVha3M/IE5vLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9mIHRoYXQuIFRoZSBgZm9saW9gIHZhcmlhYmxlIGdldHMgYXNzaWduZWQgYSB2YWx1ZSBvbmx5ICphZnRlciogdGhlIGd1YXJkIGNoZWNrLCBhbmQgdGhlIGBlbnRyeWAgaXMgYW4gYXJndW1lbnQgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBpbml0aWFsaXplZCBiZWZvcmUuCiogICBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSwgYXMgbWVudGlvbmVkLCB0aGUgYGZvbGlvYCBpcyBvbmx5IGFzc2lnbmVkIGFmdGVyIHRoZSBjaGVjayBhbmQgdGhlIGVudHJ5IGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiogICBVbHRpbWF0ZWx5LCB0aGUgYnVnIGZpeGVkIGlzIGFib3V0IGNvbXB1dGluZyBhIGZvbGlvIHBvaW50ZXIgZnJvbSBzcGVjaWFsIHplcm8vZW1wdHkgZW50cmllcywgc28gYW4gaW52YWxpZCBwb2ludGVyIGNhbGN1bGF0aW9uLgoqICAgRGlkIEtNU0FOIGRldGVjdCBpdD8gTm8uCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgcG9pbnRlci9jb250cm9sIGZsb3cgZml4LiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIG1vcmUgb2YgYSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBLQVNBTiBzaG91bGQgaGFuZGxlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIHJlYXNvbmluZywgZXNwZWNpYWxseSByZWdhcmRpbmcgd2h5IHdlICpkb24mIzM5O3QqIG5lZWQgS01TQU4gaGVyZS4gV2UgbmVlZCBhIGNsZWFyIGV4cGxhbmF0aW9uIHRoYXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtNU0FOOgoKKiAgICoqS2V5IERpc3RpbmN0aW9uKio6IFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgYWxyZWFkeSBlZmZlY3RpdmVseSBjYXRjaCB0aG9zZSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcywgb3V0LW9mLWJvdW5kcyBlcnJvcnMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGxvY2tpbmcgcHJvYmxlbXMsIGV0Yy4gVGhhdCYjMzk7cyB3aGF0IGl0JiMzOTtzIGJ1aWx0IGZvci4KKiAgIEtNU0FOJiMzOTtzIHNwZWNpZmljIHJvbGUgaXMgdG8gZGV0ZWN0ICpyZWFkcyogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGNhdGNoIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGF0JiMzOTtzIGl0cyBuaWNoZS4KKiAgIEluIHRoaXMgcGFydGljdWxhciBwYXRjaCwgYWxsIHdlJiMzOTtyZSBkb2luZyBpcyByZWFycmFuZ2luZyB0aGUgZXZhbHVhdGlvbiBvZiBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgdG8gaGFwcGVuICphZnRlciogdGhlIGd1YXJkLiBJdCYjMzk7cyBpbiBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYC4KKiAgIFdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgb3IgYWxsb2NhdGluZyBhbnkgbmV3IG1lbW9yeSwgbGVhdmluZyBhbnkgbWVtb3J5IHVuaW5pdGlhbGl6ZWQsIGNvcHlpbmcgYW55IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCByZWFkcy4KClRoaXMgaXMgYWxsIHN0YW5kYXJkIG1lbW9yeSBhY2Nlc3MgYW5kIGNvbnRyb2wgZmxvdy4gVGhlcmUmIzM5O3Mgbm90aGluZyBLTVNBTi1zcGVjaWZpYyBhYm91dCBpdC4KCk9rYXksIHRoYXQmIzM5O3MgY29tcHJlaGVuc2l2ZS4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaW4gYGRheF9hc3NvY2lhdGVfZW50cnkoKWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KClgLCBhbmQgYGRheF9idXN5X3BhZ2UoKWAgc28gdGhhdCBpdCBpcyBvbmx5IGV4ZWN1dGVkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGBlbnRyeWAgaXMgbmVpdGhlciBhIHplcm8gZW50cnkgbm9yIGFuIGVtcHR5IGVudHJ5IChgZGF4X2lzX3plcm9fZW50cnkoKWAgLyBgZGF4X2lzX2VtcHR5X2VudHJ5KClgKS4gXG5cblRoaXMgY2hhbmdlIGF2b2lkcyBjYWxjdWxhdGluZyBpbnZhbGlkIGZvbGlvL3BhZ2UgcG9pbnRlcnMgZnJvbSBzcGVjaWFsIERBWCBlbnRyaWVzICh3aGljaCBjb3VsZCBsZWFkIHRvIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBzdHJ1Y3QgcGFnZSBhY2Nlc3NlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlciBhcml0aG1ldGljIG9yIGludmFsaWQgcGFnZSBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGNoZWNrcywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRheF90b19mb2xpbyhlbnRyeSlgIGluIGBkYXhfYXNzb2NpYXRlX2VudHJ5KClgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSgpYCwgYW5kIGBkYXhfYnVzeV9wYWdlKClgIHNvIHRoYXQgaXQgaXMgb25seSBleGVjdXRlZCBhZnRlciB2ZXJpZnlpbmcgdGhhdCBgZW50cnlgIGlzIG5laXRoZXIgYSB6ZXJvIGVudHJ5IG5vciBhbiBlbXB0eSBlbnRyeSAoYGRheF9pc196ZXJvX2VudHJ5KClgIC8gYGRheF9pc19lbXB0eV9lbnRyeSgpYCkuIFxuXG5UaGlzIGNoYW5nZSBhdm9pZHMgY2FsY3VsYXRpbmcgaW52YWxpZCBmb2xpby9wYWdlIHBvaW50ZXJzIGZyb20gc3BlY2lhbCBEQVggZW50cmllcyAod2hpY2ggY291bGQgbGVhZCB0byBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgc3RydWN0IHBhZ2UgYWNjZXNzZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYyBvciBpbnZhbGlkIHBhZ2UgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjaGVja3MsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6MTMuMjA0OTkwMjI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3Mzg0MDI4ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX0RBWFwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiREFYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGF4X2lvbWFwX2ZhdWx0XCIsXG4gICAgXCJkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZVwiLFxuICAgIFwiZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlXCIsXG4gICAgXCJkYXhfYnJlYWtfbGF5b3V0XCIsXG4gICAgXCJkYXhfaW9tYXBfcndcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpbiBgZGF4X2Fzc29jaWF0ZV9lbnRyeSgpYCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKWAsIGFuZCBgZGF4X2J1c3lfcGFnZSgpYCBzbyB0aGF0IGl0IGlzIG9ubHkgZXhlY3V0ZWQgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgYGVudHJ5YCBpcyBuZWl0aGVyIGEgemVybyBlbnRyeSBub3IgYW4gZW1wdHkgZW50cnkgKGBkYXhfaXNfemVyb19lbnRyeSgpYCAvIGBkYXhfaXNfZW1wdHlfZW50cnkoKWApLiBcXG5cXG5UaGlzIGNoYW5nZSBhdm9pZHMgY2FsY3VsYXRpbmcgaW52YWxpZCBmb2xpby9wYWdlIHBvaW50ZXJzIGZyb20gc3BlY2lhbCBEQVggZW50cmllcyAod2hpY2ggY291bGQgbGVhZCB0byBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgc3RydWN0IHBhZ2UgYWNjZXNzZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYyBvciBpbnZhbGlkIHBhZ2UgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjaGVja3MsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwcmV2ZW50cyBpbnZhbGlkIGZvbGlvL3BhZ2UgY29udmVyc2lvbiBvbiB6ZXJvIG9yIGVtcHR5IERBWCBlbnRyaWVzIGJ5IG1vdmluZyB0aGUgY2FsbCB0byBkYXhfdG9fZm9saW8oKSBhZnRlciB0aGUgemVyby9lbXB0eSBlbnRyeSBjaGVja3MgaW4gZGF4X2Fzc29jaWF0ZV9lbnRyeSgpLCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KCksIGFuZCBkYXhfYnVzeV9wYWdlKCkuIFRoaXMgZml4ZXMgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGR1cmluZyBEQVggcGFnZSBmYXVsdCBoYW5kbGluZywgbGF5b3V0IGJyZWFraW5nLCBhbmQgbWFwcGluZyB0cnVuY2F0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxMzoxMy4yMDQ5OTgwNDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDQ0MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMxZjVlZTMxZjllMGY0Y2RiYzU3YjA3NTNmZGQ2Y2RjNThmMTY5ODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAwOToxMzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jXFxuaW5kZXggNmJhNTAxNDJlZWIyZi4uOTAzMDU5OTZiMTA2NCAxMDA2NDRcXG4tLS0gYS9mcy9kYXguY1xcbisrKyBiL2ZzL2RheC5jXFxuQEAgLTQ4MCwxMSArNDgwLDEyIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGJvb2wgc2hhcmVkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbitcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4gXFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIFxcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFxcdTAwMjYgfihzaXplIC0gMSkpO1xcbiBcXHRpZiAoc2hhcmVkIFxcdTAwMjZcXHUwMDI2IChmb2xpby1cXHUwMDNlbWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHtcXG4gXFx0XFx0aWYgKGZvbGlvLVxcdTAwM2VtYXBwaW5nKVxcbkBAIC01MDUsMjEgKzUwNiwyMCBAQCBzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gc3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdGJvb2wgdHJ1bmMpXFxuIHtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuLVxcbiBcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGRheF9mb2xpb19wdXQoZm9saW8pO1xcbitcXHRkYXhfZm9saW9fcHV0KGRheF90b19mb2xpbyhlbnRyeSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXFxuIHtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcbiBcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbiBcXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZTtcXG4gXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxMzoxMy42MzYxMjkxMTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM3NDQ2NzM0NjA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19EQVhcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIkRBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRheF9pb21hcF9mYXVsdFwiLFxuICAgIFwiZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VcIixcbiAgICBcImRheF9kZWxldGVfbWFwcGluZ19yYW5nZVwiLFxuICAgIFwiZGF4X2JyZWFrX2xheW91dFwiLFxuICAgIFwiZGF4X2lvbWFwX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgaW52YWxpZCBmb2xpby9wYWdlIGNvbnZlcnNpb24gb24gemVybyBvciBlbXB0eSBEQVggZW50cmllcyBieSBtb3ZpbmcgdGhlIGNhbGwgdG8gZGF4X3RvX2ZvbGlvKCkgYWZ0ZXIgdGhlIHplcm8vZW1wdHkgZW50cnkgY2hlY2tzIGluIGRheF9hc3NvY2lhdGVfZW50cnkoKSwgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSgpLCBhbmQgZGF4X2J1c3lfcGFnZSgpLiBUaGlzIGZpeGVzIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkdXJpbmcgREFYIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIGxheW91dCBicmVha2luZywgYW5kIG1hcHBpbmcgdHJ1bmNhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzFmNWVlMzFmOWUwZjRjZGJjNTdiMDc1M2ZkZDZjZGM1OGYxNjk4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDk6MTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jXG5pbmRleCA2YmE1MDE0MmVlYjJmLi45MDMwNTk5NmIxMDY0IDEwMDY0NFxuLS0tIGEvZnMvZGF4LmNcbisrKyBiL2ZzL2RheC5jXG5AQCAtNDgwLDExICs0ODAsMTIgQEAgc3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGJvb2wgc2hhcmVkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gXHRcdHJldHVybjtcbiBcbitcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiBcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFx1MDAyNiB+KHNpemUgLSAxKSk7XG4gXHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiAoZm9saW8tXHUwMDNlbWFwcGluZyB8fCBkYXhfZm9saW9faXNfc2hhcmVkKGZvbGlvKSkpIHtcbiBcdFx0aWYgKGZvbGlvLVx1MDAzZW1hcHBpbmcpXG5AQCAtNTA1LDIxICs1MDYsMjAgQEAgc3RhdGljIHZvaWQgZGF4X2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gc3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHRib29sIHRydW5jKVxuIHtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuLVxuIFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRkYXhfZm9saW9fcHV0KGZvbGlvKTtcbitcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xuIFx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSBmb2xpb19tYXBjb3VudChmb2xpbykpXG4gXHRcdHJldHVybiBcdTAwMjZmb2xpby1cdTAwM2VwYWdlO1xuIFx0ZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6MTMuNjM2MTMwNzczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzMTcwMzMwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBpZiBzbywgd2hhdCBvdXIgdGFyZ2V0IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgbG9va3MgcHJvbWlzaW5nLCBnaXZlbiB0aGF0IGl0J3MgdG91Y2hpbmcgYGZzL2RheC5jYCwgd2hpY2ggaXMgYWx3YXlzIGFuIGludGVyZXN0aW5nIGFyZWEuXG5cblRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIGlzIHdpdGhpbiB0aGUgYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeWAsIGFuZCBgZGF4X2J1c3lfcGFnZWAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBsaW5lIGBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtgIGlzIG5vdyBndWFyZGVkIGJ5IGEgY2hlY2s6IGBpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpIHJldHVybjtgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgY291bGQgbGVhZCB0byBhIGNyYXNoLCBkZXJlZmVyZW5jZSBpbnZhbGlkIG1lbW9yeSwgb3IgcGVyZm9ybSBhbiBpbGxlZ2FsIGNvbnZlcnNpb24gaWYgdGhlIGBlbnRyeWAgdmFsdWUgaXMgZWl0aGVyIHplcm8gb3IgZW1wdHkuIEl0IHN1Z2dlc3RzIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZSBpZiB0aG9zZSBjaGVja3Mgd2VyZW4ndCBpbiBwbGFjZS5cblxuU28sIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgZnVsbHksIEknbGwgbmVlZCB0byBleHBsb3JlIGBmcy9kYXguY2AgYXJvdW5kIGxpbmVzIDQ3MC01MzAuIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCBhbmQgZ2V0IGEgZmVlbCBmb3IgaG93IGBlbnRyeWAgaXMgaGFuZGxlZCBpbiBnZW5lcmFsLiBUaGlzIHNob3VsZCBoZWxwIG1lIGlkZW50aWZ5IGdvb2QgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6NTEuOTUzMTY1OTYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RheC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2NTpcXHRcXHQgKiBkYXhfZm9saW9fcHV0KCkgd2hlbiB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZWlyXFxuIDQ2NjpcXHRcXHQgKiBmaW5hbCBtYXBwaW5nLlxcbiA0Njc6XFx0XFx0ICovXFxuIDQ2ODpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fb3JkZXIoZm9saW8pKTtcXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCkge1xcbiA0NzE6XFx0XFx0XFx0cHJlcF9jb21wb3VuZF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb3JkZXIpO1xcbiA0NzI6XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMSlcXG4gNDczOlxcdFxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QpO1xcbiA0NzQ6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbiA0NzU6XFx0XFx0fVxcbiA0NzY6XFx0fVxcbiA0Nzc6XFx0XFxuIDQ3ODpcXHRzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gNDc5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiA0ODA6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBib29sIHNoYXJlZClcXG4gNDgxOlxcdHtcXG4gNDgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRheF9lbnRyeV9zaXplKGVudHJ5KSwgaW5kZXg7XFxuIDQ4MzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIDQ4NjpcXHRcXHRcXHRyZXR1cm47XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdFxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNDg5OlxcdFxcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFxcdTAwMjYgfihzaXplIC0gMSkpO1xcbiA0OTA6XFx0XFx0aWYgKHNoYXJlZCBcXHUwMDI2XFx1MDAyNiAoZm9saW8tXFx1MDAzZW1hcHBpbmcgfHwgZGF4X2ZvbGlvX2lzX3NoYXJlZChmb2xpbykpKSB7XFxuIDQ5MTpcXHRcXHRcXHRpZiAoZm9saW8tXFx1MDAzZW1hcHBpbmcpXFxuIDQ5MjpcXHRcXHRcXHRcXHRkYXhfZm9saW9fbWFrZV9zaGFyZWQoZm9saW8pO1xcbiA0OTM6XFx0XFxuIDQ5NDpcXHRcXHRcXHRXQVJOX09OX09OQ0UoIWZvbGlvLVxcdTAwM2VzaGFyZSk7XFxuIDQ5NTpcXHRcXHRcXHRXQVJOX09OX09OQ0UoZGF4X2VudHJ5X29yZGVyKGVudHJ5KSAhPSBmb2xpb19vcmRlcihmb2xpbykpO1xcbiA0OTY6XFx0XFx0XFx0Zm9saW8tXFx1MDAzZXNoYXJlKys7XFxuIDQ5NzpcXHRcXHR9IGVsc2Uge1xcbiA0OTg6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvLVxcdTAwM2VtYXBwaW5nKTtcXG4gNDk5OlxcdFxcdFxcdGRheF9mb2xpb19pbml0KGVudHJ5KTtcXG4gNTAwOlxcdFxcdFxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG4gNTAxOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VtYXBwaW5nID0gbWFwcGluZztcXG4gNTAyOlxcdFxcdFxcdGZvbGlvLVxcdTAwM2VpbmRleCA9IGluZGV4O1xcbiA1MDM6XFx0XFx0fVxcbiA1MDQ6XFx0fVxcbiA1MDU6XFx0XFxuIDUwNjpcXHRzdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gNTA3OlxcdFxcdFxcdFxcdFxcdGJvb2wgdHJ1bmMpXFxuIDUwODpcXHR7XFxuIDUwOTpcXHRcXHRpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpXFxuIDUxMDpcXHRcXHRcXHRyZXR1cm47XFxuIDUxMTpcXHRcXG4gNTEyOlxcdFxcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XFxuIDUxMzpcXHR9XFxuIDUxNDpcXHRcXG4gNTE1OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2J1c3lfcGFnZSh2b2lkICplbnRyeSlcXG4gNTE2OlxcdHtcXG4gNTE3OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcXG4gNTIwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuIDUyMzpcXHRcXHRpZiAoZm9saW9fcmVmX2NvdW50KGZvbGlvKSAtIGZvbGlvX21hcGNvdW50KGZvbGlvKSlcXG4gNTI0OlxcdFxcdFxcdHJldHVybiBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2U7XFxuIDUyNTpcXHRcXHRlbHNlXFxuIDUyNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNTI3OlxcdH1cXG4gNTI4OlxcdFxcbiA1Mjk6XFx0LyoqXFxuIDUzMDpcXHQgKiBkYXhfbG9ja19mb2xpbyAtIExvY2sgdGhlIERBWCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGEgZm9saW9cXG4gNTMxOlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvIHdob3NlIGVudHJ5IHdlIHdhbnQgdG8gbG9ja1xcbiA1MzI6XFx0ICpcXG4gNTMzOlxcdCAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC5cXG4gNTM0OlxcdCAqIFJldHVybjogQSBjb29raWUgdG8gcGFzcyB0byBkYXhfdW5sb2NrX2ZvbGlvKCkgb3IgMCBpZiB0aGUgZW50cnkgY291bGRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6NTEuOTUzMzEwODkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU2MTIwMTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGZyYW1lZCBhcyBhIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgZGF4X3RvX2ZvbGlvYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZGF4X3RvX2ZvbGlvYCBmdW5jdGlvbiBvciBzY3JpcHQgaXMgYWxsIGFib3V0LiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIGl0J3MgKnVzZWQqLiBJJ2xsIGp1bXAgcmlnaHQgaW50byBncmVwcGluZyBmb3IgdGhlIHRlcm0gXCJkYXhfdG9fZm9saW9cIiB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcXVpY2sgb3ZlcnZpZXcgb2YgaG93IGl0J3MgaW52b2tlZCwgd2hpY2ggcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgd2hhdCBraW5kIG9mIGlucHV0cyBhbmQgb3V0cHV0cyBpdCdzIGRlYWxpbmcgd2l0aC4gVGhhdCBjb250ZXh0IGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIEl0IHNob3VsZCBnaXZlIG1lIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTM6NTguNTE0NTE0Nzg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTc0OTk3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF4X3RvX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTY3PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF90b19wZm4odm9pZCAqZW50cnkpXFxuLS1cXG5mcy9kYXguYy03MS1cXG5mcy9kYXguYzo3MjpzdGF0aWMgc3RydWN0IGZvbGlvICpkYXhfdG9fZm9saW8odm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNzMte1xcbi0tXFxuZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTQ1OS17XFxuZnMvZGF4LmM6NDYwOlxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbmZzL2RheC5jLTQ2MS1cXHRpbnQgb3JkZXIgPSBkYXhfZW50cnlfb3JkZXIoZW50cnkpO1xcbi0tXFxuZnMvZGF4LmM9NDc4PXN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtNDg3LVxcbmZzL2RheC5jOjQ4ODpcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuZnMvZGF4LmMtNDg5LVxcdGluZGV4ID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzIFxcdTAwMjYgfihzaXplIC0gMSkpO1xcbi0tXFxuZnMvZGF4LmMtNDk5LVxcdFxcdGRheF9mb2xpb19pbml0KGVudHJ5KTtcXG5mcy9kYXguYzo1MDA6XFx0XFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbmZzL2RheC5jLTUwMS1cXHRcXHRmb2xpby1cXHUwMDNlbWFwcGluZyA9IG1hcHBpbmc7XFxuLS1cXG5mcy9kYXguYz01MDY9c3RhdGljIHZvaWQgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSh2b2lkICplbnRyeSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9kYXguYy01MTEtXFxuZnMvZGF4LmM6NTEyOlxcdGRheF9mb2xpb19wdXQoZGF4X3RvX2ZvbGlvKGVudHJ5KSk7XFxuZnMvZGF4LmMtNTEzLX1cXG4tLVxcbmZzL2RheC5jPTUxNT1zdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXFxuLS1cXG5mcy9kYXguYy01MjEtXFxuZnMvZGF4LmM6NTIyOlxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG5mcy9kYXguYy01MjMtXFx0aWYgKGZvbGlvX3JlZl9jb3VudChmb2xpbykgLSBmb2xpb19tYXBjb3VudChmb2xpbykpXFxuLS1cXG5mcy9kYXguYz0xODQyPXN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9pdGVyKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTg4NC1cXG5mcy9kYXguYzoxODg1OlxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKCplbnRyeSk7XFxuZnMvZGF4LmMtMTg4Ni1cXHRpZiAoZGF4X2ZhdWx0X2lzX3N5bmNocm9ub3VzKGl0ZXIsIHZtZi1cXHUwMDNldm1hKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MDAuMzMyMDIwNzk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY5ODg4NDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgYGZzL2RheC5jYDpcblxuKipEaXZpbmcgaW50byB0aGUgREFYIERldGFpbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDYwLTgwIG9mIGBmcy9kYXguY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgd2hlcmUgd2UncmUgc2VlaW5nIHNvbWUgY29yZSBEQVggKERpcmVjdCBBY2Nlc3MpIGZ1bmN0aW9uYWxpdHkga2lja2luZyBpbiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGFjdGlvbi4gSSdtIGltbWVkaWF0ZWx5IHNjYW5uaW5nIGZvciB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBmdW5jdGlvbj8gV2hhdCdzIHRoZSBjYWxsaW5nIHBvaW50PyBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIGlzIHRoYXQgdGhlc2UgbGluZXMgYXJlIGxpa2VseSBoYW5kbGluZyBkaXJlY3QgYWNjZXNzIHRvIHBlcnNpc3RlbnQgbWVtb3J5IGZyb20gYSBmaWxlIHN5c3RlbSBwZXJzcGVjdGl2ZS5cblxuT2theSwgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvZGUncyBvYmplY3RpdmUuIFdlIGFyZSBsaWtlbHkgbG9va2luZyBhdCBmaWxlIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gZ2l2ZSB1c2VybGFuZCB0aGUgYWJpbGl0eSB0byBhY2Nlc3MgZGF0YSBkaXJlY3RseSBmcm9tIHBlcnNpc3RlbnQgbWVtb3J5LiBUaGUgZGV0YWlscyBhcmUgbW9zdCBwcm9iYWJseSBhYm91dCBob3cgREFYIGludGVncmF0ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2Ugb3Igc29tZSBmb3JtIG9mIG1lbW9yeSBtYXBwaW5nLiBJJ20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIGBpb21hcGAsIHBvdGVudGlhbGx5IHNvbWUgZGlyZWN0IEkvTyBsb2dpYywgb3IgbWF5YmUgZXZlbiBhZGRyZXNzaW5nIGNoYWxsZW5nZXMgYXJvdW5kIHBhZ2UgZmF1bHRzIGFuZCBjb2hlcmVuY2UuIEkgYWxzbyBhc3N1bWUgdGhlcmUgYXJlIGNoZWNrcyBmb3IgcGVybWlzc2lvbnMgYW5kIGRhdGEgYWxpZ25tZW50LiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nLCB0aGF0J3MgY3J1Y2lhbCBoZXJlLCBlc3BlY2lhbGx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIERBWCBhY2Nlc3MgcGF0aC5cblxuTm93IEkgYW0gZ29pbmcgdG8gc2VlIGlmIGFueSBvZiB0aGUgY2hlY2tzIGFuZCBkYXRhIG1hcHBpbmdzIGFyZSBmYW1pbGlhciwgb3IgaGF2ZSBjaGFuZ2VkIHJlY2VudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MTAuMDMwOTA4MDI4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RheC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdCAqL1xcbiAgNjE6XFx0I2RlZmluZSBEQVhfU0hJRlRcXHQoNClcXG4gIDYyOlxcdCNkZWZpbmUgREFYX0xPQ0tFRFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMClcXG4gIDYzOlxcdCNkZWZpbmUgREFYX1BNRFxcdFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMSlcXG4gIDY0OlxcdCNkZWZpbmUgREFYX1pFUk9fUEFHRVxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMilcXG4gIDY1OlxcdCNkZWZpbmUgREFYX0VNUFRZXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAzKVxcbiAgNjY6XFx0XFxuICA2NzpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxcbiAgNjg6XFx0e1xcbiAgNjk6XFx0XFx0cmV0dXJuIHhhX3RvX3ZhbHVlKGVudHJ5KSBcXHUwMDNlXFx1MDAzZSBEQVhfU0hJRlQ7XFxuICA3MDpcXHR9XFxuICA3MTpcXHRcXG4gIDcyOlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRheF90b19mb2xpbyh2b2lkICplbnRyeSlcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdHJldHVybiBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKGRheF90b19wZm4oZW50cnkpKSk7XFxuICA3NTpcXHR9XFxuICA3NjpcXHRcXG4gIDc3OlxcdHN0YXRpYyB2b2lkICpkYXhfbWFrZV9lbnRyeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4gIDc4OlxcdHtcXG4gIDc5OlxcdFxcdHJldHVybiB4YV9ta192YWx1ZShmbGFncyB8IChwZm4gXFx1MDAzY1xcdTAwM2MgREFYX1NISUZUKSk7XFxuICA4MDpcXHR9XFxuICA4MTpcXHRcXG4gIDgyOlxcdHN0YXRpYyBib29sIGRheF9pc19sb2NrZWQodm9pZCAqZW50cnkpXFxuICA4MzpcXHR7XFxuICA4NDpcXHRcXHRyZXR1cm4geGFfdG9fdmFsdWUoZW50cnkpIFxcdTAwMjYgREFYX0xPQ0tFRDtcXG4gIDg1OlxcdH1cXG4gIDg2OlxcdFxcbiAgODc6XFx0c3RhdGljIHVuc2lnbmVkIGludCBkYXhfZW50cnlfb3JkZXIodm9pZCAqZW50cnkpXFxuICA4ODpcXHR7XFxuICA4OTpcXHRcXHRpZiAoeGFfdG9fdmFsdWUoZW50cnkpIFxcdTAwMjYgREFYX1BNRClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6MTAuMDMxMDI0NzE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM4MDQ4NDczMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBEQVggRmlsZXN5c3RlbSBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUgaW4gYGZzL2RheC5jYCBhbmQgSSd2ZSBzcG90dGVkIGEgcG90ZW50aWFsIGlzc3VlLiBTcGVjaWZpY2FsbHksIHRoZSBjYWxsIHRvIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcyBoYXBwZW5pbmcgYmVmb3JlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGBlbnRyeWAgdmFsdWVzLCBzcGVjaWZpY2FsbHkgYERBWF9aRVJPX1BBR0VgIG9yIGBEQVhfRU1QVFlgLiAgXG5cblRoZSBwcm9ibGVtIGlzIHRoYXQgYGRheF90b19mb2xpbyhlbnRyeSlgIGlzLCB1bmRlciB0aGUgaG9vZCwgY2FsbGluZyBgcGFnZV9mb2xpbyhwZm5fdG9fcGFnZShkYXhfdG9fcGZuKGVudHJ5KSkpYC4gSWYgYGVudHJ5YCBpcyBlaXRoZXIgYERBWF9aRVJPX1BBR0VgIG9yIGBEQVhfRU1QVFlgLCB0aGVuIGBkYXhfdG9fcGZuKGVudHJ5KWAgaXMgZ29pbmcgdG8gcmVzdWx0IGluIGEgUEZOIG9mIDAuICBcblxuTm93IGhlcmUncyB0aGUga2lja2VyOiBgcGZuX3RvX3BhZ2UoMClgICptaWdodCogcmV0dXJuIGFuIGludmFsaWQgcGFnZSBwb2ludGVyLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBvciB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoaXMgY291bGQgZWFzaWx5IGxlYWQgdG8gYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzIG9yLCB3b3JzZSwgYSBrZXJuZWwgcGFuaWMuICBcblxuRWZmZWN0aXZlbHksIGluaXRpYWxpemluZyBgZm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpYCAqYmVmb3JlKiBjaGVja2luZyBpZiBgZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSlgIGlzIGdvaW5nIHRvIHJlc3VsdCBpbiB0aGF0IGBwZm5fdG9fcGFnZWAgYmVpbmcgZXZhbHVhdGVkIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIHdlICprbm93KiBpdCdzIGxpa2VseSB0byBjYXVzZSBwcm9ibGVtcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgYnVnLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLCBhbmQgYGRheF9idXN5X3BhZ2VgIGFyZSBjYWxsZWQuIEknbGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBlbnRyeXBvaW50cywgZXNwZWNpYWxseSBleHBvcnRlZCBvbmVzLCBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBzbyBJIGNhbiBzZWUgdGhlIGltcGFjdCBvZiB0aGlzIGJ1Zy4gS25vd2luZyB3aGVyZSBpdCdzIHVzZWQgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgc2V2ZXJpdHkgYW5kIHRoZSBiZXN0IHdheSB0byBmaXggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNDo0My44MzU4NzQ5MDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjM1MzI2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF4X2Fzc29jaWF0ZV9lbnRyeXxkYXhfZGlzYXNzb2NpYXRlX2VudHJ5fGRheF9idXN5X3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9NDU4PXN0YXRpYyB2b2lkIGRheF9mb2xpb19pbml0KHZvaWQgKmVudHJ5KVxcbi0tXFxuZnMvZGF4LmMtNDc3LVxcbmZzL2RheC5jOjQ3ODpzdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9kYXguYy00NzktXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9kYXguYy01MDUtXFxuZnMvZGF4LmM6NTA2OnN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2RheC5jLTUwNy1cXHRcXHRcXHRcXHRib29sIHRydW5jKVxcbi0tXFxuZnMvZGF4LmMtNTE0LVxcbmZzL2RheC5jOjUxNTpzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNTE2LXtcXG4tLVxcbmZzL2RheC5jPTY4Nz1zdGF0aWMgdm9pZCAqZ3JhYl9tYXBwaW5nX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbi0tXFxuZnMvZGF4LmMtNzM2LVxcbmZzL2RheC5jOjczNzpcXHRcXHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCBmYWxzZSk7XFxuZnMvZGF4LmMtNzM4LVxcdFxcdHhhc19zdG9yZSh4YXMsIE5VTEwpO1xcdC8qIHVuZG8gdGhlIFBNRCBqb2luICovXFxuLS1cXG5mcy9kYXguYz03OTE9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtODI4LVxcdFxcdGlmIChlbnRyeSlcXG5mcy9kYXguYzo4Mjk6XFx0XFx0XFx0cGFnZSA9IGRheF9idXN5X3BhZ2UoZW50cnkpO1xcbmZzL2RheC5jLTgzMC1cXHRcXHRwdXRfdW5sb2NrZWRfZW50cnkoXFx1MDAyNnhhcywgZW50cnksIFdBS0VfTkVYVCk7XFxuLS1cXG5mcy9kYXguYz04NTI9c3RhdGljIGludCBfX2RheF9pbnZhbGlkYXRlX2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtODY2LVxcdFxcdGdvdG8gb3V0O1xcbmZzL2RheC5jOjg2NzpcXHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCB0cnVuYyk7XFxuZnMvZGF4LmMtODY4LVxcdHhhc19zdG9yZShcXHUwMDI2eGFzLCBOVUxMKTtcXG4tLVxcbmZzL2RheC5jPTkyNT12b2lkIGRheF9kZWxldGVfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTk0NS1cXHRcXHRcXHRjb250aW51ZTtcXG5mcy9kYXguYzo5NDY6XFx0XFx0ZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeShlbnRyeSwgbWFwcGluZywgdHJ1ZSk7XFxuZnMvZGF4LmMtOTQ3LVxcdFxcdHhhc19zdG9yZShcXHUwMDI2eGFzLCBOVUxMKTtcXG4tLVxcbmZzL2RheC5jPTEwNzk9c3RhdGljIHZvaWQgKmRheF9pbnNlcnRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTEwNi1cXG5mcy9kYXguYzoxMTA3OlxcdFxcdGRheF9kaXNhc3NvY2lhdGVfZW50cnkoZW50cnksIG1hcHBpbmcsIGZhbHNlKTtcXG5mcy9kYXguYzoxMTA4OlxcdFxcdGRheF9hc3NvY2lhdGVfZW50cnkobmV3X2VudHJ5LCBtYXBwaW5nLCB2bWYtXFx1MDAzZXZtYSxcXG5mcy9kYXguYy0xMTA5LVxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlYWRkcmVzcywgc2hhcmVkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0zMzQ9dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTM2Ny0gKiBAc2hhcmU6IG51bWJlciBvZiBEQVggbWFwcGluZ3MgdGhhdCByZWZlcmVuY2UgdGhpcyBmb2xpby4gU2VlXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjM2ODogKiAgICBkYXhfYXNzb2NpYXRlX2VudHJ5LlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0zNjktICogQHByaXZhdGU6IEZpbGVzeXN0ZW0gcGVyLWZvbGlvIGRhdGEgKHNlZSBmb2xpb19hdHRhY2hfcHJpdmF0ZSgpKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTQ6NDYuMjk5NDE1MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0NzgzMDAxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQVggTWFwcGluZyBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcmV2ZWFscyB0aGF0IHRoZSBmdW5jdGlvbnMgYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeWAsIGFuZCBgZGF4X2J1c3lfcGFnZWAgYXJlIGNlbnRyYWwgdG8gdGhpcyBEQVggYXJjaGl0ZWN0dXJlLCBhbmQgdGhleSdyZSBjYWxsZWQgcHJpbWFyaWx5IGJ5IGEgc2VsZWN0IHNldCBvZiBmdW5jdGlvbnM6IGBncmFiX21hcHBpbmdfZW50cnlgLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCBgX19kYXhfaW52YWxpZGF0ZV9lbnRyeWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBhbmQgYGRheF9pbnNlcnRfZW50cnlgLlxuXG5JIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGBncmFiX21hcHBpbmdfZW50cnlgIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQgbGVhZHMgZG93biB0aGUgZmF1bHQgaGFuZGxpbmcgcGF0aHMgd2l0aCBgZGF4X2lvbWFwX2ZhdWx0YCBhbmQgYGRheF9mYXVsdF9pdGVyYCwgd2hpY2ggYXJlIGJvdGggaW1wb3J0YW50IGZvciBEQVggZmF1bHQgaGFuZGxpbmcuIEFsc28sIGZ1bmN0aW9ucyBsaWtlIGBkYXhfaW5zZXJ0X2VudHJ5YCBhbHNvIGNhbGwgdGhpcy5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhvc2Ugc2Vjb25kLWxldmVsIGNhbGxzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAsIGBkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VgLCBgZGF4X2luc2VydF9lbnRyeWAsIGFuZCBhbHNvIHRoZSBgZGF4X2lvbWFwX2ZhdWx0YCB2YXJpYW50cywgYW5kIGBkYXhfZmF1bHRfaXRlcmAsIHRvIGRldGVybWluZSBob3cgdGhleSBmaXQgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJJ2xsIHNlYXJjaCBmb3IgYWxsIGNhbGxzIHRvIGFsbCBvZiB0aGUgaW1wb3J0YW50IG1ldGhvZHMuXG5cbk15IGludHVpdGlvbiBzYXlzIHRoZSBzb3VyY2UgY29kZSB3aWxsIGxpdmUgaW4gYGZzL2RheC5jYCwgc28gSSdsbCBzdGFydCBkaWdnaW5nIHRoZXJlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjMyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjMxLjA4MjQxOTcyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyODc4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihbYS16QS1aMC05XyogXSspXFxcXCgoLiopXFxcXCkkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2RheC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2RheC5jPTM5PXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3RhYmxlW0RBWF9XQUlUX1RBQkxFX0VOVFJJRVNdO1xcbmZzL2RheC5jLTQwLVxcbmZzL2RheC5jOjQxOnN0YXRpYyBpbnQgX19pbml0IGluaXRfZGF4X3dhaXRfdGFibGUodm9pZClcXG5mcy9kYXguYy00Mi17XFxuLS1cXG5mcy9kYXguYz00OT1mc19pbml0Y2FsbChpbml0X2RheF93YWl0X3RhYmxlKTtcXG4tLVxcbmZzL2RheC5jLTY2LVxcbmZzL2RheC5jOjY3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF90b19wZm4odm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNjgte1xcbi0tXFxuZnMvZGF4LmMtNzEtXFxuZnMvZGF4LmM6NzI6c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTczLXtcXG4tLVxcbmZzL2RheC5jLTc2LVxcbmZzL2RheC5jOjc3OnN0YXRpYyB2b2lkICpkYXhfbWFrZV9lbnRyeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBmbGFncylcXG5mcy9kYXguYy03OC17XFxuLS1cXG5mcy9kYXguYy04MS1cXG5mcy9kYXguYzo4MjpzdGF0aWMgYm9vbCBkYXhfaXNfbG9ja2VkKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTgzLXtcXG4tLVxcbmZzL2RheC5jLTg2LVxcbmZzL2RheC5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGF4X2VudHJ5X29yZGVyKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTg4LXtcXG4tLVxcbmZzL2RheC5jLTkzLVxcbmZzL2RheC5jOjk0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF9pc19wbWRfZW50cnkodm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtOTUte1xcbi0tXFxuZnMvZGF4LmMtOTgtXFxuZnMvZGF4LmM6OTk6c3RhdGljIGJvb2wgZGF4X2lzX3B0ZV9lbnRyeSh2b2lkICplbnRyeSlcXG5mcy9kYXguYy0xMDAte1xcbi0tXFxuZnMvZGF4LmMtMTAzLVxcbmZzL2RheC5jOjEwNDpzdGF0aWMgaW50IGRheF9pc196ZXJvX2VudHJ5KHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTEwNS17XFxuLS1cXG5mcy9kYXguYy0xMDgtXFxuZnMvZGF4LmM6MTA5OnN0YXRpYyBpbnQgZGF4X2lzX2VtcHR5X2VudHJ5KHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTExMC17XFxuLS1cXG5mcy9kYXguYy0xMTctICovXFxuZnMvZGF4LmM6MTE4OnN0YXRpYyBib29sIGRheF9pc19jb25mbGljdCh2b2lkICplbnRyeSlcXG5mcy9kYXguYy0xMTkte1xcbi0tXFxuZnMvZGF4LmM9MTg0PXN0YXRpYyB2b2lkIGRheF93YWtlX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSxcXG4tLVxcbmZzL2RheC5jLTIwNC0gKiBpcyBhIERBWCBlbnRyeSBhbmQgcmV0dXJuIGl0LiAgVGhlIGNhbGxlciBtdXN0IHN1YnNlcXVlbnRseSBjYWxsXFxuZnMvZGF4LmM6MjA1OiAqIHB1dF91bmxvY2tlZF9lbnRyeSgpIGlmIGl0IGRpZCBub3QgbG9jayB0aGUgZW50cnkgb3IgZGF4X3VubG9ja19lbnRyeSgpXFxuZnMvZGF4LmMtMjA2LSAqIGlmIGl0IGRpZC4gIFRoZSBlbnRyeSByZXR1cm5lZCBtYXkgaGF2ZSBhIGxhcmdlciBvcmRlciB0aGFuIEBvcmRlci5cXG4tLVxcbmZzL2RheC5jLTIxMS0gKi9cXG5mcy9kYXguYzoyMTI6c3RhdGljIHZvaWQgKmdldF9uZXh0X3VubG9ja2VkX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuZnMvZGF4LmMtMjEzLXtcXG4tLVxcbmZzL2RheC5jLTI0NS0gKi9cXG5mcy9kYXguYzoyNDY6c3RhdGljIHZvaWQgKndhaXRfZW50cnlfdW5sb2NrZWRfZXhjbHVzaXZlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSlcXG5mcy9kYXguYy0yNDcte1xcbi0tXFxuZnMvZGF4LmMtMjczLSAqIFRoZSBvbmx5IHRoaW5nIGtlZXBpbmcgdGhlIGFkZHJlc3Mgc3BhY2UgYXJvdW5kIGlzIHRoZSBpX3BhZ2VzIGxvY2tcXG5mcy9kYXguYzoyNzQ6ICogKGl0J3MgY3ljbGVkIGluIGNsZWFyX2lub2RlKCkgYWZ0ZXIgcmVtb3ZpbmcgdGhlIGVudHJpZXMgZnJvbSBpX3BhZ2VzKVxcbmZzL2RheC5jLTI3NS0gKiBBZnRlciB3ZSBjYWxsIHhhc191bmxvY2tfaXJxKCksIHdlIGNhbm5vdCB0b3VjaCB4YXMtXFx1MDAzZXhhLlxcbmZzL2RheC5jLTI3Ni0gKi9cXG5mcy9kYXguYzoyNzc6c3RhdGljIHZvaWQgd2FpdF9lbnRyeV91bmxvY2tlZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtMjc4LXtcXG4tLVxcbmZzL2RheC5jPTI5OD1zdGF0aWMgdm9pZCBwdXRfdW5sb2NrZWRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5LFxcbi0tXFxuZnMvZGF4LmMtMzA5LSAqL1xcbmZzL2RheC5jOjMxMDpzdGF0aWMgdm9pZCBkYXhfdW5sb2NrX2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB2b2lkICplbnRyeSlcXG5mcy9kYXguYy0zMTEte1xcbi0tXFxuZnMvZGF4LmMtMzI1LSAqL1xcbmZzL2RheC5jOjMyNjpzdGF0aWMgdm9pZCAqZGF4X2xvY2tfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTMyNy17XFxuLS1cXG5mcy9kYXguYy0zMzEtXFxuZnMvZGF4LmM6MzMyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF9lbnRyeV9zaXplKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTMzMy17XFxuLS1cXG5mcy9kYXguYy0zNDktICovXFxuZnMvZGF4LmM6MzUwOnN0YXRpYyBpbmxpbmUgYm9vbCBkYXhfZm9saW9faXNfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZGF4LmMtMzUxLXtcXG4tLVxcbmZzL2RheC5jLTM2NC0gKi9cXG5mcy9kYXguYzozNjU6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX21ha2Vfc2hhcmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZGF4LmMtMzY2LXtcXG4tLVxcbmZzL2RheC5jLTM4OC0gKi9cXG5mcy9kYXguYzozODk6aW50IGRheF9mb2xpb19yZXNldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL2RheC5jLTM5MC17XFxuLS1cXG5mcy9kYXguYz00MzE9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKTtcXG5mcy9kYXguYy00MzItXFxuZnMvZGF4LmM6NDMzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYXhfZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZGF4LmMtNDM0LXtcXG4tLVxcbmZzL2RheC5jLTQ1Ny1cXG5mcy9kYXguYzo0NTg6c3RhdGljIHZvaWQgZGF4X2ZvbGlvX2luaXQodm9pZCAqZW50cnkpXFxuZnMvZGF4LmMtNDU5LXtcXG4tLVxcbmZzL2RheC5jPTUwNj1zdGF0aWMgdm9pZCBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTUxNC1cXG5mcy9kYXguYzo1MTU6c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfYnVzeV9wYWdlKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTUxNi17XFxuLS1cXG5mcy9kYXguYy01MzYtICovXFxuZnMvZGF4LmM6NTM3OmRheF9lbnRyeV90IGRheF9sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZGF4LmMtNTM4LXtcXG4tLVxcbmZzL2RheC5jLTU4My1cXG5mcy9kYXguYzo1ODQ6dm9pZCBkYXhfdW5sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGRheF9lbnRyeV90IGNvb2tpZSlcXG5mcy9kYXguYy01ODUte1xcbi0tXFxuZnMvZGF4LmM9ODQ0PUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTtcXG5mcy9kYXguYy04NDUtXFxuZnMvZGF4LmM6ODQ2OnN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG5mcy9kYXguYy04NDcte1xcbi0tXFxuZnMvZGF4LmM9ODc3PXN0YXRpYyBpbnQgX19kYXhfY2xlYXJfZGlydHlfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9kYXguYy05MDktICovXFxuZnMvZGF4LmM6OTEwOmludCBkYXhfZGVsZXRlX21hcHBpbmdfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgpXFxuZnMvZGF4LmMtOTExLXtcXG4tLVxcbmZzL2RheC5jPTEwMDM9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dCk7XFxuZnMvZGF4LmMtMTAwNC1cXG5mcy9kYXguYzoxMDA1OnZvaWQgZGF4X2JyZWFrX2xheW91dF9maW5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2RheC5jLTEwMDYte1xcbi0tXFxuZnMvZGF4LmM9MTAyOT1pbnQgZGF4X2ludmFsaWRhdGVfbWFwcGluZ19lbnRyeV9zeW5jKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtMTAzNC1cXG5mcy9kYXguYzoxMDM1OnN0YXRpYyBwZ29mZl90IGRheF9pb21hcF9wZ29mZihjb25zdCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBsb2ZmX3QgcG9zKVxcbmZzL2RheC5jLTEwMzYte1xcbi0tXFxuZnMvZGF4LmMtMTAzOS1cXG5mcy9kYXguYzoxMDQwOnN0YXRpYyBpbnQgY29weV9jb3dfcGFnZV9kYXgoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyKVxcbmZzL2RheC5jLTEwNDEte1xcbi0tXFxuZnMvZGF4LmM9MTQzNT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9kYXguYy0xNDQxLVxcbmZzL2RheC5jOjE0NDI6c3RhdGljIGludCBkYXhfdW5zaGFyZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyKVxcbmZzL2RheC5jLTE0NDMte1xcbi0tXFxuZnMvZGF4LmM9MTUxMz1FWFBPUlRfU1lNQk9MX0dQTChkYXhfZmlsZV91bnNoYXJlKTtcXG5mcy9kYXguYy0xNTE0LVxcbmZzL2RheC5jOjE1MTU6c3RhdGljIGludCBkYXhfbWVtemVybyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90IHBvcywgc2l6ZV90IHNpemUpXFxuZnMvZGF4LmMtMTUxNi17XFxuLS1cXG5mcy9kYXguYy0xNTM3LVxcbmZzL2RheC5jOjE1Mzg6c3RhdGljIGludCBkYXhfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybylcXG5mcy9kYXguYy0xNTM5LXtcXG4tLVxcbmZzL2RheC5jPTE2MTQ9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3RydW5jYXRlX3BhZ2UpO1xcbmZzL2RheC5jLTE2MTUtXFxuZnMvZGF4LmM6MTYxNjpzdGF0aWMgaW50IGRheF9pb21hcF9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuZnMvZGF4LmMtMTYxNy17XFxuLS1cXG5mcy9kYXguYz0xNzc5PUVYUE9SVF9TWU1CT0xfR1BMKGRheF9pb21hcF9ydyk7XFxuZnMvZGF4LmMtMTc4MC1cXG5mcy9kYXguYzoxNzgxOnN0YXRpYyB2bV9mYXVsdF90IGRheF9mYXVsdF9yZXR1cm4oaW50IGVycm9yKVxcbmZzL2RheC5jLTE3ODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjozMS4xMzA3MTIzNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk4ODgxNjIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBgZnMvZGF4LmNgIGNvbnRleHQsIGZvY3VzaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gY29uZmlndXJhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBvZiBmcy9kYXguYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBob3cgYGZzL2RheC5jYCBnZXRzIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIGJ1aWxkLiBUaGUgZmlyc3Qgc3RvcCwgbmF0dXJhbGx5LCBpcyB0aGUgYE1ha2VmaWxlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgYXJlIGluIHBsYXksIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZW4gYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmlsZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFdoYXQgb3RoZXIgc291cmNlIGZpbGVzLCBvYmplY3QgZmlsZXMsIG9yIGxpYnJhcmllcyBkb2VzIGl0IHJlbHkgb24/IEFyZSB0aGVyZSBzcGVjaWZpYyBpbmNsdWRlIHBhdGhzIGl0IG5lZWRzPyBBcmUgdGhlcmUgYW55IGNsZXZlciBidWlsZCBvcHRpbWl6YXRpb25zIGJlaW5nIGVtcGxveWVkPyBVbmRlcnN0YW5kaW5nIHRoZSBNYWtlZmlsZSBpcyBrZXkgdG8gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5UaGVuLCBJJ2xsIGltbWVkaWF0ZWx5IGp1bXAgb3ZlciB0byB0aGUgYEtjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgbWF0dGVyIGxpZXMgZm9yIG1lLiBJIG5lZWQgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gd2hldGhlciBvciBub3QgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0LCBhbmQgYnkgZXh0ZW5zaW9uIGBmcy9kYXguY2AsIGlzIGVuYWJsZWQuIFdoYXQgYXJlIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucz8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcyBvciBoYXJkd2FyZT8gV2hhdCdzIHRoZSBoZWxwIHRleHQgZGVzY3JpYmluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBEQVg/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIG1lbW9yeSB0eXBlcywgZmlsZSBzeXN0ZW1zLCBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29uZGl0aW9ucyogdW5kZXIgd2hpY2ggREFYIGZ1bmN0aW9uYWxpdHkgaXMgb2ZmZXJlZCB0byB0aGUga2VybmVsIHVzZXIuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nIGFuZCB1bmRlcnN0YW5kaW5nIGNvbXBhdGliaWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBjYW4gcmVhbGx5IHNlZSB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBmaWxlIG9uIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBhbmQgZnVuY3Rpb25hbGl0eS4gQmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlIEknbGwgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgREFYIGNhcGFiaWxpdGllcyBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBzYXRpc2ZpZWQgdG8gbGV2ZXJhZ2UgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6MzkuMTE5NTMxMDg0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDkxNTYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgKz0gYWlvLm9cXG5mcy9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfRlNfREFYKVxcdFxcdCs9IGRheC5vXFxuZnMvTWFrZWZpbGUtMzItb2JqLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXFx0Kz0gY3J5cHRvL1xcbi0tXFxuZnMvZnVzZS9NYWtlZmlsZT0xNj1mdXNlLXkgKz0gaW9tb2RlLm9cXG5mcy9mdXNlL01ha2VmaWxlOjE3OmZ1c2UtJChDT05GSUdfRlVTRV9EQVgpICs9IGRheC5vXFxuZnMvZnVzZS9NYWtlZmlsZS0xOC1mdXNlLSQoQ09ORklHX0ZVU0VfUEFTU1RIUk9VR0gpICs9IHBhc3N0aHJvdWdoLm8gYmFja2luZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjM5LjE5NDQ1MjI4OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk4NzIzMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBDT05GSUdfRlNfREFYIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYENPTkZJR19GU19EQVhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlaXIgZGVmaW5pdGlvbnMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBhbnkgZGVwZW5kZW5jaWVzIHRoZXkgbWlnaHQgaGF2ZS4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBgQ09ORklHX0ZTX0RBWGAgaXMgZGVmaW5lZCDigJMgaXMgaXQgYSBib29sZWFuLCBhIHRyaXN0YXRlPyBXaGF0J3MgdGhlIGhlbHAgdGV4dCBzYXk/IFRoYXQnbGwgZ2l2ZSBtZSBjb250ZXh0LiBNb3JlIGltcG9ydGFudGx5LCB3aGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IE9yIHBlcmhhcHMgd2hpY2ggb3B0aW9ucyBkZXBlbmQgb24gKml0Kj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBvciBmaWxlc3lzdGVtIHJlcXVpcmVtZW50cyBiYWtlZCBpbj8gS25vd2luZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIHdvcmtzIHdpdGhpbiB0aGUgYmlnZ2VyIGtlcm5lbCBwaWN0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCB1c2UgY2FzZXMgYW5kIGFyY2hpdGVjdHVyZXMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBLY29uZmlnIGZpbGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjQxLjI5MzE5MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDQ3MjUxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0RBWFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjQzLjQzNzkyNDcyN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjExNjI0OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbiwgYW5kIG15IGd1dCB0ZWxscyBtZSBgZnMvS2NvbmZpZ2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU4LiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciBmaWxlIHN5c3RlbSBmZWF0dXJlcywgb3IgYXQgbGVhc3QgYSBrZXkgc2VjdGlvbiByZWxhdGVkIHRvIHRoZW0sIHdpbGwgYmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgdGhlIGxvZ2ljIGlzIHN0cnVjdHVyZWQuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIHNuaXBwZXQgd2lsbCBwcm92aWRlIHNvbWUgY2xhcml0eSBvbiB0aGUgYnJvYWRlciBkZXNpZ24gZGVjaXNpb25zIGluIHBsYXksIGFuZCBzaGVkIGxpZ2h0IG9uIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSdtIGludGVyZXN0ZWQgaW4uIFRoZSBwbGFuIGlzIHRvIGdldCBhbiBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIHdoZXRoZXIgSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGluY2x1ZGUgcGF0aHMsIG9yIGlmIHRoZSByZWxldmFudCBiaXRzIGFyZSBkZWZpbmVkIHJpZ2h0IHRoZXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzQ5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6NDcuMDQ5NTUzMTI2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFxuICA1NjpcXHRlbmRpZiAjIEJMT0NLXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBGU19EQVhcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIkZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuICA2MTpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuICA2MjpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gIDYzOlxcdFxcdHNlbGVjdCBEQVhcXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgRGlyZWN0IEFjY2VzcyAoREFYKSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuXFxuICA2NjpcXHRcXHQgIElmIHRoZSBibG9jayBkZXZpY2Ugc3VwcG9ydHMgREFYIGFuZCB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBEQVgsXFxuICA2NzpcXHRcXHQgIHRoZW4geW91IGNhbiBhdm9pZCB1c2luZyB0aGUgcGFnZWNhY2hlIHRvIGJ1ZmZlciBJL09zLiAgVHVybmluZ1xcbiAgNjg6XFx0XFx0ICBvbiB0aGlzIG9wdGlvbiB3aWxsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgREFYLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHQgIEZvciBhIERBWCBkZXZpY2UgdG8gc3VwcG9ydCBmaWxlIHN5c3RlbSBhY2Nlc3MgaXQgbmVlZHMgdG8gaGF2ZVxcbiAgNzE6XFx0XFx0ICBzdHJ1Y3QgcGFnZXMuICBGb3IgdGhlIG5maXQgYmFzZWQgTlZESU1NcyB0aGlzIGNhbiBiZSBlbmFibGVkXFxuICA3MjpcXHRcXHQgIHVzaW5nIHRoZSBuZGN0bCB1dGlsaXR5OlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHQjIG5kY3RsIGNyZWF0ZS1uYW1lc3BhY2UgLS1mb3JjZSAtLXJlY29uZmlnPW5hbWVzcGFjZTAuMCBcXFxcXFxuICA3NTpcXHRcXHRcXHRcXHQtLW1vZGU9ZnNkYXggLS1tYXA9bWVtXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgU2VlIHRoZSAnY3JlYXRlLW5hbWVzcGFjZScgbWFuIHBhZ2UgZm9yIGRldGFpbHMgb24gdGhlIG92ZXJoZWFkIG9mXFxuICA3ODpcXHRcXHQgIC0tbWFwPW1lbTpcXG4gIDc5OlxcdFxcdCAgaHR0cHM6Ly9kb2NzLnBtZW0uaW8vbmRjdGwtdXNlci1ndWlkZS9uZGN0bC1tYW4tcGFnZXMvbmRjdGwtY3JlYXRlLW5hbWVzcGFjZVxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIEZvciBuZGN0bCB0byB3b3JrIENPTkZJR19ERVZfREFYIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXMgd2VsbC4gRm9yIG1vc3RcXG4gIDgyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zIERBWCBzdXBwb3J0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IGVuYWJsZWQgZ2xvYmFsbHkgb3JcXG4gIDgzOlxcdFxcdCAgcGVyLWlub2RlIHVzaW5nIGEgbW91bnQgb3B0aW9uIGFzIHdlbGwuICBTZWUgdGhlIGZpbGUgZG9jdW1lbnRhdGlvbiBpblxcbiAgODQ6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QgZm9yIGRldGFpbHMuXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgeW91IGRvIG5vdCBoYXZlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLFxcbiAgODc6XFx0XFx0ICBvciBpZiB1bnN1cmUsIHNheSBOLiAgU2F5aW5nIFkgd2lsbCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsXFxuICA4ODpcXHRcXHQgIGJ5IGFib3V0IDVrQi5cXG4gIDg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNjo0Ny4wNDk2Mjg3NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIyNTI4MTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIERlcGVuZGVuY2llcyBmb3IgWk9ORV9ERVZJQ0UqKlxuXG5BbHJpZ2h0LCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBaT05FX0RFVklDRWAgaXMgcHJvcGVybHkgaW50ZWdyYXRlZCBhbmQgdGhhdCBhbGwgb2YgaXRzIGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvci4gVGhpcyBpcyBhIGNydWNpYWwgc3RlcCBiZWZvcmUgYW55IG1ham9yIGNoYW5nZXMgb3IgZGVwbG95bWVudCwgcGFydGljdWxhcmx5IGdpdmVuIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0eSBvZiBzdWNoIGEgY29tcG9uZW50LiBJIG5lZWQgdG8gbWFrZSBhIHRob3JvdWdoIHBhc3MgdGhyb3VnaCB0aGUgY29kZSBiYXNlIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgZmlyc3Qg4oCTIHRoZSBvYnZpb3VzIGxpYnJhcmllcyBhbmQgbW9kdWxlcyB0aGF0IGBaT05FX0RFVklDRWAgcmVsaWVzIG9uIGRpcmVjdGx5LiBUaGVuLCBJIG5lZWQgdG8gZGlnIGRlZXBlciwgdHJhY2luZyB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMuIEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgY29ubmVjdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSBzdWJ0bGUgY29uZmxpY3RzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZG93biB0aGUgbGluZT8gV2UgbmVlZCB0byB2ZXJpZnkgdmVyc2lvbiBjb21wYXRpYmlsaXR5IGFjcm9zcyB0aGUgZW50aXJlIGRlcGVuZGVuY3kgdHJlZS4gQXJlIHdlIHVzaW5nIHRoZSBsYXRlc3Qgc2VjdXJlIHZlcnNpb25zLCBhbmQgYXJlIHdlIGluIGFsaWdubWVudCB3aXRoIHRoZSB3aWRlciBwcm9qZWN0J3MgZGVwZW5kZW5jeSBtYW5hZ2VtZW50IHN0cmF0ZWd5PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzdGF0aWMgYW5hbHlzaXMsIHVzaW5nIHdoYXRldmVyIHRvb2xzIHdlIGhhdmUgYXZhaWxhYmxlIChsaW50aW5nLCBkZXBlbmRlbmN5IGdyYXBocywgZXRjLikgdG8gZ2V0IGEgaGlnaC1sZXZlbCBvdmVydmlldy4gQWZ0ZXIgdGhhdCwgSSB3aWxsIGNvbmR1Y3QgdGhvcm91Z2ggdW5pdCB0ZXN0cyB3aXRoIG1vY2sgZGVwZW5kZW5jaWVzLCBmb2xsb3dlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIHJlbGV2YW50IG90aGVyIGNvbXBvbmVudHMgdGhhdCBjb3VsZCBhZmZlY3QgZGVwZW5kZW5jaWVzLiBUaGUgZ29hbCBpcyB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyBiZWZvcmUgdGhleSBiZWNvbWUgcHJvYmxlbXMgaW4gYSBtb3JlIGNvbXBsZXggdGVzdGluZyBzY2VuYXJpbyBvciwgd29yc2UsIHByb2R1Y3Rpb24uIEl0J3MgYSBiaXQgdGVkaW91cywgYnV0IHdvcnRoIGl0IHRvIGF2b2lkIGFueSBoZWFkYWNoZXMgbGF0ZXIuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBmdW5jdGlvbmFsaXR5OyBpdCdzIGFib3V0IHNlY3VyaXR5LCBwZXJmb3JtYW5jZSwgYW5kIG1haW50YWluYWJpbGl0eS4gTGV0J3MgbWFrZSBzdXJlIGBaT05FX0RFVklDRWAncyBkZXBlbmRlbmNpZXMgYXJlIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6NTAuMjc0OTEyNjY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI0ODk1NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIyMD1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjI0LVxcbm1tL0tjb25maWc6MTIyNTpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMjYtXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTY6NTIuNDk5ODE0ODY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTU3ODkzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gYmV0dGVyLCBhbmQgSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiBpdCBkZWZpbmVkIGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNlZW0gdG8gcmVtZW1iZXIgaXQgYXJvdW5kIGxpbmUgMTIyNSwgZ2l2ZSBvciB0YWtlLiBUaW1lIHRvIGp1bXAgb3ZlciB0aGVyZSBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgaG93IHRoZSBkZWZhdWx0IHZhbHVlIGlzIHNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgaGVscCB0ZXh0cyBJIGNhbiBnbGVhbi4gSXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4geW91J3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZWhhdmlvciBvZiBhIHBhcnRpY3VsYXIgY29uZmlnIG9wdGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gSSdtIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBvcHRpb25zLCBhbmQgcGVyaGFwcyBzcG90IGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0eXBpY2FsIGZvcm1hdCBoZXJlOiBhIGBjb25maWdgIGtleXdvcmQsIGEgdHlwZSBkZWZpbml0aW9uIChib29sLCB0cmlzdGF0ZSwgZXRjLiksIHRoZSBoZWxwIHRleHQsIGFuZCBsaWtlbHkgc29tZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4gV2l0aCBhIGJpdCBvZiBsdWNrLCB0aGUgZmlsZSBjb21tZW50cyB3aWxsIGJlIHVwLXRvLWRhdGUgYW5kIHByb3ZpZGUgc29tZSB1c2VmdWwgY29udGV4dC4gTGV0J3MgZ2V0IHRvIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjU1LjQxNTYwNzAzMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA6XFx0Y29uZmlnIFpPTkVfRE1BMzJcXG4xMjIxOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgRE1BMzIgem9uZVxcXCIgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXFxuMTIyMjpcXHRcXHRkZXBlbmRzIG9uICFYODZfMzJcXG4xMjIzOlxcdFxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbjEyMjQ6XFx0XFxuMTIyNTpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjI2OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIyNzpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjI4OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjI5OlxcdFxcbjEyMzA6XFx0XFx0aGVscFxcbjEyMzE6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyMzI6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyMzM6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjM0OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjM1OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyMzY6XFx0XFxuMTIzNzpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjM4OlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyMzk6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTI0MDpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyNDE6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjQyOlxcdFxcbjEyNDM6XFx0I1xcbjEyNDQ6XFx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE2OjU1LjQxNTcwNjA1MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTM5MDQ4Mjc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEhvdC1SZW1vdmFsIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE1FTU9SWV9IT1RSRU1PVkVgLlwiIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgYXJlYSwgYW5kIEkgbmVlZCB0byBlbnN1cmUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGlzIG1lYW5zIEknbSBub3QganVzdCBsb29raW5nIGF0IHRoZSBvYnZpb3VzIGNvbXBvbmVudHMsIGJ1dCBhbnRpY2lwYXRpbmcgYWxsIHRoZSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGtlcm5lbCBpbnRlcmFjdGlvbnMsIHRoZSB1c2Vyc3BhY2UgdG9vbHMgdGhhdCByZWx5IG9uIG1lbW9yeSBob3QtcmVtb3ZhbCwgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgZGlmZmVyZW50IGtlcm5lbCB2ZXJzaW9ucyBtaWdodCBoYW5kbGUgdGhpcyBmZWF0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBpZGVudGlmeSBhbGwgcG90ZW50aWFsIHRyb3VibGUgc3BvdHMuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzIwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNzoxNi44MDYxOTE0M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwOTcxNjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgwPWVuZGNob2ljZVxcbm1tL0tjb25maWctNTgxLVxcbm1tL0tjb25maWc6NTgyOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNzoxOS4xMTU5MTM1MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA1NzczODQ0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1ODIuIE15IGluaXRpYWwgdGhvdWdodCBpcyBwcm9iYWJseSB0byB1bmRlcnN0YW5kIGEgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgcG9zc2libGUgZGVmYXVsdCB2YWx1ZXMsIGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIG1heWJlIGFuIGBpZmAgYmxvY2ssIHRoYXQgZ292ZXJucyB3aGV0aGVyIGEgc3BlY2lmaWMgb3B0aW9uIGlzIGVuYWJsZWQgb3Igc2hvd24gdG8gdGhlIHVzZXIuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBLY29uZmlnIHN5bnRheDogYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgYGRlZmF1bHRgLCBgYm9vbGAsIGV0Yy4g4oCTIHRyeWluZyB0byByZWNvbnN0cnVjdCB0aGUgbG9naWMgaW4gbXkgaGVhZC4gSSdtIGFudGljaXBhdGluZyB0aGF0IGxpbmUgNTgyIGhvbGRzIHRoZSBrZXkgdG8gdGhlIGNvbmRpdGlvbiBvciByZWxhdGlvbiBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEZyb20gdGhlcmUsIEknbGwgcHJvYmFibHkgYnJhbmNoIG91dCwgbG9va2luZyBhdCByZWxhdGVkIG9wdGlvbnMgb3IgcGVyaGFwcyBldmVuIHRoZSBjb2RlIHRoYXQgdXNlcyB0aGUgY29ycmVzcG9uZGluZyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEknbGwgYmUga2VlcGluZyBhIHNoYXJwIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6MjkuNjkzMzAwOTczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MDpcXHRlbmRjaG9pY2VcXG4gNTgxOlxcdFxcbiA1ODI6XFx0Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4gNTgzOlxcdFxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG4gNTg0OlxcdFxcdHNlbGVjdCBNSUdSQVRJT05cXG4gNTg1OlxcdFxcbiA1ODY6XFx0Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXFxuIDU4NzpcXHRcXHRkZWZfYm9vbCB5XFxuIDU4ODpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuIDU4OTpcXHRcXG4gNTkwOlxcdGVuZGlmICMgTUVNT1JZX0hPVFBMVUdcXG4gNTkxOlxcdFxcbiA1OTI6XFx0Y29uZmlnIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuIDU5MzpcXHQgICAgICAgYm9vbFxcbiA1OTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE3OjI5LjY5MzQzOTgzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM3MjQyNDYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIEZpbGVzeXN0ZW0gREFYIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFYIChEaXJlY3QgQWNjZXNzKSBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIExpbnV4IGZpbGVzeXN0ZW0gbGFuZHNjYXBlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGljaCBmaWxlc3lzdGVtcyBhY3RpdmVseSBsZXZlcmFnZSBEQVguIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIG9uZXMgbWFrZSB1c2Ugb2YgdGhlIGBmcy9kYXguY2AgY29kZSBhbmQgaXRzIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtcyBwcm92aWRlZC4gVG8gZG8gdGhhdCBJIHdpbGwgYmUgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIGluIGBmcy9kYXguY2AgdGhhdCBhcmUgKmV4cG9ydGVkKiDigJMgdGhlIG5vbi1zdGF0aWMgb25lcyDigJMgc28gSSBjYW4gc2VlIHdoYXQncyBhY3R1YWxseSBpbnRlbmRlZCBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCB0byBjYWxsIHVwb24uIFRoaXMgd2lsbCBpbGx1bWluYXRlIHRoZSBEQVgtc3BlY2lmaWMgaW50ZXJmYWNlIGFuZCBpdHMgaW50ZXJhY3Rpb24gcG9pbnRzIHdpdGggb3RoZXIgZmlsZXN5c3RlbXMgb3Iga2VybmVsIGNvbXBvbmVudHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDY2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxNzo1OS4wNjU4Njc4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMDU5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kYXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz0zODk9aW50IGRheF9mb2xpb19yZXNldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZGF4LmMtNDMwLX1cXG5mcy9kYXguYzo0MzE6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKTtcXG5mcy9kYXguYy00MzItXFxuLS1cXG5mcy9kYXguYz03OTE9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtODQzLX1cXG5mcy9kYXguYzo4NDQ6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UpO1xcbmZzL2RheC5jLTg0NS1cXG5mcy9kYXguYz04NDY9c3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbi0tXFxuZnMvZGF4LmMtODQ5LX1cXG5mcy9kYXguYzo4NTA6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2xheW91dF9idXN5X3BhZ2UpO1xcbmZzL2RheC5jLTg1MS1cXG4tLVxcbmZzL2RheC5jPTkyNT12b2lkIGRheF9kZWxldGVfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTk1Mi19XFxuZnMvZGF4LmM6OTUzOkVYUE9SVF9TWU1CT0xfR1BMKGRheF9kZWxldGVfbWFwcGluZ19yYW5nZSk7XFxuZnMvZGF4LmMtOTU0LVxcbi0tXFxuZnMvZGF4LmM9OTc3PWludCBkYXhfYnJlYWtfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4tLVxcbmZzL2RheC5jLTEwMDItfVxcbmZzL2RheC5jOjEwMDM6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dCk7XFxuZnMvZGF4LmMtMTAwNC1cXG5mcy9kYXguYz0xMDA1PXZvaWQgZGF4X2JyZWFrX2xheW91dF9maW5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZGF4LmMtMTAyMy19XFxuZnMvZGF4LmM6MTAyNDpFWFBPUlRfU1lNQk9MX0dQTChkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKTtcXG5mcy9kYXguYy0xMDI1LVxcbi0tXFxuZnMvZGF4LmM9MTIzNj1pbnQgZGF4X3dyaXRlYmFja19tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtMTI3NC19XFxuZnMvZGF4LmM6MTI3NTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2UpO1xcbmZzL2RheC5jLTEyNzYtXFxuLS1cXG5mcy9kYXguYz0xNDk0PWludCBkYXhfZmlsZV91bnNoYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sXFxuLS1cXG5mcy9kYXguYy0xNTEyLX1cXG5mcy9kYXguYzoxNTEzOkVYUE9SVF9TWU1CT0xfR1BMKGRheF9maWxlX3Vuc2hhcmUpO1xcbmZzL2RheC5jLTE1MTQtXFxuLS1cXG5mcy9kYXguYz0xNTg2PWludCBkYXhfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLCBib29sICpkaWRfemVybyxcXG4tLVxcbmZzL2RheC5jLTE2MDAtfVxcbmZzL2RheC5jOjE2MDE6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3plcm9fcmFuZ2UpO1xcbmZzL2RheC5jLTE2MDItXFxuZnMvZGF4LmM9MTYwMz1pbnQgZGF4X3RydW5jYXRlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgYm9vbCAqZGlkX3plcm8sXFxuLS1cXG5mcy9kYXguYy0xNjEzLX1cXG5mcy9kYXguYzoxNjE0OkVYUE9SVF9TWU1CT0xfR1BMKGRheF90cnVuY2F0ZV9wYWdlKTtcXG5mcy9kYXguYy0xNjE1LVxcbi0tXFxuZnMvZGF4LmM9MTc0ND1kYXhfaW9tYXBfcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9kYXguYy0xNzc4LX1cXG5mcy9kYXguYzoxNzc5OkVYUE9SVF9TWU1CT0xfR1BMKGRheF9pb21hcF9ydyk7XFxuZnMvZGF4LmMtMTc4MC1cXG4tLVxcbmZzL2RheC5jPTIxMDg9dm1fZmF1bHRfdCBkYXhfaW9tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbmZzL2RheC5jLTIxMTgtfVxcbmZzL2RheC5jOjIxMTk6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2lvbWFwX2ZhdWx0KTtcXG5mcy9kYXguYy0yMTIwLVxcbi0tXFxuZnMvZGF4LmM9MjE3OT12bV9mYXVsdF90IGRheF9maW5pc2hfc3luY19mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxuZnMvZGF4LmMtMjE5MC19XFxuZnMvZGF4LmM6MjE5MTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfZmluaXNoX3N5bmNfZmF1bHQpO1xcbmZzL2RheC5jLTIxOTItXFxuLS1cXG5mcy9kYXguYz0yMjcwPWludCBkYXhfcmVtYXBfZmlsZV9yYW5nZV9wcmVwKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxcbi0tXFxuZnMvZGF4LmMtMjI3Ny19XFxuZnMvZGF4LmM6MjI3ODpFWFBPUlRfU1lNQk9MX0dQTChkYXhfcmVtYXBfZmlsZV9yYW5nZV9wcmVwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDk6MTc6NTkuMTExODc5MDY3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4OTE5OTM5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBWCBFbnRyeSBQb2ludCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgREFYIGVudHJ5IHBvaW50cy4gSSBzZWUgdGhlIGNvcmUgb25lczogYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgYGRheF9kZWxldGVfbWFwcGluZ19yYW5nZWAsIGBkYXhfaW9tYXBfcndgLCBgZGF4X2lvbWFwX2ZhdWx0YCwgYGRheF9icmVha19sYXlvdXRgLCBgZGF4X3plcm9fcmFuZ2VgLCBhbmQgYGRheF9maWxlX3Vuc2hhcmVgLiBJJ20gbm90aW5nIHRoZSBpbnRlcm5hbCBjYWxsczogYGRheF9pb21hcF9mYXVsdGAgdXNlcyBgZGF4X2luc2VydF9lbnRyeWAgd2hpY2ggdGhlbiBnb2VzIHRvIGVpdGhlciBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAgb3IgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLiBgZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlYCBhbHNvIHV0aWxpemVzIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YC4gVGhlbiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIHVzZXMgYGRheF9idXN5X3BhZ2VgLCBhbmQgYGRheF9icmVha19sYXlvdXRgIGRvZXMgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCB0aGVuIGBkYXhfYnVzeV9wYWdlYC5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGVudmlyb25tZW50LiBDYW4gdGhpcyBEQVggZnVuY3Rpb25hbGl0eSBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nIGxpa2UgUUVNVSBvciBHQ0U/IFllcywgaXQgY2FuLCB1c2luZyBwbWVtIGRldmljZXMuIFRoaW5rIGVtdWxhdGVkIG52ZGltbSwgcG1lbSBpbiBRRU1VLCByYW1kaXNrcywgYnJkIG9yIGEgYGRheF9wbWVtYCBkZXZpY2Ugd2l0aCBgZXh0NC94ZnMgLW8gZGF4YC4gVGhhdCdzIGdvb2Q7IGl0IGluY3JlYXNlcyB0aGUgYWNjZXNzaWJpbGl0eSBmb3IgdGVzdGluZy5cblxuSXMgdGhpcyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/IEFic29sdXRlbHksIHllcyEgVGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBsb2dpYyBkZWFsaW5nIHdpdGggcmFkaXgtdHJlZS94YXJyYXkgZW50cnkgbWFuYWdlbWVudCDigJMgc3BlY2lmaWNhbGx5LCBgZGF4X2Fzc29jaWF0ZV9lbnRyeWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5YCwgYW5kIGBkYXhfYnVzeV9wYWdlYCDigJMgYW5kIHRoZSBnb2FsIGlzIHRvIHByZXZlbnQgaW52YWxpZCBwYWdlL2ZvbGlvIHBvaW50ZXIgY29udmVyc2lvbnMgb24gemVybyBhbmQgZW1wdHkgZW50cmllcy4gSW1wb3J0YW50IHN0dWZmLlxuXG5MZXQncyBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIG1ha2UgdGhpcyB3b3JrLiBXZSd2ZSBnb3Q6IGBGU19EQVhgIGlzIGZ1bmRhbWVudGFsLiBJdCBkZXBlbmRzIG9uIGBaT05FX0RFVklDRWAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAgd2hpY2ggZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYWxzbyBgTU1VYC4gT2theSwgbGV0J3Mga2VlcCB0cmFjayBvZiBhbGwgdGhvc2U6IGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBNRU1PUllfSE9UUExVR2AsIGBGU19JT01BUGAsIGBEQVhgLlxuXG5MZXQncyBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBpbXBvcnRhbnQgc3ltYm9sczpcbkdvb2Qgbm9uLXN0YXRpYyBzeW1ib2xzIGFyZSwgYXMgbm90ZWQgYWJvdmU6IGBkYXhfaW9tYXBfZmF1bHRgLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCBgZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlYCwgYGRheF9icmVha19sYXlvdXRgLCBhbmQgYGRheF9pb21hcF9yd2AuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmc6XG4tICAgV29ydGhGdXp6aW5nOiBUcnVlICh3ZSd2ZSBlc3RhYmxpc2hlZCB0aGlzKS5cbi0gICBGb2N1c1N5bWJvbHM6IGBkYXhfaW9tYXBfZmF1bHRgLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCBgZGF4X2RlbGV0ZV9tYXBwaW5nX3JhbmdlYCwgYGRheF9icmVha19sYXlvdXRgLCBgZGF4X2lvbWFwX3J3YFxuLSAgIEVuYWJsZUNvbmZpZ3M6IGBGU19EQVhgLCBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBNRU1PUllfSE9UUExVR2AsIGBGU19JT01BUGAsIGBEQVhgXG4tICAgUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBidWcgZml4IGluIERBWCBmb2xpbyBjb252ZXJzaW9uIHdoZW4gaGFuZGxpbmcgemVybyBhbmQgZW1wdHkgREFYIGVudHJpZXMgaW4gYGZzL2RheC5jYC4gVGhpcyBpcyB0aGUgY29yZSBvZiBpdC5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gTGV0J3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ0LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxOToyOC4wMzE4MjE0NDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTY1MTI5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfREFYXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJEQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXhfaW9tYXBfZmF1bHRcIixcbiAgICBcImRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlXCIsXG4gICAgXCJkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VcIixcbiAgICBcImRheF9icmVha19sYXlvdXRcIixcbiAgICBcImRheF9pb21hcF9yd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIGludmFsaWQgZm9saW8vcGFnZSBjb252ZXJzaW9uIG9uIHplcm8gb3IgZW1wdHkgREFYIGVudHJpZXMgYnkgbW92aW5nIHRoZSBjYWxsIHRvIGRheF90b19mb2xpbygpIGFmdGVyIHRoZSB6ZXJvL2VtcHR5IGVudHJ5IGNoZWNrcyBpbiBkYXhfYXNzb2NpYXRlX2VudHJ5KCksIGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKSwgYW5kIGRheF9idXN5X3BhZ2UoKS4gVGhpcyBmaXhlcyBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVyaW5nIERBWCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBsYXlvdXQgYnJlYWtpbmcsIGFuZCBtYXBwaW5nIHRydW5jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfREFYXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJEQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYXhfaW9tYXBfZmF1bHRcIixcbiAgICBcImRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlXCIsXG4gICAgXCJkYXhfZGVsZXRlX21hcHBpbmdfcmFuZ2VcIixcbiAgICBcImRheF9icmVha19sYXlvdXRcIixcbiAgICBcImRheF9pb21hcF9yd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIGludmFsaWQgZm9saW8vcGFnZSBjb252ZXJzaW9uIG9uIHplcm8gb3IgZW1wdHkgREFYIGVudHJpZXMgYnkgbW92aW5nIHRoZSBjYWxsIHRvIGRheF90b19mb2xpbygpIGFmdGVyIHRoZSB6ZXJvL2VtcHR5IGVudHJ5IGNoZWNrcyBpbiBkYXhfYXNzb2NpYXRlX2VudHJ5KCksIGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKSwgYW5kIGRheF9idXN5X3BhZ2UoKS4gVGhpcyBmaXhlcyBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZHVyaW5nIERBWCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBsYXlvdXQgYnJlYWtpbmcsIGFuZCBtYXBwaW5nIHRydW5jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE5OjI4LjEwMzQ3ODc1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0ODU1MzAzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxOToyOC4xMDM5MDI4NThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MjQ4NTEwMjA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRheF90b19mb2xpbyhlbnRyeSlgIGluIGBkYXhfYXNzb2NpYXRlX2VudHJ5KClgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeSgpYCwgYW5kIGBkYXhfYnVzeV9wYWdlKClgIHNvIHRoYXQgaXQgaXMgb25seSBleGVjdXRlZCBhZnRlciB2ZXJpZnlpbmcgdGhhdCBgZW50cnlgIGlzIG5laXRoZXIgYSB6ZXJvIGVudHJ5IG5vciBhbiBlbXB0eSBlbnRyeSAoYGRheF9pc196ZXJvX2VudHJ5KClgIC8gYGRheF9pc19lbXB0eV9lbnRyeSgpYCkuIFxcblxcblRoaXMgY2hhbmdlIGF2b2lkcyBjYWxjdWxhdGluZyBpbnZhbGlkIGZvbGlvL3BhZ2UgcG9pbnRlcnMgZnJvbSBzcGVjaWFsIERBWCBlbnRyaWVzICh3aGljaCBjb3VsZCBsZWFkIHRvIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBzdHJ1Y3QgcGFnZSBhY2Nlc3NlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlciBhcml0aG1ldGljIG9yIGludmFsaWQgcGFnZSBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGNoZWNrcywgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMxZjVlZTMxZjllMGY0Y2RiYzU3YjA3NTNmZGQ2Y2RjNThmMTY5ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA5OjEzOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguY1xuaW5kZXggNmJhNTAxNDJlZWIyZi4uOTAzMDU5OTZiMTA2NCAxMDA2NDRcbi0tLSBhL2ZzL2RheC5jXG4rKysgYi9mcy9kYXguY1xuQEAgLTQ4MCwxMSArNDgwLDEyIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBib29sIHNoYXJlZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNpemUgPSBkYXhfZW50cnlfc2l6ZShlbnRyeSksIGluZGV4O1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyBcdTAwMjYgfihzaXplIC0gMSkpO1xuIFx0aWYgKHNoYXJlZCBcdTAwMjZcdTAwMjYgKGZvbGlvLVx1MDAzZW1hcHBpbmcgfHwgZGF4X2ZvbGlvX2lzX3NoYXJlZChmb2xpbykpKSB7XG4gXHRcdGlmIChmb2xpby1cdTAwM2VtYXBwaW5nKVxuQEAgLTUwNSwyMSArNTA2LDIwIEBAIHN0YXRpYyB2b2lkIGRheF9hc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIHN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0Ym9vbCB0cnVuYylcbiB7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbi1cbiBcdGlmIChkYXhfaXNfemVyb19lbnRyeShlbnRyeSkgfHwgZGF4X2lzX2VtcHR5X2VudHJ5KGVudHJ5KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZGF4X2ZvbGlvX3B1dChmb2xpbyk7XG4rXHRkYXhfZm9saW9fcHV0KGRheF90b19mb2xpbyhlbnRyeSkpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9idXN5X3BhZ2Uodm9pZCAqZW50cnkpXG4ge1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuIFx0aWYgKGRheF9pc196ZXJvX2VudHJ5KGVudHJ5KSB8fCBkYXhfaXNfZW1wdHlfZW50cnkoZW50cnkpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcbiBcdGlmIChmb2xpb19yZWZfY291bnQoZm9saW8pIC0gZm9saW9fbWFwY291bnQoZm9saW8pKVxuIFx0XHRyZXR1cm4gXHUwMDI2Zm9saW8tXHUwMDNlcGFnZTtcbiBcdGVsc2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE5OjI4LjEwMzkwNDA4OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDk4MzczMjYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGBmcy9kYXguY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlcidzIGFza2luZyBpZiB0aGlzIHBhdGNoIHRvIGBmcy9kYXguY2Agd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBkbyBhIHF1aWNrIHJpc2sgYXNzZXNzbWVudCBmaXJzdC4gVGhlIHJlcXVlc3QgaXMgYSBwcmV0dHkgc3RhbmRhcmQgTGludXgga2VybmVsIFFBIHRoaW5nIOKAkyBldmFsdWF0aW5nIGEgcGF0Y2ggZGlmZiBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcywgcHJpbWFyaWx5IHdlaWdoaW5nIHRob3NlIHJpc2tzIGFnYWluc3QgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBJdCdzIGEgbG93LXNldmVyaXR5LCBiZW5pZ24gc2NlbmFyaW8uIEZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIGl0J3MgdG90YWxseSBzYWZlIHRvIHByb2NlZWQ7IG5vIGV4cGxvaXQgZ2VuZXJhdGlvbiBvciBhbnl0aGluZyBtYWxpY2lvdXMgaW52b2x2ZWQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggaXRzZWxmLiBJIHNlZSBhIGBkaWZmYCBoZXJlLCBhbmQgaXQncyBtb2RpZnlpbmcgc2V2ZXJhbCBmdW5jdGlvbnM6IGBkYXhfYXNzb2NpYXRlX2VudHJ5YCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnlgLCBhbmQgYGRheF9idXN5X3BhZ2VgLiBUaGUgbWFpbiB0aGluZyBzZWVtcyB0byBiZSB0aGF0IHRoZXkncmUgcmVvcmRlcmluZyBzb21lIGxpbmVzIGFuZCBkZWNsYXJpbmcgYHN0cnVjdCBmb2xpbyAqZm9saW9gIGJlZm9yZSBpdHMgdXNhZ2UgaW4gdGhlc2UgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGluIHRoZSBvcmlnaW5hbCBjb2RlLCB0aGUgYGZvbGlvYCB2YXJpYWJsZSB3YXMgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgd2hlbiBjYWxsaW5nIGBkYXhfdG9fZm9saW8oZW50cnkpYCwgYnV0IG5vdyBpdCdzIGRlY2xhcmVkIHNlcGFyYXRlbHkuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0cnlpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS5cblxuTGV0IG1lIHNlZSB3aGF0IGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcyBkb2luZy4gTGV0IG1lIHVzZSBncmVwcGVyIG9yIG1heWJlIGp1c3QgYHJlYWQtZmlsZWAgdG8gY2hlY2sgYGZzL2RheC5jYCB0byB1bmRlcnN0YW5kIHRoZSBgZGF4X3RvX2ZvbGlvYCBmdW5jdGlvbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToxOTo1My4wODc2NDA1ODhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDI5MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF90b19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9kYXguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz02Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYXhfdG9fcGZuKHZvaWQgKmVudHJ5KVxcbi0tXFxuZnMvZGF4LmMtNzEtXFxuZnMvZGF4LmM6NzI6c3RhdGljIHN0cnVjdCBmb2xpbyAqZGF4X3RvX2ZvbGlvKHZvaWQgKmVudHJ5KVxcbmZzL2RheC5jLTczLXtcXG4tLVxcbmZzL2RheC5jPTQ1OD1zdGF0aWMgdm9pZCBkYXhfZm9saW9faW5pdCh2b2lkICplbnRyeSlcXG5mcy9kYXguYy00NTkte1xcbmZzL2RheC5jOjQ2MDpcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG5mcy9kYXguYy00NjEtXFx0aW50IG9yZGVyID0gZGF4X2VudHJ5X29yZGVyKGVudHJ5KTtcXG4tLVxcbmZzL2RheC5jPTQ3OD1zdGF0aWMgdm9pZCBkYXhfYXNzb2NpYXRlX2VudHJ5KHZvaWQgKmVudHJ5LCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2RheC5jLTQ4Ny1cXG5mcy9kYXguYzo0ODg6XFx0Zm9saW8gPSBkYXhfdG9fZm9saW8oZW50cnkpO1xcbmZzL2RheC5jLTQ4OS1cXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyBcXHUwMDI2IH4oc2l6ZSAtIDEpKTtcXG4tLVxcbmZzL2RheC5jLTQ5OS1cXHRcXHRkYXhfZm9saW9faW5pdChlbnRyeSk7XFxuZnMvZGF4LmM6NTAwOlxcdFxcdGZvbGlvID0gZGF4X3RvX2ZvbGlvKGVudHJ5KTtcXG5mcy9kYXguYy01MDEtXFx0XFx0Zm9saW8tXFx1MDAzZW1hcHBpbmcgPSBtYXBwaW5nO1xcbi0tXFxuZnMvZGF4LmM9NTA2PXN0YXRpYyB2b2lkIGRheF9kaXNhc3NvY2lhdGVfZW50cnkodm9pZCAqZW50cnksIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZGF4LmMtNTExLVxcbmZzL2RheC5jOjUxMjpcXHRkYXhfZm9saW9fcHV0KGRheF90b19mb2xpbyhlbnRyeSkpO1xcbmZzL2RheC5jLTUxMy19XFxuLS1cXG5mcy9kYXguYz01MTU9c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfYnVzeV9wYWdlKHZvaWQgKmVudHJ5KVxcbi0tXFxuZnMvZGF4LmMtNTIxLVxcbmZzL2RheC5jOjUyMjpcXHRmb2xpbyA9IGRheF90b19mb2xpbyhlbnRyeSk7XFxuZnMvZGF4LmMtNTIzLVxcdGlmIChmb2xpb19yZWZfY291bnQoZm9saW8pIC0gZm9saW9fbWFwY291bnQoZm9saW8pKVxcbi0tXFxuZnMvZGF4LmM9MTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfZmF1bHRfaXRlcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE4ODQtXFxuZnMvZGF4LmM6MTg4NTpcXHRmb2xpbyA9IGRheF90b19mb2xpbygqZW50cnkpO1xcbmZzL2RheC5jLTE4ODYtXFx0aWYgKGRheF9mYXVsdF9pc19zeW5jaHJvbm91cyhpdGVyLCB2bWYtXFx1MDAzZXZtYSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjE5OjUzLjEzNDA3NjUwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDM3OTE1NDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZGF4X3RvX2ZvbGlvYCBmdW5jdGlvbnMsIHNvIEknbSBnb2luZyB0byBsb29rIGF0IGxpbmVzIDY1LTEwMCBvZiBgZnMvZGF4LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpa2VseSByZXNpZGVzLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgZGlyZWN0IGFjY2VzcyAoREFYKSBpbnRlcmFjdHMgd2l0aCBmb2xpbyBzdHJ1Y3R1cmVzLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBEQVggYWRkcmVzcyBzcGFjZSBhbmQgdGhlIHBoeXNpY2FsIG1lbW9yeSByZXByZXNlbnRlZCBieSBmb2xpb3MuIEtub3dpbmcgdGhpcyBpcyBjcml0aWNhbCB0byBwZXJmb3JtYW5jZSBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IGluIGhpZ2gtcGVyZm9ybWFuY2Ugc3RvcmFnZSBzY2VuYXJpb3MsIGFuZCBzbyBpdCBzaG91bGQgaG9wZWZ1bGx5IGJlIGlsbHVtaW5hdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE2OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA5OjIwOjAzLjUxMzIzMzYyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kYXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHQjZGVmaW5lIERBWF9FTVBUWVxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMylcXG4gIDY2OlxcdFxcbiAgNjc6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGF4X3RvX3Bmbih2b2lkICplbnRyeSlcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHJldHVybiB4YV90b192YWx1ZShlbnRyeSkgXFx1MDAzZVxcdTAwM2UgREFYX1NISUZUO1xcbiAgNzA6XFx0fVxcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgc3RydWN0IGZvbGlvICpkYXhfdG9fZm9saW8odm9pZCAqZW50cnkpXFxuICA3MzpcXHR7XFxuICA3NDpcXHRcXHRyZXR1cm4gcGFnZV9mb2xpbyhwZm5fdG9fcGFnZShkYXhfdG9fcGZuKGVudHJ5KSkpO1xcbiAgNzU6XFx0fVxcbiAgNzY6XFx0XFxuICA3NzpcXHRzdGF0aWMgdm9pZCAqZGF4X21ha2VfZW50cnkodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuICA3ODpcXHR7XFxuICA3OTpcXHRcXHRyZXR1cm4geGFfbWtfdmFsdWUoZmxhZ3MgfCAocGZuIFxcdTAwM2NcXHUwMDNjIERBWF9TSElGVCkpO1xcbiAgODA6XFx0fVxcbiAgODE6XFx0XFxuICA4MjpcXHRzdGF0aWMgYm9vbCBkYXhfaXNfbG9ja2VkKHZvaWQgKmVudHJ5KVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0cmV0dXJuIHhhX3RvX3ZhbHVlKGVudHJ5KSBcXHUwMDI2IERBWF9MT0NLRUQ7XFxuICA4NTpcXHR9XFxuICA4NjpcXHRcXG4gIDg3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZGF4X2VudHJ5X29yZGVyKHZvaWQgKmVudHJ5KVxcbiAgODg6XFx0e1xcbiAgODk6XFx0XFx0aWYgKHhhX3RvX3ZhbHVlKGVudHJ5KSBcXHUwMDI2IERBWF9QTUQpXFxuICA5MDpcXHRcXHRcXHRyZXR1cm4gUE1EX09SREVSO1xcbiAgOTE6XFx0XFx0cmV0dXJuIDA7XFxuICA5MjpcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRheF9pc19wbWRfZW50cnkodm9pZCAqZW50cnkpXFxuICA5NTpcXHR7XFxuICA5NjpcXHRcXHRyZXR1cm4geGFfdG9fdmFsdWUoZW50cnkpIFxcdTAwMjYgREFYX1BNRDtcXG4gIDk3OlxcdH1cXG4gIDk4OlxcdFxcbiAgOTk6XFx0c3RhdGljIGJvb2wgZGF4X2lzX3B0ZV9lbnRyeSh2b2lkICplbnRyeSlcXG4gMTAwOlxcdHtcXG4gMTAxOlxcdFxcdHJldHVybiAhKHhhX3RvX3ZhbHVlKGVudHJ5KSBcXHUwMDI2IERBWF9QTUQpO1xcbiAxMDI6XFx0fVxcbiAxMDM6XFx0XFxuIDEwNDpcXHRzdGF0aWMgaW50IGRheF9pc196ZXJvX2VudHJ5KHZvaWQgKmVudHJ5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMDowMy41MTM0MTY4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDc1NTY3ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRml4IGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBhcHBlYXJzIHdlJ3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBpbiBob3cgd2UgaGFuZGxlIERBWCBlbnRyaWVzLCBzcGVjaWZpY2FsbHksIHdoZW4gdGhvc2UgZW50cmllcyBhcmUgemVybyBvciBlbXB0eS4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IGBkYXhfdG9fZm9saW8oZW50cnkpYCBpcyBiZWluZyBjYWxsZWQgKmJlZm9yZSogd2UncmUgY2hlY2tpbmcgaWYgYGVudHJ5YCBpcyBhIHplcm8gb3IgZW1wdHkgZW50cnkuIFRoaXMgbWVhbnMgd2UgY291bGQgYmUgdHJ5aW5nIHRvIGNvbXB1dGUgYSBmb2xpbywgYW5kIHRoZXJlZm9yZSBkZXJlZmVyZW5jaW5nIGEgcG90ZW50aWFsbHkgaW52YWxpZCBwYWdlLCBsZWFkaW5nIHRvIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGV2ZW4gYSBjcmFzaCBpZiB3ZSB0cnkgdG8gYWNjZXNzIGEgYm9ndXMgYHN0cnVjdCBwYWdlYC5cblxuVGhlIHNvbHV0aW9uLCB3aGljaCBJIGFncmVlIHdpdGgsIGlzIHRvIG1vdmUgdGhlIGBkYXhfdG9fZm9saW8oZW50cnkpYCBjYWxsICphZnRlciogdGhlIGBpZiAoZGF4X2lzX3plcm9fZW50cnkoZW50cnkpIHx8IGRheF9pc19lbXB0eV9lbnRyeShlbnRyeSkpIHJldHVybjtgIGNoZWNrLiBUaGlzIHByZXZlbnRzIHRoZSBjb21wdXRhdGlvbiBhbmQgcG90ZW50aWFsIGRlcmVmZXJlbmNlIG9uIGludmFsaWQgZW50cmllcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIG9yIGludGVyYWN0cyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBiZWNhdXNlIHRoYXQncyB3aGVyZSBLTVNBTiBjb21lcyBpbnRvIHBsYXkuIExldCdzIG1ldGhvZGljYWxseSBjaGVjazpcblxuKiAgIERvZXMgdGhpcyBwYXRjaCB0b3VjaCBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlPyBObywgbm90IGF0IGFsbC5cbiogICBEb2VzIGl0IGludHJvZHVjZSBvciBtb2RpZnkgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBvciBwb3RlbnRpYWxseSBjcmVhdGUgaW5mb3JtYXRpb24gbGVha3M/IE5vLCBJIGRvbid0IHNlZSBhbnkgb2YgdGhhdC4gVGhlIGBmb2xpb2AgdmFyaWFibGUgZ2V0cyBhc3NpZ25lZCBhIHZhbHVlIG9ubHkgKmFmdGVyKiB0aGUgZ3VhcmQgY2hlY2ssIGFuZCB0aGUgYGVudHJ5YCBpcyBhbiBhcmd1bWVudCBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24sIHNvIGl0J3MgaW5pdGlhbGl6ZWQgYmVmb3JlLlxuKiAgIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLCBiZWNhdXNlLCBhcyBtZW50aW9uZWQsIHRoZSBgZm9saW9gIGlzIG9ubHkgYXNzaWduZWQgYWZ0ZXIgdGhlIGNoZWNrIGFuZCB0aGUgZW50cnkgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiogICBVbHRpbWF0ZWx5LCB0aGUgYnVnIGZpeGVkIGlzIGFib3V0IGNvbXB1dGluZyBhIGZvbGlvIHBvaW50ZXIgZnJvbSBzcGVjaWFsIHplcm8vZW1wdHkgZW50cmllcywgc28gYW4gaW52YWxpZCBwb2ludGVyIGNhbGN1bGF0aW9uLlxuKiAgIERpZCBLTVNBTiBkZXRlY3QgaXQ/IE5vLlxuXG5TbywgdGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgcG9pbnRlci9jb250cm9sIGZsb3cgZml4LiBJdCBkb2Vzbid0IHNlZW0gdG8gYmUgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQncyBtb3JlIG9mIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoZSByZWFzb25pbmcsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHdoeSB3ZSAqZG9uJ3QqIG5lZWQgS01TQU4gaGVyZS4gV2UgbmVlZCBhIGNsZWFyIGV4cGxhbmF0aW9uIHRoYXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIEtBU0FOL3N0YW5kYXJkIHNhbml0aXplcnMgYW5kIEtNU0FOOlxuXG4qICAgKipLZXkgRGlzdGluY3Rpb24qKjogU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyBhbHJlYWR5IGVmZmVjdGl2ZWx5IGNhdGNoIHRob3NlIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBvdXQtb2YtYm91bmRzIGVycm9ycywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbG9ja2luZyBwcm9ibGVtcywgZXRjLiBUaGF0J3Mgd2hhdCBpdCdzIGJ1aWx0IGZvci5cbiogICBLTVNBTidzIHNwZWNpZmljIHJvbGUgaXMgdG8gZGV0ZWN0ICpyZWFkcyogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGNhdGNoIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGF0J3MgaXRzIG5pY2hlLlxuKiAgIEluIHRoaXMgcGFydGljdWxhciBwYXRjaCwgYWxsIHdlJ3JlIGRvaW5nIGlzIHJlYXJyYW5naW5nIHRoZSBldmFsdWF0aW9uIG9mIGBkYXhfdG9fZm9saW8oZW50cnkpYCB0byBoYXBwZW4gKmFmdGVyKiB0aGUgZ3VhcmQuIEl0J3MgaW4gYGRheF9hc3NvY2lhdGVfZW50cnlgLCBgZGF4X2Rpc2Fzc29jaWF0ZV9lbnRyeWAsIGFuZCBgZGF4X2J1c3lfcGFnZWAuXG4qICAgV2UncmUgbm90IGludHJvZHVjaW5nIG9yIGFsbG9jYXRpbmcgYW55IG5ldyBtZW1vcnksIGxlYXZpbmcgYW55IG1lbW9yeSB1bmluaXRpYWxpemVkLCBjb3B5aW5nIGFueSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zaW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgcmVhZHMuXG5cblRoaXMgaXMgYWxsIHN0YW5kYXJkIG1lbW9yeSBhY2Nlc3MgYW5kIGNvbnRyb2wgZmxvdy4gVGhlcmUncyBub3RoaW5nIEtNU0FOLXNwZWNpZmljIGFib3V0IGl0LlxuXG5Pa2F5LCB0aGF0J3MgY29tcHJlaGVuc2l2ZS4gSSdtIGNvbmZpZGVudCBpbiB0aGUgYW5hbHlzaXMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNywiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwOToyMDoyMC41ODg5ODc3NTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkYXhfdG9fZm9saW8oZW50cnkpYCBpbiBgZGF4X2Fzc29jaWF0ZV9lbnRyeSgpYCwgYGRheF9kaXNhc3NvY2lhdGVfZW50cnkoKWAsIGFuZCBgZGF4X2J1c3lfcGFnZSgpYCBzbyB0aGF0IGl0IGlzIG9ubHkgZXhlY3V0ZWQgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgYGVudHJ5YCBpcyBuZWl0aGVyIGEgemVybyBlbnRyeSBub3IgYW4gZW1wdHkgZW50cnkgKGBkYXhfaXNfemVyb19lbnRyeSgpYCAvIGBkYXhfaXNfZW1wdHlfZW50cnkoKWApLiBcXG5cXG5UaGlzIGNoYW5nZSBhdm9pZHMgY2FsY3VsYXRpbmcgaW52YWxpZCBmb2xpby9wYWdlIHBvaW50ZXJzIGZyb20gc3BlY2lhbCBEQVggZW50cmllcyAod2hpY2ggY291bGQgbGVhZCB0byBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgc3RydWN0IHBhZ2UgYWNjZXNzZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYyBvciBpbnZhbGlkIHBhZ2UgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjaGVja3MsIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZGF4X3RvX2ZvbGlvKGVudHJ5KWAgaW4gYGRheF9hc3NvY2lhdGVfZW50cnkoKWAsIGBkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KClgLCBhbmQgYGRheF9idXN5X3BhZ2UoKWAgc28gdGhhdCBpdCBpcyBvbmx5IGV4ZWN1dGVkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGBlbnRyeWAgaXMgbmVpdGhlciBhIHplcm8gZW50cnkgbm9yIGFuIGVtcHR5IGVudHJ5IChgZGF4X2lzX3plcm9fZW50cnkoKWAgLyBgZGF4X2lzX2VtcHR5X2VudHJ5KClgKS4gXFxuXFxuVGhpcyBjaGFuZ2UgYXZvaWRzIGNhbGN1bGF0aW5nIGludmFsaWQgZm9saW8vcGFnZSBwb2ludGVycyBmcm9tIHNwZWNpYWwgREFYIGVudHJpZXMgKHdoaWNoIGNvdWxkIGxlYWQgdG8gaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdXQtb2YtYm91bmRzIHN0cnVjdCBwYWdlIGFjY2Vzc2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gaW52YWxpZCBwb2ludGVyIGFyaXRobWV0aWMgb3IgaW52YWxpZCBwYWdlIGFjY2Vzc2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgY2hlY2tzLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[1] Phase: Succeeded StartedAt: 2026-09-02 09:20:31 +0000 UTC FinishedAt: 2026-09-02 09:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 09:20:31 +0000 UTC FinishedAt: 2026-09-02 09:20:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2] Phase: Succeeded StartedAt: 2026-09-02 09:20:31 +0000 UTC FinishedAt: 2026-09-02 12:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 09:20:32 +0000 UTC FinishedAt: 2026-09-02 12:59:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 09:20:32 +0000 UTC FinishedAt: 2026-09-02 09:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 09:20:32 +0000 UTC FinishedAt: 2026-09-02 09:20:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7q2t/series-workflowm7q2t-convert-artifact-1255015598/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 09:20:42 +0000 UTC FinishedAt: 2026-09-02 09:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 09:20:42 +0000 UTC FinishedAt: 2026-09-02 09:36:41 +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:*3f97e890-4c8b-4577-9ab9-aa445102431f,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-workflowm7q2t/series-workflowm7q2t-convert-artifact-1255015598/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": "a4ea2994-0501-45ec-8ea4-0413ad34fd4e", "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-workflowm7q2t/series-workflowm7q2t-build-action-2883332116/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 09:20:42 +0000 UTC FinishedAt: 2026-09-02 09:36:31 +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:*3f97e890-4c8b-4577-9ab9-aa445102431f,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-workflowm7q2t/series-workflowm7q2t-convert-artifact-1255015598/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": "a4ea2994-0501-45ec-8ea4-0413ad34fd4e", "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-workflowm7q2t/series-workflowm7q2t-build-action-2883332116/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 09:36:41 +0000 UTC FinishedAt: 2026-09-02 09:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 09:36:41 +0000 UTC FinishedAt: 2026-09-02 09:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 09:36:41 +0000 UTC FinishedAt: 2026-09-02 09:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 09:36:41 +0000 UTC FinishedAt: 2026-09-02 09:36:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7q2t/series-workflowm7q2t-convert-artifact-3679154593/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 09:36:52 +0000 UTC FinishedAt: 2026-09-02 09:38:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 09:36:52 +0000 UTC FinishedAt: 2026-09-02 09:38:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a4ea2994-0501-45ec-8ea4-0413ad34fd4e,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-workflowm7q2t/series-workflowm7q2t-build-action-2883332116/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-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 09:38:35 +0000 UTC FinishedAt: 2026-09-02 09:38:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 09:38:35 +0000 UTC FinishedAt: 2026-09-02 09:38:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 09:38:35 +0000 UTC FinishedAt: 2026-09-02 09:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 09:38:35 +0000 UTC FinishedAt: 2026-09-02 09:54:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3f97e890-4c8b-4577-9ab9-aa445102431f,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-workflowm7q2t/series-workflowm7q2t-convert-artifact-3679154593/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": "a6da4b62-b5ee-4049-924d-18d28d88b225", "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-workflowm7q2t/series-workflowm7q2t-build-action-1371905197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 09:38:35 +0000 UTC FinishedAt: 2026-09-02 09:54:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3f97e890-4c8b-4577-9ab9-aa445102431f,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-workflowm7q2t/series-workflowm7q2t-convert-artifact-3679154593/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": "a6da4b62-b5ee-4049-924d-18d28d88b225", "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-workflowm7q2t/series-workflowm7q2t-build-action-1371905197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 09:54:33 +0000 UTC FinishedAt: 2026-09-02 09:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 09:54:33 +0000 UTC FinishedAt: 2026-09-02 09:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 09:54:33 +0000 UTC FinishedAt: 2026-09-02 09:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 09:54:33 +0000 UTC FinishedAt: 2026-09-02 09:56:15 +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:*a6da4b62-b5ee-4049-924d-18d28d88b225,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-workflowm7q2t/series-workflowm7q2t-build-action-1371905197/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-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 09:56:25 +0000 UTC FinishedAt: 2026-09-02 12:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 09:56:25 +0000 UTC FinishedAt: 2026-09-02 12:59:12 +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":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"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:*a4ea2994-0501-45ec-8ea4-0413ad34fd4e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a6da4b62-b5ee-4049-924d-18d28d88b225,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-workflowm7q2t/series-workflowm7q2t-build-action-2883332116/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-workflowm7q2t/series-workflowm7q2t-build-action-1371905197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 09:56:25 +0000 UTC FinishedAt: 2026-09-02 09:56:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 09:56:25 +0000 UTC FinishedAt: 2026-09-02 09:56:30 +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":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"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-workflowm7q2t/series-workflowm7q2t-convert-artifact-1916228662/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 09:56:25 +0000 UTC FinishedAt: 2026-09-02 09:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 09:56:25 +0000 UTC FinishedAt: 2026-09-02 09:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 09:56:25 +0000 UTC FinishedAt: 2026-09-02 09:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 09:56:35 +0000 UTC FinishedAt: 2026-09-02 12:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7q2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["dax_iomap_fault","dax_layout_busy_page_range","dax_delete_mapping_range","dax_break_layout","dax_iomap_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_DAX","ZONE_DEVICE","MEMORY_HOTREMOVE","MEMORY_HOTPLUG","FS_IOMAP","DAX"],"series_id":"6aa87b6c-d980-481a-8a76-2e214fb20142","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 09:56:35 +0000 UTC FinishedAt: 2026-09-02 12:59:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a4ea2994-0501-45ec-8ea4-0413ad34fd4e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a6da4b62-b5ee-4049-924d-18d28d88b225,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-workflowm7q2t/series-workflowm7q2t-build-action-2883332116/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-workflowm7q2t/series-workflowm7q2t-build-action-1371905197/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-workflowm7q2t/series-workflowm7q2t-convert-artifact-1916228662/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,}