Name: series-workflow6wdjr Phase: Succeeded StartedAt: 2026-08-05 09:20:34 +0000 UTC FinishedAt: 2026-08-05 10:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[0] Phase: Succeeded StartedAt: 2026-08-05 09:20:34 +0000 UTC FinishedAt: 2026-08-05 09:26:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 09:20:34 +0000 UTC FinishedAt: 2026-08-05 09:26:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e47602c51d20a93fa1711ed896dc9480de4374d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "DEBUG_VM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e47602c51d20a93fa1711ed896dc9480de4374d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "DEBUG_VM" ], "series_id": "b0ec4d6e-6671-4b25-860d-98cf480bdd8f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_failure", "soft_offline_page", "min_order_for_split" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAgICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gbWVtb3J5X2ZhaWx1cmUgYW5kIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSB3aGVuIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdC4gSXQgYWxzbyBhZGRzIGEgVk1fV0FSTl9PTl9PTkNFX0ZPTElPIGluIG1pbl9vcmRlcl9mb3Jfc3BsaXQgdG8gZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2luZyBpcyBjb3JyZWN0IGFuZCBubyB3YXJuaW5ncyBhcmUgdHJpZ2dlcmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDkxMmFlYTlkOWU2ZDBjNWI2MTRkMmVmZWM5Y2ZhYzQ1OWMwYTgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDk6MjQ6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDgwNGI4ZjZhYTU1NzAuLjBiODIzZWEzYzc2YzQgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQzNiw2ICYjNDM7NDQzNiw4IEBAIGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuICAqL1xuIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4gXHRcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBkZTRjYjc1ODUwYTE0Li42OTcyMThmMzIzNzY5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTI1MDYsMTIgJiM0MzsyNTA2LDE3IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0XHRyZXMgPSAtRU9QTk9UU1VQUDtcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4mIzQzO1xuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbiBcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuLVx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4mIzQzO1x0XHRjb25zdCBpbnQgbmV3X29yZGVyO1xuIFx0XHRpbnQgZXJyO1xuIFxuJiM0MztcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG4mIzQzO1x0XHRuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgZmxhZyBtdXN0IGJlIHNldCBhZnRlciB0aGUgcmVmY291bnQgaXMgYnVtcGVkXG4gXHRcdCAqIG90aGVyd2lzZSBpdCBtYXkgcmFjZSB3aXRoIFRIUCBzcGxpdC5cbkBAIC0yODYyLDggJiM0MzsyODY3LDExIEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0fTtcbiBcbiBcdGlmICghaHVnZSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbi1cdFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xuJiM0MztcdFx0Y29uc3QgaW50IG5ld19vcmRlcjtcbiBcbiYjNDM7XHRcdGZvbGlvX2xvY2soZm9saW8pO1xuJiM0MztcdFx0bmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGVcbiBcdFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVCVUdfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7LAogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICAgJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBtZW1vcnlfZmFpbHVyZSBhbmQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0LiBJdCBhbHNvIGFkZHMgYSBWTV9XQVJOX09OX09OQ0VfRk9MSU8gaW4gbWluX29yZGVyX2Zvcl9zcGxpdCB0byBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QgYW5kIG5vIHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OTEyYWVhOWQ5ZTZkMGM1YjYxNGQyZWZlYzljZmFjNDU5YzBhODA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwOToyNDoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDgwNGI4ZjZhYTU1NzAuLjBiODIzZWEzYzc2YzQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQzNiw2ICYjNDM7NDQzNiw4IEBAIGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogICovCiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggZGU0Y2I3NTg1MGExNC4uNjk3MjE4ZjMyMzc2OSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0yNTA2LDEyICYjNDM7MjUwNiwxNyBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAkJcmVzID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KJiM0MzsKIAlmb2xpb191bmxvY2soZm9saW8pOwogCiAJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7Ci0JCWNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTsKJiM0MzsJCWNvbnN0IGludCBuZXdfb3JkZXI7CiAJCWludCBlcnI7CiAKJiM0MzsJCWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwkJbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7CiYjNDM7CQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwogCQkvKgogCQkgKiBUaGUgZmxhZyBtdXN0IGJlIHNldCBhZnRlciB0aGUgcmVmY291bnQgaXMgYnVtcGVkCiAJCSAqIG90aGVyd2lzZSBpdCBtYXkgcmFjZSB3aXRoIFRIUCBzcGxpdC4KQEAgLTI4NjIsOCAmIzQzOzI4NjcsMTEgQEAgc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAJfTsKIAogCWlmICghaHVnZSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7Ci0JCWNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTsKJiM0MzsJCWNvbnN0IGludCBuZXdfb3JkZXI7CiAKJiM0MzsJCWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwkJbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7CiYjNDM7CQlmb2xpb191bmxvY2soZm9saW8pOwogCQkvKgogCQkgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGUKIAkJICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBGb2xpbyBMb2NraW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgYWRqdXN0bWVudHMgdG8gaG93IGZvbGlvcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzcGxpdHRpbmcgdGhlbS4gSSBzZWUgYSBuZXcgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgY2hlY2sgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHdpdGhpbiB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyB3YXJuaW5nIGlmIGEgZm9saW8gKmlzbiYjMzk7dCogbG9ja2VkIHdoZW4gd2UmIzM5O3JlIHRyeWluZyB0byBzcGxpdCBpdC4gVGhhdCBzdWdnZXN0cyB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgYSBjYXNlIHdoZXJlIHdlIHdlcmUgc3BsaXR0aW5nIGEgZm9saW8gd2l0aG91dCBwcm9wZXIgcHJvdGVjdGlvbiwgYW5kIHRoaXMgaXMgdGhlIGZpeC4KCkZ1cnRoZXIgZG93biwgSSYjMzk7bSBub3RpY2luZyBtb2RpZmljYXRpb25zIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlICpub3cqIGV4cGxpY2l0bHkgbG9ja2luZyB0aGUgZm9saW8gKmJlZm9yZSogY2FsbGluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgYW5kICp0aGVuKiB1bmxvY2tpbmcgaXQgYWZ0ZXJ3YXJkcy4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQgLSB3ZSYjMzk7cmUgc2hvcmluZyB1cCB0aGUgbG9ja2luZyBhcm91bmQgdGhlIHNwbGl0IG9wZXJhdGlvbi4gVGhpcyBpcyBnb29kOyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBpbXBvcnRhbnQgbWVtb3J5IGhhbmRsaW5nIGhlcmUsIHNvIGxvY2tpbmcgaXMgY3J1Y2lhbCBmb3IgZGF0YSBpbnRlZ3JpdHkuCgpNeSBleHBlcnQgbWluZCBpcyBhdXRvbWF0aWNhbGx5IG1vdmluZyB0b3dhcmRzIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXMgZ29pbmcgdG8gYmUgY29tcGlsZWQgaWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2Ug4oCTIHRoYXQgY29uZmlnIG9wdGlvbiBjb250cm9scyB0aGUgd2hvbGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgc3Vic3lzdGVtLiBBbmQgYG1tL2h1Z2VfbWVtb3J5LmNgIGRlcGVuZHMgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gVGhhdCBjb25maXJtcyB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgb25seSBpbXBhY3Qgc3lzdGVtcyB1c2luZyB0cmFuc3BhcmVudCBodWdlcGFnZXMsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBjYXNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwganVzdCBmaW5hbGl6ZSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNoYW5nZSBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeS1mYWlsdXJlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX0RNQVBPT0xfVEVTVCkgJiM0Mzs9IGRtYXBvb2xfdGVzdC5vXG5tbS9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmIzQzOz0gbWVtb3J5LWZhaWx1cmUub1xubW0vTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19IV1BPSVNPTl9JTkpFQ1QpICYjNDM7PSBod3BvaXNvbi1pbmplY3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYSBNZW1vcnkgRmFpbHVyZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBzeXN0ZW0mIzM5O3MgZmxhZ2dpbmcgYSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpc3N1ZS4gUmlnaHQsIGdvdCBpdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgaGFuZGxpbmcgb2YgdGhpcywgc3BlY2lmaWNhbGx5IHRoZSBodWdlIHBhZ2UgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBnbyBzdHJhaWdodCB0byBgbW0vaHVnZV9tZW1vcnkuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgZXhpc3QgZm9yIGFkZHJlc3NpbmcgdGhlc2UgZmFpbHVyZXMuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgdGhlIGNvZGUmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqUmVmbGVjdGluZyBvbiBIdWdlcGFnZXMgYW5kIE1lbW9yeSBGYWlsdXJlKioKCkFscmlnaHQsIHllcCwgdGhhdCYjMzk7cyBpdCAtIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgZW5hYmxlZC4gV2UmIzM5O3JlIHJvbGxpbmcgd2l0aCBUSFAuIE5vdywgYmVmb3JlIEkgbW92ZSBhbnkgZnVydGhlciwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiBtZW1vcnkgZXJyb3JzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFRIUCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBjb25zaWRlcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLiBZb3Uga25vdyBob3cgaXQgZ29lczsgYmVzdCB0byBwcmUtZW1wdCBhbnkgcG90ZW50aWFsIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2Mi1cbm1tL0tjb25maWc6NzYzOmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjQtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBNRU1PUllfRkFJTFVSRWA6CgoqKkRlZXAgRGl2ZSBpbnRvIERlcGVuZGVuY3kgQW5hbHlzaXMgZm9yIE1FTU9SWV9GQUlMVVJFKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGBNRU1PUllfRkFJTFVSRWAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzdXJmYWNlLWxldmVsIGRpYWdub3N0aWM7IEkgbmVlZCB0byBtYXAgb3V0ICpldmVyeSogcG90ZW50aWFsIGRlcGVuZGVuY3kuIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIHRoZSBvYnZpb3VzIHN0YWNrIHRyYWNlcy4gSSB3YW50IHRvIHVuY292ZXIgdGhlIGVudGlyZSB3ZWIgb2YgY29udHJpYnV0aW5nIGZhY3RvcnMuIFdoYXQgbGlicmFyaWVzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBzdHJhdGVneSBhdCBwbGF5PyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNvbm5lY3Rpb25zLCBsaWtlIHBvb3JseSBtYW5hZ2VkIGNhY2hlcyBvciB1bmJvdW5kZWQgZGF0YSBzdHJ1Y3R1cmVzLCB0aGF0IG1pZ2h0IGV2ZW50dWFsbHkgY2FzY2FkZSBpbnRvIGEgbWVtb3J5IGlzc3VlPwoKSSYjMzk7bSBtZW50YWxseSBidWlsZGluZyBhIGZsb3djaGFydCBoZXJlLCB0cmFjaW5nIHRoZSBmbG93IG9mIG1lbW9yeSB1c2FnZSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBsZXZlbCBkb3duIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCBoYXJkd2FyZSBsYXllcnMuIFRoaXMgaW5jbHVkZXMgY29uc2lkZXJpbmcgZXh0ZXJuYWwgZmFjdG9ycyBzdWNoIGFzIG90aGVyIHByb2Nlc3NlcyBvciBlbnZpcm9ubWVudGFsIHNldHRpbmdzIHRoYXQgbWF5IGFmZmVjdCBwZXJmb3JtYW5jZS4gSSYjMzk7bSBpbWFnaW5pbmcgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBpbnRlcmFjdCBpbiBib3RoIHR5cGljYWwgYW5kIGVkZ2UgY2FzZSBzY2VuYXJpb3MuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgc2luZ2xlIHBvaW50IG9mIGZhaWx1cmVzIHRoYXQgY29udHJpYnV0ZSB0byB0aGlzIE1FTU9SWV9GQUlMVVJFLCBvciBpZiB0aGVyZSBpcyBhIGNvbmZsdWVuY2Ugb2YgZmFjdG9ycy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgZXZlbiBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgY29tcG9uZW50cyBtYXkgcHJlc2VudCBhcyBhIHByb2JsZW0uIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgZmluZCB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2MDpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzYxOlx0XHRib29sXG4gNzYyOlx0XG4gNzYzOlx0Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG4gNzY0Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDc2NTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzY2Olx0XHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbiA3Njc6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gNzY4Olx0XHRoZWxwXG4gNzY5Olx0XHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xuIDc3MDpcdFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xuIDc3MTpcdFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcbiA3NzI6XHRcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cbiA3NzM6XHRcbiA3NzQ6XHRjb25maWcgSFdQT0lTT05fSU5KRUNUXG4gNzc1Olx0XHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuIDc3NjpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG4gNzc3Olx0XHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1JcbiA3Nzg6XHRcbiA3Nzk6XHRjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjcwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IG1lbW9yeSBmYWlsdXJlcyBhcmUgaGFuZGxlZCBpbiB0aGlzIHN5c3RlbS4gVGhlIHByaW1hcnkgbWVjaGFuaXNtLCBgTUVNT1JZX0ZBSUxVUkVgLCBpdHMgZnVuY3Rpb25hbGl0eSwgaXMgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gd2hldGhlciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIHRoZXNlIGZhaWx1cmVzLCB3aGljaCB3ZSByZXByZXNlbnQgd2l0aCBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBsYXRmb3JtIEkmIzM5O20gd29ya2luZyB3aXRoIGNhbiBhY3R1YWxseSBkbyB0aGlzLiBJdCYjMzk7cyBhIGtleSBmaXJzdCBzdGVwLgoKR2l2ZW4gdGhhdCYjMzk7cyBpbiBwbGFjZSwgSSBhbHNvIHdhbnQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIGFzc2VzcyBob3cgVEhQIGlzIGNvbmZpZ3VyZWQgYW5kIGhvdyB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBJIHN1c3BlY3QgdGhhdCB0aGVyZSBhcmUgaW50ZXJhY3Rpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gY2xhcmlmeSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlIGFuZCBPUyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI5PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMxLVxubW0vS2NvbmZpZzo4MzI6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzMtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1MD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1NS1cbm1tL0tjb25maWc6ODU2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjItXG5tbS9LY29uZmlnOjg2MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2NC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzEtXG5tbS9LY29uZmlnOjg3MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4OC1cbm1tL0tjb25maWc6ODg5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkwLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTgtXG5tbS9LY29uZmlnOjg5OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDYtXG5tbS9LY29uZmlnOjkwNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwOC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE0LVxubW0vS2NvbmZpZzo5MTU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE2LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI0PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMzLVxubW0vS2NvbmZpZzo5MzQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzUtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0Mi1cbm1tL0tjb25maWc6OTQzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0NC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1MC1cbm1tL0tjb25maWc6OTUxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTgtXG5tbS9LY29uZmlnOjk1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6CgoqKkludmVzdGlnYXRpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBoYW5kbGUgb24gdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGVwZW5kZW5jaWVzLiBUaGlzIGxpa2VseSBtZWFucyBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aGluZ3MgYmFjayB0byB1bmRlcnN0YW5kIHdoYXQgcmVsaWVzIG9uIGl0LCB3aGF0IGl0IGVuYWJsZXMsIGFuZCB3aGF0IG1pZ2h0IGJyZWFrIGlmIEkgd2VyZSB0byBjaGFuZ2Ugb3IgZGlzYWJsZSBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBub3QganVzdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIHJpcHBsZSBlZmZlY3RzIOKAkyBhbnl0aGluZyBkb3duc3RyZWFtIHRoYXQgbWlnaHQgbGV2ZXJhZ2UgdGhlIGFkdmFudGFnZXMgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCBvciB0aGF0IGNvdWxkIGJlIG5lZ2F0aXZlbHkgYWZmZWN0ZWQgYnkgaXRzIGFic2VuY2Ugb3IgbW9kaWZpY2F0aW9ucy4gUGVyaGFwcyBJJiMzOTtsbCBuZWVkIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCBrZXJuZWwgbW9kdWxlcywgb3IgYXBwbGljYXRpb24tbGV2ZWwgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc3VyZmFjZSBhbmQgZGV0ZXJtaW5lIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgTlVNQSwgYW5kIG90aGVyIHJlbGF0ZWQgc3Vic3lzdGVtcy4gSSYjMzk7bGwga2VlcCBhbiBvcGVuIG1pbmQsIGJlY2F1c2UgSSYjMzk7bSBiZXR0aW5nIHRoYXQgdGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBjb21wbGV4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMjpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzM6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODM1Olx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzNjpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDgzNzpcdFx0c2VsZWN0IE1NX0lEXG4gODM4Olx0XHRoZWxwXG4gODM5Olx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4NDA6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDg0MTpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDI6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDM6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0NDpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQ1Olx0XG4gODQ2Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg0NzpcdFxuIDg0ODpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ5Olx0XG4gODUwOlx0Y2hvaWNlXG4gODUxOlx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKlJlZmxlY3Rpbmcgb24gUmVjZW50IEtlcm5lbCBNb2RpZmljYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdHdvIGtleSBjb25jZXB0czogYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBob3cgdGhlc2UgaW50ZXJhY3QsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlaXIgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIG1haW4gdGhpbmcgaGVyZSBpcyB0aGUga2VybmVsIGNvZGUgSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IGhhcyBiZWVuIG1vZGlmaWVkLgoKU28sIEkgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGNoYW5nZWQgYW5kICp3aGVyZSouIEl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgc2VlbiBjaGFuZ2VzIGFyZSBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGBtZW1vcnlfZmFpbHVyZWAsIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2V0IG9mIGFkanVzdG1lbnRzLCBnaXZlbiB0aGUgY29udGV4dC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmaWxlcyB0aGVtc2VsdmVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgbGl2ZXMgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGh1Z2VwYWdlcy4gVGhlIG90aGVyIHR3bywgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIGFyZSBib3RoIG5lc3RsZWQgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGlzIHN1Z2dlc3RzIGEgc3Ryb25nIGNvbm5lY3Rpb24gYmV0d2VlbiBoYW5kbGluZyBtZW1vcnkgZmFpbHVyZXMgYW5kIGRlYWxpbmcgd2l0aCBwYWdlcyBpbiB1c2UuIEkgd2lsbCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhpcyBmaWxlIGZvciBhIGNvbXByZWhlbnNpdmUgZ3Jhc3Agb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlbS4KCkZpbmFsbHksIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGVzZSBmdW5jdGlvbnMsIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCBhcmUgZ29vZCBmb2NhbCBwb2ludHMgZm9yIGluLWRlcHRoIGFuYWx5c2lzLiBUaGVpciBsb2NhdGlvbiBhbmQgdGhlIHR5cGUgb2YgY2hhbmdlcyBtYWRlIHN1Z2dlc3QgdGhleSB3b3VsZCBiZSBpZGVhbCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlc2UgcmVjZW50IG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jLTcxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzo3MjpzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsIF9fcmVhZF9tb3N0bHk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTczLVxubW0vbWVtb3J5LWZhaWx1cmUuYzo3NDpzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBfX3JlYWRfbW9zdGx5ID0gMTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzUtXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz04MD1hdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtODEtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjgyOnN0YXRpYyBib29sIGh3X21lbW9yeV9mYWlsdXJlIF9fcmVhZF9tb3N0bHk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTgzLVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTA0PXN0YXRpYyBzc2l6ZV90IF9uYW1lIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXHRcdFx0XFxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwNy17XHRcdFx0XHRcdFx0XHRcdFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEwODpcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9zdGF0cyAqbWZfc3RhdHMgPVx0XHRcdFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOS1cdFx0XHUwMDI2Tk9ERV9EQVRBKGRldi1cdTAwM2VpZCktXHUwMDNlbWZfc3RhdHM7XHRcdFx0XFxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTExOD1NRl9BVFRSX1JPKHJlY292ZXJlZCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTExOS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTIwOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZW1vcnlfZmFpbHVyZV9hdHRyW10gPSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyMS1cdFx1MDAyNmRldl9hdHRyX3RvdGFsLmF0dHIsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjgtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyOTpjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXAgPSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMDpcdC5uYW1lID0gXCYjMzQ7bWVtb3J5X2ZhaWx1cmVcJiMzNDssXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMTpcdC5hdHRycyA9IG1lbW9yeV9mYWlsdXJlX2F0dHIsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMi19O1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBtZW1vcnlfZmFpbHVyZV90YWJsZVtdID0ge1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzUtXHR7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzNjpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGxcJiMzNDssXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzNzpcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbCxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM4Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsKSxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM5LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDQtXHR7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0NTpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5XCYjMzQ7LFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDY6XHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5LFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDc6XHRcdC5tYXhsZW5cdFx0PSBzaXplb2Yoc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5KSxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQ4LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjItXHR7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2MzpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcJiMzNDssXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NC1cdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTUwMD1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2Vhcmx5X2tpbGxfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtNTA4LVx0XHR9IGVsc2Uge1xubW0vbWVtb3J5LWZhaWx1cmUuYzo1MDk6XHRcdFx0aWYgKHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsKVxubW0vbWVtb3J5LWZhaWx1cmUuYy01MTAtXHRcdFx0XHRyZXR1cm4gdDtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTgwMT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGh3cG9pc29uX3dhbGtfb3BzID0ge1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtODEyLSAqIGhhcmR3YXJlIHBvaXNvbmVkIHBhZ2VzLiBUaGV5IGNvdWxkIGhhcHBlbiwgZm9yIGV4YW1wbGUsIHdoZW5cbm1tL21lbW9yeS1mYWlsdXJlLmM6ODEzOiAqIG1lbW9yeV9mYWlsdXJlKCkgZmFpbGVkIHRvIHVubWFwIHRoZSBlcnJvciBwYWdlIGF0IHRoZSBmaXJzdCBjYWxsLCBvclxubW0vbWVtb3J5LWZhaWx1cmUuYy04MTQtICogd2hlbiBtdWx0aXBsZSBsb2NhbCBtYWNoaW5lIGNoZWNrcyBoYXBwZW5lZCBvbiBkaWZmZXJlbnQgQ1BVcy5cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEyMzU9c3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTIzOC1cdGludCBuaWQgPSBNQVhfTlVNTk9ERVM7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyMzk6XHRzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfc3RhdHMgKm1mX3N0YXRzID0gTlVMTDtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI0MC1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEyODE9c3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyODMte1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxMjg0Olx0dHJhY2VfbWVtb3J5X2ZhaWx1cmVfZXZlbnQocGZuLCB0eXBlLCByZXN1bHQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjg1LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa2VybmVsX293bmVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzY5LVx0ICogKGZyb3plbiBzbGFiIGFuZCBsYXJnZS1rbWFsbG9jIHBhZ2VzIGNhbm5vdCBiZSBwaW5uZWQpLCBidXQgaXNcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM3MDpcdCAqIGhhcm1sZXNzOiB3aGVyZSBhIHdyb25nIHZlcmRpY3QgY291bGQgcGFuaWMsIG1lbW9yeV9mYWlsdXJlKCkgaGFzXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzNzEtXHQgKiBhbHJlYWR5IHNldCBQYWdlSFdQb2lzb24sIHdoaWNoIGJhcnMgdGhlIHBhZ2UgZnJvbSB0aGUgYWxsb2NhdG9yLlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAxMz1zdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDgwLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDgxOnN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA4Mi17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTUzLSNlbHNlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNTQ6c3RhdGljIGlubGluZSBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE1NS17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTY2PXN0YXRpYyB2b2lkIHB1dF9yZWZfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE3My1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE3NDpzdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNzUtXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTg2LVx0ICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxODc6XHRpZiAocGdtYXBfaGFzX21lbW9yeV9mYWlsdXJlKHBnbWFwKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTg4Olx0XHRyYyA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtZW1vcnlfZmFpbHVyZShwZ21hcCwgcGZuLCAxLCBmbGFncyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxODktXHRcdC8qXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjgzPXN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMxMC0vKipcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjMxMTogKiBtZW1vcnlfZmFpbHVyZV9wZm4gLSBIYW5kbGUgbWVtb3J5IGZhaWx1cmUgb24gYSBwYWdlIG5vdCBiYWNrZWQgYnlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMxMi0gKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZS5cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzMTktICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzMjA6c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMyMS17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzYxLS8qKlxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzYyOiAqIG1lbW9yeV9mYWlsdXJlIC0gSGFuZGxlIG1lbW9yeSBmYWlsdXJlIG9mIGEgcGFnZS5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2My0gKiBAcGZuOiBQYWdlIE51bWJlciBvZiB0aGUgY29ycnVwdGVkIHBhZ2Vcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODUtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzODY6aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODcte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM5NC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM5NTpcdGlmICghc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5KVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzk2LVx0XHRwYW5pYyhcJiMzNDtNZW1vcnkgZmFpbHVyZSBvbiBwYWdlICVseFwmIzM0OywgcGZuKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDAtXHRpZiAoIShmbGFncyBcdTAwMjYgTUZfU1dfU0lNVUxBVEVEKSlcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwMTpcdFx0aHdfbWVtb3J5X2ZhaWx1cmUgPSB0cnVlO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDAyLVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQwNC1cdGlmICghcCkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDA1Olx0XHRyZXMgPSBhcmNoX21lbW9yeV9mYWlsdXJlKHBmbiwgZmxhZ3MpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDA2LVx0XHRpZiAocmVzID09IDApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDEyLVx0XHRcdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDEzOlx0XHRcdHJlcyA9IG1lbW9yeV9mYWlsdXJlX3BmbihwZm4sIGZsYWdzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQxNC1cdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MjAtXHRcdFx0aWYgKHBnbWFwKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0MjE6XHRcdFx0XHRyZXMgPSBtZW1vcnlfZmFpbHVyZV9kZXZfcGFnZW1hcChwZm4sIGZsYWdzLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDIyLVx0XHRcdFx0XHRcdFx0XHQgcGdtYXApO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQzMS10cnlfYWdhaW46XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0MzI6XHRyZXMgPSB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYihwZm4sIGZsYWdzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQzMy1cdC8qXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjIzLX1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYyNDpFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfZmFpbHVyZSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjUtXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjI4LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjI5OnN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MzAtXHR1bnNpZ25lZCBsb25nIHBmbjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MzMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MzQ6c3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MzU6XHRERUNMQVJFX0tGSUZPKGZpZm8sIHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYzNi1cdFx0ICAgICAgTUVNT1JZX0ZBSUxVUkVfRklGT19TSVpFKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDAtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NDE6c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUsIG1lbW9yeV9mYWlsdXJlX2NwdSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDItXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDMtLyoqXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NDQ6ICogbWVtb3J5X2ZhaWx1cmVfcXVldWUgLSBTY2hlZHVsZSBoYW5kbGluZyBtZW1vcnkgZmFpbHVyZSBvZiBhIHBhZ2UuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDUtICogQHBmbjogUGFnZSBOdW1iZXIgb2YgdGhlIGNvcnJ1cHRlZCBwYWdlXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjU4LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjU5OnZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2MC17XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NjE6XHRzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1ICptZl9jcHU7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjItXHR1bnNpZ25lZCBsb25nIHByb2NfZmxhZ3M7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjMtXHRib29sIGJ1ZmZlcl9vdmVyZmxvdztcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY2NDpcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSBlbnRyeSA9IHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2NS1cdFx0LnBmbiA9XHRcdHBmbixcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjgtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2Njk6XHRtZl9jcHUgPSBcdTAwMjZnZXRfY3B1X3ZhcihtZW1vcnlfZmFpbHVyZV9jcHUpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjcwLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1mX2NwdS1cdTAwM2Vsb2NrLCBwcm9jX2ZsYWdzKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NzQtXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtZl9jcHUtXHUwMDNlbG9jaywgcHJvY19mbGFncyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NzU6XHRwdXRfY3B1X3ZhcihtZW1vcnlfZmFpbHVyZV9jcHUpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjc2LVx0aWYgKGJ1ZmZlcl9vdmVyZmxvdylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NzktfVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjgwOkVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9mYWlsdXJlX3F1ZXVlKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY4MS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4MjpzdGF0aWMgdm9pZCBtZW1vcnlfZmFpbHVyZV93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjgzLXtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4NDpcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUgKm1mX2NwdTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4NTpcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSBlbnRyeSA9IHsgMCwgfTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY4Ni1cdHVuc2lnbmVkIGxvbmcgcHJvY19mbGFncztcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2ODgtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2ODk6XHRtZl9jcHUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSwgd29yayk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2OTAtXHRmb3IgKDs7KSB7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjk4LVx0XHRlbHNlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2OTk6XHRcdFx0bWVtb3J5X2ZhaWx1cmUoZW50cnkucGZuLCBlbnRyeS5mbGFncyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MDAtXHR9XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzAyLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzAzOnN0YXRpYyBpbnQgX19pbml0IG1lbW9yeV9mYWlsdXJlX2luaXQodm9pZClcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwNC17XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MDU6XHRzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1ICptZl9jcHU7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MDYtXHRpbnQgY3B1O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwOC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcwOTpcdFx0bWZfY3B1ID0gXHUwMDI2cGVyX2NwdShtZW1vcnlfZmFpbHVyZV9jcHUsIGNwdSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTAtXHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZtZl9jcHUtXHUwMDNlbG9jayk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTEtXHRcdElOSVRfS0ZJRk8obWZfY3B1LVx1MDAzZWZpZm8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzEyOlx0XHRJTklUX1dPUksoXHUwMDI2bWZfY3B1LVx1MDAzZXdvcmssIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTMtXHR9XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MTU6XHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcJiMzNDt2bVwmIzM0OywgbWVtb3J5X2ZhaWx1cmVfdGFibGUpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE2LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcxOC19XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MTk6Y29yZV9pbml0Y2FsbChtZW1vcnlfZmFpbHVyZV9pbml0KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyMC1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzMtICogU29mdHdhcmUtdW5wb2lzb24gYSBwYWdlIHRoYXQgaGFzIGJlZW4gcG9pc29uZWQgYnlcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjczNDogKiBtZW1vcnlfZmFpbHVyZSgpIGVhcmxpZXIuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzUtICpcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3NDE9aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3NTctXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3NTg6XHRpZiAoaHdfbWVtb3J5X2ZhaWx1cmUpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc1OS1cdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBkaXNhYmxlZCBhZnRlciBIVyBtZW1vcnkgZmFpbHVyZVxcblwmIzM0Oyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI4NTQ9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODc5LVx0XHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjg4MDpcdFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg4MS1cdFx0ICpcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjItICogQHBmbjogcGZuIHRvIHNvZnQtb2ZmbGluZVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTYzOiAqIEBmbGFnczogZmxhZ3MuIFNhbWUgYXMgbWVtb3J5X2ZhaWx1cmUoKS5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2NC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBtdXNpbmdzOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNZW1vcnkgTWFuYWdlbWVudCBRdWlya3MqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGBtZW1vcnlfZmFpbHVyZWAuIFRoYXQmIzM5O3MgZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIGNsZWFybHkgYSBwdWJsaWMgaW50ZXJmYWNlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFRoZW4gSSBzZWUgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIGRlZmluZWQgYXMgYHN0YXRpY2AgYW5kIGNhbGxlZCBieSBgc29mdF9vZmZsaW5lX3BhZ2VgLiBUaGF0JiMzOTtzIGNsYXNzaWMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBidXQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gaXMgaW50ZXJlc3RpbmcgYW5kIHdvcnRoIGEgY2xvc2VyIGxvb2suIFNvbWV0aGluZyBpcyBtYWtpbmcgYSBtZW1vcnkgcGFnZSBvZmZsaW5lLCBhbmQgSSB3YW50IHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIHRoZXJlLgoKTm93LCB0aGUgYXBwZWFyYW5jZSBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaGFzIG1lIGEgbGl0dGxlIHB1enpsZWQuIElzIHRoYXQgZXhwb3J0ZWQgdG9vPyBJIGRvbiYjMzk7dCByZWNhbGwgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCBpZiB0aGF0JiMzOTtzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb3Igc29tZXRoaW5nIGludGVybmFsLiBUbyBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBUaW1lIHRvIGdvIGRpZyBhcm91bmQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBzb21lIGRlc2lnbiBhc3N1bXB0aW9ucyBJJiMzOTttIG5vdCBmYW1pbGlhciB3aXRoLCBvciBpZiBzb21ldGhpbmcgaW4gdGhlIGludGVyYWN0aW9uIGZlZWxzIGEgbGl0dGxlIG9mZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00NDIwPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQyNy0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyODogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xubW0vaHVnZV9tZW1vcnkuYy00NDI5LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMC0gKlxubW0vaHVnZV9tZW1vcnkuYzo0NDMxOiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxubW0vaHVnZV9tZW1vcnkuYy00NDMyLSAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDM2LSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0NDM3OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdlX21lbW9yeS5jLTQ0Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTExMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIE9yZGVyIFNwbGl0dGluZyBMb2dpYyBhbmQgQ29uZmlndXJhdGlvbiBFeHBvcnQqKgoKQWxyaWdodCwgc28gdGhlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB2YXJpYWJsZS4uLnRoYXQmIzM5O3Mgbm90IGEgY29uc3RhbnQsIGl0JiMzOTtzIGR5bmFtaWMuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGFuZCBhZGp1c3QgbXkgbWVudGFsIG1vZGVsIGFjY29yZGluZ2x5LiBJdCBwcm9iYWJseSBnZXRzIHB1bGxlZCBmcm9tIGEgZGF0YWJhc2UsIG9yIGEgY29uZmlnIGZpbGUsIHNvbWV0aGluZyBsaWtlIHRoYXQuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB3ZSYjMzk7cmUgZXhwb3J0aW5nIHRoZSBgc29mdF9vZmZsaW5lX3BhZ2VgLiBJIGNvdWxkJiMzOTt2ZSBzd29ybiB3ZSB3ZXJlLCBidXQgSSBjYW4mIzM5O3QgZmluZCBpdCBub3cuIElmIGl0ICppcyogYW4gZXhwb3J0ZWQgYXNzZXQgdGhlbiBJJiMzOTtsbCBiZSBhYmxlIHRvIHdvcmsgd2l0aCBpdCBhY2NvcmRpbmdseSwgYnV0IGl0IG5lZWRzIHRvIGJlIGF2YWlsYWJsZS4gTmVlZCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGtlZXAgYW4gZXllIG91dCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gaXMgcmVhZHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvZnRfb2ZmbGluZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTI2ODI9c3RhdGljIHZvaWQgbWVtb3J5X2ZhaWx1cmVfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2OTYtXHRcdGlmIChlbnRyeS5mbGFncyBcdTAwMjYgTUZfU09GVF9PRkZMSU5FKVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjk3Olx0XHRcdHNvZnRfb2ZmbGluZV9wYWdlKGVudHJ5LnBmbiwgZW50cnkuZmxhZ3MpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjk4LVx0XHRlbHNlXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODU0PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2MC0vKipcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk2MTogKiBzb2Z0X29mZmxpbmVfcGFnZSAtIFNvZnQgb2ZmbGluZSBhIHBhZ2UuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjItICogQHBmbjogcGZuIHRvIHNvZnQtb2ZmbGluZVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk4NC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk4NTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjI3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBTeW1ib2xzKioKClJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwcmlvcml0aXplIGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFRob3NlIHNlZW0gbGlrZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgaW52ZXN0aWdhdGlvbi4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgcmVsZXZhbmNlIG9mIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEJvdGggcHJvdmlkZSBleGNlbGxlbnQgaW5zaWdodHMgaW50byBlcnJvciBjb25kaXRpb25zIGFuZCBncmFjZWZ1bCBkZWdyYWRhdGlvbi4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sIG9yIGp1c3QgYSBsb2NhbCBnbG9iYWwuIEl04oCZcyBjcml0aWNhbCB0byBrbm93IGl0cyBzY29wZSBiZWZvcmUgZGV0ZXJtaW5pbmcgaG93IGJlc3QgdG8gdXRpbGl6ZSBhbmQgaW50ZXJwcmV0IGl0cyB2YWx1ZS4gSWYgaXQgaXMgb25seSBsb2NhbCwgdGhlbiBhY2Nlc3MgbWlnaHQgYmUgbGltaXRlZCB0byB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCwgbWVhbmluZyBpdCBtaWdodCBub3QgYmUgcmVsZXZhbnQgZm9yIGV4dGVybmFsIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGUgaW1wbGljYXRpb25zIGFyZSB2ZXJ5IGRpZmZlcmVudCwgYW5kIGl0IGJlY29tZXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEdvdHRhIGRpZyBpbiBhbmQgY2hlY2sgdGhlIHN5bWJvbCB0YWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipOYXZpZ2F0aW5nIEdsb2JhbCBTY29wZSBhbmQgUG90ZW50aWFsIEZ1bmN0aW9ucyoqCgpIbW0sIHRoaXMgdmFyaWFibGUgaXNuJiMzOTt0ICpleHBsaWNpdGx5KiBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIGNsZWFybHkgaGFuZ2luZyBhcm91bmQgaW4gZ2xvYmFsIHNjb3BlLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIG9yIG1hbmlwdWxhdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBmb2xpb19zcGxpdGAgZnVuY3Rpb24sIG9yIG1heWJlIHRoYXQgb3RoZXIgdXRpbGl0eSB0aGF0IGhhbmRsZXMgbGFyZ2UgcGFnZXMsIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIFRob3NlIHNvdW5kIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB3aGVyZSBzb21ldGhpbmcgZ2xvYmFsLCBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWlnaHQgZ2V0IHVzZWQuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zNzk5PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzg0MS1cbm1tL2h1Z2VfbWVtb3J5LmM6Mzg0MjpcdFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jLTM4NDMtXHRcdHNwbGl0X3BhZ2Vfb3duZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTI2PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MDgxLS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0MDgyOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy00MDgzLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxMDEtICovXG5tbS9odWdlX21lbW9yeS5jOjQxMDI6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQxMDMtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mjk4LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0Mjk5OiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXG5tbS9odWdlX21lbW9yeS5jLTQzMDAtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDMxOS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDMyMDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbm1tL2h1Z2VfbWVtb3J5LmMtNDMyMS17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00Mzg3PWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDM5MS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDM5MjpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQzOTMtXHRcdFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDM5Ni0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDM5NzogKiBmb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTQzOTgtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQxOS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDQyMDppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtNDQyMS1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00NDIyLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyMzpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00NDI0LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NzQyPXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4MzQtXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0ODM1Olx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00ODM2LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg1OT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDkxMC1cdFx0XHRcdFx0XHRcdCAgIGluX2ZvbGlvX29mZnNldCk7XG5tbS9odWdlX21lbW9yeS5jOjQ5MTE6XHRcdFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXG5tbS9odWdlX21lbW9yeS5jLTQ5MTItXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgbWVtb3J5X2ZhaWx1cmVgLCBgc29mdF9vZmZsaW5lX3BhZ2VgLCBhbmQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFyZSBkZWZpbml0ZWx5IGtleSBmb2N1cyBhcmVhcyByaWdodCBub3cuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhvc2UuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlc2UgY2FuIG9mdGVuIGJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYW5kIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgaG93ZXZlciwgdGhlIGRlZmF1bHQgZm9yIHN5emthbGxlciBpcyB4ODZfNjQsIHdoaWNoIGdlbmVyYWxseSBzdXBwb3J0cyB0aGVzZSBmZWF0dXJlcy4gU28sIGBNRU1PUllfRkFJTFVSRWAgcmVsaWVzIG9uIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGVwZW5kcyBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gTm8gc3VycHJpc2VzIHRoZXJlLCBidXQgaXQmIzM5O3MgZ29vZCB0byBjb25maXJtLgoKSSYjMzk7bGwgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgdHdvIGV4cGxpY2l0IGNvbmZpZ3M6IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ghCgpBbHJpZ2h0LCB3aGF0IGVsc2UgaXMgYmVpbmcgY2hhbmdlZCBoZXJlPyBBaCwgaGVyZSYjMzk7cyBhbiBpbnRlcmVzdGluZyBvbmU6IHRoZSBwYXRjaCBpcyBhZGRpbmcgYFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7YC4gT2theSwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AuIEkgdmFndWVseSByZWNhbGwgdGhpcyBiZWluZyByZWxhdGVkIHRvIGRlYnVnZ2luZy4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHksIEkgYmVsaWV2ZSBpdCYjMzk7cyBlbmFibGVkIHdoZW4gYENPTkZJR19ERUJVR19WTWAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYC4uLiBhbmQgc2VlIHdoYXQgaXQgaXMgd2FybmluZyBhYm91dCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaD0xOD12b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTc4LX0pXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaDo3OTojZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbylcdCh7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTgwLVx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwmIzM0Oy5kYXRhLi5vbmNlXCYjMzQ7KSBfX3dhcm5lZDtcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNi0jZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmg6MTM3OiNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGNvbmQsIGZvbGlvKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzOC0jZGVmaW5lIFZNX1dBUk5fT05fT05DRV9NTShjb25kLCBtbSkgIEJVSUxEX0JVR19PTl9JTlZBTElEKGNvbmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTkxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCBDb25kaXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGJyZWFrIGRvd24gdGhlIHRhc2suIEhlcmUgd2Ugd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29uZGl0aW9ucyogdW5kZXIgd2hpY2ggYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgZ2V0cyB0cmlnZ2VyZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgc2l0dWF0aW9uIGlzIGNyaXRpY2FsLCBpc24mIzM5O3QgaXQ/IFdlIGNhbiYjMzk7dCBqdXN0IHJlYWN0OyB3ZSBuZWVkIHRvIGhhdmUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBsZWFkcyB1cCB0byB0aGlzIHdhcm5pbmcgYmVpbmcgZW1pdHRlZC4gSXTigJlzIGxpa2UgZGVidWdnaW5nOiB3aXRob3V0IGNvbnRleHQsIHlvdSYjMzk7cmUganVzdCBzdGFiYmluZyBpbiB0aGUgZGFyay4gU28sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIHRoZSBleGFjdCBjaGVjaywgb3IgY2hlY2tzLCB0aGF0IGxlYWQgdG8gdGhhdCBtYWNybyBiZWluZyBpbnZva2VkLiBJcyBpdCByZWxhdGVkIHRvIGZvbGlvIG1hbmFnZW1lbnQsIHBhZ2UgZmxhZ3MsIGxvY2tpbmcsIG9yIHNvbWUgc29ydCBvZiBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3Rpb24sIG9yIG1heWJlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBJdOKAmXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGFuIGltcG9ydGFudCBhcmVhLiBGaW5kaW5nIHRoYXQgY29uZGl0aW9uIGxldHMgbWUgZGV0ZXJtaW5lIGlmIHRoZSB3YXJuaW5nIGlzIGp1c3RpZmllZCwgYSByZWQgaGVycmluZywgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIFdoYXQgYXJlIHRoZSByZWxldmFudCBzdXJyb3VuZGluZyBsaW5lcyBhbmQgZnVuY3Rpb25zPyBJcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyBhYm91dCBgZm9saW9gIHRoYXQgaXMgYmVpbmcgZmxhZ2dlZD8gVGhlIGdvYWwgaGVyZSBpc24mIzM5O3QganVzdCB0byBzZWUgKmlmKiBpdCBmaXJlcywgYnV0IHRvIGZpZ3VyZSBvdXQgKndoeSogaXQgZmlyZXMgYW5kIHdoYXQgdGhvc2UgaW1wbGljYXRpb25zIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpZm5kZWYgTElOVVhfTU1fREVCVUdfSFxuICAgMzpcdCNkZWZpbmUgTElOVVhfTU1fREVCVUdfSCAxXG4gICA0Olx0XG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdHN0cnVjdCBwYWdlO1xuICAgOTpcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcbiAgMTA6XHRzdHJ1Y3QgbW1fc3RydWN0O1xuICAxMTpcdHN0cnVjdCB2bWFfaXRlcmF0b3I7XG4gIDEyOlx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3Q7XG4gIDEzOlx0XG4gIDE0Olx0dm9pZCBkdW1wX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IGNoYXIgKnJlYXNvbik7XG4gIDE1Olx0dm9pZCBkdW1wX3ZtYShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gIDE2Olx0dm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiAgMTc6XHR2b2lkIGR1bXBfdm1nKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcsIGNvbnN0IGNoYXIgKnJlYXNvbik7XG4gIDE4Olx0dm9pZCB2bWFfaXRlcl9kdW1wX3RyZWUoY29uc3Qgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pKTtcbiAgMTk6XHRcbiAgMjA6XHQjaWZkZWYgQ09ORklHX0RFQlVHX1ZNXG4gIDIxOlx0I2RlZmluZSBWTV9CVUdfT04oY29uZCkgQlVHX09OKGNvbmQpXG4gIDIyOlx0I2RlZmluZSBWTV9CVUdfT05fUEFHRShjb25kLCBwYWdlKVx0XHRcdFx0XHRcXFxuICAyMzpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuICAyNDpcdFx0XHRpZiAodW5saWtlbHkoY29uZCkpIHtcdFx0XHRcdFx0XFxcbiAgMjU6XHRcdFx0XHRkdW1wX3BhZ2UocGFnZSwgXCYjMzQ7Vk1fQlVHX09OX1BBR0UoXCYjMzQ7IF9fc3RyaW5naWZ5KGNvbmQpXCYjMzQ7KVwmIzM0Oyk7XFxcbiAgMjY6XHRcdFx0XHRCVUcoKTtcdFx0XHRcdFx0XHRcXFxuICAyNzpcdFx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuICAyODpcdFx0fSB3aGlsZSAoMClcbiAgMjk6XHQjZGVmaW5lIFZNX0JVR19PTl9GT0xJTyhjb25kLCBmb2xpbylcdFx0XHRcdFx0XFxcbiAgMzA6XHRcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzE6XHRcdFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XHRcdFx0XHRcdFxcXG4gIDMyOlx0XHRcdFx0ZHVtcF9wYWdlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIFwmIzM0O1ZNX0JVR19PTl9GT0xJTyhcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICAzMzpcdFx0XHRcdEJVRygpO1x0XHRcdFx0XHRcdFxcXG4gIDM0Olx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gIDM1Olx0XHR9IHdoaWxlICgwKVxuICAzNjpcdCNkZWZpbmUgVk1fQlVHX09OX1ZNQShjb25kLCB2bWEpXHRcdFx0XHRcdFxcXG4gIDM3Olx0XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDM4Olx0XHRcdGlmICh1bmxpa2VseShjb25kKSkge1x0XHRcdFx0XHRcXFxuICAzOTpcdFx0XHRcdGR1bXBfdm1hKHZtYSk7XHRcdFx0XHRcdFxcXG4gIDQwOlx0XHRcdFx0QlVHKCk7XHRcdFx0XHRcdFx0XFxcbiAgNDE6XHRcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiAgNDI6XHRcdH0gd2hpbGUgKDApXG4gIDQzOlx0I2RlZmluZSBWTV9CVUdfT05fTU0oY29uZCwgbW0pXHRcdFx0XHRcdFx0XFxcbiAgNDQ6XHRcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgNDU6XHRcdFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XHRcdFx0XHRcdFxcXG4gIDQ2Olx0XHRcdFx0ZHVtcF9tbShtbSk7XHRcdFx0XHRcdFxcXG4gIDQ3Olx0XHRcdFx0QlVHKCk7XHRcdFx0XHRcdFx0XFxcbiAgNDg6XHRcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiAgNDk6XHRcdH0gd2hpbGUgKDApXG4gIDUwOlx0I2RlZmluZSBWTV9XQVJOX09OX1BBR0UoY29uZCwgcGFnZSlcdFx0KHtcdFx0XHRcXFxuICA1MTpcdFx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcdFx0XHRcdFx0XFxcbiAgNTI6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICA1MzpcdFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm4pKSB7XHRcdFx0XHRcdFxcXG4gIDU0Olx0XHRcdGR1bXBfcGFnZShwYWdlLCBcJiMzNDtWTV9XQVJOX09OX1BBR0UoXCYjMzQ7IF9fc3RyaW5naWZ5KGNvbmQpXCYjMzQ7KVwmIzM0Oyk7XFxcbiAgNTU6XHRcdFx0V0FSTl9PTigxKTtcdFx0XHRcdFx0XHRcXFxuICA1NjpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcXFxuICA1NzpcdFx0dW5saWtlbHkoX19yZXRfd2Fybik7XHRcdFx0XHRcdFx0XFxcbiAgNTg6XHR9KVxuICA1OTpcdCNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX1BBR0UoY29uZCwgcGFnZSlcdCh7XHRcdFx0XFxcbiAgNjA6XHRcdHN0YXRpYyBib29sIF9fc2VjdGlvbihcJiMzNDsuZGF0YS4ub25jZVwmIzM0OykgX193YXJuZWQ7XHRcdFx0XFxcbiAgNjE6XHRcdGludCBfX3JldF93YXJuX29uY2UgPSAhIShjb25kKTtcdFx0XHRcdFx0XFxcbiAgNjI6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICA2MzpcdFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSBcdTAwMjZcdTAwMjYgIV9fd2FybmVkKSkge1x0XHRcdFxcXG4gIDY0Olx0XHRcdGR1bXBfcGFnZShwYWdlLCBcJiMzNDtWTV9XQVJOX09OX09OQ0VfUEFHRShcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICA2NTpcdFx0XHRfX3dhcm5lZCA9IHRydWU7XHRcdFx0XHRcdFxcXG4gIDY2Olx0XHRcdFdBUk5fT04oMSk7XHRcdFx0XHRcdFx0XFxcbiAgNjc6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAgNjg6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSk7XHRcdFx0XHRcdFxcXG4gIDY5Olx0fSlcbiAgNzA6XHQjZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXHRcdCh7XHRcdFx0XFxcbiAgNzE6XHRcdGludCBfX3JldF93YXJuID0gISEoY29uZCk7XHRcdFx0XHRcdFxcXG4gIDcyOlx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgNzM6XHRcdGlmICh1bmxpa2VseShfX3JldF93YXJuKSkge1x0XHRcdFx0XHRcXFxuICA3NDpcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Vk1fV0FSTl9PTl9GT0xJTyhcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICA3NTpcdFx0XHRXQVJOX09OKDEpO1x0XHRcdFx0XHRcdFxcXG4gIDc2Olx0XHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDc3Olx0XHR1bmxpa2VseShfX3JldF93YXJuKTtcdFx0XHRcdFx0XHRcXFxuICA3ODpcdH0pXG4gIDc5Olx0I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8oY29uZCwgZm9saW8pXHQoe1x0XHRcdFxcXG4gIDgwOlx0XHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXCYjMzQ7LmRhdGEuLm9uY2VcJiMzNDspIF9fd2FybmVkO1x0XHRcdFxcXG4gIDgxOlx0XHRpbnQgX19yZXRfd2Fybl9vbmNlID0gISEoY29uZCk7XHRcdFx0XHRcdFxcXG4gIDgyOlx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgODM6XHRcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uY2UgXHUwMDI2XHUwMDI2ICFfX3dhcm5lZCkpIHtcdFx0XHRcXFxuICA4NDpcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDg1Olx0XHRcdF9fd2FybmVkID0gdHJ1ZTtcdFx0XHRcdFx0XFxcbiAgODY6XHRcdFx0V0FSTl9PTigxKTtcdFx0XHRcdFx0XHRcXFxuICA4NzpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcXFxuICA4ODpcdFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbmNlKTtcdFx0XHRcdFx0XFxcbiAgODk6XHR9KVxuICA5MDpcdCNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX01NKGNvbmQsIG1tKVx0XHQoe1x0XHRcdFxcXG4gIDkxOlx0XHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXCYjMzQ7LmRhdGEuLm9uY2VcJiMzNDspIF9fd2FybmVkO1x0XHRcdFxcXG4gIDkyOlx0XHRpbnQgX19yZXRfd2Fybl9vbmNlID0gISEoY29uZCk7XHRcdFx0XHRcdFxcXG4gIDkzOlx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgOTQ6XHRcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uY2UgXHUwMDI2XHUwMDI2ICFfX3dhcm5lZCkpIHtcdFx0XHRcXFxuICA5NTpcdFx0XHRkdW1wX21tKG1tKTtcdFx0XHRcdFx0XHRcXFxuICA5NjpcdFx0XHRfX3dhcm5lZCA9IHRydWU7XHRcdFx0XHRcdFxcXG4gIDk3Olx0XHRcdFdBUk5fT04oMSk7XHRcdFx0XHRcdFx0XFxcbiAgOTg6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAgOTk6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSk7XHRcdFx0XHRcdFxcXG4gMTAwOlx0fSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwOTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuICBJJiMzOTt2ZSBnb3QgYENPTkZJR19ERUJVR19WTWAgaW4gdGhlIG1peCwgYW5kIHRoZSBjb25maWdzIGFyZSBjbGVhcmx5OiBgTUVNT1JZX0ZBSUxVUkVgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgb2YgY291cnNlIGBERUJVR19WTWAuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcga2V5IHN5bWJvbHM6IGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCB0aGVuIHRoYXQgaW50ZXJlc3RpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uLiAgSXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQgKmlzKiBhIGdsb2JhbCBmdW5jdGlvbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFN5emthbGxlciBjb3VsZCBwcm9iYWJseSByZWFjaCBpdCBpZiB0aGVyZSYjMzk7cyBhIGdvb2QgcGF0aCwgYnV0IGhpdHRpbmcgdGhlIGVudHJ5IHBvaW50cyBkaXJlY3RseSBpcyB0aGUgYmV0dGVyIHBhdGggZm9yd2FyZC4gU28sIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAgYXJlIG15IHRvcCB0YXJnZXRzLCBhbmQgc2luY2UgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGlzIGNhbGxlZCBieSB0aG9zZSBmdW5jdGlvbnMgaXQmIzM5O3MgYWxzbyB3b3J0aCBzb21lIGF0dGVudGlvbi4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBzdGF0aWMuIExvb2tzIGxpa2UgaXQmIzM5O3Mgbm90OiBgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylgLCBzbyB3ZSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIEV4Y2VsbGVudC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxldmFudCBjb25maWdzLiBMb29rcyBsaWtlIEkgaGF2ZTogYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19ERUJVR19WTWAuCgpIYW5nIG9uLCBkb2VzIGBDT05GSUdfREVCVUdfVk1gICpyZWFsbHkqIG1hdHRlcj8gVGhlIHBhdGNoIGFkZHMgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AsIGJ1dCB0aGF0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEl0IGFsc28gYWRkcyBsb2NraW5nIGluIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgICh3aGljaCBhcmUgY2FsbGVkIGJ5IGBzb2Z0X29mZmxpbmVfcGFnZWApLiBUaGUgbG9ja2luZyBpdHNlbGYgaXMgYWx3YXlzIHRoZXJlLCBidXQgdGhhdCB3YXJuaW5nIGlzIG9ubHkgYWN0aXZlIHdpdGggYENPTkZJR19ERUJVR19WTWAsIGFuZCBjb3VsZCBjYXRjaCBzb21lIGlzc3Vlcy4gU28geWVhaCwgSSYjMzk7bSBpbmNsdWRpbmcgYERFQlVHX1ZNYCB3aXRoIHRoaXMuIE1ha2VzIHNlbnNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJlY2FwIHRoZSByZWFzb25pbmcuICBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGZpeGluZyBhIGxvY2tpbmcgcHJvYmxlbSB3aXRoaW4gdGhlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIHBhdGh3YXlzIHdoZW4gY2FsbGluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFRoZXJlJiMzOTtzIGFsc28gdGhhdCBhZGRlZCB3YXJuaW5nIHdpdGhpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgd2hpY2ggbWVhbnMgSSBzaG91bGQgcmVhbGx5IGNvbmNlbnRyYXRlIG9uIGZ1enppbmcgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9wYWdlYCB0byByZWFsbHkgaGFtbWVyIG9uIHRoZSBuZXcgbG9ja2luZyBiZWhhdmlvci4KClNvLCB0aGUgcGxhbjoKCkNvbmZpZ3M6Ci0gYE1FTU9SWV9GQUlMVVJFYAotIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKLSBgREVCVUdfVk1gCgpBbmQgdGhlIGZvY3VzIHN5bWJvbHM6Ci0gYG1lbW9yeV9mYWlsdXJlYAotIGBzb2Z0X29mZmxpbmVfcGFnZWAKLSBgbWluX29yZGVyX2Zvcl9zcGxpdGAKCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0uIGBzb2Z0X29mZmxpbmVfcGFnZWAgY2FsbHMgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIHdoaWNoIGRvZXMgaW5kZWVkIGNhbGwgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBTbywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdmlhYmxlIGVudHJ5IHBvaW50LiBTYW1lIGdvZXMgZm9yIGBtZW1vcnlfZmFpbHVyZWAsIGl0IGNhbGxzIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHN1cmUsIGFueSBvdGhlciBlbnRyeSBwb2ludHMuIElzIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBjYWxsZWQgZnJvbSBgZm9saW9fc3BsaXRgPyBOb3BlLCBpdCYjMzk7cyBqdXN0IGRlZmluZWQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBCdXQgd2hlcmUgaXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGNhbGxlZD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQ0MjA9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDI3LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0NDI4OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXG5tbS9odWdlX21lbW9yeS5jLTQ0MjktICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy00NDMwLSAqXG5tbS9odWdlX21lbW9yeS5jOjQ0MzE6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXG5tbS9odWdlX21lbW9yeS5jLTQ0MzItICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0MzYtICovXG5tbS9odWdlX21lbW9yeS5jOjQ0Mzc6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzOC17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg2PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUxNi1cdFx0Zm9saW9fbG9jayhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1MTc6XHRcdG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTE4LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg1ND1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4NzItXHRcdGZvbGlvX2xvY2soZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyODczOlx0XHRuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg3NC1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgaHVnZXRsYl91bnZtYXBfaHN0YXRlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGh1Z2V0bGJfdW52bWFwX2hzdGF0ZWAsIGFuZCBJJiMzOTt2ZSB0cmFjZWQgaXRzIHVzYWdlIHRvIGp1c3Qgb25lIHBsYWNlOiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLCB1c3VhbGx5IHRoZXNlIHNvcnRzIG9mIGZ1bmN0aW9ucyBhcmUgdXNlZCBtb3JlIHdpZGVseS4gTGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSBpdCYjMzk7cyBhY3R1YWxseSAqZGVmaW5lZCouIFJpZ2h0LCBgbW0vaHVnZV9tZW1vcnkuY2AuIFN0aWxsLCB0aGF0IHNpbmdsZSBjYWxsIHNpdGUgZmVlbHMgbGltaXRlZCBmb3Igc29tZXRoaW5nIHRoYXQgc2VlbXMgc28gZnVuZGFtZW50YWwuCgpIYW5nIG9uLi4uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW5jbHVkZSBmaWxlcy4gTWF5YmUgaXQmIzM5O3MgYmVpbmcgdXNlZCB0aHJvdWdoIGFuIGluY2x1ZGUgZmlsZSB0byBwcmV2ZW50IGFuIGluY2x1ZGUgY3ljbGUuLi4gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAuIFRoYXQgd291bGQgYmUgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCBhbnkgaW5kaXJlY3QgdXNhZ2UuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbC4gSXQgd291bGQgYmUgYSBiYWQgbG9vayB0byBtaXNzIGEgc3VidGxlIHVzYWdlIHBhdHRlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDU9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA2OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA3LWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjYyLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjYzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY2NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTM2CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBFcnJvciBIYW5kbGluZyBhbmQgTmV4dCBTdGVwcyoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgaXQuIFRoaXMgbG9naWMgcGF0aCBpcyBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgY29udGV4dHMuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbSBjb25zaWRlcmFibHksIGFuZCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBBbHNvLCBjaGVja2luZyB0aGUgZm9jdXMgc3ltYm9scywgd2hpY2ggc2VlbSB0byBiZSBjb3JyZWN0LCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIHN5c3RlbSBpcyB0YXJnZXRpbmcgdGhlIHJlbGV2YW50IHBhcnRzLgoKR2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLCB0aGUgYXBwcm9wcmlhdGUgY291cnNlIG9mIGFjdGlvbiBpcyBjbGVhci4gSSBuZWVkIHRvIGV4ZWN1dGUgYHNldC1yZXN1bHRzYCBhdCB0aGlzIGp1bmN0dXJlIHRvIGFkZHJlc3MgdGhlIGNvbmRpdGlvbi4gVGhpcyBzaG91bGQgcmVzb2x2ZSB0aGUgc2l0dWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVCVUdfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7LAogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICAgJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBtZW1vcnlfZmFpbHVyZSBhbmQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0LiBJdCBhbHNvIGFkZHMgYSBWTV9XQVJOX09OX09OQ0VfRk9MSU8gaW4gbWluX29yZGVyX2Zvcl9zcGxpdCB0byBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QgYW5kIG5vIHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAgICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gbWVtb3J5X2ZhaWx1cmUgYW5kIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSB3aGVuIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdC4gSXQgYWxzbyBhZGRzIGEgVk1fV0FSTl9PTl9PTkNFX0ZPTElPIGluIG1pbl9vcmRlcl9mb3Jfc3BsaXQgdG8gZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2luZyBpcyBjb3JyZWN0IGFuZCBubyB3YXJuaW5ncyBhcmUgdHJpZ2dlcmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6MzAuNjExNDIzMzE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk5MTQyODY5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERUJVR19WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiLFxuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBtZW1vcnlfZmFpbHVyZSBhbmQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0LiBJdCBhbHNvIGFkZHMgYSBWTV9XQVJOX09OX09OQ0VfRk9MSU8gaW4gbWluX29yZGVyX2Zvcl9zcGxpdCB0byBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QgYW5kIG5vIHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjMwLjYxMTQyOTM3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDc1NzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ5MTJhZWE5ZDllNmQwYzViNjE0ZDJlZmVjOWNmYWM0NTljMGE4MDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAwOToyNDoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDgwNGI4ZjZhYTU1NzAuLjBiODIzZWEzYzc2YzQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQzNiw2ICs0NDM2LDggQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuICAqL1xcbiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuK1xcbiBcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IGRlNGNiNzU4NTBhMTQuLjY5NzIxOGYzMjM3NjkgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtMjUwNiwxMiArMjUwNiwxNyBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4gXFx0XFx0cmVzID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHR9XFxuK1xcbiBcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxuLVxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG4rXFx0XFx0Y29uc3QgaW50IG5ld19vcmRlcjtcXG4gXFx0XFx0aW50IGVycjtcXG4gXFxuK1xcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbitcXHRcXHRuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSBmbGFnIG11c3QgYmUgc2V0IGFmdGVyIHRoZSByZWZjb3VudCBpcyBidW1wZWRcXG4gXFx0XFx0ICogb3RoZXJ3aXNlIGl0IG1heSByYWNlIHdpdGggVEhQIHNwbGl0LlxcbkBAIC0yODYyLDggKzI4NjcsMTEgQEAgc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdH07XFxuIFxcbiBcXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4tXFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbitcXHRcXHRjb25zdCBpbnQgbmV3X29yZGVyO1xcbiBcXG4rXFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuK1xcdFxcdG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbitcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGVcXG4gXFx0XFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6MzIuMDUzMjQxNTc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTg0NzI0NTQ2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERUJVR19WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiLFxuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBtZW1vcnlfZmFpbHVyZSBhbmQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0LiBJdCBhbHNvIGFkZHMgYSBWTV9XQVJOX09OX09OQ0VfRk9MSU8gaW4gbWluX29yZGVyX2Zvcl9zcGxpdCB0byBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QgYW5kIG5vIHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5MTJhZWE5ZDllNmQwYzViNjE0ZDJlZmVjOWNmYWM0NTljMGE4MDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDA5OjI0OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDgwNGI4ZjZhYTU1NzAuLjBiODIzZWEzYzc2YzQgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQzNiw2ICs0NDM2LDggQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gICovXG4gdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuK1xuIFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4gXHRcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBkZTRjYjc1ODUwYTE0Li42OTcyMThmMzIzNzY5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTI1MDYsMTIgKzI1MDYsMTcgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRcdHJlcyA9IC1FT1BOT1RTVVBQO1xuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbitcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbi1cdFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xuK1x0XHRjb25zdCBpbnQgbmV3X29yZGVyO1xuIFx0XHRpbnQgZXJyO1xuIFxuK1x0XHRmb2xpb19sb2NrKGZvbGlvKTtcbitcdFx0bmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4rXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBmbGFnIG11c3QgYmUgc2V0IGFmdGVyIHRoZSByZWZjb3VudCBpcyBidW1wZWRcbiBcdFx0ICogb3RoZXJ3aXNlIGl0IG1heSByYWNlIHdpdGggVEhQIHNwbGl0LlxuQEAgLTI4NjIsOCArMjg2NywxMSBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdH07XG4gXG4gXHRpZiAoIWh1Z2UgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4tXHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbitcdFx0Y29uc3QgaW50IG5ld19vcmRlcjtcbiBcbitcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG4rXHRcdG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xuK1x0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGVcbiBcdFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjMyLjA1MzI0NDM2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTY4MTcyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gRm9saW8gTG9ja2luZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgYWRqdXN0bWVudHMgdG8gaG93IGZvbGlvcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzcGxpdHRpbmcgdGhlbS4gSSBzZWUgYSBuZXcgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgY2hlY2sgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHdpdGhpbiB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCdzIHdhcm5pbmcgaWYgYSBmb2xpbyAqaXNuJ3QqIGxvY2tlZCB3aGVuIHdlJ3JlIHRyeWluZyB0byBzcGxpdCBpdC4gVGhhdCBzdWdnZXN0cyB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgYSBjYXNlIHdoZXJlIHdlIHdlcmUgc3BsaXR0aW5nIGEgZm9saW8gd2l0aG91dCBwcm9wZXIgcHJvdGVjdGlvbiwgYW5kIHRoaXMgaXMgdGhlIGZpeC5cblxuRnVydGhlciBkb3duLCBJJ20gbm90aWNpbmcgbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSAqbm93KiBleHBsaWNpdGx5IGxvY2tpbmcgdGhlIGZvbGlvICpiZWZvcmUqIGNhbGxpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFuZCAqdGhlbiogdW5sb2NraW5nIGl0IGFmdGVyd2FyZHMuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0IC0gd2UncmUgc2hvcmluZyB1cCB0aGUgbG9ja2luZyBhcm91bmQgdGhlIHNwbGl0IG9wZXJhdGlvbi4gVGhpcyBpcyBnb29kOyB3ZSdyZSB0YWxraW5nIGFib3V0IGltcG9ydGFudCBtZW1vcnkgaGFuZGxpbmcgaGVyZSwgc28gbG9ja2luZyBpcyBjcnVjaWFsIGZvciBkYXRhIGludGVncml0eS5cblxuTXkgZXhwZXJ0IG1pbmQgaXMgYXV0b21hdGljYWxseSBtb3ZpbmcgdG93YXJkcyBjaGVja2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXMgZ29pbmcgdG8gYmUgY29tcGlsZWQgaWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2Ug4oCTIHRoYXQgY29uZmlnIG9wdGlvbiBjb250cm9scyB0aGUgd2hvbGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgc3Vic3lzdGVtLiBBbmQgYG1tL2h1Z2VfbWVtb3J5LmNgIGRlcGVuZHMgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gVGhhdCBjb25maXJtcyB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgb25seSBpbXBhY3Qgc3lzdGVtcyB1c2luZyB0cmFuc3BhcmVudCBodWdlcGFnZXMsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBjYXNlLlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gVGhhdCB3aWxsIGp1c3QgZmluYWxpemUgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjaGFuZ2UgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjM4LjMxMDA2Mzk1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODkyNDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnktZmFpbHVyZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSArPSBkbWFwb29sX3Rlc3Qub1xcbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICs9IG1lbW9yeS1mYWlsdXJlLm9cXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgKz0gaHdwb2lzb24taW5qZWN0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6MzguNDA4OTk0NjU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzNTAxMTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGEgTWVtb3J5IEZhaWx1cmUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBzeXN0ZW0ncyBmbGFnZ2luZyBhIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzc3VlLiBSaWdodCwgZ290IGl0LiBMZXQncyBkaWcgaW50byB0aGUga2VybmVsJ3MgaGFuZGxpbmcgb2YgdGhpcywgc3BlY2lmaWNhbGx5IHRoZSBodWdlIHBhZ2UgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSSdsbCBuZWVkIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9odWdlX21lbW9yeS5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBleGlzdCBmb3IgYWRkcmVzc2luZyB0aGVzZSBmYWlsdXJlcy4gRnJvbSB0aGVyZSBJJ2xsIHN0YXJ0IGNoZWNraW5nIHRoZSBjb2RlJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6NDMuNDQ0MDA4NzA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjIwNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6NDMuNTExMjMzNDU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzOTA2NTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipSZWZsZWN0aW5nIG9uIEh1Z2VwYWdlcyBhbmQgTWVtb3J5IEZhaWx1cmUqKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQncyBpdCAtIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgZW5hYmxlZC4gV2UncmUgcm9sbGluZyB3aXRoIFRIUC4gTm93LCBiZWZvcmUgSSBtb3ZlIGFueSBmdXJ0aGVyLCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiBtZW1vcnkgZXJyb3JzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFRIUCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBjb25zaWRlcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLiBZb3Uga25vdyBob3cgaXQgZ29lczsgYmVzdCB0byBwcmUtZW1wdCBhbnkgcG90ZW50aWFsIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzk1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6NDcuMTUwMzAyMzU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzY4MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzYwPWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc2Mi1cXG5tbS9LY29uZmlnOjc2Mzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc2NC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNDo0Ny4yMTM2NzU0OTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE4Mzc4Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTUVNT1JZX0ZBSUxVUkVgOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIERlcGVuZGVuY3kgQW5hbHlzaXMgZm9yIE1FTU9SWV9GQUlMVVJFKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIGBNRU1PUllfRkFJTFVSRWAuIFRoaXMgaXNuJ3QganVzdCBhIHN1cmZhY2UtbGV2ZWwgZGlhZ25vc3RpYzsgSSBuZWVkIHRvIG1hcCBvdXQgKmV2ZXJ5KiBwb3RlbnRpYWwgZGVwZW5kZW5jeS4gSSdtIHRoaW5raW5nIGJleW9uZCB0aGUgb2J2aW91cyBzdGFjayB0cmFjZXMuIEkgd2FudCB0byB1bmNvdmVyIHRoZSBlbnRpcmUgd2ViIG9mIGNvbnRyaWJ1dGluZyBmYWN0b3JzLiBXaGF0IGxpYnJhcmllcyBhcmUgaW52b2x2ZWQ/IFdoYXQncyB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBzdHJhdGVneSBhdCBwbGF5PyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNvbm5lY3Rpb25zLCBsaWtlIHBvb3JseSBtYW5hZ2VkIGNhY2hlcyBvciB1bmJvdW5kZWQgZGF0YSBzdHJ1Y3R1cmVzLCB0aGF0IG1pZ2h0IGV2ZW50dWFsbHkgY2FzY2FkZSBpbnRvIGEgbWVtb3J5IGlzc3VlP1xuXG5JJ20gbWVudGFsbHkgYnVpbGRpbmcgYSBmbG93Y2hhcnQgaGVyZSwgdHJhY2luZyB0aGUgZmxvdyBvZiBtZW1vcnkgdXNhZ2UgZnJvbSB0aGUgYXBwbGljYXRpb24gbGV2ZWwgZG93biB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgaGFyZHdhcmUgbGF5ZXJzLiBUaGlzIGluY2x1ZGVzIGNvbnNpZGVyaW5nIGV4dGVybmFsIGZhY3RvcnMgc3VjaCBhcyBvdGhlciBwcm9jZXNzZXMgb3IgZW52aXJvbm1lbnRhbCBzZXR0aW5ncyB0aGF0IG1heSBhZmZlY3QgcGVyZm9ybWFuY2UuIEknbSBpbWFnaW5pbmcgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBpbnRlcmFjdCBpbiBib3RoIHR5cGljYWwgYW5kIGVkZ2UgY2FzZSBzY2VuYXJpb3MuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgc2luZ2xlIHBvaW50IG9mIGZhaWx1cmVzIHRoYXQgY29udHJpYnV0ZSB0byB0aGlzIE1FTU9SWV9GQUlMVVJFLCBvciBpZiB0aGVyZSBpcyBhIGNvbmZsdWVuY2Ugb2YgZmFjdG9ycy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgZXZlbiBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgY29tcG9uZW50cyBtYXkgcHJlc2VudCBhcyBhIHByb2JsZW0uIExldCdzIGRlbHZlIGluIGFuZCBmaW5kIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNDo1MS4zMzIwNTY3MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuIDc2MTpcXHRcXHRib29sXFxuIDc2MjpcXHRcXG4gNzYzOlxcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbiA3NjQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNzY1OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3NjY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4gNzY3OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuIDc2ODpcXHRcXHRoZWxwXFxuIDc2OTpcXHRcXHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xcbiA3NzA6XFx0XFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xcbiA3NzE6XFx0XFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcXG4gNzcyOlxcdFxcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cXG4gNzczOlxcdFxcbiA3NzQ6XFx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbiA3NzU6XFx0XFx0dHJpc3RhdGUgXFxcIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yXFxcIlxcbiA3NzY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcXHUwMDI2XFx1MDAyNiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbiA3Nzc6XFx0XFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXFxuIDc3ODpcXHRcXG4gNzc5OlxcdGNvbmZpZyBOT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjUxLjMzMjIxMzczNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc5NjAxNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IG1lbW9yeSBmYWlsdXJlcyBhcmUgaGFuZGxlZCBpbiB0aGlzIHN5c3RlbS4gVGhlIHByaW1hcnkgbWVjaGFuaXNtLCBgTUVNT1JZX0ZBSUxVUkVgLCBpdHMgZnVuY3Rpb25hbGl0eSwgaXMgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gd2hldGhlciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIHRoZXNlIGZhaWx1cmVzLCB3aGljaCB3ZSByZXByZXNlbnQgd2l0aCBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcGxhdGZvcm0gSSdtIHdvcmtpbmcgd2l0aCBjYW4gYWN0dWFsbHkgZG8gdGhpcy4gSXQncyBhIGtleSBmaXJzdCBzdGVwLlxuXG5HaXZlbiB0aGF0J3MgaW4gcGxhY2UsIEkgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIG9mIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IFRIUCBpcyBjb25maWd1cmVkIGFuZCBob3cgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGUgb3ZlcmFsbCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIGludGVyYWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGNsYXJpZnkgZm9yIHRoaXMgcGFydGljdWxhciBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6NTYuNTExODE3Nzg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU2MTMyODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjk9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMS1cXG5tbS9LY29uZmlnOjgzMjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzMtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUwPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTUtXFxubW0vS2NvbmZpZzo4NTY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYyLVxcbm1tL0tjb25maWc6ODYzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjQtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODcxLVxcbm1tL0tjb25maWc6ODcyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODczLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4OC1cXG5tbS9LY29uZmlnOjg4OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkwLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTgtXFxubW0vS2NvbmZpZzo4OTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDYtXFxubW0vS2NvbmZpZzo5MDc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwOC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE0LVxcbm1tL0tjb25maWc6OTE1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE2LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzMtXFxubW0vS2NvbmZpZzo5MzQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzNS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQyLVxcbm1tL0tjb25maWc6OTQzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ0LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUwLVxcbm1tL0tjb25maWc6OTUxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTItXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1OC1cXG5tbS9LY29uZmlnOjk1OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2MC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjU2LjYxNzQzOTkwOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzgzNjc1NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6XG5cbioqSW52ZXN0aWdhdGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZGVuY2llcy4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhpbmdzIGJhY2sgdG8gdW5kZXJzdGFuZCB3aGF0IHJlbGllcyBvbiBpdCwgd2hhdCBpdCBlbmFibGVzLCBhbmQgd2hhdCBtaWdodCBicmVhayBpZiBJIHdlcmUgdG8gY2hhbmdlIG9yIGRpc2FibGUgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGl0J3MgYmVpbmcgdXNlZC4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IG5vdCBqdXN0IHRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzLCBidXQgYWxzbyB0aGUgcmlwcGxlIGVmZmVjdHMg4oCTIGFueXRoaW5nIGRvd25zdHJlYW0gdGhhdCBtaWdodCBsZXZlcmFnZSB0aGUgYWR2YW50YWdlcyBvZiB0cmFuc3BhcmVudCBodWdlcGFnZXMsIG9yIHRoYXQgY291bGQgYmUgbmVnYXRpdmVseSBhZmZlY3RlZCBieSBpdHMgYWJzZW5jZSBvciBtb2RpZmljYXRpb25zLiBQZXJoYXBzIEknbGwgbmVlZCB0byBzdGFydCBieSBsb29raW5nIGF0IHN5c3RlbSBjb25maWd1cmF0aW9ucywga2VybmVsIG1vZHVsZXMsIG9yIGFwcGxpY2F0aW9uLWxldmVsIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc3VyZmFjZSBhbmQgZGV0ZXJtaW5lIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgTlVNQSwgYW5kIG90aGVyIHJlbGF0ZWQgc3Vic3lzdGVtcy4gSSdsbCBrZWVwIGFuIG9wZW4gbWluZCwgYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0IHRoZSBkZXBlbmRlbmN5IHRyZWUgaXMgY29tcGxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjAzLjQwMTExNzQ1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzI6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4MzM6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODM0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDgzNTpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4MzY6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4Mzc6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDgzODpcXHRcXHRoZWxwXFxuIDgzOTpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODQwOlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4NDE6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODQyOlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODQzOlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NDQ6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXFxuIDg0NzpcXHRcXG4gODQ4OlxcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg0OTpcXHRcXG4gODUwOlxcdGNob2ljZVxcbiA4NTE6XFx0XFx0cHJvbXB0IFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNTowMy40MDEyNDk4MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MTc3MjQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqUmVmbGVjdGluZyBvbiBSZWNlbnQgS2VybmVsIE1vZGlmaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdHdvIGtleSBjb25jZXB0czogYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBob3cgdGhlc2UgaW50ZXJhY3QsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlaXIgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIG1haW4gdGhpbmcgaGVyZSBpcyB0aGUga2VybmVsIGNvZGUgSSd2ZSBiZWVuIGxvb2tpbmcgYXQgaGFzIGJlZW4gbW9kaWZpZWQuXG5cblNvLCBJIG5lZWQgdG8gZm9jdXMgb24gd2hhdCBjaGFuZ2VkIGFuZCAqd2hlcmUqLiBJdCBsb29rcyBsaWtlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNlZW4gY2hhbmdlcyBhcmUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBgbWVtb3J5X2ZhaWx1cmVgLCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQncyBhIHJlYXNvbmFibGUgc2V0IG9mIGFkanVzdG1lbnRzLCBnaXZlbiB0aGUgY29udGV4dC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZpbGVzIHRoZW1zZWx2ZXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBsaXZlcyB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlIGFyZSBkZWFsaW5nIHdpdGggaHVnZXBhZ2VzLiBUaGUgb3RoZXIgdHdvLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgYXJlIGJvdGggbmVzdGxlZCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoaXMgc3VnZ2VzdHMgYSBzdHJvbmcgY29ubmVjdGlvbiBiZXR3ZWVuIGhhbmRsaW5nIG1lbW9yeSBmYWlsdXJlcyBhbmQgZGVhbGluZyB3aXRoIHBhZ2VzIGluIHVzZS4gSSB3aWxsIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGlzIGZpbGUgZm9yIGEgY29tcHJlaGVuc2l2ZSBncmFzcCBvZiB0aGVzZSBtb2RpZmljYXRpb25zIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVtLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhlc2UgZnVuY3Rpb25zLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgYXJlIGdvb2QgZm9jYWwgcG9pbnRzIGZvciBpbi1kZXB0aCBhbmFseXNpcy4gVGhlaXIgbG9jYXRpb24gYW5kIHRoZSB0eXBlIG9mIGNoYW5nZXMgbWFkZSBzdWdnZXN0IHRoZXkgd291bGQgYmUgaWRlYWwgc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MDguMjgzMDI1Mzc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYyNjU2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jLTcxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6NzI6c3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbCBfX3JlYWRfbW9zdGx5O1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzMtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo3NDpzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBfX3JlYWRfbW9zdGx5ID0gMTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc1LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz04MD1hdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTgxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6ODI6c3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTgzLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMDQ9c3RhdGljIHNzaXplX3QgX25hbWUjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwNy17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTA4OlxcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9zdGF0cyAqbWZfc3RhdHMgPVxcdFxcdFxcdFxcXFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOS1cXHRcXHRcXHUwMDI2Tk9ERV9EQVRBKGRldi1cXHUwMDNlaWQpLVxcdTAwM2VtZl9zdGF0cztcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTExOD1NRl9BVFRSX1JPKHJlY292ZXJlZCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMjA6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9mYWlsdXJlX2F0dHJbXSA9IHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyMS1cXHRcXHUwMDI2ZGV2X2F0dHJfdG90YWwuYXR0cixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI4LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI5OmNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cCA9IHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMDpcXHQubmFtZSA9IFxcXCJtZW1vcnlfZmFpbHVyZVxcXCIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzE6XFx0LmF0dHJzID0gbWVtb3J5X2ZhaWx1cmVfYXR0cixcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMi19O1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzUtXFx0e1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM2OlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm1lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGxcXFwiLFxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM3OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2c3lzY3RsX21lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGwsXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzg6XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsKSxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzOS1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQ0LVxcdHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0NTpcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJtZW1vcnlfZmFpbHVyZV9yZWNvdmVyeVxcXCIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDY6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnksXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDc6XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSksXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDgtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2Mi1cXHR7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjM6XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcXCIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjQtXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9NTAwPXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfZWFybHlfa2lsbF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTUwOC1cXHRcXHR9IGVsc2Uge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6NTA5OlxcdFxcdFxcdGlmIChzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbClcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTUxMC1cXHRcXHRcXHRcXHRyZXR1cm4gdDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9ODAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaHdwb2lzb25fd2Fsa19vcHMgPSB7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTgxMi0gKiBoYXJkd2FyZSBwb2lzb25lZCBwYWdlcy4gVGhleSBjb3VsZCBoYXBwZW4sIGZvciBleGFtcGxlLCB3aGVuXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo4MTM6ICogbWVtb3J5X2ZhaWx1cmUoKSBmYWlsZWQgdG8gdW5tYXAgdGhlIGVycm9yIHBhZ2UgYXQgdGhlIGZpcnN0IGNhbGwsIG9yXFxubW0vbWVtb3J5LWZhaWx1cmUuYy04MTQtICogd2hlbiBtdWx0aXBsZSBsb2NhbCBtYWNoaW5lIGNoZWNrcyBoYXBwZW5lZCBvbiBkaWZmZXJlbnQgQ1BVcy5cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTIzNT1zdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyMzgtXFx0aW50IG5pZCA9IE1BWF9OVU1OT0RFUztcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyMzk6XFx0c3RydWN0IG1lbW9yeV9mYWlsdXJlX3N0YXRzICptZl9zdGF0cyA9IE5VTEw7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjQwLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMjgxPXN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyODMte1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI4NDpcXHR0cmFjZV9tZW1vcnlfZmFpbHVyZV9ldmVudChwZm4sIHR5cGUsIHJlc3VsdCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjg1LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM2OS1cXHQgKiAoZnJvemVuIHNsYWIgYW5kIGxhcmdlLWttYWxsb2MgcGFnZXMgY2Fubm90IGJlIHBpbm5lZCksIGJ1dCBpc1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM3MDpcXHQgKiBoYXJtbGVzczogd2hlcmUgYSB3cm9uZyB2ZXJkaWN0IGNvdWxkIHBhbmljLCBtZW1vcnlfZmFpbHVyZSgpIGhhc1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM3MS1cXHQgKiBhbHJlYWR5IHNldCBQYWdlSFdQb2lzb24sIHdoaWNoIGJhcnMgdGhlIHBhZ2UgZnJvbSB0aGUgYWxsb2NhdG9yLlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDEzPXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA4MC0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwODE6c3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA4Mi17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTMtI2Vsc2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNTQ6c3RhdGljIGlubGluZSBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTUte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTY2PXN0YXRpYyB2b2lkIHB1dF9yZWZfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTczLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE3NDpzdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTc1LVxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxODYtXFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTg3OlxcdGlmIChwZ21hcF9oYXNfbWVtb3J5X2ZhaWx1cmUocGdtYXApKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTg4OlxcdFxcdHJjID0gcGdtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWVtb3J5X2ZhaWx1cmUocGdtYXAsIHBmbiwgMSwgZmxhZ3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE4OS1cXHRcXHQvKlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjgzPXN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzEwLS8qKlxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjMxMTogKiBtZW1vcnlfZmFpbHVyZV9wZm4gLSBIYW5kbGUgbWVtb3J5IGZhaWx1cmUgb24gYSBwYWdlIG5vdCBiYWNrZWQgYnlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzMTItICogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2UuXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzMTktICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzIwOnN0YXRpYyBpbnQgbWVtb3J5X2ZhaWx1cmVfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzIxLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2MS0vKipcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzNjI6ICogbWVtb3J5X2ZhaWx1cmUgLSBIYW5kbGUgbWVtb3J5IGZhaWx1cmUgb2YgYSBwYWdlLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2My0gKiBAcGZuOiBQYWdlIE51bWJlciBvZiB0aGUgY29ycnVwdGVkIHBhZ2VcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM4NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzODY6aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzg3LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM5NC1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzOTU6XFx0aWYgKCFzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzk2LVxcdFxcdHBhbmljKFxcXCJNZW1vcnkgZmFpbHVyZSBvbiBwYWdlICVseFxcXCIsIHBmbik7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDAtXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNRl9TV19TSU1VTEFURUQpKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwMTpcXHRcXHRod19tZW1vcnlfZmFpbHVyZSA9IHRydWU7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDAyLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDA0LVxcdGlmICghcCkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwNTpcXHRcXHRyZXMgPSBhcmNoX21lbW9yeV9mYWlsdXJlKHBmbiwgZmxhZ3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQwNi1cXHRcXHRpZiAocmVzID09IDApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MTItXFx0XFx0XFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDEzOlxcdFxcdFxcdHJlcyA9IG1lbW9yeV9mYWlsdXJlX3BmbihwZm4sIGZsYWdzKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MTQtXFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MjAtXFx0XFx0XFx0aWYgKHBnbWFwKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDIxOlxcdFxcdFxcdFxcdHJlcyA9IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHBmbiwgZmxhZ3MsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDIyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBwZ21hcCk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MzEtdHJ5X2FnYWluOlxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQzMjpcXHRyZXMgPSB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYihwZm4sIGZsYWdzKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MzMtXFx0LypcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyMy19XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjI0OkVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9mYWlsdXJlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjUtXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjgtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjI5OnN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjMwLVxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjMzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYzNDpzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1IHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MzU6XFx0REVDTEFSRV9LRklGTyhmaWZvLCBzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfZW50cnksXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjM2LVxcdFxcdCAgICAgIE1FTU9SWV9GQUlMVVJFX0ZJRk9fU0laRSk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDAtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjQxOnN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1LCBtZW1vcnlfZmFpbHVyZV9jcHUpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY0Mi1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDMtLyoqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjQ0OiAqIG1lbW9yeV9mYWlsdXJlX3F1ZXVlIC0gU2NoZWR1bGUgaGFuZGxpbmcgbWVtb3J5IGZhaWx1cmUgb2YgYSBwYWdlLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY0NS0gKiBAcGZuOiBQYWdlIE51bWJlciBvZiB0aGUgY29ycnVwdGVkIHBhZ2VcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY1OC0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NTk6dm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2MC17XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjYxOlxcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUgKm1mX2NwdTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjItXFx0dW5zaWduZWQgbG9uZyBwcm9jX2ZsYWdzO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2My1cXHRib29sIGJ1ZmZlcl9vdmVyZmxvdztcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NjQ6XFx0c3RydWN0IG1lbW9yeV9mYWlsdXJlX2VudHJ5IGVudHJ5ID0ge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2NS1cXHRcXHQucGZuID1cXHRcXHRwZm4sXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjgtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjY5OlxcdG1mX2NwdSA9IFxcdTAwMjZnZXRfY3B1X3ZhcihtZW1vcnlfZmFpbHVyZV9jcHUpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY3MC1cXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1mX2NwdS1cXHUwMDNlbG9jaywgcHJvY19mbGFncyk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NzQtXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1mX2NwdS1cXHUwMDNlbG9jaywgcHJvY19mbGFncyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjc1OlxcdHB1dF9jcHVfdmFyKG1lbW9yeV9mYWlsdXJlX2NwdSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjc2LVxcdGlmIChidWZmZXJfb3ZlcmZsb3cpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NzktfVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4MDpFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfZmFpbHVyZV9xdWV1ZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjgxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4MjpzdGF0aWMgdm9pZCBtZW1vcnlfZmFpbHVyZV93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY4My17XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjg0OlxcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUgKm1mX2NwdTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2ODU6XFx0c3RydWN0IG1lbW9yeV9mYWlsdXJlX2VudHJ5IGVudHJ5ID0geyAwLCB9O1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY4Ni1cXHR1bnNpZ25lZCBsb25nIHByb2NfZmxhZ3M7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2ODgtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjg5OlxcdG1mX2NwdSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1LCB3b3JrKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2OTAtXFx0Zm9yICg7Oykge1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjk4LVxcdFxcdGVsc2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2OTk6XFx0XFx0XFx0bWVtb3J5X2ZhaWx1cmUoZW50cnkucGZuLCBlbnRyeS5mbGFncyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzAwLVxcdH1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwMi1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MDM6c3RhdGljIGludCBfX2luaXQgbWVtb3J5X2ZhaWx1cmVfaW5pdCh2b2lkKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwNC17XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzA1OlxcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUgKm1mX2NwdTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MDYtXFx0aW50IGNwdTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwOC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzA5OlxcdFxcdG1mX2NwdSA9IFxcdTAwMjZwZXJfY3B1KG1lbW9yeV9mYWlsdXJlX2NwdSwgY3B1KTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTAtXFx0XFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZtZl9jcHUtXFx1MDAzZWxvY2spO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcxMS1cXHRcXHRJTklUX0tGSUZPKG1mX2NwdS1cXHUwMDNlZmlmbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzEyOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bWZfY3B1LVxcdTAwM2V3b3JrLCBtZW1vcnlfZmFpbHVyZV93b3JrX2Z1bmMpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcxMy1cXHR9XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE0LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcxNTpcXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcXFwidm1cXFwiLCBtZW1vcnlfZmFpbHVyZV90YWJsZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE2LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE4LX1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MTk6Y29yZV9pbml0Y2FsbChtZW1vcnlfZmFpbHVyZV9pbml0KTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MjAtXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzMtICogU29mdHdhcmUtdW5wb2lzb24gYSBwYWdlIHRoYXQgaGFzIGJlZW4gcG9pc29uZWQgYnlcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MzQ6ICogbWVtb3J5X2ZhaWx1cmUoKSBlYXJsaWVyLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjczNS0gKlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzQxPWludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3NTctXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzU4OlxcdGlmIChod19tZW1vcnlfZmFpbHVyZSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc1OS1cXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBkaXNhYmxlZCBhZnRlciBIVyBtZW1vcnkgZmFpbHVyZVxcXFxuXFxcIixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg1ND1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg3OS1cXHRcXHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4ODA6XFx0XFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODEtXFx0XFx0ICpcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2Mi0gKiBAcGZuOiBwZm4gdG8gc29mdC1vZmZsaW5lXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTYzOiAqIEBmbGFnczogZmxhZ3MuIFNhbWUgYXMgbWVtb3J5X2ZhaWx1cmUoKS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjQtICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MDguNDA5Mjk1MTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzUzMjc5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgbXVzaW5nczpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNZW1vcnkgTWFuYWdlbWVudCBRdWlya3MqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgbWVtb3J5X2ZhaWx1cmVgLiBUaGF0J3MgZXhwb3J0ZWQsIHNvIGl0J3MgY2xlYXJseSBhIHB1YmxpYyBpbnRlcmZhY2UsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gVGhlbiBJIHNlZSBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgZGVmaW5lZCBhcyBgc3RhdGljYCBhbmQgY2FsbGVkIGJ5IGBzb2Z0X29mZmxpbmVfcGFnZWAuIFRoYXQncyBjbGFzc2ljIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYnV0IHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhvc2UgdHdvIGlzIGludGVyZXN0aW5nIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLiBTb21ldGhpbmcgaXMgbWFraW5nIGEgbWVtb3J5IHBhZ2Ugb2ZmbGluZSwgYW5kIEkgd2FudCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS5cblxuTm93LCB0aGUgYXBwZWFyYW5jZSBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaGFzIG1lIGEgbGl0dGxlIHB1enpsZWQuIElzIHRoYXQgZXhwb3J0ZWQgdG9vPyBJIGRvbid0IHJlY2FsbCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkIGlmIHRoYXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIG9yIHNvbWV0aGluZyBpbnRlcm5hbC4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBpdCdzIHVzZWQgYW5kIHdoZXJlIGl0J3MgZGVmaW5lZC4gVGltZSB0byBnbyBkaWcgYXJvdW5kIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgaWYgdGhpcyByZXZlYWxzIHNvbWUgZGVzaWduIGFzc3VtcHRpb25zIEknbSBub3QgZmFtaWxpYXIgd2l0aCwgb3IgaWYgc29tZXRoaW5nIGluIHRoZSBpbnRlcmFjdGlvbiBmZWVscyBhIGxpdHRsZSBvZmYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MTMuODQ0NjI2MDc5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTkzNTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00NDIwPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDI3LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyODogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDQyOS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00NDMwLSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0NDMxOiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMi0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDM2LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQzNzp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjEzLjkxMDU3MDQ1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA5NjE0NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBPcmRlciBTcGxpdHRpbmcgTG9naWMgYW5kIENvbmZpZ3VyYXRpb24gRXhwb3J0KipcblxuQWxyaWdodCwgc28gdGhlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB2YXJpYWJsZS4uLnRoYXQncyBub3QgYSBjb25zdGFudCwgaXQncyBkeW5hbWljLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBhbmQgYWRqdXN0IG15IG1lbnRhbCBtb2RlbCBhY2NvcmRpbmdseS4gSXQgcHJvYmFibHkgZ2V0cyBwdWxsZWQgZnJvbSBhIGRhdGFiYXNlLCBvciBhIGNvbmZpZyBmaWxlLCBzb21ldGhpbmcgbGlrZSB0aGF0LlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB3ZSdyZSBleHBvcnRpbmcgdGhlIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEkgY291bGQndmUgc3dvcm4gd2Ugd2VyZSwgYnV0IEkgY2FuJ3QgZmluZCBpdCBub3cuIElmIGl0ICppcyogYW4gZXhwb3J0ZWQgYXNzZXQgdGhlbiBJJ2xsIGJlIGFibGUgdG8gd29yayB3aXRoIGl0IGFjY29yZGluZ2x5LCBidXQgaXQgbmVlZHMgdG8gYmUgYXZhaWxhYmxlLiBOZWVkIHRvIGNvbmZpcm0gdGhhdC4gR290dGEga2VlcCBhbiBleWUgb3V0IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBpcyByZWFkeSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNToxNy45MjAxODc0MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzk2NzM1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdF9vZmZsaW5lX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTI2ODI9c3RhdGljIHZvaWQgbWVtb3J5X2ZhaWx1cmVfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY5Ni1cXHRcXHRpZiAoZW50cnkuZmxhZ3MgXFx1MDAyNiBNRl9TT0ZUX09GRkxJTkUpXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjk3OlxcdFxcdFxcdHNvZnRfb2ZmbGluZV9wYWdlKGVudHJ5LnBmbiwgZW50cnkuZmxhZ3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY5OC1cXHRcXHRlbHNlXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI4NTQ9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjAtLyoqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTYxOiAqIHNvZnRfb2ZmbGluZV9wYWdlIC0gU29mdCBvZmZsaW5lIGEgcGFnZS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjItICogQHBmbjogcGZuIHRvIHNvZnQtb2ZmbGluZVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTg0LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk4NTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5ODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNToxOS4yOTk4NjgwNThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMzODYwOTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBTeW1ib2xzKipcblxuUmlnaHQsIHNvIEknbSBob25pbmcgaW4gb24gc3BlY2lmaWMgc3ltYm9scyB3aXRoaW4gdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcHJpb3JpdGl6ZSBgbWVtb3J5X2ZhaWx1cmVgLCBgc29mdF9vZmZsaW5lX3BhZ2VgLCBhbmQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBUaG9zZSBzZWVtIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGludmVzdGlnYXRpb24uIFRoaW5raW5nIHRoaXMgdGhyb3VnaCwgSSdtIGNvbmZpZGVudCBpbiB0aGUgcmVsZXZhbmNlIG9mIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEJvdGggcHJvdmlkZSBleGNlbGxlbnQgaW5zaWdodHMgaW50byBlcnJvciBjb25kaXRpb25zIGFuZCBncmFjZWZ1bCBkZWdyYWRhdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBhbiBleHBvcnRlZCBzeW1ib2wgb3IganVzdCBhIGxvY2FsIGdsb2JhbC4gSXTigJlzIGNyaXRpY2FsIHRvIGtub3cgaXRzIHNjb3BlIGJlZm9yZSBkZXRlcm1pbmluZyBob3cgYmVzdCB0byB1dGlsaXplIGFuZCBpbnRlcnByZXQgaXRzIHZhbHVlLiBJZiBpdCBpcyBvbmx5IGxvY2FsLCB0aGVuIGFjY2VzcyBtaWdodCBiZSBsaW1pdGVkIHRvIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCBtZWFuaW5nIGl0IG1pZ2h0IG5vdCBiZSByZWxldmFudCBmb3IgZXh0ZXJuYWwgYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy4gSWYgaXQncyBleHBvcnRlZCwgdGhlIGltcGxpY2F0aW9ucyBhcmUgdmVyeSBkaWZmZXJlbnQsIGFuZCBpdCBiZWNvbWVzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBHb3R0YSBkaWcgaW4gYW5kIGNoZWNrIHRoZSBzeW1ib2wgdGFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjI4LjYzODQ4MDM3OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NDMwMTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MjguNzMzMDM0MTYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDM0NzkzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipOYXZpZ2F0aW5nIEdsb2JhbCBTY29wZSBhbmQgUG90ZW50aWFsIEZ1bmN0aW9ucyoqXG5cbkhtbSwgdGhpcyB2YXJpYWJsZSBpc24ndCAqZXhwbGljaXRseSogZXhwb3J0ZWQsIGJ1dCBpdCdzIGNsZWFybHkgaGFuZ2luZyBhcm91bmQgaW4gZ2xvYmFsIHNjb3BlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBvciBtYW5pcHVsYXRlZC4gTGV0J3Mgc2VlLi4uIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBmb2xpb19zcGxpdGAgZnVuY3Rpb24sIG9yIG1heWJlIHRoYXQgb3RoZXIgdXRpbGl0eSB0aGF0IGhhbmRsZXMgbGFyZ2UgcGFnZXMsIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIFRob3NlIHNvdW5kIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB3aGVyZSBzb21ldGhpbmcgZ2xvYmFsLCBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWlnaHQgZ2V0IHVzZWQuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTcyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MzMuNzc2NTE2MDQyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzYzODY1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9Mzc5OT1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0MS1cXG5tbS9odWdlX21lbW9yeS5jOjM4NDI6XFx0XFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zODQzLVxcdFxcdHNwbGl0X3BhZ2Vfb3duZXIoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzkyNj1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDgxLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDA4MjogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTQwODMtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MTAxLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDEwMjpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTQxMDMtXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI5OC0vKipcXG5tbS9odWdlX21lbW9yeS5jOjQyOTk6ICogZm9saW9fc3BsaXRfdW5tYXBwZWQoKSAtIHNwbGl0IGEgbGFyZ2UgYW5vbiBmb2xpbyB0aGF0IGlzIGFscmVhZHkgdW5tYXBwZWRcXG5tbS9odWdlX21lbW9yeS5jLTQzMDAtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MzE5LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDMyMDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG5tbS9odWdlX21lbW9yeS5jLTQzMjEte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00Mzg3PWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MzkxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDM5MjpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00MzkzLVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM5Ni0vKipcXG5tbS9odWdlX21lbW9yeS5jOjQzOTc6ICogZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDM5OC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0MTktICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDIwOmludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQyMS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubW0vaHVnZV9tZW1vcnkuYy00NDIyLXtcXG5tbS9odWdlX21lbW9yeS5jOjQ0MjM6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQ0MjQtXFx0XFx0XFx0ICAgICBTUExJVF9UWVBFX05PTl9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc0Mj1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4MzQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcXG5tbS9odWdlX21lbW9yeS5jOjQ4MzU6XFx0XFx0XFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXFxubW0vaHVnZV9tZW1vcnkuYy00ODM2LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ4NTk9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDkxMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbl9mb2xpb19vZmZzZXQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDkxMTpcXHRcXHRcXHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ5MTItXFx0XFx0XFx0XFx0c3BsaXQrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MzMuODYwMTYwMjY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMTkzMTg2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCBgbWluX29yZGVyX2Zvcl9zcGxpdGAgYXJlIGRlZmluaXRlbHkga2V5IGZvY3VzIGFyZWFzIHJpZ2h0IG5vdy4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRob3NlLlxuXG5Ob3csIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlndXJhdGlvbnMuIEkga25vdyB0aGVzZSBjYW4gb2Z0ZW4gYmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBhbmQgdGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGhvd2V2ZXIsIHRoZSBkZWZhdWx0IGZvciBzeXprYWxsZXIgaXMgeDg2XzY0LCB3aGljaCBnZW5lcmFsbHkgc3VwcG9ydHMgdGhlc2UgZmVhdHVyZXMuIFNvLCBgTUVNT1JZX0ZBSUxVUkVgIHJlbGllcyBvbiBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0J3MgZ29vZCB0byBjb25maXJtLlxuXG5JJ2xsIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIHR3byBleHBsaWNpdCBjb25maWdzOiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIVxuXG5BbHJpZ2h0LCB3aGF0IGVsc2UgaXMgYmVpbmcgY2hhbmdlZCBoZXJlPyBBaCwgaGVyZSdzIGFuIGludGVyZXN0aW5nIG9uZTogdGhlIHBhdGNoIGlzIGFkZGluZyBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtgLiBPa2F5LCBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYC4gSSB2YWd1ZWx5IHJlY2FsbCB0aGlzIGJlaW5nIHJlbGF0ZWQgdG8gZGVidWdnaW5nLiBMZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LCBJIGJlbGlldmUgaXQncyBlbmFibGVkIHdoZW4gYENPTkZJR19ERUJVR19WTWAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYC4uLiBhbmQgc2VlIHdoYXQgaXQgaXMgd2FybmluZyBhYm91dCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjQxLjA3OTQ5MjI3NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3OTQ4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbWRlYnVnLmg9MTg9dm9pZCB2bWFfaXRlcl9kdW1wX3RyZWUoY29uc3Qgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTc4LX0pXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmg6Nzk6I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8oY29uZCwgZm9saW8pXFx0KHtcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtODAtXFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFxcXCIuZGF0YS4ub25jZVxcXCIpIF9fd2FybmVkO1xcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNi0jZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjEzNzojZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbykgIEJVSUxEX0JVR19PTl9JTlZBTElEKGNvbmQpXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtMTM4LSNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX01NKGNvbmQsIG1tKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6NDEuMzA3NDQ1NzU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NDMyMjAzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgQ29uZGl0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGJyZWFrIGRvd24gdGhlIHRhc2suIEhlcmUgd2Ugd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29uZGl0aW9ucyogdW5kZXIgd2hpY2ggYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgZ2V0cyB0cmlnZ2VyZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgc2l0dWF0aW9uIGlzIGNyaXRpY2FsLCBpc24ndCBpdD8gV2UgY2FuJ3QganVzdCByZWFjdDsgd2UgbmVlZCB0byBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgbGVhZHMgdXAgdG8gdGhpcyB3YXJuaW5nIGJlaW5nIGVtaXR0ZWQuIEl04oCZcyBsaWtlIGRlYnVnZ2luZzogd2l0aG91dCBjb250ZXh0LCB5b3UncmUganVzdCBzdGFiYmluZyBpbiB0aGUgZGFyay4gU28sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIHRoZSBleGFjdCBjaGVjaywgb3IgY2hlY2tzLCB0aGF0IGxlYWQgdG8gdGhhdCBtYWNybyBiZWluZyBpbnZva2VkLiBJcyBpdCByZWxhdGVkIHRvIGZvbGlvIG1hbmFnZW1lbnQsIHBhZ2UgZmxhZ3MsIGxvY2tpbmcsIG9yIHNvbWUgc29ydCBvZiBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3Rpb24sIG9yIG1heWJlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBJdOKAmXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGFuIGltcG9ydGFudCBhcmVhLiBGaW5kaW5nIHRoYXQgY29uZGl0aW9uIGxldHMgbWUgZGV0ZXJtaW5lIGlmIHRoZSB3YXJuaW5nIGlzIGp1c3RpZmllZCwgYSByZWQgaGVycmluZywgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIFdoYXQgYXJlIHRoZSByZWxldmFudCBzdXJyb3VuZGluZyBsaW5lcyBhbmQgZnVuY3Rpb25zPyBJcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyBhYm91dCBgZm9saW9gIHRoYXQgaXMgYmVpbmcgZmxhZ2dlZD8gVGhlIGdvYWwgaGVyZSBpc24ndCBqdXN0IHRvIHNlZSAqaWYqIGl0IGZpcmVzLCBidXQgdG8gZmlndXJlIG91dCAqd2h5KiBpdCBmaXJlcyBhbmQgd2hhdCB0aG9zZSBpbXBsaWNhdGlvbnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjUxLjE1MDY2ODg5M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tbWRlYnVnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgTElOVVhfTU1fREVCVUdfSFxcbiAgIDM6XFx0I2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDFcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgcGFnZTtcXG4gICA5OlxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcXG4gIDEwOlxcdHN0cnVjdCBtbV9zdHJ1Y3Q7XFxuICAxMTpcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yO1xcbiAgMTI6XFx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3Q7XFxuICAxMzpcXHRcXG4gIDE0OlxcdHZvaWQgZHVtcF9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbiAgMTU6XFx0dm9pZCBkdW1wX3ZtYShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuICAxNjpcXHR2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbiAgMTc6XFx0dm9pZCBkdW1wX3ZtZyhjb25zdCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbiAgMTg6XFx0dm9pZCB2bWFfaXRlcl9kdW1wX3RyZWUoY29uc3Qgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pKTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0I2lmZGVmIENPTkZJR19ERUJVR19WTVxcbiAgMjE6XFx0I2RlZmluZSBWTV9CVUdfT04oY29uZCkgQlVHX09OKGNvbmQpXFxuICAyMjpcXHQjZGVmaW5lIFZNX0JVR19PTl9QQUdFKGNvbmQsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjM6XFx0XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI0OlxcdFxcdFxcdGlmICh1bmxpa2VseShjb25kKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI1OlxcdFxcdFxcdFxcdGR1bXBfcGFnZShwYWdlLCBcXFwiVk1fQlVHX09OX1BBR0UoXFxcIiBfX3N0cmluZ2lmeShjb25kKVxcXCIpXFxcIik7XFxcXFxcbiAgMjY6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjc6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI4OlxcdFxcdH0gd2hpbGUgKDApXFxuICAyOTpcXHQjZGVmaW5lIFZNX0JVR19PTl9GT0xJTyhjb25kLCBmb2xpbylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMDpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzI6XFx0XFx0XFx0XFx0ZHVtcF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgXFxcIlZNX0JVR19PTl9GT0xJTyhcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICAzMzpcXHRcXHRcXHRcXHRCVUcoKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzNDpcXHRcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzU6XFx0XFx0fSB3aGlsZSAoMClcXG4gIDM2OlxcdCNkZWZpbmUgVk1fQlVHX09OX1ZNQShjb25kLCB2bWEpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzc6XFx0XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM4OlxcdFxcdFxcdGlmICh1bmxpa2VseShjb25kKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM5OlxcdFxcdFxcdFxcdGR1bXBfdm1hKHZtYSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDA6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDE6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDQyOlxcdFxcdH0gd2hpbGUgKDApXFxuICA0MzpcXHQjZGVmaW5lIFZNX0JVR19PTl9NTShjb25kLCBtbSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA0NDpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDY6XFx0XFx0XFx0XFx0ZHVtcF9tbShtbSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDc6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDg6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDQ5OlxcdFxcdH0gd2hpbGUgKDApXFxuICA1MDpcXHQjZGVmaW5lIFZNX1dBUk5fT05fUEFHRShjb25kLCBwYWdlKVxcdFxcdCh7XFx0XFx0XFx0XFxcXFxcbiAgNTE6XFx0XFx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1MzpcXHRcXHRpZiAodW5saWtlbHkoX19yZXRfd2FybikpIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1NDpcXHRcXHRcXHRkdW1wX3BhZ2UocGFnZSwgXFxcIlZNX1dBUk5fT05fUEFHRShcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICA1NTpcXHRcXHRcXHRXQVJOX09OKDEpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDU2OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1NzpcXHRcXHR1bmxpa2VseShfX3JldF93YXJuKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1ODpcXHR9KVxcbiAgNTk6XFx0I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfUEFHRShjb25kLCBwYWdlKVxcdCh7XFx0XFx0XFx0XFxcXFxcbiAgNjA6XFx0XFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFxcXCIuZGF0YS4ub25jZVxcXCIpIF9fd2FybmVkO1xcdFxcdFxcdFxcXFxcXG4gIDYxOlxcdFxcdGludCBfX3JldF93YXJuX29uY2UgPSAhIShjb25kKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2MzpcXHRcXHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbmNlIFxcdTAwMjZcXHUwMDI2ICFfX3dhcm5lZCkpIHtcXHRcXHRcXHRcXFxcXFxuICA2NDpcXHRcXHRcXHRkdW1wX3BhZ2UocGFnZSwgXFxcIlZNX1dBUk5fT05fT05DRV9QQUdFKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDY1OlxcdFxcdFxcdF9fd2FybmVkID0gdHJ1ZTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2NjpcXHRcXHRcXHRXQVJOX09OKDEpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDY3OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2ODpcXHRcXHR1bmxpa2VseShfX3JldF93YXJuX29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDY5OlxcdH0pXFxuICA3MDpcXHQjZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXFx0XFx0KHtcXHRcXHRcXHRcXFxcXFxuICA3MTpcXHRcXHRpbnQgX19yZXRfd2FybiA9ICEhKGNvbmQpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDcyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDczOlxcdFxcdGlmICh1bmxpa2VseShfX3JldF93YXJuKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc0OlxcdFxcdFxcdGR1bXBfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIFxcXCJWTV9XQVJOX09OX0ZPTElPKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDc1OlxcdFxcdFxcdFdBUk5fT04oMSk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNzY6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc3OlxcdFxcdHVubGlrZWx5KF9fcmV0X3dhcm4pO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc4OlxcdH0pXFxuICA3OTpcXHQjZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbylcXHQoe1xcdFxcdFxcdFxcXFxcXG4gIDgwOlxcdFxcdHN0YXRpYyBib29sIF9fc2VjdGlvbihcXFwiLmRhdGEuLm9uY2VcXFwiKSBfX3dhcm5lZDtcXHRcXHRcXHRcXFxcXFxuICA4MTpcXHRcXHRpbnQgX19yZXRfd2Fybl9vbmNlID0gISEoY29uZCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODM6XFx0XFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSBcXHUwMDI2XFx1MDAyNiAhX193YXJuZWQpKSB7XFx0XFx0XFx0XFxcXFxcbiAgODQ6XFx0XFx0XFx0ZHVtcF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgXFxcIlZNX1dBUk5fT05fT05DRV9GT0xJTyhcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICA4NTpcXHRcXHRcXHRfX3dhcm5lZCA9IHRydWU7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODY6XFx0XFx0XFx0V0FSTl9PTigxKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA4NzpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODg6XFx0XFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbmNlKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA4OTpcXHR9KVxcbiAgOTA6XFx0I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfTU0oY29uZCwgbW0pXFx0XFx0KHtcXHRcXHRcXHRcXFxcXFxuICA5MTpcXHRcXHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXFxcIi5kYXRhLi5vbmNlXFxcIikgX193YXJuZWQ7XFx0XFx0XFx0XFxcXFxcbiAgOTI6XFx0XFx0aW50IF9fcmV0X3dhcm5fb25jZSA9ICEhKGNvbmQpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDk0OlxcdFxcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uY2UgXFx1MDAyNlxcdTAwMjYgIV9fd2FybmVkKSkge1xcdFxcdFxcdFxcXFxcXG4gIDk1OlxcdFxcdFxcdGR1bXBfbW0obW0pO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDk2OlxcdFxcdFxcdF9fd2FybmVkID0gdHJ1ZTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA5NzpcXHRcXHRcXHRXQVJOX09OKDEpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDk4OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA5OTpcXHRcXHR1bmxpa2VseShfX3JldF93YXJuX29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTAwOlxcdH0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjUxLjE1MDgwOTc1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU0ODQyMTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuICBJJ3ZlIGdvdCBgQ09ORklHX0RFQlVHX1ZNYCBpbiB0aGUgbWl4LCBhbmQgdGhlIGNvbmZpZ3MgYXJlIGNsZWFybHk6IGBNRU1PUllfRkFJTFVSRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBvZiBjb3Vyc2UgYERFQlVHX1ZNYC5cblxuSSdtIHplcm9pbmcgaW4gb24gYSBmZXcga2V5IHN5bWJvbHM6IGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCB0aGVuIHRoYXQgaW50ZXJlc3RpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uLiAgSXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCAqaXMqIGEgZ2xvYmFsIGZ1bmN0aW9uIGluIGBtbS9odWdlX21lbW9yeS5jYC4gU3l6a2FsbGVyIGNvdWxkIHByb2JhYmx5IHJlYWNoIGl0IGlmIHRoZXJlJ3MgYSBnb29kIHBhdGgsIGJ1dCBoaXR0aW5nIHRoZSBlbnRyeSBwb2ludHMgZGlyZWN0bHkgaXMgdGhlIGJldHRlciBwYXRoIGZvcndhcmQuIFNvLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX3BhZ2VgIGFyZSBteSB0b3AgdGFyZ2V0cywgYW5kIHNpbmNlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBjYWxsZWQgYnkgdGhvc2UgZnVuY3Rpb25zIGl0J3MgYWxzbyB3b3J0aCBzb21lIGF0dGVudGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBpdCdzIG5vdDogYHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pYCwgc28gd2UgaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBFeGNlbGxlbnQuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncy4gTG9va3MgbGlrZSBJIGhhdmU6IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBDT05GSUdfREVCVUdfVk1gLlxuXG5IYW5nIG9uLCBkb2VzIGBDT05GSUdfREVCVUdfVk1gICpyZWFsbHkqIG1hdHRlcj8gVGhlIHBhdGNoIGFkZHMgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AsIGJ1dCB0aGF0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSXQgYWxzbyBhZGRzIGxvY2tpbmcgaW4gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgKHdoaWNoIGFyZSBjYWxsZWQgYnkgYHNvZnRfb2ZmbGluZV9wYWdlYCkuIFRoZSBsb2NraW5nIGl0c2VsZiBpcyBhbHdheXMgdGhlcmUsIGJ1dCB0aGF0IHdhcm5pbmcgaXMgb25seSBhY3RpdmUgd2l0aCBgQ09ORklHX0RFQlVHX1ZNYCwgYW5kIGNvdWxkIGNhdGNoIHNvbWUgaXNzdWVzLiBTbyB5ZWFoLCBJJ20gaW5jbHVkaW5nIGBERUJVR19WTWAgd2l0aCB0aGlzLiBNYWtlcyBzZW5zZS5cblxuQWxyaWdodCwgbGV0J3MgcmVjYXAgdGhlIHJlYXNvbmluZy4gIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgZml4aW5nIGEgbG9ja2luZyBwcm9ibGVtIHdpdGhpbiB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgcGF0aHdheXMgd2hlbiBjYWxsaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4gVGhlcmUncyBhbHNvIHRoYXQgYWRkZWQgd2FybmluZyB3aXRoaW4gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBmb2xpbyBpcyBsb2NrZWQuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHJlYWxseSBjb25jZW50cmF0ZSBvbiBmdXp6aW5nIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAgdG8gcmVhbGx5IGhhbW1lciBvbiB0aGUgbmV3IGxvY2tpbmcgYmVoYXZpb3IuXG5cblNvLCB0aGUgcGxhbjpcblxuQ29uZmlnczpcbi0gYE1FTU9SWV9GQUlMVVJFYFxuLSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG4tIGBERUJVR19WTWBcblxuQW5kIHRoZSBmb2N1cyBzeW1ib2xzOlxuLSBgbWVtb3J5X2ZhaWx1cmVgXG4tIGBzb2Z0X29mZmxpbmVfcGFnZWBcbi0gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybS4gYHNvZnRfb2ZmbGluZV9wYWdlYCBjYWxscyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgd2hpY2ggZG9lcyBpbmRlZWQgY2FsbCBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFNvLCB0aGF0J3MgZGVmaW5pdGVseSBhIHZpYWJsZSBlbnRyeSBwb2ludC4gU2FtZSBnb2VzIGZvciBgbWVtb3J5X2ZhaWx1cmVgLCBpdCBjYWxscyBgbWluX29yZGVyX2Zvcl9zcGxpdGAuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcsIGp1c3QgdG8gYmUgc3VyZSwgYW55IG90aGVyIGVudHJ5IHBvaW50cy4gSXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGNhbGxlZCBmcm9tIGBmb2xpb19zcGxpdGA/IE5vcGUsIGl0J3MganVzdCBkZWZpbmVkIGluIGBtbS9odWdlX21lbW9yeS5jYC4gQnV0IHdoZXJlIGlzIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBjYWxsZWQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDk3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjY6MDEuNjk5MjM0NjM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA0OTkyMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX29yZGVyX2Zvcl9zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00NDIwPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDI3LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyODogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDQyOS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00NDMwLSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0NDMxOiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMi0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDM2LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQzNzp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzOC17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzODY9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MTYtXFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTE3OlxcdFxcdG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUxOC1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODU0PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODcyLVxcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjg3MzpcXHRcXHRuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4NzQtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjY6MDEuNzk5NzQwNDAyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDQ2NDQ4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYGh1Z2V0bGJfdW52bWFwX2hzdGF0ZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaHVnZXRsYl91bnZtYXBfaHN0YXRlYCwgYW5kIEkndmUgdHJhY2VkIGl0cyB1c2FnZSB0byBqdXN0IG9uZSBwbGFjZTogYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0J3MgYSBiaXQgb2RkLCB1c3VhbGx5IHRoZXNlIHNvcnRzIG9mIGZ1bmN0aW9ucyBhcmUgdXNlZCBtb3JlIHdpZGVseS4gTGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSBpdCdzIGFjdHVhbGx5ICpkZWZpbmVkKi4gUmlnaHQsIGBtbS9odWdlX21lbW9yeS5jYC4gU3RpbGwsIHRoYXQgc2luZ2xlIGNhbGwgc2l0ZSBmZWVscyBsaW1pdGVkIGZvciBzb21ldGhpbmcgdGhhdCBzZWVtcyBzbyBmdW5kYW1lbnRhbC5cblxuSGFuZyBvbi4uLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGluY2x1ZGUgZmlsZXMuIE1heWJlIGl0J3MgYmVpbmcgdXNlZCB0aHJvdWdoIGFuIGluY2x1ZGUgZmlsZSB0byBwcmV2ZW50IGFuIGluY2x1ZGUgY3ljbGUuLi4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCB3b3VsZCBiZSB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIGFueSBpbmRpcmVjdCB1c2FnZS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIEl0IHdvdWxkIGJlIGEgYmFkIGxvb2sgdG8gbWlzcyBhIHN1YnRsZSB1c2FnZSBwYXR0ZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA0NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI2OjA1LjYwNDM4Nzc2NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NzY1NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDA1PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDY6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA3LWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjU3PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY2Mi1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2NjM6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY2NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI2OjA1LjgxNDE1ODAwMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgxMjE5NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgRXJyb3IgSGFuZGxpbmcgYW5kIE5leHQgU3RlcHMqKlxuXG5BbHJpZ2h0LCBJJ3ZlIGdvdCBpdC4gVGhpcyBsb2dpYyBwYXRoIGlzIHNwZWNpZmljYWxseSB0cmlnZ2VyZWQgd2l0aGluIHRoZSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCBjb250ZXh0cy4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtIGNvbnNpZGVyYWJseSwgYW5kIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVycm9yIGhhbmRsaW5nIGZsb3cuIEFsc28sIGNoZWNraW5nIHRoZSBmb2N1cyBzeW1ib2xzLCB3aGljaCBzZWVtIHRvIGJlIGNvcnJlY3QsIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgc3lzdGVtIGlzIHRhcmdldGluZyB0aGUgcmVsZXZhbnQgcGFydHMuXG5cbkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgdGhlIGFwcHJvcHJpYXRlIGNvdXJzZSBvZiBhY3Rpb24gaXMgY2xlYXIuIEkgbmVlZCB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AgYXQgdGhpcyBqdW5jdHVyZSB0byBhZGRyZXNzIHRoZSBjb25kaXRpb24uIFRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MzYsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjY6MTAuMzk1Mzc5NzAzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzA4NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIG1lbW9yeV9mYWlsdXJlIGFuZCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQuIEl0IGFsc28gYWRkcyBhIFZNX1dBUk5fT05fT05DRV9GT0xJTyBpbiBtaW5fb3JkZXJfZm9yX3NwbGl0IHRvIGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tpbmcgaXMgY29ycmVjdCBhbmQgbm8gd2FybmluZ3MgYXJlIHRyaWdnZXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIG1lbW9yeV9mYWlsdXJlIGFuZCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQuIEl0IGFsc28gYWRkcyBhIFZNX1dBUk5fT05fT05DRV9GT0xJTyBpbiBtaW5fb3JkZXJfZm9yX3NwbGl0IHRvIGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tpbmcgaXMgY29ycmVjdCBhbmQgbm8gd2FybmluZ3MgYXJlIHRyaWdnZXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6wdjr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 09:20:34 +0000 UTC FinishedAt: 2026-08-05 09:26:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e47602c51d20a93fa1711ed896dc9480de4374d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "DEBUG_VM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e47602c51d20a93fa1711ed896dc9480de4374d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "DEBUG_VM" ], "series_id": "b0ec4d6e-6671-4b25-860d-98cf480bdd8f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_failure", "soft_offline_page", "min_order_for_split" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAgICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gbWVtb3J5X2ZhaWx1cmUgYW5kIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSB3aGVuIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdC4gSXQgYWxzbyBhZGRzIGEgVk1fV0FSTl9PTl9PTkNFX0ZPTElPIGluIG1pbl9vcmRlcl9mb3Jfc3BsaXQgdG8gZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2luZyBpcyBjb3JyZWN0IGFuZCBubyB3YXJuaW5ncyBhcmUgdHJpZ2dlcmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDkxMmFlYTlkOWU2ZDBjNWI2MTRkMmVmZWM5Y2ZhYzQ1OWMwYTgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDk6MjQ6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDgwNGI4ZjZhYTU1NzAuLjBiODIzZWEzYzc2YzQgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQzNiw2ICYjNDM7NDQzNiw4IEBAIGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuICAqL1xuIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4gXHRcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBkZTRjYjc1ODUwYTE0Li42OTcyMThmMzIzNzY5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTI1MDYsMTIgJiM0MzsyNTA2LDE3IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0XHRyZXMgPSAtRU9QTk9UU1VQUDtcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG4mIzQzO1xuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbiBcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuLVx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4mIzQzO1x0XHRjb25zdCBpbnQgbmV3X29yZGVyO1xuIFx0XHRpbnQgZXJyO1xuIFxuJiM0MztcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG4mIzQzO1x0XHRuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgZmxhZyBtdXN0IGJlIHNldCBhZnRlciB0aGUgcmVmY291bnQgaXMgYnVtcGVkXG4gXHRcdCAqIG90aGVyd2lzZSBpdCBtYXkgcmFjZSB3aXRoIFRIUCBzcGxpdC5cbkBAIC0yODYyLDggJiM0MzsyODY3LDExIEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0fTtcbiBcbiBcdGlmICghaHVnZSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbi1cdFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xuJiM0MztcdFx0Y29uc3QgaW50IG5ld19vcmRlcjtcbiBcbiYjNDM7XHRcdGZvbGlvX2xvY2soZm9saW8pO1xuJiM0MztcdFx0bmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGVcbiBcdFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVCVUdfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7LAogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICAgJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBtZW1vcnlfZmFpbHVyZSBhbmQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0LiBJdCBhbHNvIGFkZHMgYSBWTV9XQVJOX09OX09OQ0VfRk9MSU8gaW4gbWluX29yZGVyX2Zvcl9zcGxpdCB0byBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QgYW5kIG5vIHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OTEyYWVhOWQ5ZTZkMGM1YjYxNGQyZWZlYzljZmFjNDU5YzBhODA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwOToyNDoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDgwNGI4ZjZhYTU1NzAuLjBiODIzZWEzYzc2YzQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQzNiw2ICYjNDM7NDQzNiw4IEBAIGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogICovCiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggZGU0Y2I3NTg1MGExNC4uNjk3MjE4ZjMyMzc2OSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0yNTA2LDEyICYjNDM7MjUwNiwxNyBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAkJcmVzID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KJiM0MzsKIAlmb2xpb191bmxvY2soZm9saW8pOwogCiAJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7Ci0JCWNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTsKJiM0MzsJCWNvbnN0IGludCBuZXdfb3JkZXI7CiAJCWludCBlcnI7CiAKJiM0MzsJCWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwkJbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7CiYjNDM7CQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwogCQkvKgogCQkgKiBUaGUgZmxhZyBtdXN0IGJlIHNldCBhZnRlciB0aGUgcmVmY291bnQgaXMgYnVtcGVkCiAJCSAqIG90aGVyd2lzZSBpdCBtYXkgcmFjZSB3aXRoIFRIUCBzcGxpdC4KQEAgLTI4NjIsOCAmIzQzOzI4NjcsMTEgQEAgc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAJfTsKIAogCWlmICghaHVnZSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7Ci0JCWNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTsKJiM0MzsJCWNvbnN0IGludCBuZXdfb3JkZXI7CiAKJiM0MzsJCWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwkJbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7CiYjNDM7CQlmb2xpb191bmxvY2soZm9saW8pOwogCQkvKgogCQkgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGUKIAkJICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggUmVsYXRlZCB0byBGb2xpbyBMb2NraW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgYWRqdXN0bWVudHMgdG8gaG93IGZvbGlvcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzcGxpdHRpbmcgdGhlbS4gSSBzZWUgYSBuZXcgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgY2hlY2sgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHdpdGhpbiB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCYjMzk7cyB3YXJuaW5nIGlmIGEgZm9saW8gKmlzbiYjMzk7dCogbG9ja2VkIHdoZW4gd2UmIzM5O3JlIHRyeWluZyB0byBzcGxpdCBpdC4gVGhhdCBzdWdnZXN0cyB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgYSBjYXNlIHdoZXJlIHdlIHdlcmUgc3BsaXR0aW5nIGEgZm9saW8gd2l0aG91dCBwcm9wZXIgcHJvdGVjdGlvbiwgYW5kIHRoaXMgaXMgdGhlIGZpeC4KCkZ1cnRoZXIgZG93biwgSSYjMzk7bSBub3RpY2luZyBtb2RpZmljYXRpb25zIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlICpub3cqIGV4cGxpY2l0bHkgbG9ja2luZyB0aGUgZm9saW8gKmJlZm9yZSogY2FsbGluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgYW5kICp0aGVuKiB1bmxvY2tpbmcgaXQgYWZ0ZXJ3YXJkcy4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQgLSB3ZSYjMzk7cmUgc2hvcmluZyB1cCB0aGUgbG9ja2luZyBhcm91bmQgdGhlIHNwbGl0IG9wZXJhdGlvbi4gVGhpcyBpcyBnb29kOyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBpbXBvcnRhbnQgbWVtb3J5IGhhbmRsaW5nIGhlcmUsIHNvIGxvY2tpbmcgaXMgY3J1Y2lhbCBmb3IgZGF0YSBpbnRlZ3JpdHkuCgpNeSBleHBlcnQgbWluZCBpcyBhdXRvbWF0aWNhbGx5IG1vdmluZyB0b3dhcmRzIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXMgZ29pbmcgdG8gYmUgY29tcGlsZWQgaWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2Ug4oCTIHRoYXQgY29uZmlnIG9wdGlvbiBjb250cm9scyB0aGUgd2hvbGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgc3Vic3lzdGVtLiBBbmQgYG1tL2h1Z2VfbWVtb3J5LmNgIGRlcGVuZHMgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gVGhhdCBjb25maXJtcyB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgb25seSBpbXBhY3Qgc3lzdGVtcyB1c2luZyB0cmFuc3BhcmVudCBodWdlcGFnZXMsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBjYXNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwganVzdCBmaW5hbGl6ZSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNoYW5nZSBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeS1mYWlsdXJlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX0RNQVBPT0xfVEVTVCkgJiM0Mzs9IGRtYXBvb2xfdGVzdC5vXG5tbS9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSAmIzQzOz0gbWVtb3J5LWZhaWx1cmUub1xubW0vTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19IV1BPSVNPTl9JTkpFQ1QpICYjNDM7PSBod3BvaXNvbi1pbmplY3Qub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYSBNZW1vcnkgRmFpbHVyZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBzeXN0ZW0mIzM5O3MgZmxhZ2dpbmcgYSBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpc3N1ZS4gUmlnaHQsIGdvdCBpdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgaGFuZGxpbmcgb2YgdGhpcywgc3BlY2lmaWNhbGx5IHRoZSBodWdlIHBhZ2UgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBnbyBzdHJhaWdodCB0byBgbW0vaHVnZV9tZW1vcnkuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgZXhpc3QgZm9yIGFkZHJlc3NpbmcgdGhlc2UgZmFpbHVyZXMuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgdGhlIGNvZGUmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqUmVmbGVjdGluZyBvbiBIdWdlcGFnZXMgYW5kIE1lbW9yeSBGYWlsdXJlKioKCkFscmlnaHQsIHllcCwgdGhhdCYjMzk7cyBpdCAtIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgZW5hYmxlZC4gV2UmIzM5O3JlIHJvbGxpbmcgd2l0aCBUSFAuIE5vdywgYmVmb3JlIEkgbW92ZSBhbnkgZnVydGhlciwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiBtZW1vcnkgZXJyb3JzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFRIUCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBjb25zaWRlcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLiBZb3Uga25vdyBob3cgaXQgZ29lczsgYmVzdCB0byBwcmUtZW1wdCBhbnkgcG90ZW50aWFsIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2Mi1cbm1tL0tjb25maWc6NzYzOmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjQtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBNRU1PUllfRkFJTFVSRWA6CgoqKkRlZXAgRGl2ZSBpbnRvIERlcGVuZGVuY3kgQW5hbHlzaXMgZm9yIE1FTU9SWV9GQUlMVVJFKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGBNRU1PUllfRkFJTFVSRWAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzdXJmYWNlLWxldmVsIGRpYWdub3N0aWM7IEkgbmVlZCB0byBtYXAgb3V0ICpldmVyeSogcG90ZW50aWFsIGRlcGVuZGVuY3kuIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIHRoZSBvYnZpb3VzIHN0YWNrIHRyYWNlcy4gSSB3YW50IHRvIHVuY292ZXIgdGhlIGVudGlyZSB3ZWIgb2YgY29udHJpYnV0aW5nIGZhY3RvcnMuIFdoYXQgbGlicmFyaWVzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBzdHJhdGVneSBhdCBwbGF5PyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNvbm5lY3Rpb25zLCBsaWtlIHBvb3JseSBtYW5hZ2VkIGNhY2hlcyBvciB1bmJvdW5kZWQgZGF0YSBzdHJ1Y3R1cmVzLCB0aGF0IG1pZ2h0IGV2ZW50dWFsbHkgY2FzY2FkZSBpbnRvIGEgbWVtb3J5IGlzc3VlPwoKSSYjMzk7bSBtZW50YWxseSBidWlsZGluZyBhIGZsb3djaGFydCBoZXJlLCB0cmFjaW5nIHRoZSBmbG93IG9mIG1lbW9yeSB1c2FnZSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBsZXZlbCBkb3duIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCBoYXJkd2FyZSBsYXllcnMuIFRoaXMgaW5jbHVkZXMgY29uc2lkZXJpbmcgZXh0ZXJuYWwgZmFjdG9ycyBzdWNoIGFzIG90aGVyIHByb2Nlc3NlcyBvciBlbnZpcm9ubWVudGFsIHNldHRpbmdzIHRoYXQgbWF5IGFmZmVjdCBwZXJmb3JtYW5jZS4gSSYjMzk7bSBpbWFnaW5pbmcgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBpbnRlcmFjdCBpbiBib3RoIHR5cGljYWwgYW5kIGVkZ2UgY2FzZSBzY2VuYXJpb3MuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgc2luZ2xlIHBvaW50IG9mIGZhaWx1cmVzIHRoYXQgY29udHJpYnV0ZSB0byB0aGlzIE1FTU9SWV9GQUlMVVJFLCBvciBpZiB0aGVyZSBpcyBhIGNvbmZsdWVuY2Ugb2YgZmFjdG9ycy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgZXZlbiBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgY29tcG9uZW50cyBtYXkgcHJlc2VudCBhcyBhIHByb2JsZW0uIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgZmluZCB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2MDpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzYxOlx0XHRib29sXG4gNzYyOlx0XG4gNzYzOlx0Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG4gNzY0Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDc2NTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzY2Olx0XHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbiA3Njc6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gNzY4Olx0XHRoZWxwXG4gNzY5Olx0XHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xuIDc3MDpcdFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xuIDc3MTpcdFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcbiA3NzI6XHRcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cbiA3NzM6XHRcbiA3NzQ6XHRjb25maWcgSFdQT0lTT05fSU5KRUNUXG4gNzc1Olx0XHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuIDc3NjpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG4gNzc3Olx0XHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1JcbiA3Nzg6XHRcbiA3Nzk6XHRjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjcwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IG1lbW9yeSBmYWlsdXJlcyBhcmUgaGFuZGxlZCBpbiB0aGlzIHN5c3RlbS4gVGhlIHByaW1hcnkgbWVjaGFuaXNtLCBgTUVNT1JZX0ZBSUxVUkVgLCBpdHMgZnVuY3Rpb25hbGl0eSwgaXMgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gd2hldGhlciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIHRoZXNlIGZhaWx1cmVzLCB3aGljaCB3ZSByZXByZXNlbnQgd2l0aCBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBsYXRmb3JtIEkmIzM5O20gd29ya2luZyB3aXRoIGNhbiBhY3R1YWxseSBkbyB0aGlzLiBJdCYjMzk7cyBhIGtleSBmaXJzdCBzdGVwLgoKR2l2ZW4gdGhhdCYjMzk7cyBpbiBwbGFjZSwgSSBhbHNvIHdhbnQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIGFzc2VzcyBob3cgVEhQIGlzIGNvbmZpZ3VyZWQgYW5kIGhvdyB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBJIHN1c3BlY3QgdGhhdCB0aGVyZSBhcmUgaW50ZXJhY3Rpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gY2xhcmlmeSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlIGFuZCBPUyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI5PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMxLVxubW0vS2NvbmZpZzo4MzI6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzMtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1MD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1NS1cbm1tL0tjb25maWc6ODU2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjItXG5tbS9LY29uZmlnOjg2MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2NC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzEtXG5tbS9LY29uZmlnOjg3MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4OC1cbm1tL0tjb25maWc6ODg5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkwLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTgtXG5tbS9LY29uZmlnOjg5OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDYtXG5tbS9LY29uZmlnOjkwNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwOC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE0LVxubW0vS2NvbmZpZzo5MTU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE2LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI0PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMzLVxubW0vS2NvbmZpZzo5MzQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzUtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0Mi1cbm1tL0tjb25maWc6OTQzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0NC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1MC1cbm1tL0tjb25maWc6OTUxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTgtXG5tbS9LY29uZmlnOjk1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6CgoqKkludmVzdGlnYXRpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBoYW5kbGUgb24gdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGVwZW5kZW5jaWVzLiBUaGlzIGxpa2VseSBtZWFucyBJIG5lZWQgdG8gc3RhcnQgdHJhY2luZyB0aGluZ3MgYmFjayB0byB1bmRlcnN0YW5kIHdoYXQgcmVsaWVzIG9uIGl0LCB3aGF0IGl0IGVuYWJsZXMsIGFuZCB3aGF0IG1pZ2h0IGJyZWFrIGlmIEkgd2VyZSB0byBjaGFuZ2Ugb3IgZGlzYWJsZSBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBub3QganVzdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIHJpcHBsZSBlZmZlY3RzIOKAkyBhbnl0aGluZyBkb3duc3RyZWFtIHRoYXQgbWlnaHQgbGV2ZXJhZ2UgdGhlIGFkdmFudGFnZXMgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCBvciB0aGF0IGNvdWxkIGJlIG5lZ2F0aXZlbHkgYWZmZWN0ZWQgYnkgaXRzIGFic2VuY2Ugb3IgbW9kaWZpY2F0aW9ucy4gUGVyaGFwcyBJJiMzOTtsbCBuZWVkIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCBrZXJuZWwgbW9kdWxlcywgb3IgYXBwbGljYXRpb24tbGV2ZWwgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc3VyZmFjZSBhbmQgZGV0ZXJtaW5lIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgTlVNQSwgYW5kIG90aGVyIHJlbGF0ZWQgc3Vic3lzdGVtcy4gSSYjMzk7bGwga2VlcCBhbiBvcGVuIG1pbmQsIGJlY2F1c2UgSSYjMzk7bSBiZXR0aW5nIHRoYXQgdGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBjb21wbGV4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMjpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzM6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODM1Olx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzNjpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDgzNzpcdFx0c2VsZWN0IE1NX0lEXG4gODM4Olx0XHRoZWxwXG4gODM5Olx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4NDA6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDg0MTpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDI6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDM6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0NDpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQ1Olx0XG4gODQ2Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg0NzpcdFxuIDg0ODpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ5Olx0XG4gODUwOlx0Y2hvaWNlXG4gODUxOlx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKlJlZmxlY3Rpbmcgb24gUmVjZW50IEtlcm5lbCBNb2RpZmljYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdHdvIGtleSBjb25jZXB0czogYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBob3cgdGhlc2UgaW50ZXJhY3QsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlaXIgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIG1haW4gdGhpbmcgaGVyZSBpcyB0aGUga2VybmVsIGNvZGUgSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IGhhcyBiZWVuIG1vZGlmaWVkLgoKU28sIEkgbmVlZCB0byBmb2N1cyBvbiB3aGF0IGNoYW5nZWQgYW5kICp3aGVyZSouIEl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgc2VlbiBjaGFuZ2VzIGFyZSBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGBtZW1vcnlfZmFpbHVyZWAsIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2V0IG9mIGFkanVzdG1lbnRzLCBnaXZlbiB0aGUgY29udGV4dC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmaWxlcyB0aGVtc2VsdmVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgbGl2ZXMgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGh1Z2VwYWdlcy4gVGhlIG90aGVyIHR3bywgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIGFyZSBib3RoIG5lc3RsZWQgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGlzIHN1Z2dlc3RzIGEgc3Ryb25nIGNvbm5lY3Rpb24gYmV0d2VlbiBoYW5kbGluZyBtZW1vcnkgZmFpbHVyZXMgYW5kIGRlYWxpbmcgd2l0aCBwYWdlcyBpbiB1c2UuIEkgd2lsbCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhpcyBmaWxlIGZvciBhIGNvbXByZWhlbnNpdmUgZ3Jhc3Agb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlbS4KCkZpbmFsbHksIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGVzZSBmdW5jdGlvbnMsIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCBhcmUgZ29vZCBmb2NhbCBwb2ludHMgZm9yIGluLWRlcHRoIGFuYWx5c2lzLiBUaGVpciBsb2NhdGlvbiBhbmQgdGhlIHR5cGUgb2YgY2hhbmdlcyBtYWRlIHN1Z2dlc3QgdGhleSB3b3VsZCBiZSBpZGVhbCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlc2UgcmVjZW50IG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jLTcxLVxubW0vbWVtb3J5LWZhaWx1cmUuYzo3MjpzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsIF9fcmVhZF9tb3N0bHk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTczLVxubW0vbWVtb3J5LWZhaWx1cmUuYzo3NDpzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBfX3JlYWRfbW9zdGx5ID0gMTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzUtXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz04MD1hdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtODEtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjgyOnN0YXRpYyBib29sIGh3X21lbW9yeV9mYWlsdXJlIF9fcmVhZF9tb3N0bHk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTgzLVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTA0PXN0YXRpYyBzc2l6ZV90IF9uYW1lIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXHRcdFx0XFxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwNy17XHRcdFx0XHRcdFx0XHRcdFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEwODpcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9zdGF0cyAqbWZfc3RhdHMgPVx0XHRcdFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOS1cdFx0XHUwMDI2Tk9ERV9EQVRBKGRldi1cdTAwM2VpZCktXHUwMDNlbWZfc3RhdHM7XHRcdFx0XFxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTExOD1NRl9BVFRSX1JPKHJlY292ZXJlZCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTExOS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTIwOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZW1vcnlfZmFpbHVyZV9hdHRyW10gPSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyMS1cdFx1MDAyNmRldl9hdHRyX3RvdGFsLmF0dHIsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjgtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyOTpjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXAgPSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMDpcdC5uYW1lID0gXCYjMzQ7bWVtb3J5X2ZhaWx1cmVcJiMzNDssXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMTpcdC5hdHRycyA9IG1lbW9yeV9mYWlsdXJlX2F0dHIsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMi19O1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBtZW1vcnlfZmFpbHVyZV90YWJsZVtdID0ge1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzUtXHR7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzNjpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGxcJiMzNDssXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzNzpcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbCxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM4Olx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsKSxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM5LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDQtXHR7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0NTpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5XCYjMzQ7LFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDY6XHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5LFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDc6XHRcdC5tYXhsZW5cdFx0PSBzaXplb2Yoc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5KSxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQ4LVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjItXHR7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE2MzpcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcJiMzNDssXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2NC1cdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTUwMD1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2Vhcmx5X2tpbGxfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtNTA4LVx0XHR9IGVsc2Uge1xubW0vbWVtb3J5LWZhaWx1cmUuYzo1MDk6XHRcdFx0aWYgKHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsKVxubW0vbWVtb3J5LWZhaWx1cmUuYy01MTAtXHRcdFx0XHRyZXR1cm4gdDtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTgwMT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGh3cG9pc29uX3dhbGtfb3BzID0ge1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtODEyLSAqIGhhcmR3YXJlIHBvaXNvbmVkIHBhZ2VzLiBUaGV5IGNvdWxkIGhhcHBlbiwgZm9yIGV4YW1wbGUsIHdoZW5cbm1tL21lbW9yeS1mYWlsdXJlLmM6ODEzOiAqIG1lbW9yeV9mYWlsdXJlKCkgZmFpbGVkIHRvIHVubWFwIHRoZSBlcnJvciBwYWdlIGF0IHRoZSBmaXJzdCBjYWxsLCBvclxubW0vbWVtb3J5LWZhaWx1cmUuYy04MTQtICogd2hlbiBtdWx0aXBsZSBsb2NhbCBtYWNoaW5lIGNoZWNrcyBoYXBwZW5lZCBvbiBkaWZmZXJlbnQgQ1BVcy5cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEyMzU9c3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTIzOC1cdGludCBuaWQgPSBNQVhfTlVNTk9ERVM7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyMzk6XHRzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfc3RhdHMgKm1mX3N0YXRzID0gTlVMTDtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI0MC1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEyODE9c3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyODMte1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxMjg0Olx0dHJhY2VfbWVtb3J5X2ZhaWx1cmVfZXZlbnQocGZuLCB0eXBlLCByZXN1bHQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjg1LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa2VybmVsX293bmVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzY5LVx0ICogKGZyb3plbiBzbGFiIGFuZCBsYXJnZS1rbWFsbG9jIHBhZ2VzIGNhbm5vdCBiZSBwaW5uZWQpLCBidXQgaXNcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM3MDpcdCAqIGhhcm1sZXNzOiB3aGVyZSBhIHdyb25nIHZlcmRpY3QgY291bGQgcGFuaWMsIG1lbW9yeV9mYWlsdXJlKCkgaGFzXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzNzEtXHQgKiBhbHJlYWR5IHNldCBQYWdlSFdQb2lzb24sIHdoaWNoIGJhcnMgdGhlIHBhZ2UgZnJvbSB0aGUgYWxsb2NhdG9yLlxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjAxMz1zdGF0aWMgaW50IGdldF9odWdlX3BhZ2VfZm9yX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDgwLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDgxOnN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA4Mi17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTUzLSNlbHNlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNTQ6c3RhdGljIGlubGluZSBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE1NS17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTY2PXN0YXRpYyB2b2lkIHB1dF9yZWZfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE3My1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE3NDpzdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNzUtXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTg2LVx0ICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxODc6XHRpZiAocGdtYXBfaGFzX21lbW9yeV9mYWlsdXJlKHBnbWFwKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTg4Olx0XHRyYyA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtZW1vcnlfZmFpbHVyZShwZ21hcCwgcGZuLCAxLCBmbGFncyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxODktXHRcdC8qXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjgzPXN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMxMC0vKipcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjMxMTogKiBtZW1vcnlfZmFpbHVyZV9wZm4gLSBIYW5kbGUgbWVtb3J5IGZhaWx1cmUgb24gYSBwYWdlIG5vdCBiYWNrZWQgYnlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMxMi0gKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZS5cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzMTktICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzMjA6c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjMyMS17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzYxLS8qKlxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzYyOiAqIG1lbW9yeV9mYWlsdXJlIC0gSGFuZGxlIG1lbW9yeSBmYWlsdXJlIG9mIGEgcGFnZS5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2My0gKiBAcGZuOiBQYWdlIE51bWJlciBvZiB0aGUgY29ycnVwdGVkIHBhZ2Vcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODUtICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzODY6aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzODcte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM5NC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM5NTpcdGlmICghc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5KVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzk2LVx0XHRwYW5pYyhcJiMzNDtNZW1vcnkgZmFpbHVyZSBvbiBwYWdlICVseFwmIzM0OywgcGZuKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDAtXHRpZiAoIShmbGFncyBcdTAwMjYgTUZfU1dfU0lNVUxBVEVEKSlcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwMTpcdFx0aHdfbWVtb3J5X2ZhaWx1cmUgPSB0cnVlO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDAyLVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQwNC1cdGlmICghcCkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDA1Olx0XHRyZXMgPSBhcmNoX21lbW9yeV9mYWlsdXJlKHBmbiwgZmxhZ3MpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDA2LVx0XHRpZiAocmVzID09IDApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDEyLVx0XHRcdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDEzOlx0XHRcdHJlcyA9IG1lbW9yeV9mYWlsdXJlX3BmbihwZm4sIGZsYWdzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQxNC1cdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MjAtXHRcdFx0aWYgKHBnbWFwKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0MjE6XHRcdFx0XHRyZXMgPSBtZW1vcnlfZmFpbHVyZV9kZXZfcGFnZW1hcChwZm4sIGZsYWdzLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDIyLVx0XHRcdFx0XHRcdFx0XHQgcGdtYXApO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQzMS10cnlfYWdhaW46XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0MzI6XHRyZXMgPSB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYihwZm4sIGZsYWdzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQzMy1cdC8qXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjIzLX1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYyNDpFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfZmFpbHVyZSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjUtXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjI4LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjI5OnN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MzAtXHR1bnNpZ25lZCBsb25nIHBmbjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MzMtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MzQ6c3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MzU6XHRERUNMQVJFX0tGSUZPKGZpZm8sIHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYzNi1cdFx0ICAgICAgTUVNT1JZX0ZBSUxVUkVfRklGT19TSVpFKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDAtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NDE6c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUsIG1lbW9yeV9mYWlsdXJlX2NwdSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDItXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDMtLyoqXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NDQ6ICogbWVtb3J5X2ZhaWx1cmVfcXVldWUgLSBTY2hlZHVsZSBoYW5kbGluZyBtZW1vcnkgZmFpbHVyZSBvZiBhIHBhZ2UuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDUtICogQHBmbjogUGFnZSBOdW1iZXIgb2YgdGhlIGNvcnJ1cHRlZCBwYWdlXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjU4LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjU5OnZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2MC17XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NjE6XHRzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1ICptZl9jcHU7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjItXHR1bnNpZ25lZCBsb25nIHByb2NfZmxhZ3M7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjMtXHRib29sIGJ1ZmZlcl9vdmVyZmxvdztcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY2NDpcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSBlbnRyeSA9IHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2NS1cdFx0LnBmbiA9XHRcdHBmbixcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjgtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2Njk6XHRtZl9jcHUgPSBcdTAwMjZnZXRfY3B1X3ZhcihtZW1vcnlfZmFpbHVyZV9jcHUpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjcwLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1mX2NwdS1cdTAwM2Vsb2NrLCBwcm9jX2ZsYWdzKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NzQtXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtZl9jcHUtXHUwMDNlbG9jaywgcHJvY19mbGFncyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NzU6XHRwdXRfY3B1X3ZhcihtZW1vcnlfZmFpbHVyZV9jcHUpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjc2LVx0aWYgKGJ1ZmZlcl9vdmVyZmxvdylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NzktfVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjgwOkVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9mYWlsdXJlX3F1ZXVlKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY4MS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4MjpzdGF0aWMgdm9pZCBtZW1vcnlfZmFpbHVyZV93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjgzLXtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4NDpcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUgKm1mX2NwdTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4NTpcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSBlbnRyeSA9IHsgMCwgfTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY4Ni1cdHVuc2lnbmVkIGxvbmcgcHJvY19mbGFncztcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2ODgtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2ODk6XHRtZl9jcHUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSwgd29yayk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2OTAtXHRmb3IgKDs7KSB7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjk4LVx0XHRlbHNlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2OTk6XHRcdFx0bWVtb3J5X2ZhaWx1cmUoZW50cnkucGZuLCBlbnRyeS5mbGFncyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MDAtXHR9XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzAyLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzAzOnN0YXRpYyBpbnQgX19pbml0IG1lbW9yeV9mYWlsdXJlX2luaXQodm9pZClcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwNC17XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MDU6XHRzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1ICptZl9jcHU7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MDYtXHRpbnQgY3B1O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwOC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcwOTpcdFx0bWZfY3B1ID0gXHUwMDI2cGVyX2NwdShtZW1vcnlfZmFpbHVyZV9jcHUsIGNwdSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTAtXHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZtZl9jcHUtXHUwMDNlbG9jayk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTEtXHRcdElOSVRfS0ZJRk8obWZfY3B1LVx1MDAzZWZpZm8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzEyOlx0XHRJTklUX1dPUksoXHUwMDI2bWZfY3B1LVx1MDAzZXdvcmssIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTMtXHR9XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTQtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MTU6XHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcJiMzNDt2bVwmIzM0OywgbWVtb3J5X2ZhaWx1cmVfdGFibGUpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE2LVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcxOC19XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MTk6Y29yZV9pbml0Y2FsbChtZW1vcnlfZmFpbHVyZV9pbml0KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcyMC1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzMtICogU29mdHdhcmUtdW5wb2lzb24gYSBwYWdlIHRoYXQgaGFzIGJlZW4gcG9pc29uZWQgYnlcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjczNDogKiBtZW1vcnlfZmFpbHVyZSgpIGVhcmxpZXIuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzUtICpcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3NDE9aW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3NTctXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3NTg6XHRpZiAoaHdfbWVtb3J5X2ZhaWx1cmUpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc1OS1cdFx0dW5wb2lzb25fcHJfaW5mbyhcJiMzNDslI2x4OiBkaXNhYmxlZCBhZnRlciBIVyBtZW1vcnkgZmFpbHVyZVxcblwmIzM0Oyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI4NTQ9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODc5LVx0XHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjg4MDpcdFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg4MS1cdFx0ICpcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjItICogQHBmbjogcGZuIHRvIHNvZnQtb2ZmbGluZVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTYzOiAqIEBmbGFnczogZmxhZ3MuIFNhbWUgYXMgbWVtb3J5X2ZhaWx1cmUoKS5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2NC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBtdXNpbmdzOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNZW1vcnkgTWFuYWdlbWVudCBRdWlya3MqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIGBtZW1vcnlfZmFpbHVyZWAuIFRoYXQmIzM5O3MgZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIGNsZWFybHkgYSBwdWJsaWMgaW50ZXJmYWNlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFRoZW4gSSBzZWUgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIGRlZmluZWQgYXMgYHN0YXRpY2AgYW5kIGNhbGxlZCBieSBgc29mdF9vZmZsaW5lX3BhZ2VgLiBUaGF0JiMzOTtzIGNsYXNzaWMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBidXQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gaXMgaW50ZXJlc3RpbmcgYW5kIHdvcnRoIGEgY2xvc2VyIGxvb2suIFNvbWV0aGluZyBpcyBtYWtpbmcgYSBtZW1vcnkgcGFnZSBvZmZsaW5lLCBhbmQgSSB3YW50IHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIHRoZXJlLgoKTm93LCB0aGUgYXBwZWFyYW5jZSBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaGFzIG1lIGEgbGl0dGxlIHB1enpsZWQuIElzIHRoYXQgZXhwb3J0ZWQgdG9vPyBJIGRvbiYjMzk7dCByZWNhbGwgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCBpZiB0aGF0JiMzOTtzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb3Igc29tZXRoaW5nIGludGVybmFsLiBUbyBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBUaW1lIHRvIGdvIGRpZyBhcm91bmQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBzb21lIGRlc2lnbiBhc3N1bXB0aW9ucyBJJiMzOTttIG5vdCBmYW1pbGlhciB3aXRoLCBvciBpZiBzb21ldGhpbmcgaW4gdGhlIGludGVyYWN0aW9uIGZlZWxzIGEgbGl0dGxlIG9mZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00NDIwPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQyNy0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyODogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xubW0vaHVnZV9tZW1vcnkuYy00NDI5LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMC0gKlxubW0vaHVnZV9tZW1vcnkuYzo0NDMxOiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxubW0vaHVnZV9tZW1vcnkuYy00NDMyLSAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDM2LSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0NDM3OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdlX21lbW9yeS5jLTQ0Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTExMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIE9yZGVyIFNwbGl0dGluZyBMb2dpYyBhbmQgQ29uZmlndXJhdGlvbiBFeHBvcnQqKgoKQWxyaWdodCwgc28gdGhlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB2YXJpYWJsZS4uLnRoYXQmIzM5O3Mgbm90IGEgY29uc3RhbnQsIGl0JiMzOTtzIGR5bmFtaWMuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGFuZCBhZGp1c3QgbXkgbWVudGFsIG1vZGVsIGFjY29yZGluZ2x5LiBJdCBwcm9iYWJseSBnZXRzIHB1bGxlZCBmcm9tIGEgZGF0YWJhc2UsIG9yIGEgY29uZmlnIGZpbGUsIHNvbWV0aGluZyBsaWtlIHRoYXQuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB3ZSYjMzk7cmUgZXhwb3J0aW5nIHRoZSBgc29mdF9vZmZsaW5lX3BhZ2VgLiBJIGNvdWxkJiMzOTt2ZSBzd29ybiB3ZSB3ZXJlLCBidXQgSSBjYW4mIzM5O3QgZmluZCBpdCBub3cuIElmIGl0ICppcyogYW4gZXhwb3J0ZWQgYXNzZXQgdGhlbiBJJiMzOTtsbCBiZSBhYmxlIHRvIHdvcmsgd2l0aCBpdCBhY2NvcmRpbmdseSwgYnV0IGl0IG5lZWRzIHRvIGJlIGF2YWlsYWJsZS4gTmVlZCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGtlZXAgYW4gZXllIG91dCB0byBtYWtlIHN1cmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gaXMgcmVhZHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvZnRfb2ZmbGluZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTI2ODI9c3RhdGljIHZvaWQgbWVtb3J5X2ZhaWx1cmVfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2OTYtXHRcdGlmIChlbnRyeS5mbGFncyBcdTAwMjYgTUZfU09GVF9PRkZMSU5FKVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjk3Olx0XHRcdHNvZnRfb2ZmbGluZV9wYWdlKGVudHJ5LnBmbiwgZW50cnkuZmxhZ3MpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjk4LVx0XHRlbHNlXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODU0PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2MC0vKipcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk2MTogKiBzb2Z0X29mZmxpbmVfcGFnZSAtIFNvZnQgb2ZmbGluZSBhIHBhZ2UuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjItICogQHBmbjogcGZuIHRvIHNvZnQtb2ZmbGluZVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk4NC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk4NTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjI3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBTeW1ib2xzKioKClJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwcmlvcml0aXplIGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFRob3NlIHNlZW0gbGlrZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgaW52ZXN0aWdhdGlvbi4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgcmVsZXZhbmNlIG9mIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEJvdGggcHJvdmlkZSBleGNlbGxlbnQgaW5zaWdodHMgaW50byBlcnJvciBjb25kaXRpb25zIGFuZCBncmFjZWZ1bCBkZWdyYWRhdGlvbi4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sIG9yIGp1c3QgYSBsb2NhbCBnbG9iYWwuIEl04oCZcyBjcml0aWNhbCB0byBrbm93IGl0cyBzY29wZSBiZWZvcmUgZGV0ZXJtaW5pbmcgaG93IGJlc3QgdG8gdXRpbGl6ZSBhbmQgaW50ZXJwcmV0IGl0cyB2YWx1ZS4gSWYgaXQgaXMgb25seSBsb2NhbCwgdGhlbiBhY2Nlc3MgbWlnaHQgYmUgbGltaXRlZCB0byB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCwgbWVhbmluZyBpdCBtaWdodCBub3QgYmUgcmVsZXZhbnQgZm9yIGV4dGVybmFsIGFuYWx5c2lzIGFuZCBkZWJ1Z2dpbmcuIElmIGl0JiMzOTtzIGV4cG9ydGVkLCB0aGUgaW1wbGljYXRpb25zIGFyZSB2ZXJ5IGRpZmZlcmVudCwgYW5kIGl0IGJlY29tZXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEdvdHRhIGRpZyBpbiBhbmQgY2hlY2sgdGhlIHN5bWJvbCB0YWJsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipOYXZpZ2F0aW5nIEdsb2JhbCBTY29wZSBhbmQgUG90ZW50aWFsIEZ1bmN0aW9ucyoqCgpIbW0sIHRoaXMgdmFyaWFibGUgaXNuJiMzOTt0ICpleHBsaWNpdGx5KiBleHBvcnRlZCwgYnV0IGl0JiMzOTtzIGNsZWFybHkgaGFuZ2luZyBhcm91bmQgaW4gZ2xvYmFsIHNjb3BlLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIG9yIG1hbmlwdWxhdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBmb2xpb19zcGxpdGAgZnVuY3Rpb24sIG9yIG1heWJlIHRoYXQgb3RoZXIgdXRpbGl0eSB0aGF0IGhhbmRsZXMgbGFyZ2UgcGFnZXMsIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIFRob3NlIHNvdW5kIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB3aGVyZSBzb21ldGhpbmcgZ2xvYmFsLCBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWlnaHQgZ2V0IHVzZWQuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zNzk5PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzg0MS1cbm1tL2h1Z2VfbWVtb3J5LmM6Mzg0MjpcdFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG5tbS9odWdlX21lbW9yeS5jLTM4NDMtXHRcdHNwbGl0X3BhZ2Vfb3duZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTI2PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MDgxLS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0MDgyOiAqIF9fZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xubW0vaHVnZV9tZW1vcnkuYy00MDgzLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQxMDEtICovXG5tbS9odWdlX21lbW9yeS5jOjQxMDI6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQxMDMtXHRcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mjk4LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0Mjk5OiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXG5tbS9odWdlX21lbW9yeS5jLTQzMDAtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDMxOS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDMyMDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbm1tL2h1Z2VfbWVtb3J5LmMtNDMyMS17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00Mzg3PWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDM5MS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDM5MjpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQzOTMtXHRcdFx0ICAgICBTUExJVF9UWVBFX1VOSUZPUk0pO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDM5Ni0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6NDM5NzogKiBmb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTQzOTgtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQxOS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDQyMDppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtNDQyMS1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00NDIyLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyMzpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00NDI0LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NzQyPXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4MzQtXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0ODM1Olx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00ODM2LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg1OT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDkxMC1cdFx0XHRcdFx0XHRcdCAgIGluX2ZvbGlvX29mZnNldCk7XG5tbS9odWdlX21lbW9yeS5jOjQ5MTE6XHRcdFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXG5tbS9odWdlX21lbW9yeS5jLTQ5MTItXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgbWVtb3J5X2ZhaWx1cmVgLCBgc29mdF9vZmZsaW5lX3BhZ2VgLCBhbmQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFyZSBkZWZpbml0ZWx5IGtleSBmb2N1cyBhcmVhcyByaWdodCBub3cuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhvc2UuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgdGhlc2UgY2FuIG9mdGVuIGJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYW5kIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgaG93ZXZlciwgdGhlIGRlZmF1bHQgZm9yIHN5emthbGxlciBpcyB4ODZfNjQsIHdoaWNoIGdlbmVyYWxseSBzdXBwb3J0cyB0aGVzZSBmZWF0dXJlcy4gU28sIGBNRU1PUllfRkFJTFVSRWAgcmVsaWVzIG9uIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGVwZW5kcyBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gTm8gc3VycHJpc2VzIHRoZXJlLCBidXQgaXQmIzM5O3MgZ29vZCB0byBjb25maXJtLgoKSSYjMzk7bGwgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgdHdvIGV4cGxpY2l0IGNvbmZpZ3M6IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ghCgpBbHJpZ2h0LCB3aGF0IGVsc2UgaXMgYmVpbmcgY2hhbmdlZCBoZXJlPyBBaCwgaGVyZSYjMzk7cyBhbiBpbnRlcmVzdGluZyBvbmU6IHRoZSBwYXRjaCBpcyBhZGRpbmcgYFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7YC4gT2theSwgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AuIEkgdmFndWVseSByZWNhbGwgdGhpcyBiZWluZyByZWxhdGVkIHRvIGRlYnVnZ2luZy4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHksIEkgYmVsaWV2ZSBpdCYjMzk7cyBlbmFibGVkIHdoZW4gYENPTkZJR19ERUJVR19WTWAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYC4uLiBhbmQgc2VlIHdoYXQgaXQgaXMgd2FybmluZyBhYm91dCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaD0xOD12b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTc4LX0pXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaDo3OTojZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbylcdCh7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTgwLVx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwmIzM0Oy5kYXRhLi5vbmNlXCYjMzQ7KSBfX3dhcm5lZDtcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNi0jZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmg6MTM3OiNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGNvbmQsIGZvbGlvKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzOC0jZGVmaW5lIFZNX1dBUk5fT05fT05DRV9NTShjb25kLCBtbSkgIEJVSUxEX0JVR19PTl9JTlZBTElEKGNvbmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTkxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCBDb25kaXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGJyZWFrIGRvd24gdGhlIHRhc2suIEhlcmUgd2Ugd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29uZGl0aW9ucyogdW5kZXIgd2hpY2ggYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgZ2V0cyB0cmlnZ2VyZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgc2l0dWF0aW9uIGlzIGNyaXRpY2FsLCBpc24mIzM5O3QgaXQ/IFdlIGNhbiYjMzk7dCBqdXN0IHJlYWN0OyB3ZSBuZWVkIHRvIGhhdmUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBsZWFkcyB1cCB0byB0aGlzIHdhcm5pbmcgYmVpbmcgZW1pdHRlZC4gSXTigJlzIGxpa2UgZGVidWdnaW5nOiB3aXRob3V0IGNvbnRleHQsIHlvdSYjMzk7cmUganVzdCBzdGFiYmluZyBpbiB0aGUgZGFyay4gU28sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIHRoZSBleGFjdCBjaGVjaywgb3IgY2hlY2tzLCB0aGF0IGxlYWQgdG8gdGhhdCBtYWNybyBiZWluZyBpbnZva2VkLiBJcyBpdCByZWxhdGVkIHRvIGZvbGlvIG1hbmFnZW1lbnQsIHBhZ2UgZmxhZ3MsIGxvY2tpbmcsIG9yIHNvbWUgc29ydCBvZiBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3Rpb24sIG9yIG1heWJlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBJdOKAmXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGFuIGltcG9ydGFudCBhcmVhLiBGaW5kaW5nIHRoYXQgY29uZGl0aW9uIGxldHMgbWUgZGV0ZXJtaW5lIGlmIHRoZSB3YXJuaW5nIGlzIGp1c3RpZmllZCwgYSByZWQgaGVycmluZywgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIFdoYXQgYXJlIHRoZSByZWxldmFudCBzdXJyb3VuZGluZyBsaW5lcyBhbmQgZnVuY3Rpb25zPyBJcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyBhYm91dCBgZm9saW9gIHRoYXQgaXMgYmVpbmcgZmxhZ2dlZD8gVGhlIGdvYWwgaGVyZSBpc24mIzM5O3QganVzdCB0byBzZWUgKmlmKiBpdCBmaXJlcywgYnV0IHRvIGZpZ3VyZSBvdXQgKndoeSogaXQgZmlyZXMgYW5kIHdoYXQgdGhvc2UgaW1wbGljYXRpb25zIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdCNpZm5kZWYgTElOVVhfTU1fREVCVUdfSFxuICAgMzpcdCNkZWZpbmUgTElOVVhfTU1fREVCVUdfSCAxXG4gICA0Olx0XG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdpZnkuaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdHN0cnVjdCBwYWdlO1xuICAgOTpcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcbiAgMTA6XHRzdHJ1Y3QgbW1fc3RydWN0O1xuICAxMTpcdHN0cnVjdCB2bWFfaXRlcmF0b3I7XG4gIDEyOlx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3Q7XG4gIDEzOlx0XG4gIDE0Olx0dm9pZCBkdW1wX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IGNoYXIgKnJlYXNvbik7XG4gIDE1Olx0dm9pZCBkdW1wX3ZtYShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gIDE2Olx0dm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiAgMTc6XHR2b2lkIGR1bXBfdm1nKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcsIGNvbnN0IGNoYXIgKnJlYXNvbik7XG4gIDE4Olx0dm9pZCB2bWFfaXRlcl9kdW1wX3RyZWUoY29uc3Qgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pKTtcbiAgMTk6XHRcbiAgMjA6XHQjaWZkZWYgQ09ORklHX0RFQlVHX1ZNXG4gIDIxOlx0I2RlZmluZSBWTV9CVUdfT04oY29uZCkgQlVHX09OKGNvbmQpXG4gIDIyOlx0I2RlZmluZSBWTV9CVUdfT05fUEFHRShjb25kLCBwYWdlKVx0XHRcdFx0XHRcXFxuICAyMzpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuICAyNDpcdFx0XHRpZiAodW5saWtlbHkoY29uZCkpIHtcdFx0XHRcdFx0XFxcbiAgMjU6XHRcdFx0XHRkdW1wX3BhZ2UocGFnZSwgXCYjMzQ7Vk1fQlVHX09OX1BBR0UoXCYjMzQ7IF9fc3RyaW5naWZ5KGNvbmQpXCYjMzQ7KVwmIzM0Oyk7XFxcbiAgMjY6XHRcdFx0XHRCVUcoKTtcdFx0XHRcdFx0XHRcXFxuICAyNzpcdFx0XHR9XHRcdFx0XHRcdFx0XHRcXFxuICAyODpcdFx0fSB3aGlsZSAoMClcbiAgMjk6XHQjZGVmaW5lIFZNX0JVR19PTl9GT0xJTyhjb25kLCBmb2xpbylcdFx0XHRcdFx0XFxcbiAgMzA6XHRcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzE6XHRcdFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XHRcdFx0XHRcdFxcXG4gIDMyOlx0XHRcdFx0ZHVtcF9wYWdlKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIFwmIzM0O1ZNX0JVR19PTl9GT0xJTyhcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICAzMzpcdFx0XHRcdEJVRygpO1x0XHRcdFx0XHRcdFxcXG4gIDM0Olx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gIDM1Olx0XHR9IHdoaWxlICgwKVxuICAzNjpcdCNkZWZpbmUgVk1fQlVHX09OX1ZNQShjb25kLCB2bWEpXHRcdFx0XHRcdFxcXG4gIDM3Olx0XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDM4Olx0XHRcdGlmICh1bmxpa2VseShjb25kKSkge1x0XHRcdFx0XHRcXFxuICAzOTpcdFx0XHRcdGR1bXBfdm1hKHZtYSk7XHRcdFx0XHRcdFxcXG4gIDQwOlx0XHRcdFx0QlVHKCk7XHRcdFx0XHRcdFx0XFxcbiAgNDE6XHRcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiAgNDI6XHRcdH0gd2hpbGUgKDApXG4gIDQzOlx0I2RlZmluZSBWTV9CVUdfT05fTU0oY29uZCwgbW0pXHRcdFx0XHRcdFx0XFxcbiAgNDQ6XHRcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgNDU6XHRcdFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XHRcdFx0XHRcdFxcXG4gIDQ2Olx0XHRcdFx0ZHVtcF9tbShtbSk7XHRcdFx0XHRcdFxcXG4gIDQ3Olx0XHRcdFx0QlVHKCk7XHRcdFx0XHRcdFx0XFxcbiAgNDg6XHRcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiAgNDk6XHRcdH0gd2hpbGUgKDApXG4gIDUwOlx0I2RlZmluZSBWTV9XQVJOX09OX1BBR0UoY29uZCwgcGFnZSlcdFx0KHtcdFx0XHRcXFxuICA1MTpcdFx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcdFx0XHRcdFx0XFxcbiAgNTI6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICA1MzpcdFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm4pKSB7XHRcdFx0XHRcdFxcXG4gIDU0Olx0XHRcdGR1bXBfcGFnZShwYWdlLCBcJiMzNDtWTV9XQVJOX09OX1BBR0UoXCYjMzQ7IF9fc3RyaW5naWZ5KGNvbmQpXCYjMzQ7KVwmIzM0Oyk7XFxcbiAgNTU6XHRcdFx0V0FSTl9PTigxKTtcdFx0XHRcdFx0XHRcXFxuICA1NjpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcXFxuICA1NzpcdFx0dW5saWtlbHkoX19yZXRfd2Fybik7XHRcdFx0XHRcdFx0XFxcbiAgNTg6XHR9KVxuICA1OTpcdCNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX1BBR0UoY29uZCwgcGFnZSlcdCh7XHRcdFx0XFxcbiAgNjA6XHRcdHN0YXRpYyBib29sIF9fc2VjdGlvbihcJiMzNDsuZGF0YS4ub25jZVwmIzM0OykgX193YXJuZWQ7XHRcdFx0XFxcbiAgNjE6XHRcdGludCBfX3JldF93YXJuX29uY2UgPSAhIShjb25kKTtcdFx0XHRcdFx0XFxcbiAgNjI6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICA2MzpcdFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSBcdTAwMjZcdTAwMjYgIV9fd2FybmVkKSkge1x0XHRcdFxcXG4gIDY0Olx0XHRcdGR1bXBfcGFnZShwYWdlLCBcJiMzNDtWTV9XQVJOX09OX09OQ0VfUEFHRShcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICA2NTpcdFx0XHRfX3dhcm5lZCA9IHRydWU7XHRcdFx0XHRcdFxcXG4gIDY2Olx0XHRcdFdBUk5fT04oMSk7XHRcdFx0XHRcdFx0XFxcbiAgNjc6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAgNjg6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSk7XHRcdFx0XHRcdFxcXG4gIDY5Olx0fSlcbiAgNzA6XHQjZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXHRcdCh7XHRcdFx0XFxcbiAgNzE6XHRcdGludCBfX3JldF93YXJuID0gISEoY29uZCk7XHRcdFx0XHRcdFxcXG4gIDcyOlx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgNzM6XHRcdGlmICh1bmxpa2VseShfX3JldF93YXJuKSkge1x0XHRcdFx0XHRcXFxuICA3NDpcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Vk1fV0FSTl9PTl9GT0xJTyhcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICA3NTpcdFx0XHRXQVJOX09OKDEpO1x0XHRcdFx0XHRcdFxcXG4gIDc2Olx0XHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDc3Olx0XHR1bmxpa2VseShfX3JldF93YXJuKTtcdFx0XHRcdFx0XHRcXFxuICA3ODpcdH0pXG4gIDc5Olx0I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8oY29uZCwgZm9saW8pXHQoe1x0XHRcdFxcXG4gIDgwOlx0XHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXCYjMzQ7LmRhdGEuLm9uY2VcJiMzNDspIF9fd2FybmVkO1x0XHRcdFxcXG4gIDgxOlx0XHRpbnQgX19yZXRfd2Fybl9vbmNlID0gISEoY29uZCk7XHRcdFx0XHRcdFxcXG4gIDgyOlx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgODM6XHRcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uY2UgXHUwMDI2XHUwMDI2ICFfX3dhcm5lZCkpIHtcdFx0XHRcXFxuICA4NDpcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDg1Olx0XHRcdF9fd2FybmVkID0gdHJ1ZTtcdFx0XHRcdFx0XFxcbiAgODY6XHRcdFx0V0FSTl9PTigxKTtcdFx0XHRcdFx0XHRcXFxuICA4NzpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcXFxuICA4ODpcdFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbmNlKTtcdFx0XHRcdFx0XFxcbiAgODk6XHR9KVxuICA5MDpcdCNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX01NKGNvbmQsIG1tKVx0XHQoe1x0XHRcdFxcXG4gIDkxOlx0XHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXCYjMzQ7LmRhdGEuLm9uY2VcJiMzNDspIF9fd2FybmVkO1x0XHRcdFxcXG4gIDkyOlx0XHRpbnQgX19yZXRfd2Fybl9vbmNlID0gISEoY29uZCk7XHRcdFx0XHRcdFxcXG4gIDkzOlx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgOTQ6XHRcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uY2UgXHUwMDI2XHUwMDI2ICFfX3dhcm5lZCkpIHtcdFx0XHRcXFxuICA5NTpcdFx0XHRkdW1wX21tKG1tKTtcdFx0XHRcdFx0XHRcXFxuICA5NjpcdFx0XHRfX3dhcm5lZCA9IHRydWU7XHRcdFx0XHRcdFxcXG4gIDk3Olx0XHRcdFdBUk5fT04oMSk7XHRcdFx0XHRcdFx0XFxcbiAgOTg6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAgOTk6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSk7XHRcdFx0XHRcdFxcXG4gMTAwOlx0fSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwOTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuICBJJiMzOTt2ZSBnb3QgYENPTkZJR19ERUJVR19WTWAgaW4gdGhlIG1peCwgYW5kIHRoZSBjb25maWdzIGFyZSBjbGVhcmx5OiBgTUVNT1JZX0ZBSUxVUkVgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgb2YgY291cnNlIGBERUJVR19WTWAuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcga2V5IHN5bWJvbHM6IGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCB0aGVuIHRoYXQgaW50ZXJlc3RpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uLiAgSXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQgKmlzKiBhIGdsb2JhbCBmdW5jdGlvbiBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFN5emthbGxlciBjb3VsZCBwcm9iYWJseSByZWFjaCBpdCBpZiB0aGVyZSYjMzk7cyBhIGdvb2QgcGF0aCwgYnV0IGhpdHRpbmcgdGhlIGVudHJ5IHBvaW50cyBkaXJlY3RseSBpcyB0aGUgYmV0dGVyIHBhdGggZm9yd2FyZC4gU28sIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAgYXJlIG15IHRvcCB0YXJnZXRzLCBhbmQgc2luY2UgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGlzIGNhbGxlZCBieSB0aG9zZSBmdW5jdGlvbnMgaXQmIzM5O3MgYWxzbyB3b3J0aCBzb21lIGF0dGVudGlvbi4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBzdGF0aWMuIExvb2tzIGxpa2UgaXQmIzM5O3Mgbm90OiBgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylgLCBzbyB3ZSBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIEV4Y2VsbGVudC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxldmFudCBjb25maWdzLiBMb29rcyBsaWtlIEkgaGF2ZTogYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19ERUJVR19WTWAuCgpIYW5nIG9uLCBkb2VzIGBDT05GSUdfREVCVUdfVk1gICpyZWFsbHkqIG1hdHRlcj8gVGhlIHBhdGNoIGFkZHMgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AsIGJ1dCB0aGF0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEl0IGFsc28gYWRkcyBsb2NraW5nIGluIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgICh3aGljaCBhcmUgY2FsbGVkIGJ5IGBzb2Z0X29mZmxpbmVfcGFnZWApLiBUaGUgbG9ja2luZyBpdHNlbGYgaXMgYWx3YXlzIHRoZXJlLCBidXQgdGhhdCB3YXJuaW5nIGlzIG9ubHkgYWN0aXZlIHdpdGggYENPTkZJR19ERUJVR19WTWAsIGFuZCBjb3VsZCBjYXRjaCBzb21lIGlzc3Vlcy4gU28geWVhaCwgSSYjMzk7bSBpbmNsdWRpbmcgYERFQlVHX1ZNYCB3aXRoIHRoaXMuIE1ha2VzIHNlbnNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJlY2FwIHRoZSByZWFzb25pbmcuICBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGZpeGluZyBhIGxvY2tpbmcgcHJvYmxlbSB3aXRoaW4gdGhlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIHBhdGh3YXlzIHdoZW4gY2FsbGluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFRoZXJlJiMzOTtzIGFsc28gdGhhdCBhZGRlZCB3YXJuaW5nIHdpdGhpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgd2hpY2ggbWVhbnMgSSBzaG91bGQgcmVhbGx5IGNvbmNlbnRyYXRlIG9uIGZ1enppbmcgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9wYWdlYCB0byByZWFsbHkgaGFtbWVyIG9uIHRoZSBuZXcgbG9ja2luZyBiZWhhdmlvci4KClNvLCB0aGUgcGxhbjoKCkNvbmZpZ3M6Ci0gYE1FTU9SWV9GQUlMVVJFYAotIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKLSBgREVCVUdfVk1gCgpBbmQgdGhlIGZvY3VzIHN5bWJvbHM6Ci0gYG1lbW9yeV9mYWlsdXJlYAotIGBzb2Z0X29mZmxpbmVfcGFnZWAKLSBgbWluX29yZGVyX2Zvcl9zcGxpdGAKCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0uIGBzb2Z0X29mZmxpbmVfcGFnZWAgY2FsbHMgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIHdoaWNoIGRvZXMgaW5kZWVkIGNhbGwgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBTbywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdmlhYmxlIGVudHJ5IHBvaW50LiBTYW1lIGdvZXMgZm9yIGBtZW1vcnlfZmFpbHVyZWAsIGl0IGNhbGxzIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHN1cmUsIGFueSBvdGhlciBlbnRyeSBwb2ludHMuIElzIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBjYWxsZWQgZnJvbSBgZm9saW9fc3BsaXRgPyBOb3BlLCBpdCYjMzk7cyBqdXN0IGRlZmluZWQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBCdXQgd2hlcmUgaXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGNhbGxlZD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQ0MjA9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDI3LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0NDI4OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXG5tbS9odWdlX21lbW9yeS5jLTQ0MjktICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy00NDMwLSAqXG5tbS9odWdlX21lbW9yeS5jOjQ0MzE6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXG5tbS9odWdlX21lbW9yeS5jLTQ0MzItICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0MzYtICovXG5tbS9odWdlX21lbW9yeS5jOjQ0Mzc6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzOC17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg2PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUxNi1cdFx0Zm9saW9fbG9jayhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1MTc6XHRcdG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTE4LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg1ND1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4NzItXHRcdGZvbGlvX2xvY2soZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyODczOlx0XHRuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg3NC1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgaHVnZXRsYl91bnZtYXBfaHN0YXRlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGh1Z2V0bGJfdW52bWFwX2hzdGF0ZWAsIGFuZCBJJiMzOTt2ZSB0cmFjZWQgaXRzIHVzYWdlIHRvIGp1c3Qgb25lIHBsYWNlOiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLCB1c3VhbGx5IHRoZXNlIHNvcnRzIG9mIGZ1bmN0aW9ucyBhcmUgdXNlZCBtb3JlIHdpZGVseS4gTGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSBpdCYjMzk7cyBhY3R1YWxseSAqZGVmaW5lZCouIFJpZ2h0LCBgbW0vaHVnZV9tZW1vcnkuY2AuIFN0aWxsLCB0aGF0IHNpbmdsZSBjYWxsIHNpdGUgZmVlbHMgbGltaXRlZCBmb3Igc29tZXRoaW5nIHRoYXQgc2VlbXMgc28gZnVuZGFtZW50YWwuCgpIYW5nIG9uLi4uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgaW5jbHVkZSBmaWxlcy4gTWF5YmUgaXQmIzM5O3MgYmVpbmcgdXNlZCB0aHJvdWdoIGFuIGluY2x1ZGUgZmlsZSB0byBwcmV2ZW50IGFuIGluY2x1ZGUgY3ljbGUuLi4gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAuIFRoYXQgd291bGQgYmUgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCBhbnkgaW5kaXJlY3QgdXNhZ2UuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBjcml0aWNhbC4gSXQgd291bGQgYmUgYSBiYWQgbG9vayB0byBtaXNzIGEgc3VidGxlIHVzYWdlIHBhdHRlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00MDU9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA2OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA3LWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjYyLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjYzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY2NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTM2CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBFcnJvciBIYW5kbGluZyBhbmQgTmV4dCBTdGVwcyoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgaXQuIFRoaXMgbG9naWMgcGF0aCBpcyBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgY29udGV4dHMuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB0aGUgcHJvYmxlbSBjb25zaWRlcmFibHksIGFuZCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBBbHNvLCBjaGVja2luZyB0aGUgZm9jdXMgc3ltYm9scywgd2hpY2ggc2VlbSB0byBiZSBjb3JyZWN0LCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIHN5c3RlbSBpcyB0YXJnZXRpbmcgdGhlIHJlbGV2YW50IHBhcnRzLgoKR2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLCB0aGUgYXBwcm9wcmlhdGUgY291cnNlIG9mIGFjdGlvbiBpcyBjbGVhci4gSSBuZWVkIHRvIGV4ZWN1dGUgYHNldC1yZXN1bHRzYCBhdCB0aGlzIGp1bmN0dXJlIHRvIGFkZHJlc3MgdGhlIGNvbmRpdGlvbi4gVGhpcyBzaG91bGQgcmVzb2x2ZSB0aGUgc2l0dWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVCVUdfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7LAogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICAgJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBtZW1vcnlfZmFpbHVyZSBhbmQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0LiBJdCBhbHNvIGFkZHMgYSBWTV9XQVJOX09OX09OQ0VfRk9MSU8gaW4gbWluX29yZGVyX2Zvcl9zcGxpdCB0byBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QgYW5kIG5vIHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAgICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvY2tpbmcgaXNzdWUgaW4gbWVtb3J5X2ZhaWx1cmUgYW5kIHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSB3aGVuIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdC4gSXQgYWxzbyBhZGRzIGEgVk1fV0FSTl9PTl9PTkNFX0ZPTElPIGluIG1pbl9vcmRlcl9mb3Jfc3BsaXQgdG8gZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbG9ja2luZyBpcyBjb3JyZWN0IGFuZCBubyB3YXJuaW5ncyBhcmUgdHJpZ2dlcmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6MzAuNjExNDIzMzE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk5MTQyODY5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERUJVR19WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiLFxuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBtZW1vcnlfZmFpbHVyZSBhbmQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0LiBJdCBhbHNvIGFkZHMgYSBWTV9XQVJOX09OX09OQ0VfRk9MSU8gaW4gbWluX29yZGVyX2Zvcl9zcGxpdCB0byBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QgYW5kIG5vIHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjMwLjYxMTQyOTM3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDc1NzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ5MTJhZWE5ZDllNmQwYzViNjE0ZDJlZmVjOWNmYWM0NTljMGE4MDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAwOToyNDoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDgwNGI4ZjZhYTU1NzAuLjBiODIzZWEzYzc2YzQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDQzNiw2ICs0NDM2LDggQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuICAqL1xcbiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuK1xcbiBcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IGRlNGNiNzU4NTBhMTQuLjY5NzIxOGYzMjM3NjkgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtMjUwNiwxMiArMjUwNiwxNyBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4gXFx0XFx0cmVzID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHR9XFxuK1xcbiBcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxuLVxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG4rXFx0XFx0Y29uc3QgaW50IG5ld19vcmRlcjtcXG4gXFx0XFx0aW50IGVycjtcXG4gXFxuK1xcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbitcXHRcXHRuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSBmbGFnIG11c3QgYmUgc2V0IGFmdGVyIHRoZSByZWZjb3VudCBpcyBidW1wZWRcXG4gXFx0XFx0ICogb3RoZXJ3aXNlIGl0IG1heSByYWNlIHdpdGggVEhQIHNwbGl0LlxcbkBAIC0yODYyLDggKzI4NjcsMTEgQEAgc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdH07XFxuIFxcbiBcXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4tXFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbitcXHRcXHRjb25zdCBpbnQgbmV3X29yZGVyO1xcbiBcXG4rXFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuK1xcdFxcdG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbitcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGVcXG4gXFx0XFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6MzIuMDUzMjQxNTc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTg0NzI0NTQ2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERUJVR19WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiLFxuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9ja2luZyBpc3N1ZSBpbiBtZW1vcnlfZmFpbHVyZSBhbmQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlIHdoZW4gY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0LiBJdCBhbHNvIGFkZHMgYSBWTV9XQVJOX09OX09OQ0VfRk9MSU8gaW4gbWluX29yZGVyX2Zvcl9zcGxpdCB0byBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QgYW5kIG5vIHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5MTJhZWE5ZDllNmQwYzViNjE0ZDJlZmVjOWNmYWM0NTljMGE4MDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDA5OjI0OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDgwNGI4ZjZhYTU1NzAuLjBiODIzZWEzYzc2YzQgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQzNiw2ICs0NDM2LDggQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gICovXG4gdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuK1xuIFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4gXHRcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBkZTRjYjc1ODUwYTE0Li42OTcyMThmMzIzNzY5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTI1MDYsMTIgKzI1MDYsMTcgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRcdHJlcyA9IC1FT1BOT1RTVVBQO1xuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbitcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbi1cdFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xuK1x0XHRjb25zdCBpbnQgbmV3X29yZGVyO1xuIFx0XHRpbnQgZXJyO1xuIFxuK1x0XHRmb2xpb19sb2NrKGZvbGlvKTtcbitcdFx0bmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4rXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBmbGFnIG11c3QgYmUgc2V0IGFmdGVyIHRoZSByZWZjb3VudCBpcyBidW1wZWRcbiBcdFx0ICogb3RoZXJ3aXNlIGl0IG1heSByYWNlIHdpdGggVEhQIHNwbGl0LlxuQEAgLTI4NjIsOCArMjg2NywxMSBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdH07XG4gXG4gXHRpZiAoIWh1Z2UgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4tXHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbitcdFx0Y29uc3QgaW50IG5ld19vcmRlcjtcbiBcbitcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG4rXHRcdG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xuK1x0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHQvKlxuIFx0XHQgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGVcbiBcdFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjMyLjA1MzI0NDM2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNTY4MTcyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIFJlbGF0ZWQgdG8gRm9saW8gTG9ja2luZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgYWRqdXN0bWVudHMgdG8gaG93IGZvbGlvcyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzcGxpdHRpbmcgdGhlbS4gSSBzZWUgYSBuZXcgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgY2hlY2sgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHdpdGhpbiB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCdzIHdhcm5pbmcgaWYgYSBmb2xpbyAqaXNuJ3QqIGxvY2tlZCB3aGVuIHdlJ3JlIHRyeWluZyB0byBzcGxpdCBpdC4gVGhhdCBzdWdnZXN0cyB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgYSBjYXNlIHdoZXJlIHdlIHdlcmUgc3BsaXR0aW5nIGEgZm9saW8gd2l0aG91dCBwcm9wZXIgcHJvdGVjdGlvbiwgYW5kIHRoaXMgaXMgdGhlIGZpeC5cblxuRnVydGhlciBkb3duLCBJJ20gbm90aWNpbmcgbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgdG8gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSAqbm93KiBleHBsaWNpdGx5IGxvY2tpbmcgdGhlIGZvbGlvICpiZWZvcmUqIGNhbGxpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFuZCAqdGhlbiogdW5sb2NraW5nIGl0IGFmdGVyd2FyZHMuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0IC0gd2UncmUgc2hvcmluZyB1cCB0aGUgbG9ja2luZyBhcm91bmQgdGhlIHNwbGl0IG9wZXJhdGlvbi4gVGhpcyBpcyBnb29kOyB3ZSdyZSB0YWxraW5nIGFib3V0IGltcG9ydGFudCBtZW1vcnkgaGFuZGxpbmcgaGVyZSwgc28gbG9ja2luZyBpcyBjcnVjaWFsIGZvciBkYXRhIGludGVncml0eS5cblxuTXkgZXhwZXJ0IG1pbmQgaXMgYXV0b21hdGljYWxseSBtb3ZpbmcgdG93YXJkcyBjaGVja2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXMgZ29pbmcgdG8gYmUgY29tcGlsZWQgaWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2Ug4oCTIHRoYXQgY29uZmlnIG9wdGlvbiBjb250cm9scyB0aGUgd2hvbGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgc3Vic3lzdGVtLiBBbmQgYG1tL2h1Z2VfbWVtb3J5LmNgIGRlcGVuZHMgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gVGhhdCBjb25maXJtcyB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgb25seSBpbXBhY3Qgc3lzdGVtcyB1c2luZyB0cmFuc3BhcmVudCBodWdlcGFnZXMsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBjYXNlLlxuXG5BbHJpZ2h0LCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gVGhhdCB3aWxsIGp1c3QgZmluYWxpemUgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjaGFuZ2UgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjM4LjMxMDA2Mzk1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODkyNDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnktZmFpbHVyZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSArPSBkbWFwb29sX3Rlc3Qub1xcbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICs9IG1lbW9yeS1mYWlsdXJlLm9cXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgKz0gaHdwb2lzb24taW5qZWN0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6MzguNDA4OTk0NjU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzNTAxMTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGEgTWVtb3J5IEZhaWx1cmUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBzeXN0ZW0ncyBmbGFnZ2luZyBhIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzc3VlLiBSaWdodCwgZ290IGl0LiBMZXQncyBkaWcgaW50byB0aGUga2VybmVsJ3MgaGFuZGxpbmcgb2YgdGhpcywgc3BlY2lmaWNhbGx5IHRoZSBodWdlIHBhZ2UgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gSSdsbCBuZWVkIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9odWdlX21lbW9yeS5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgb3B0aW9ucyBleGlzdCBmb3IgYWRkcmVzc2luZyB0aGVzZSBmYWlsdXJlcy4gRnJvbSB0aGVyZSBJJ2xsIHN0YXJ0IGNoZWNraW5nIHRoZSBjb2RlJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6NDMuNDQ0MDA4NzA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjIwNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6NDMuNTExMjMzNDU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzOTA2NTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipSZWZsZWN0aW5nIG9uIEh1Z2VwYWdlcyBhbmQgTWVtb3J5IEZhaWx1cmUqKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQncyBpdCAtIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgZW5hYmxlZC4gV2UncmUgcm9sbGluZyB3aXRoIFRIUC4gTm93LCBiZWZvcmUgSSBtb3ZlIGFueSBmdXJ0aGVyLCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiBtZW1vcnkgZXJyb3JzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFRIUCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBjb25zaWRlcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLiBZb3Uga25vdyBob3cgaXQgZ29lczsgYmVzdCB0byBwcmUtZW1wdCBhbnkgcG90ZW50aWFsIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzk1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6NDcuMTUwMzAyMzU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzY4MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzYwPWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc2Mi1cXG5tbS9LY29uZmlnOjc2Mzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc2NC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNDo0Ny4yMTM2NzU0OTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE4Mzc4Njc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTUVNT1JZX0ZBSUxVUkVgOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIERlcGVuZGVuY3kgQW5hbHlzaXMgZm9yIE1FTU9SWV9GQUlMVVJFKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIGBNRU1PUllfRkFJTFVSRWAuIFRoaXMgaXNuJ3QganVzdCBhIHN1cmZhY2UtbGV2ZWwgZGlhZ25vc3RpYzsgSSBuZWVkIHRvIG1hcCBvdXQgKmV2ZXJ5KiBwb3RlbnRpYWwgZGVwZW5kZW5jeS4gSSdtIHRoaW5raW5nIGJleW9uZCB0aGUgb2J2aW91cyBzdGFjayB0cmFjZXMuIEkgd2FudCB0byB1bmNvdmVyIHRoZSBlbnRpcmUgd2ViIG9mIGNvbnRyaWJ1dGluZyBmYWN0b3JzLiBXaGF0IGxpYnJhcmllcyBhcmUgaW52b2x2ZWQ/IFdoYXQncyB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBzdHJhdGVneSBhdCBwbGF5PyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNvbm5lY3Rpb25zLCBsaWtlIHBvb3JseSBtYW5hZ2VkIGNhY2hlcyBvciB1bmJvdW5kZWQgZGF0YSBzdHJ1Y3R1cmVzLCB0aGF0IG1pZ2h0IGV2ZW50dWFsbHkgY2FzY2FkZSBpbnRvIGEgbWVtb3J5IGlzc3VlP1xuXG5JJ20gbWVudGFsbHkgYnVpbGRpbmcgYSBmbG93Y2hhcnQgaGVyZSwgdHJhY2luZyB0aGUgZmxvdyBvZiBtZW1vcnkgdXNhZ2UgZnJvbSB0aGUgYXBwbGljYXRpb24gbGV2ZWwgZG93biB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgaGFyZHdhcmUgbGF5ZXJzLiBUaGlzIGluY2x1ZGVzIGNvbnNpZGVyaW5nIGV4dGVybmFsIGZhY3RvcnMgc3VjaCBhcyBvdGhlciBwcm9jZXNzZXMgb3IgZW52aXJvbm1lbnRhbCBzZXR0aW5ncyB0aGF0IG1heSBhZmZlY3QgcGVyZm9ybWFuY2UuIEknbSBpbWFnaW5pbmcgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBpbnRlcmFjdCBpbiBib3RoIHR5cGljYWwgYW5kIGVkZ2UgY2FzZSBzY2VuYXJpb3MuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgc2luZ2xlIHBvaW50IG9mIGZhaWx1cmVzIHRoYXQgY29udHJpYnV0ZSB0byB0aGlzIE1FTU9SWV9GQUlMVVJFLCBvciBpZiB0aGVyZSBpcyBhIGNvbmZsdWVuY2Ugb2YgZmFjdG9ycy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgZXZlbiBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgY29tcG9uZW50cyBtYXkgcHJlc2VudCBhcyBhIHByb2JsZW0uIExldCdzIGRlbHZlIGluIGFuZCBmaW5kIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNDo1MS4zMzIwNTY3MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuIDc2MTpcXHRcXHRib29sXFxuIDc2MjpcXHRcXG4gNzYzOlxcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbiA3NjQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNzY1OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3NjY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4gNzY3OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuIDc2ODpcXHRcXHRoZWxwXFxuIDc2OTpcXHRcXHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xcbiA3NzA6XFx0XFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xcbiA3NzE6XFx0XFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcXG4gNzcyOlxcdFxcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cXG4gNzczOlxcdFxcbiA3NzQ6XFx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbiA3NzU6XFx0XFx0dHJpc3RhdGUgXFxcIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yXFxcIlxcbiA3NzY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcXHUwMDI2XFx1MDAyNiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbiA3Nzc6XFx0XFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXFxuIDc3ODpcXHRcXG4gNzc5OlxcdGNvbmZpZyBOT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjUxLjMzMjIxMzczNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc5NjAxNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IG1lbW9yeSBmYWlsdXJlcyBhcmUgaGFuZGxlZCBpbiB0aGlzIHN5c3RlbS4gVGhlIHByaW1hcnkgbWVjaGFuaXNtLCBgTUVNT1JZX0ZBSUxVUkVgLCBpdHMgZnVuY3Rpb25hbGl0eSwgaXMgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gd2hldGhlciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIHRoZXNlIGZhaWx1cmVzLCB3aGljaCB3ZSByZXByZXNlbnQgd2l0aCBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcGxhdGZvcm0gSSdtIHdvcmtpbmcgd2l0aCBjYW4gYWN0dWFsbHkgZG8gdGhpcy4gSXQncyBhIGtleSBmaXJzdCBzdGVwLlxuXG5HaXZlbiB0aGF0J3MgaW4gcGxhY2UsIEkgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIG9mIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IFRIUCBpcyBjb25maWd1cmVkIGFuZCBob3cgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGUgb3ZlcmFsbCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZy4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIGludGVyYWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGNsYXJpZnkgZm9yIHRoaXMgcGFydGljdWxhciBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjQ6NTYuNTExODE3Nzg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU2MTMyODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjk9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMS1cXG5tbS9LY29uZmlnOjgzMjptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzMtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUwPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTUtXFxubW0vS2NvbmZpZzo4NTY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYyLVxcbm1tL0tjb25maWc6ODYzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjQtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODcxLVxcbm1tL0tjb25maWc6ODcyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODczLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4OC1cXG5tbS9LY29uZmlnOjg4OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkwLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTgtXFxubW0vS2NvbmZpZzo4OTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDYtXFxubW0vS2NvbmZpZzo5MDc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwOC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE0LVxcbm1tL0tjb25maWc6OTE1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE2LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI0PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzMtXFxubW0vS2NvbmZpZzo5MzQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzNS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQyLVxcbm1tL0tjb25maWc6OTQzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ0LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUwLVxcbm1tL0tjb25maWc6OTUxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTItXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1OC1cXG5tbS9LY29uZmlnOjk1OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2MC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI0OjU2LjYxNzQzOTkwOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzgzNjc1NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHRhc2s6XG5cbioqSW52ZXN0aWdhdGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZGVuY2llcy4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IHRyYWNpbmcgdGhpbmdzIGJhY2sgdG8gdW5kZXJzdGFuZCB3aGF0IHJlbGllcyBvbiBpdCwgd2hhdCBpdCBlbmFibGVzLCBhbmQgd2hhdCBtaWdodCBicmVhayBpZiBJIHdlcmUgdG8gY2hhbmdlIG9yIGRpc2FibGUgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGl0J3MgYmVpbmcgdXNlZC4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IG5vdCBqdXN0IHRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzLCBidXQgYWxzbyB0aGUgcmlwcGxlIGVmZmVjdHMg4oCTIGFueXRoaW5nIGRvd25zdHJlYW0gdGhhdCBtaWdodCBsZXZlcmFnZSB0aGUgYWR2YW50YWdlcyBvZiB0cmFuc3BhcmVudCBodWdlcGFnZXMsIG9yIHRoYXQgY291bGQgYmUgbmVnYXRpdmVseSBhZmZlY3RlZCBieSBpdHMgYWJzZW5jZSBvciBtb2RpZmljYXRpb25zLiBQZXJoYXBzIEknbGwgbmVlZCB0byBzdGFydCBieSBsb29raW5nIGF0IHN5c3RlbSBjb25maWd1cmF0aW9ucywga2VybmVsIG1vZHVsZXMsIG9yIGFwcGxpY2F0aW9uLWxldmVsIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc3VyZmFjZSBhbmQgZGV0ZXJtaW5lIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgTlVNQSwgYW5kIG90aGVyIHJlbGF0ZWQgc3Vic3lzdGVtcy4gSSdsbCBrZWVwIGFuIG9wZW4gbWluZCwgYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0IHRoZSBkZXBlbmRlbmN5IHRyZWUgaXMgY29tcGxleC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjAzLjQwMTExNzQ1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzI6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4MzM6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODM0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDgzNTpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4MzY6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4Mzc6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDgzODpcXHRcXHRoZWxwXFxuIDgzOTpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODQwOlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4NDE6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODQyOlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODQzOlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NDQ6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXFxuIDg0NzpcXHRcXG4gODQ4OlxcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg0OTpcXHRcXG4gODUwOlxcdGNob2ljZVxcbiA4NTE6XFx0XFx0cHJvbXB0IFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNTowMy40MDEyNDk4MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MTc3MjQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqUmVmbGVjdGluZyBvbiBSZWNlbnQgS2VybmVsIE1vZGlmaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdHdvIGtleSBjb25jZXB0czogYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBob3cgdGhlc2UgaW50ZXJhY3QsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlaXIgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIG1haW4gdGhpbmcgaGVyZSBpcyB0aGUga2VybmVsIGNvZGUgSSd2ZSBiZWVuIGxvb2tpbmcgYXQgaGFzIGJlZW4gbW9kaWZpZWQuXG5cblNvLCBJIG5lZWQgdG8gZm9jdXMgb24gd2hhdCBjaGFuZ2VkIGFuZCAqd2hlcmUqLiBJdCBsb29rcyBsaWtlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNlZW4gY2hhbmdlcyBhcmUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBgbWVtb3J5X2ZhaWx1cmVgLCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQncyBhIHJlYXNvbmFibGUgc2V0IG9mIGFkanVzdG1lbnRzLCBnaXZlbiB0aGUgY29udGV4dC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZpbGVzIHRoZW1zZWx2ZXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBsaXZlcyB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlIGFyZSBkZWFsaW5nIHdpdGggaHVnZXBhZ2VzLiBUaGUgb3RoZXIgdHdvLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgYXJlIGJvdGggbmVzdGxlZCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoaXMgc3VnZ2VzdHMgYSBzdHJvbmcgY29ubmVjdGlvbiBiZXR3ZWVuIGhhbmRsaW5nIG1lbW9yeSBmYWlsdXJlcyBhbmQgZGVhbGluZyB3aXRoIHBhZ2VzIGluIHVzZS4gSSB3aWxsIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGlzIGZpbGUgZm9yIGEgY29tcHJlaGVuc2l2ZSBncmFzcCBvZiB0aGVzZSBtb2RpZmljYXRpb25zIGFuZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVtLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhlc2UgZnVuY3Rpb25zLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgYXJlIGdvb2QgZm9jYWwgcG9pbnRzIGZvciBpbi1kZXB0aCBhbmFseXNpcy4gVGhlaXIgbG9jYXRpb24gYW5kIHRoZSB0eXBlIG9mIGNoYW5nZXMgbWFkZSBzdWdnZXN0IHRoZXkgd291bGQgYmUgaWRlYWwgc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MDguMjgzMDI1Mzc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYyNjU2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jLTcxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6NzI6c3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbCBfX3JlYWRfbW9zdGx5O1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtNzMtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo3NDpzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBfX3JlYWRfbW9zdGx5ID0gMTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc1LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz04MD1hdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTgxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6ODI6c3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTgzLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMDQ9c3RhdGljIHNzaXplX3QgX25hbWUjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwNy17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTA4OlxcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9zdGF0cyAqbWZfc3RhdHMgPVxcdFxcdFxcdFxcXFxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEwOS1cXHRcXHRcXHUwMDI2Tk9ERV9EQVRBKGRldi1cXHUwMDNlaWQpLVxcdTAwM2VtZl9zdGF0cztcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTExOD1NRl9BVFRSX1JPKHJlY292ZXJlZCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMjA6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9mYWlsdXJlX2F0dHJbXSA9IHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyMS1cXHRcXHUwMDI2ZGV2X2F0dHJfdG90YWwuYXR0cixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTI4LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI5OmNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cCA9IHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMDpcXHQubmFtZSA9IFxcXCJtZW1vcnlfZmFpbHVyZVxcXCIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzE6XFx0LmF0dHJzID0gbWVtb3J5X2ZhaWx1cmVfYXR0cixcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMi19O1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzUtXFx0e1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM2OlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcIm1lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGxcXFwiLFxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM3OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2c3lzY3RsX21lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGwsXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzg6XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsKSxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzOS1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQ0LVxcdHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0NTpcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJtZW1vcnlfZmFpbHVyZV9yZWNvdmVyeVxcXCIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDY6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnksXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDc6XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSksXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDgtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE2Mi1cXHR7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNjM6XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcXCIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNjQtXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9NTAwPXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfZWFybHlfa2lsbF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTUwOC1cXHRcXHR9IGVsc2Uge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6NTA5OlxcdFxcdFxcdGlmIChzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbClcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTUxMC1cXHRcXHRcXHRcXHRyZXR1cm4gdDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9ODAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaHdwb2lzb25fd2Fsa19vcHMgPSB7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTgxMi0gKiBoYXJkd2FyZSBwb2lzb25lZCBwYWdlcy4gVGhleSBjb3VsZCBoYXBwZW4sIGZvciBleGFtcGxlLCB3aGVuXFxubW0vbWVtb3J5LWZhaWx1cmUuYzo4MTM6ICogbWVtb3J5X2ZhaWx1cmUoKSBmYWlsZWQgdG8gdW5tYXAgdGhlIGVycm9yIHBhZ2UgYXQgdGhlIGZpcnN0IGNhbGwsIG9yXFxubW0vbWVtb3J5LWZhaWx1cmUuYy04MTQtICogd2hlbiBtdWx0aXBsZSBsb2NhbCBtYWNoaW5lIGNoZWNrcyBoYXBwZW5lZCBvbiBkaWZmZXJlbnQgQ1BVcy5cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTIzNT1zdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyMzgtXFx0aW50IG5pZCA9IE1BWF9OVU1OT0RFUztcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEyMzk6XFx0c3RydWN0IG1lbW9yeV9mYWlsdXJlX3N0YXRzICptZl9zdGF0cyA9IE5VTEw7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjQwLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMjgxPXN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEyODMte1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTI4NDpcXHR0cmFjZV9tZW1vcnlfZmFpbHVyZV9ldmVudChwZm4sIHR5cGUsIHJlc3VsdCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMjg1LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xMzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM2OS1cXHQgKiAoZnJvemVuIHNsYWIgYW5kIGxhcmdlLWttYWxsb2MgcGFnZXMgY2Fubm90IGJlIHBpbm5lZCksIGJ1dCBpc1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM3MDpcXHQgKiBoYXJtbGVzczogd2hlcmUgYSB3cm9uZyB2ZXJkaWN0IGNvdWxkIHBhbmljLCBtZW1vcnlfZmFpbHVyZSgpIGhhc1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM3MS1cXHQgKiBhbHJlYWR5IHNldCBQYWdlSFdQb2lzb24sIHdoaWNoIGJhcnMgdGhlIHBhZ2UgZnJvbSB0aGUgYWxsb2NhdG9yLlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDEzPXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA4MC0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIwODE6c3RhdGljIGludCB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjA4Mi17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTMtI2Vsc2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNTQ6c3RhdGljIGlubGluZSBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTUte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTY2PXN0YXRpYyB2b2lkIHB1dF9yZWZfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTczLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE3NDpzdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTc1LVxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxODYtXFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTg3OlxcdGlmIChwZ21hcF9oYXNfbWVtb3J5X2ZhaWx1cmUocGdtYXApKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTg4OlxcdFxcdHJjID0gcGdtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWVtb3J5X2ZhaWx1cmUocGdtYXAsIHBmbiwgMSwgZmxhZ3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE4OS1cXHRcXHQvKlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMjgzPXN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfcGZuKHN0cnVjdCBwZm5fYWRkcmVzc19zcGFjZSAqcGZuX3NwYWNlLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzEwLS8qKlxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjMxMTogKiBtZW1vcnlfZmFpbHVyZV9wZm4gLSBIYW5kbGUgbWVtb3J5IGZhaWx1cmUgb24gYSBwYWdlIG5vdCBiYWNrZWQgYnlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzMTItICogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2UuXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIzMTktICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMzIwOnN0YXRpYyBpbnQgbWVtb3J5X2ZhaWx1cmVfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzIxLXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2MS0vKipcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzNjI6ICogbWVtb3J5X2ZhaWx1cmUgLSBIYW5kbGUgbWVtb3J5IGZhaWx1cmUgb2YgYSBwYWdlLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2My0gKiBAcGZuOiBQYWdlIE51bWJlciBvZiB0aGUgY29ycnVwdGVkIHBhZ2VcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM4NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzODY6aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzg3LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM5NC1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzOTU6XFx0aWYgKCFzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzk2LVxcdFxcdHBhbmljKFxcXCJNZW1vcnkgZmFpbHVyZSBvbiBwYWdlICVseFxcXCIsIHBmbik7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDAtXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNRl9TV19TSU1VTEFURUQpKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwMTpcXHRcXHRod19tZW1vcnlfZmFpbHVyZSA9IHRydWU7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDAyLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDA0LVxcdGlmICghcCkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwNTpcXHRcXHRyZXMgPSBhcmNoX21lbW9yeV9mYWlsdXJlKHBmbiwgZmxhZ3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQwNi1cXHRcXHRpZiAocmVzID09IDApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MTItXFx0XFx0XFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDEzOlxcdFxcdFxcdHJlcyA9IG1lbW9yeV9mYWlsdXJlX3BmbihwZm4sIGZsYWdzKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MTQtXFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MjAtXFx0XFx0XFx0aWYgKHBnbWFwKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDIxOlxcdFxcdFxcdFxcdHJlcyA9IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHBmbiwgZmxhZ3MsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDIyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBwZ21hcCk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MzEtdHJ5X2FnYWluOlxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQzMjpcXHRyZXMgPSB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYihwZm4sIGZsYWdzKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MzMtXFx0LypcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyMy19XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjI0OkVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9mYWlsdXJlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjUtXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjgtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjI5OnN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjMwLVxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjMzLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYzNDpzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1IHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MzU6XFx0REVDTEFSRV9LRklGTyhmaWZvLCBzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfZW50cnksXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjM2LVxcdFxcdCAgICAgIE1FTU9SWV9GQUlMVVJFX0ZJRk9fU0laRSk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDAtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjQxOnN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1LCBtZW1vcnlfZmFpbHVyZV9jcHUpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY0Mi1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NDMtLyoqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjQ0OiAqIG1lbW9yeV9mYWlsdXJlX3F1ZXVlIC0gU2NoZWR1bGUgaGFuZGxpbmcgbWVtb3J5IGZhaWx1cmUgb2YgYSBwYWdlLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY0NS0gKiBAcGZuOiBQYWdlIE51bWJlciBvZiB0aGUgY29ycnVwdGVkIHBhZ2VcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY1OC0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NTk6dm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2MC17XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjYxOlxcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUgKm1mX2NwdTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjItXFx0dW5zaWduZWQgbG9uZyBwcm9jX2ZsYWdzO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2My1cXHRib29sIGJ1ZmZlcl9vdmVyZmxvdztcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NjQ6XFx0c3RydWN0IG1lbW9yeV9mYWlsdXJlX2VudHJ5IGVudHJ5ID0ge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2NS1cXHRcXHQucGZuID1cXHRcXHRwZm4sXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjgtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjY5OlxcdG1mX2NwdSA9IFxcdTAwMjZnZXRfY3B1X3ZhcihtZW1vcnlfZmFpbHVyZV9jcHUpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY3MC1cXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1mX2NwdS1cXHUwMDNlbG9jaywgcHJvY19mbGFncyk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NzQtXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1mX2NwdS1cXHUwMDNlbG9jaywgcHJvY19mbGFncyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjc1OlxcdHB1dF9jcHVfdmFyKG1lbW9yeV9mYWlsdXJlX2NwdSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjc2LVxcdGlmIChidWZmZXJfb3ZlcmZsb3cpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NzktfVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4MDpFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfZmFpbHVyZV9xdWV1ZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjgxLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY4MjpzdGF0aWMgdm9pZCBtZW1vcnlfZmFpbHVyZV93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY4My17XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjg0OlxcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUgKm1mX2NwdTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2ODU6XFx0c3RydWN0IG1lbW9yeV9mYWlsdXJlX2VudHJ5IGVudHJ5ID0geyAwLCB9O1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY4Ni1cXHR1bnNpZ25lZCBsb25nIHByb2NfZmxhZ3M7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2ODgtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjg5OlxcdG1mX2NwdSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1LCB3b3JrKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2OTAtXFx0Zm9yICg7Oykge1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjk4LVxcdFxcdGVsc2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2OTk6XFx0XFx0XFx0bWVtb3J5X2ZhaWx1cmUoZW50cnkucGZuLCBlbnRyeS5mbGFncyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzAwLVxcdH1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwMi1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MDM6c3RhdGljIGludCBfX2luaXQgbWVtb3J5X2ZhaWx1cmVfaW5pdCh2b2lkKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwNC17XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzA1OlxcdHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUgKm1mX2NwdTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MDYtXFx0aW50IGNwdTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcwOC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzA5OlxcdFxcdG1mX2NwdSA9IFxcdTAwMjZwZXJfY3B1KG1lbW9yeV9mYWlsdXJlX2NwdSwgY3B1KTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MTAtXFx0XFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZtZl9jcHUtXFx1MDAzZWxvY2spO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcxMS1cXHRcXHRJTklUX0tGSUZPKG1mX2NwdS1cXHUwMDNlZmlmbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzEyOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bWZfY3B1LVxcdTAwM2V3b3JrLCBtZW1vcnlfZmFpbHVyZV93b3JrX2Z1bmMpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjcxMy1cXHR9XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE0LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjcxNTpcXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcXFwidm1cXFwiLCBtZW1vcnlfZmFpbHVyZV90YWJsZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE2LVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzE4LX1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MTk6Y29yZV9pbml0Y2FsbChtZW1vcnlfZmFpbHVyZV9pbml0KTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MjAtXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3MzMtICogU29mdHdhcmUtdW5wb2lzb24gYSBwYWdlIHRoYXQgaGFzIGJlZW4gcG9pc29uZWQgYnlcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3MzQ6ICogbWVtb3J5X2ZhaWx1cmUoKSBlYXJsaWVyLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjczNS0gKlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzQxPWludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3NTctXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzU4OlxcdGlmIChod19tZW1vcnlfZmFpbHVyZSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc1OS1cXHRcXHR1bnBvaXNvbl9wcl9pbmZvKFxcXCIlI2x4OiBkaXNhYmxlZCBhZnRlciBIVyBtZW1vcnkgZmFpbHVyZVxcXFxuXFxcIixcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjg1ND1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg3OS1cXHRcXHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4ODA6XFx0XFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4ODEtXFx0XFx0ICpcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk2Mi0gKiBAcGZuOiBwZm4gdG8gc29mdC1vZmZsaW5lXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTYzOiAqIEBmbGFnczogZmxhZ3MuIFNhbWUgYXMgbWVtb3J5X2ZhaWx1cmUoKS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjQtICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MDguNDA5Mjk1MTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzUzMjc5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgbXVzaW5nczpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNZW1vcnkgTWFuYWdlbWVudCBRdWlya3MqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgbWVtb3J5X2ZhaWx1cmVgLiBUaGF0J3MgZXhwb3J0ZWQsIHNvIGl0J3MgY2xlYXJseSBhIHB1YmxpYyBpbnRlcmZhY2UsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gVGhlbiBJIHNlZSBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgZGVmaW5lZCBhcyBgc3RhdGljYCBhbmQgY2FsbGVkIGJ5IGBzb2Z0X29mZmxpbmVfcGFnZWAuIFRoYXQncyBjbGFzc2ljIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYnV0IHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhvc2UgdHdvIGlzIGludGVyZXN0aW5nIGFuZCB3b3J0aCBhIGNsb3NlciBsb29rLiBTb21ldGhpbmcgaXMgbWFraW5nIGEgbWVtb3J5IHBhZ2Ugb2ZmbGluZSwgYW5kIEkgd2FudCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS5cblxuTm93LCB0aGUgYXBwZWFyYW5jZSBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaGFzIG1lIGEgbGl0dGxlIHB1enpsZWQuIElzIHRoYXQgZXhwb3J0ZWQgdG9vPyBJIGRvbid0IHJlY2FsbCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkIGlmIHRoYXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIG9yIHNvbWV0aGluZyBpbnRlcm5hbC4gVG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBpdCdzIHVzZWQgYW5kIHdoZXJlIGl0J3MgZGVmaW5lZC4gVGltZSB0byBnbyBkaWcgYXJvdW5kIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgaWYgdGhpcyByZXZlYWxzIHNvbWUgZGVzaWduIGFzc3VtcHRpb25zIEknbSBub3QgZmFtaWxpYXIgd2l0aCwgb3IgaWYgc29tZXRoaW5nIGluIHRoZSBpbnRlcmFjdGlvbiBmZWVscyBhIGxpdHRsZSBvZmYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MTMuODQ0NjI2MDc5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTkzNTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00NDIwPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDI3LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyODogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDQyOS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00NDMwLSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0NDMxOiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMi0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDM2LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQzNzp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjEzLjkxMDU3MDQ1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA5NjE0NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBPcmRlciBTcGxpdHRpbmcgTG9naWMgYW5kIENvbmZpZ3VyYXRpb24gRXhwb3J0KipcblxuQWxyaWdodCwgc28gdGhlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB2YXJpYWJsZS4uLnRoYXQncyBub3QgYSBjb25zdGFudCwgaXQncyBkeW5hbWljLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBhbmQgYWRqdXN0IG15IG1lbnRhbCBtb2RlbCBhY2NvcmRpbmdseS4gSXQgcHJvYmFibHkgZ2V0cyBwdWxsZWQgZnJvbSBhIGRhdGFiYXNlLCBvciBhIGNvbmZpZyBmaWxlLCBzb21ldGhpbmcgbGlrZSB0aGF0LlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB3ZSdyZSBleHBvcnRpbmcgdGhlIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEkgY291bGQndmUgc3dvcm4gd2Ugd2VyZSwgYnV0IEkgY2FuJ3QgZmluZCBpdCBub3cuIElmIGl0ICppcyogYW4gZXhwb3J0ZWQgYXNzZXQgdGhlbiBJJ2xsIGJlIGFibGUgdG8gd29yayB3aXRoIGl0IGFjY29yZGluZ2x5LCBidXQgaXQgbmVlZHMgdG8gYmUgYXZhaWxhYmxlLiBOZWVkIHRvIGNvbmZpcm0gdGhhdC4gR290dGEga2VlcCBhbiBleWUgb3V0IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBpcyByZWFkeSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNToxNy45MjAxODc0MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzk2NzM1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdF9vZmZsaW5lX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTI2ODI9c3RhdGljIHZvaWQgbWVtb3J5X2ZhaWx1cmVfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY5Ni1cXHRcXHRpZiAoZW50cnkuZmxhZ3MgXFx1MDAyNiBNRl9TT0ZUX09GRkxJTkUpXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjk3OlxcdFxcdFxcdHNvZnRfb2ZmbGluZV9wYWdlKGVudHJ5LnBmbiwgZW50cnkuZmxhZ3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY5OC1cXHRcXHRlbHNlXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI4NTQ9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjAtLyoqXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTYxOiAqIHNvZnRfb2ZmbGluZV9wYWdlIC0gU29mdCBvZmZsaW5lIGEgcGFnZS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NjItICogQHBmbjogcGZuIHRvIHNvZnQtb2ZmbGluZVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTg0LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk4NTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5ODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwOToyNToxOS4yOTk4NjgwNThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMzODYwOTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBTeW1ib2xzKipcblxuUmlnaHQsIHNvIEknbSBob25pbmcgaW4gb24gc3BlY2lmaWMgc3ltYm9scyB3aXRoaW4gdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcHJpb3JpdGl6ZSBgbWVtb3J5X2ZhaWx1cmVgLCBgc29mdF9vZmZsaW5lX3BhZ2VgLCBhbmQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBUaG9zZSBzZWVtIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGludmVzdGlnYXRpb24uIFRoaW5raW5nIHRoaXMgdGhyb3VnaCwgSSdtIGNvbmZpZGVudCBpbiB0aGUgcmVsZXZhbmNlIG9mIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEJvdGggcHJvdmlkZSBleGNlbGxlbnQgaW5zaWdodHMgaW50byBlcnJvciBjb25kaXRpb25zIGFuZCBncmFjZWZ1bCBkZWdyYWRhdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBhbiBleHBvcnRlZCBzeW1ib2wgb3IganVzdCBhIGxvY2FsIGdsb2JhbC4gSXTigJlzIGNyaXRpY2FsIHRvIGtub3cgaXRzIHNjb3BlIGJlZm9yZSBkZXRlcm1pbmluZyBob3cgYmVzdCB0byB1dGlsaXplIGFuZCBpbnRlcnByZXQgaXRzIHZhbHVlLiBJZiBpdCBpcyBvbmx5IGxvY2FsLCB0aGVuIGFjY2VzcyBtaWdodCBiZSBsaW1pdGVkIHRvIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCBtZWFuaW5nIGl0IG1pZ2h0IG5vdCBiZSByZWxldmFudCBmb3IgZXh0ZXJuYWwgYW5hbHlzaXMgYW5kIGRlYnVnZ2luZy4gSWYgaXQncyBleHBvcnRlZCwgdGhlIGltcGxpY2F0aW9ucyBhcmUgdmVyeSBkaWZmZXJlbnQsIGFuZCBpdCBiZWNvbWVzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBHb3R0YSBkaWcgaW4gYW5kIGNoZWNrIHRoZSBzeW1ib2wgdGFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjI4LjYzODQ4MDM3OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ1NDMwMTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MjguNzMzMDM0MTYyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDM0NzkzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipOYXZpZ2F0aW5nIEdsb2JhbCBTY29wZSBhbmQgUG90ZW50aWFsIEZ1bmN0aW9ucyoqXG5cbkhtbSwgdGhpcyB2YXJpYWJsZSBpc24ndCAqZXhwbGljaXRseSogZXhwb3J0ZWQsIGJ1dCBpdCdzIGNsZWFybHkgaGFuZ2luZyBhcm91bmQgaW4gZ2xvYmFsIHNjb3BlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBvciBtYW5pcHVsYXRlZC4gTGV0J3Mgc2VlLi4uIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBmb2xpb19zcGxpdGAgZnVuY3Rpb24sIG9yIG1heWJlIHRoYXQgb3RoZXIgdXRpbGl0eSB0aGF0IGhhbmRsZXMgbGFyZ2UgcGFnZXMsIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIFRob3NlIHNvdW5kIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB3aGVyZSBzb21ldGhpbmcgZ2xvYmFsLCBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWlnaHQgZ2V0IHVzZWQuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTcyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MzMuNzc2NTE2MDQyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzYzODY1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9Mzc5OT1zdGF0aWMgaW50IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0MS1cXG5tbS9odWdlX21lbW9yeS5jOjM4NDI6XFx0XFx0Zm9saW9fc3BsaXRfbWVtY2dfcmVmcyhmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zODQzLVxcdFxcdHNwbGl0X3BhZ2Vfb3duZXIoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzkyNj1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDgxLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDA4MjogKiBfX2ZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTQwODMtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MTAxLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDEwMjpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTQxMDMtXFx0XFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI5OC0vKipcXG5tbS9odWdlX21lbW9yeS5jOjQyOTk6ICogZm9saW9fc3BsaXRfdW5tYXBwZWQoKSAtIHNwbGl0IGEgbGFyZ2UgYW5vbiBmb2xpbyB0aGF0IGlzIGFscmVhZHkgdW5tYXBwZWRcXG5tbS9odWdlX21lbW9yeS5jLTQzMDAtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MzE5LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDMyMDppbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG5tbS9odWdlX21lbW9yeS5jLTQzMjEte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00Mzg3PWludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MzkxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDM5MjpcXHRyZXR1cm4gX19mb2xpb19zcGxpdChmb2xpbywgbmV3X29yZGVyLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHBhZ2UsIGxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00MzkzLVxcdFxcdFxcdCAgICAgU1BMSVRfVFlQRV9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM5Ni0vKipcXG5tbS9odWdlX21lbW9yeS5jOjQzOTc6ICogZm9saW9fc3BsaXQoKSAtIHNwbGl0IGEgZm9saW8gYXQgQHNwbGl0X2F0IHRvIGEgQG5ld19vcmRlciBmb2xpb1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDM5OC0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0MTktICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDIwOmludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQyMS1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubW0vaHVnZV9tZW1vcnkuYy00NDIyLXtcXG5tbS9odWdlX21lbW9yeS5jOjQ0MjM6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQ0MjQtXFx0XFx0XFx0ICAgICBTUExJVF9UWVBFX05PTl9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc0Mj1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4MzQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcXG5tbS9odWdlX21lbW9yeS5jOjQ4MzU6XFx0XFx0XFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXFxubW0vaHVnZV9tZW1vcnkuYy00ODM2LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ4NTk9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDkxMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbl9mb2xpb19vZmZzZXQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDkxMTpcXHRcXHRcXHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ5MTItXFx0XFx0XFx0XFx0c3BsaXQrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6MzMuODYwMTYwMjY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMTkzMTg2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCBgbWluX29yZGVyX2Zvcl9zcGxpdGAgYXJlIGRlZmluaXRlbHkga2V5IGZvY3VzIGFyZWFzIHJpZ2h0IG5vdy4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRob3NlLlxuXG5Ob3csIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlndXJhdGlvbnMuIEkga25vdyB0aGVzZSBjYW4gb2Z0ZW4gYmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBhbmQgdGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGhvd2V2ZXIsIHRoZSBkZWZhdWx0IGZvciBzeXprYWxsZXIgaXMgeDg2XzY0LCB3aGljaCBnZW5lcmFsbHkgc3VwcG9ydHMgdGhlc2UgZmVhdHVyZXMuIFNvLCBgTUVNT1JZX0ZBSUxVUkVgIHJlbGllcyBvbiBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0J3MgZ29vZCB0byBjb25maXJtLlxuXG5JJ2xsIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIHR3byBleHBsaWNpdCBjb25maWdzOiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIVxuXG5BbHJpZ2h0LCB3aGF0IGVsc2UgaXMgYmVpbmcgY2hhbmdlZCBoZXJlPyBBaCwgaGVyZSdzIGFuIGludGVyZXN0aW5nIG9uZTogdGhlIHBhdGNoIGlzIGFkZGluZyBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtgLiBPa2F5LCBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYC4gSSB2YWd1ZWx5IHJlY2FsbCB0aGlzIGJlaW5nIHJlbGF0ZWQgdG8gZGVidWdnaW5nLiBMZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LCBJIGJlbGlldmUgaXQncyBlbmFibGVkIHdoZW4gYENPTkZJR19ERUJVR19WTWAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYC4uLiBhbmQgc2VlIHdoYXQgaXQgaXMgd2FybmluZyBhYm91dCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjQxLjA3OTQ5MjI3NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3OTQ4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbWRlYnVnLmg9MTg9dm9pZCB2bWFfaXRlcl9kdW1wX3RyZWUoY29uc3Qgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTc4LX0pXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmg6Nzk6I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8oY29uZCwgZm9saW8pXFx0KHtcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtODAtXFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFxcXCIuZGF0YS4ub25jZVxcXCIpIF9fd2FybmVkO1xcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNi0jZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjEzNzojZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbykgIEJVSUxEX0JVR19PTl9JTlZBTElEKGNvbmQpXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtMTM4LSNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX01NKGNvbmQsIG1tKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjU6NDEuMzA3NDQ1NzU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NDMyMjAzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgQ29uZGl0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGJyZWFrIGRvd24gdGhlIHRhc2suIEhlcmUgd2Ugd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29uZGl0aW9ucyogdW5kZXIgd2hpY2ggYFZNX1dBUk5fT05fT05DRV9GT0xJT2AgZ2V0cyB0cmlnZ2VyZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgc2l0dWF0aW9uIGlzIGNyaXRpY2FsLCBpc24ndCBpdD8gV2UgY2FuJ3QganVzdCByZWFjdDsgd2UgbmVlZCB0byBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgbGVhZHMgdXAgdG8gdGhpcyB3YXJuaW5nIGJlaW5nIGVtaXR0ZWQuIEl04oCZcyBsaWtlIGRlYnVnZ2luZzogd2l0aG91dCBjb250ZXh0LCB5b3UncmUganVzdCBzdGFiYmluZyBpbiB0aGUgZGFyay4gU28sIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIHRoZSBleGFjdCBjaGVjaywgb3IgY2hlY2tzLCB0aGF0IGxlYWQgdG8gdGhhdCBtYWNybyBiZWluZyBpbnZva2VkLiBJcyBpdCByZWxhdGVkIHRvIGZvbGlvIG1hbmFnZW1lbnQsIHBhZ2UgZmxhZ3MsIGxvY2tpbmcsIG9yIHNvbWUgc29ydCBvZiBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3Rpb24sIG9yIG1heWJlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBJdOKAmXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGFuIGltcG9ydGFudCBhcmVhLiBGaW5kaW5nIHRoYXQgY29uZGl0aW9uIGxldHMgbWUgZGV0ZXJtaW5lIGlmIHRoZSB3YXJuaW5nIGlzIGp1c3RpZmllZCwgYSByZWQgaGVycmluZywgb3Igc29tZXRoaW5nIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIFdoYXQgYXJlIHRoZSByZWxldmFudCBzdXJyb3VuZGluZyBsaW5lcyBhbmQgZnVuY3Rpb25zPyBJcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyBhYm91dCBgZm9saW9gIHRoYXQgaXMgYmVpbmcgZmxhZ2dlZD8gVGhlIGdvYWwgaGVyZSBpc24ndCBqdXN0IHRvIHNlZSAqaWYqIGl0IGZpcmVzLCBidXQgdG8gZmlndXJlIG91dCAqd2h5KiBpdCBmaXJlcyBhbmQgd2hhdCB0aG9zZSBpbXBsaWNhdGlvbnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjUxLjE1MDY2ODg5M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tbWRlYnVnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgTElOVVhfTU1fREVCVUdfSFxcbiAgIDM6XFx0I2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDFcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgcGFnZTtcXG4gICA5OlxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcXG4gIDEwOlxcdHN0cnVjdCBtbV9zdHJ1Y3Q7XFxuICAxMTpcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yO1xcbiAgMTI6XFx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3Q7XFxuICAxMzpcXHRcXG4gIDE0OlxcdHZvaWQgZHVtcF9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbiAgMTU6XFx0dm9pZCBkdW1wX3ZtYShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuICAxNjpcXHR2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbiAgMTc6XFx0dm9pZCBkdW1wX3ZtZyhjb25zdCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbiAgMTg6XFx0dm9pZCB2bWFfaXRlcl9kdW1wX3RyZWUoY29uc3Qgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pKTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0I2lmZGVmIENPTkZJR19ERUJVR19WTVxcbiAgMjE6XFx0I2RlZmluZSBWTV9CVUdfT04oY29uZCkgQlVHX09OKGNvbmQpXFxuICAyMjpcXHQjZGVmaW5lIFZNX0JVR19PTl9QQUdFKGNvbmQsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjM6XFx0XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI0OlxcdFxcdFxcdGlmICh1bmxpa2VseShjb25kKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI1OlxcdFxcdFxcdFxcdGR1bXBfcGFnZShwYWdlLCBcXFwiVk1fQlVHX09OX1BBR0UoXFxcIiBfX3N0cmluZ2lmeShjb25kKVxcXCIpXFxcIik7XFxcXFxcbiAgMjY6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjc6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI4OlxcdFxcdH0gd2hpbGUgKDApXFxuICAyOTpcXHQjZGVmaW5lIFZNX0JVR19PTl9GT0xJTyhjb25kLCBmb2xpbylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMDpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzI6XFx0XFx0XFx0XFx0ZHVtcF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgXFxcIlZNX0JVR19PTl9GT0xJTyhcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICAzMzpcXHRcXHRcXHRcXHRCVUcoKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzNDpcXHRcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzU6XFx0XFx0fSB3aGlsZSAoMClcXG4gIDM2OlxcdCNkZWZpbmUgVk1fQlVHX09OX1ZNQShjb25kLCB2bWEpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzc6XFx0XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM4OlxcdFxcdFxcdGlmICh1bmxpa2VseShjb25kKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM5OlxcdFxcdFxcdFxcdGR1bXBfdm1hKHZtYSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDA6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDE6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDQyOlxcdFxcdH0gd2hpbGUgKDApXFxuICA0MzpcXHQjZGVmaW5lIFZNX0JVR19PTl9NTShjb25kLCBtbSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA0NDpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDY6XFx0XFx0XFx0XFx0ZHVtcF9tbShtbSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDc6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDg6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDQ5OlxcdFxcdH0gd2hpbGUgKDApXFxuICA1MDpcXHQjZGVmaW5lIFZNX1dBUk5fT05fUEFHRShjb25kLCBwYWdlKVxcdFxcdCh7XFx0XFx0XFx0XFxcXFxcbiAgNTE6XFx0XFx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1MzpcXHRcXHRpZiAodW5saWtlbHkoX19yZXRfd2FybikpIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1NDpcXHRcXHRcXHRkdW1wX3BhZ2UocGFnZSwgXFxcIlZNX1dBUk5fT05fUEFHRShcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICA1NTpcXHRcXHRcXHRXQVJOX09OKDEpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDU2OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1NzpcXHRcXHR1bmxpa2VseShfX3JldF93YXJuKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA1ODpcXHR9KVxcbiAgNTk6XFx0I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfUEFHRShjb25kLCBwYWdlKVxcdCh7XFx0XFx0XFx0XFxcXFxcbiAgNjA6XFx0XFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFxcXCIuZGF0YS4ub25jZVxcXCIpIF9fd2FybmVkO1xcdFxcdFxcdFxcXFxcXG4gIDYxOlxcdFxcdGludCBfX3JldF93YXJuX29uY2UgPSAhIShjb25kKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2MzpcXHRcXHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbmNlIFxcdTAwMjZcXHUwMDI2ICFfX3dhcm5lZCkpIHtcXHRcXHRcXHRcXFxcXFxuICA2NDpcXHRcXHRcXHRkdW1wX3BhZ2UocGFnZSwgXFxcIlZNX1dBUk5fT05fT05DRV9QQUdFKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDY1OlxcdFxcdFxcdF9fd2FybmVkID0gdHJ1ZTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2NjpcXHRcXHRcXHRXQVJOX09OKDEpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDY3OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2ODpcXHRcXHR1bmxpa2VseShfX3JldF93YXJuX29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDY5OlxcdH0pXFxuICA3MDpcXHQjZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXFx0XFx0KHtcXHRcXHRcXHRcXFxcXFxuICA3MTpcXHRcXHRpbnQgX19yZXRfd2FybiA9ICEhKGNvbmQpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDcyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDczOlxcdFxcdGlmICh1bmxpa2VseShfX3JldF93YXJuKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc0OlxcdFxcdFxcdGR1bXBfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIFxcXCJWTV9XQVJOX09OX0ZPTElPKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDc1OlxcdFxcdFxcdFdBUk5fT04oMSk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNzY6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc3OlxcdFxcdHVubGlrZWx5KF9fcmV0X3dhcm4pO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc4OlxcdH0pXFxuICA3OTpcXHQjZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbylcXHQoe1xcdFxcdFxcdFxcXFxcXG4gIDgwOlxcdFxcdHN0YXRpYyBib29sIF9fc2VjdGlvbihcXFwiLmRhdGEuLm9uY2VcXFwiKSBfX3dhcm5lZDtcXHRcXHRcXHRcXFxcXFxuICA4MTpcXHRcXHRpbnQgX19yZXRfd2Fybl9vbmNlID0gISEoY29uZCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODM6XFx0XFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSBcXHUwMDI2XFx1MDAyNiAhX193YXJuZWQpKSB7XFx0XFx0XFx0XFxcXFxcbiAgODQ6XFx0XFx0XFx0ZHVtcF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgXFxcIlZNX1dBUk5fT05fT05DRV9GT0xJTyhcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICA4NTpcXHRcXHRcXHRfX3dhcm5lZCA9IHRydWU7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODY6XFx0XFx0XFx0V0FSTl9PTigxKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA4NzpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgODg6XFx0XFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbmNlKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA4OTpcXHR9KVxcbiAgOTA6XFx0I2RlZmluZSBWTV9XQVJOX09OX09OQ0VfTU0oY29uZCwgbW0pXFx0XFx0KHtcXHRcXHRcXHRcXFxcXFxuICA5MTpcXHRcXHRzdGF0aWMgYm9vbCBfX3NlY3Rpb24oXFxcIi5kYXRhLi5vbmNlXFxcIikgX193YXJuZWQ7XFx0XFx0XFx0XFxcXFxcbiAgOTI6XFx0XFx0aW50IF9fcmV0X3dhcm5fb25jZSA9ICEhKGNvbmQpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDk0OlxcdFxcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uY2UgXFx1MDAyNlxcdTAwMjYgIV9fd2FybmVkKSkge1xcdFxcdFxcdFxcXFxcXG4gIDk1OlxcdFxcdFxcdGR1bXBfbW0obW0pO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDk2OlxcdFxcdFxcdF9fd2FybmVkID0gdHJ1ZTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA5NzpcXHRcXHRcXHRXQVJOX09OKDEpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDk4OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA5OTpcXHRcXHR1bmxpa2VseShfX3JldF93YXJuX29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTAwOlxcdH0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI1OjUxLjE1MDgwOTc1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU0ODQyMTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuICBJJ3ZlIGdvdCBgQ09ORklHX0RFQlVHX1ZNYCBpbiB0aGUgbWl4LCBhbmQgdGhlIGNvbmZpZ3MgYXJlIGNsZWFybHk6IGBNRU1PUllfRkFJTFVSRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBvZiBjb3Vyc2UgYERFQlVHX1ZNYC5cblxuSSdtIHplcm9pbmcgaW4gb24gYSBmZXcga2V5IHN5bWJvbHM6IGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCB0aGVuIHRoYXQgaW50ZXJlc3RpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uLiAgSXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCAqaXMqIGEgZ2xvYmFsIGZ1bmN0aW9uIGluIGBtbS9odWdlX21lbW9yeS5jYC4gU3l6a2FsbGVyIGNvdWxkIHByb2JhYmx5IHJlYWNoIGl0IGlmIHRoZXJlJ3MgYSBnb29kIHBhdGgsIGJ1dCBoaXR0aW5nIHRoZSBlbnRyeSBwb2ludHMgZGlyZWN0bHkgaXMgdGhlIGJldHRlciBwYXRoIGZvcndhcmQuIFNvLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX3BhZ2VgIGFyZSBteSB0b3AgdGFyZ2V0cywgYW5kIHNpbmNlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBjYWxsZWQgYnkgdGhvc2UgZnVuY3Rpb25zIGl0J3MgYWxzbyB3b3J0aCBzb21lIGF0dGVudGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBpdCdzIG5vdDogYHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pYCwgc28gd2UgaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBFeGNlbGxlbnQuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncy4gTG9va3MgbGlrZSBJIGhhdmU6IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBDT05GSUdfREVCVUdfVk1gLlxuXG5IYW5nIG9uLCBkb2VzIGBDT05GSUdfREVCVUdfVk1gICpyZWFsbHkqIG1hdHRlcj8gVGhlIHBhdGNoIGFkZHMgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AsIGJ1dCB0aGF0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSXQgYWxzbyBhZGRzIGxvY2tpbmcgaW4gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgKHdoaWNoIGFyZSBjYWxsZWQgYnkgYHNvZnRfb2ZmbGluZV9wYWdlYCkuIFRoZSBsb2NraW5nIGl0c2VsZiBpcyBhbHdheXMgdGhlcmUsIGJ1dCB0aGF0IHdhcm5pbmcgaXMgb25seSBhY3RpdmUgd2l0aCBgQ09ORklHX0RFQlVHX1ZNYCwgYW5kIGNvdWxkIGNhdGNoIHNvbWUgaXNzdWVzLiBTbyB5ZWFoLCBJJ20gaW5jbHVkaW5nIGBERUJVR19WTWAgd2l0aCB0aGlzLiBNYWtlcyBzZW5zZS5cblxuQWxyaWdodCwgbGV0J3MgcmVjYXAgdGhlIHJlYXNvbmluZy4gIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgZml4aW5nIGEgbG9ja2luZyBwcm9ibGVtIHdpdGhpbiB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgcGF0aHdheXMgd2hlbiBjYWxsaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4gVGhlcmUncyBhbHNvIHRoYXQgYWRkZWQgd2FybmluZyB3aXRoaW4gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBmb2xpbyBpcyBsb2NrZWQuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHJlYWxseSBjb25jZW50cmF0ZSBvbiBmdXp6aW5nIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAgdG8gcmVhbGx5IGhhbW1lciBvbiB0aGUgbmV3IGxvY2tpbmcgYmVoYXZpb3IuXG5cblNvLCB0aGUgcGxhbjpcblxuQ29uZmlnczpcbi0gYE1FTU9SWV9GQUlMVVJFYFxuLSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG4tIGBERUJVR19WTWBcblxuQW5kIHRoZSBmb2N1cyBzeW1ib2xzOlxuLSBgbWVtb3J5X2ZhaWx1cmVgXG4tIGBzb2Z0X29mZmxpbmVfcGFnZWBcbi0gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybS4gYHNvZnRfb2ZmbGluZV9wYWdlYCBjYWxscyBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgd2hpY2ggZG9lcyBpbmRlZWQgY2FsbCBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFNvLCB0aGF0J3MgZGVmaW5pdGVseSBhIHZpYWJsZSBlbnRyeSBwb2ludC4gU2FtZSBnb2VzIGZvciBgbWVtb3J5X2ZhaWx1cmVgLCBpdCBjYWxscyBgbWluX29yZGVyX2Zvcl9zcGxpdGAuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcsIGp1c3QgdG8gYmUgc3VyZSwgYW55IG90aGVyIGVudHJ5IHBvaW50cy4gSXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGNhbGxlZCBmcm9tIGBmb2xpb19zcGxpdGA/IE5vcGUsIGl0J3MganVzdCBkZWZpbmVkIGluIGBtbS9odWdlX21lbW9yeS5jYC4gQnV0IHdoZXJlIGlzIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBjYWxsZWQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDk3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjY6MDEuNjk5MjM0NjM5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA0OTkyMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWluX29yZGVyX2Zvcl9zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00NDIwPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDI3LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQyODogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDQyOS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00NDMwLSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0NDMxOiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMi0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDM2LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQzNzp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzOC17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzODY9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MTYtXFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTE3OlxcdFxcdG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUxOC1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODU0PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODcyLVxcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjg3MzpcXHRcXHRuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4NzQtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjY6MDEuNzk5NzQwNDAyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDQ2NDQ4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYGh1Z2V0bGJfdW52bWFwX2hzdGF0ZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaHVnZXRsYl91bnZtYXBfaHN0YXRlYCwgYW5kIEkndmUgdHJhY2VkIGl0cyB1c2FnZSB0byBqdXN0IG9uZSBwbGFjZTogYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0J3MgYSBiaXQgb2RkLCB1c3VhbGx5IHRoZXNlIHNvcnRzIG9mIGZ1bmN0aW9ucyBhcmUgdXNlZCBtb3JlIHdpZGVseS4gTGV0IG1lIGp1c3QgY29uZmlybSB3aGVyZSBpdCdzIGFjdHVhbGx5ICpkZWZpbmVkKi4gUmlnaHQsIGBtbS9odWdlX21lbW9yeS5jYC4gU3RpbGwsIHRoYXQgc2luZ2xlIGNhbGwgc2l0ZSBmZWVscyBsaW1pdGVkIGZvciBzb21ldGhpbmcgdGhhdCBzZWVtcyBzbyBmdW5kYW1lbnRhbC5cblxuSGFuZyBvbi4uLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGluY2x1ZGUgZmlsZXMuIE1heWJlIGl0J3MgYmVpbmcgdXNlZCB0aHJvdWdoIGFuIGluY2x1ZGUgZmlsZSB0byBwcmV2ZW50IGFuIGluY2x1ZGUgY3ljbGUuLi4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCB3b3VsZCBiZSB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIGFueSBpbmRpcmVjdCB1c2FnZS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgY3JpdGljYWwuIEl0IHdvdWxkIGJlIGEgYmFkIGxvb2sgdG8gbWlzcyBhIHN1YnRsZSB1c2FnZSBwYXR0ZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA0NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI2OjA1LjYwNDM4Nzc2NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NzY1NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDA1PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MDY6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDA3LWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjU3PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY2Mi1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2NjM6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY2NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA5OjI2OjA1LjgxNDE1ODAwMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTgxMjE5NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgRXJyb3IgSGFuZGxpbmcgYW5kIE5leHQgU3RlcHMqKlxuXG5BbHJpZ2h0LCBJJ3ZlIGdvdCBpdC4gVGhpcyBsb2dpYyBwYXRoIGlzIHNwZWNpZmljYWxseSB0cmlnZ2VyZWQgd2l0aGluIHRoZSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCBjb250ZXh0cy4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtIGNvbnNpZGVyYWJseSwgYW5kIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVycm9yIGhhbmRsaW5nIGZsb3cuIEFsc28sIGNoZWNraW5nIHRoZSBmb2N1cyBzeW1ib2xzLCB3aGljaCBzZWVtIHRvIGJlIGNvcnJlY3QsIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgc3lzdGVtIGlzIHRhcmdldGluZyB0aGUgcmVsZXZhbnQgcGFydHMuXG5cbkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgdGhlIGFwcHJvcHJpYXRlIGNvdXJzZSBvZiBhY3Rpb24gaXMgY2xlYXIuIEkgbmVlZCB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AgYXQgdGhpcyBqdW5jdHVyZSB0byBhZGRyZXNzIHRoZSBjb25kaXRpb24uIFRoaXMgc2hvdWxkIHJlc29sdmUgdGhlIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MzYsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDk6MjY6MTAuMzk1Mzc5NzAzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzA4NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIG1lbW9yeV9mYWlsdXJlIGFuZCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQuIEl0IGFsc28gYWRkcyBhIFZNX1dBUk5fT05fT05DRV9GT0xJTyBpbiBtaW5fb3JkZXJfZm9yX3NwbGl0IHRvIGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tpbmcgaXMgY29ycmVjdCBhbmQgbm8gd2FybmluZ3MgYXJlIHRyaWdnZXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NraW5nIGlzc3VlIGluIG1lbW9yeV9mYWlsdXJlIGFuZCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Ugd2hlbiBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQuIEl0IGFsc28gYWRkcyBhIFZNX1dBUk5fT05fT05DRV9GT0xJTyBpbiBtaW5fb3JkZXJfZm9yX3NwbGl0IHRvIGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGxvY2tpbmcgaXMgY29ycmVjdCBhbmQgbm8gd2FybmluZ3MgYXJlIHRyaWdnZXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6wdjr[1] Phase: Succeeded StartedAt: 2026-08-05 09:26:22 +0000 UTC FinishedAt: 2026-08-05 09:26:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 09:26:22 +0000 UTC FinishedAt: 2026-08-05 09:26:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2] Phase: Succeeded StartedAt: 2026-08-05 09:26:22 +0000 UTC FinishedAt: 2026-08-05 10:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-05 09:26:22 +0000 UTC FinishedAt: 2026-08-05 10:01:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 09:26:22 +0000 UTC FinishedAt: 2026-08-05 09:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 09:26:22 +0000 UTC FinishedAt: 2026-08-05 09:26:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6wdjr/series-workflow6wdjr-convert-artifact-2475905706/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 09:26:32 +0000 UTC FinishedAt: 2026-08-05 09:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 09:26:32 +0000 UTC FinishedAt: 2026-08-05 09:45:30 +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:*1ff12353-57fa-414e-8485-a91ba4a406b1,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-workflow6wdjr/series-workflow6wdjr-convert-artifact-2475905706/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": "1db9295b-493e-4d10-bee4-b1585ad8d3a2", "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-workflow6wdjr/series-workflow6wdjr-build-action-4158180376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 09:26:32 +0000 UTC FinishedAt: 2026-08-05 09:45:20 +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:*1ff12353-57fa-414e-8485-a91ba4a406b1,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-workflow6wdjr/series-workflow6wdjr-convert-artifact-2475905706/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": "1db9295b-493e-4d10-bee4-b1585ad8d3a2", "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-workflow6wdjr/series-workflow6wdjr-build-action-4158180376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 09:45:30 +0000 UTC FinishedAt: 2026-08-05 09:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 09:45:30 +0000 UTC FinishedAt: 2026-08-05 09:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 09:45:30 +0000 UTC FinishedAt: 2026-08-05 09:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 09:45:30 +0000 UTC FinishedAt: 2026-08-05 09:45:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6wdjr/series-workflow6wdjr-convert-artifact-1824264645/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 09:45:40 +0000 UTC FinishedAt: 2026-08-05 09:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 09:45:40 +0000 UTC FinishedAt: 2026-08-05 09:47:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1db9295b-493e-4d10-bee4-b1585ad8d3a2,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-workflow6wdjr/series-workflow6wdjr-build-action-4158180376/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-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 09:47:39 +0000 UTC FinishedAt: 2026-08-05 09:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 09:47:39 +0000 UTC FinishedAt: 2026-08-05 09:47:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 09:47:39 +0000 UTC FinishedAt: 2026-08-05 10:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 09:47:39 +0000 UTC FinishedAt: 2026-08-05 10:01:44 +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:*1ff12353-57fa-414e-8485-a91ba4a406b1,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-workflow6wdjr/series-workflow6wdjr-convert-artifact-1824264645/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": "a6869e1a-07af-443d-ba6a-48775cf67ba1", "success": false },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6wdjr/series-workflow6wdjr-build-action-3666310673/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 09:47:39 +0000 UTC FinishedAt: 2026-08-05 10:01:34 +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:*1ff12353-57fa-414e-8485-a91ba4a406b1,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-workflow6wdjr/series-workflow6wdjr-convert-artifact-1824264645/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": "a6869e1a-07af-443d-ba6a-48775cf67ba1", "success": false },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6wdjr/series-workflow6wdjr-build-action-3666310673/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-08-05 10:01:44 +0000 UTC FinishedAt: 2026-08-05 10:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wdjr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e47602c51d20a93fa1711ed896dc9480de4374d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"b0ec4d6e-6671-4b25-860d-98cf480bdd8f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-08-05 10:01:44 +0000 UTC FinishedAt: 2026-08-05 10:01:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}