Name: series-workflowdxs2q Phase: Succeeded StartedAt: 2026-09-08 18:37:35 +0000 UTC FinishedAt: 2026-09-08 23:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[0] Phase: Succeeded StartedAt: 2026-09-08 18:37:35 +0000 UTC FinishedAt: 2026-09-08 19:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 18:37:35 +0000 UTC FinishedAt: 2026-09-08 19:15:36 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "a573d606-4fac-4fd9-a27d-a387ffb9417e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kdamond_apply_schemes", "kdamond_fn", "damon_start" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfZm4mIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbiBtbS9kYW1vbi9jb3JlLmMgdXBkYXRlcyBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSB0byByZXNldCBzY2hlbWUgcXVvdGEgdHJhY2tpbmcgc3RhdGUgKHNldHRpbmcgcy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gdG8gTlVMTCBhbmQgcy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tIHRvIDApIHdoZW4gYSB0YXJnZXQgaXMgZm91bmQgdG8gYmUgaW52YWxpZC4gXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIHBvaW50ZXIgYW5kIGFkZHJlc3MgdHJhY2tpbmcgc3RhdGUgdG8gcHJldmVudCBzdGFsZSB0YXJnZXQgcmVmZXJlbmNlcyBhbmQgbG9naWMgYnVncyBhY3Jvc3Mgc2NoZW1lIGV2YWx1YXRpb24gY3ljbGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZS9VQUYgaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCB0YXJnZXQgbGlmZXRpbWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnRpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIChrZGFtb25kX2FwcGx5X3NjaGVtZXMpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YSB0YXJnZXQgdHJhY2tpbmcgc3RhdGUgd2hlbiBhIHRhcmdldCBpcyBtYXJrZWQgaW52YWxpZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBvciBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgZGVyZWZlcmVuY2VzIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGZmMzMzNjg4ODNkYjQ1ZDUxZGY4YzUxNTkyYjExYWJhMTI0ZTdmOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi5hMzYwYzQxY2RhODljIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzg5LDggJiM0MzszMzg5LDE1IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuIFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuLVx0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXG4mIzQzO1x0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcbiYjNDM7XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbiYjNDM7XHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gIT0gdClcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIChrZGFtb25kX2FwcGx5X3NjaGVtZXMpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YSB0YXJnZXQgdHJhY2tpbmcgc3RhdGUgd2hlbiBhIHRhcmdldCBpcyBtYXJrZWQgaW52YWxpZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBvciBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgZGVyZWZlcmVuY2VzIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGZmMzMzNjg4ODNkYjQ1ZDUxZGY4YzUxNTkyYjExYWJhMTI0ZTdmOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uYTM2MGM0MWNkYTg5YyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzM4OSw4ICYjNDM7MzM4OSwxNSBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYykKIAltYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpOwogCW11dGV4X2xvY2soJmFtcDtjLSZndDt3YWxrX2NvbnRyb2xfbG9jayk7CiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKLQkJaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKQomIzQzOwkJaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7CiYjNDM7CQkJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHsKJiM0MzsJCQkJaWYgKHMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCXMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CQkJCXMtJmd0O3F1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzOwkJCX0KIAkJCWNvbnRpbnVlOwomIzQzOwkJfQogCQlkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTEKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIENvcmUgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgZGlmZiBpcyBkb2luZy4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AuIEFoLCBEQU1PTiDigJMgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3Jpbmcgc3Vic3lzdGVtIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhLiBFeGNlbGxlbnQuCgpOb3csIGxldCYjMzk7cyBnZXQgZ3JhbnVsYXIuIEkgbmVlZCB0byBrbm93ICp3aGF0KiBmdW5jdGlvbiB3aXRoaW4gYGNvcmUuY2AgaXMgYmVpbmcgdHdlYWtlZC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBjaGFuZ2UsIGFuZCB0aGVuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCwgYW5kIGhvdyBpdCBpbXBhY3RzIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBLY29uZmlnLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoaXMgaGFzIGFueSBpbXBsaWNhdGlvbnMgZm9yIHN5c2ZzIG9yIHByb2NmcyBpbnRlcmZhY2VzLCBzaW5jZSBEQU1PTiBvZnRlbiBleHBvc2VzIGRhdGEgdGhyb3VnaCB0aG9zZSBtZWNoYW5pc21zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhpcyBmdW5jdGlvbmFsaXR5LgoKSSYjMzk7bGwgYmUgdXNpbmcgYGdyZXBgIGV4dGVuc2l2ZWx5IGhlcmUsIGFuZCBvZiBjb3Vyc2UsIEkmIzM5O2xsIGJlIHJlYWRpbmcgdGhlIHJlbGV2YW50IGNvZGUuIE5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM4MDpcdFxuMzM4MTpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zMzgyOlx0XG4zMzgzOlx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjMzODQ6XHRcdH1cbjMzODU6XHRcbjMzODY6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zMzg3Olx0XHRcdHJldHVybjtcbjMzODg6XHRcbjMzODk6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zMzkwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzM5MTpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMzOTI6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zMzkzOlx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzOTQ6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzM5NTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjMzOTY6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjMzOTc6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zMzk4Olx0XHRcdFx0fVxuMzM5OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwMDpcdFx0XHR9XG4zNDAxOlx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MDI6XHRcdH1cbjM0MDM6XHRcbjM0MDQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDA1Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjM0MDY6XHRcdFx0XHRjb250aW51ZTtcbjM0MDc6XHRcdFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcbjM0MDg6XHRcdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xuMzQwOTpcdFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XG4zNDEwOlx0XHRcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XG4zNDExOlx0XHR9XG4zNDEyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDEzOlx0fVxuMzQxNDpcdFxuMzQxNTpcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4zNDE2Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQxNzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQxODpcdHtcbjM0MTk6XHRcdC8qIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKCkgbWF5IGNyZWF0ZWQgaW5jb3JyZWN0IGxlZnQgcmVnaW9uICovXG4zNDIwOlx0XHRXQVJOX09OQ0UobC1cdTAwM2Vhci5zdGFydCBcdTAwM2U9IGwtXHUwMDNlYXIuZW5kLCBcJiMzNDtsOiAlbHUtJWx1LCByOiAlbHUtJWx1XFxuXCYjMzQ7LFxuMzQyMTpcdFx0XHRcdGwtXHUwMDNlYXIuc3RhcnQsIGwtXHUwMDNlYXIuZW5kLCByLVx1MDAzZWFyLnN0YXJ0LCByLVx1MDAzZWFyLmVuZCk7XG4zNDIyOlx0fVxuMzQyMzpcdCNlbHNlXG4zNDI0Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQyNTpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQyNjpcdHtcbjM0Mjc6XHR9XG4zNDI4Olx0I2VuZGlmXG4zNDI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBEYW1vbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgRGFtb24mIzM5O3MgY29uZmlndXJlZCBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoaXMgZmlsZSAqc2hvdWxkKiBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBpbmNsdWRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLCBhbmQgYW55IHJlcXVpcmVkIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGNvbmZpZ2Agb3B0aW9ucywgdGhlaXIgZGVmYXVsdHMsIGhlbHAgdGV4dCBleHBsYWluaW5nIHRoZWlyIHB1cnBvc2UsIGFuZCwgbW9zdCBjcml0aWNhbGx5LCB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFRob3NlIGRlcGVuZGVuY2llcyB3aWxsIGltbWVkaWF0ZWx5IGhpZ2hsaWdodCBhbnkgZXh0ZXJuYWwgY29tcG9uZW50cyBEYW1vbiByZWxpZXMgb24sIHN1Y2ggYXMgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcywgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIGV2ZW4gb3RoZXIgZGVidWdnaW5nIG9yIGluc3RydW1lbnRhdGlvbiB0b29scy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZWxhdGlvbnNoaXBzIGRlZmluZWQgdGhlcmUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBEYW1vbiBhbmQgdG8gYW50aWNpcGF0ZSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHNpZGUgZWZmZWN0cyB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBEYW1vbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGFuZCBob3cgdG8gYmVzdCB1dGlsaXplIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4gIDgxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgODI6XHRcbiAgODM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDg0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA4NTpcdFxuICA4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NzpcdFxuICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4gIDk4Olx0XHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERBTU9OJiMzOTtzIE1ha2VmaWxlIGFuZCBDYWxsZXIgUGF0aHMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiBEQU1PTiwgc3BlY2lmaWNhbGx5IHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIGFuZCBjYWxsZWQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MsIGFuZCB0aGUgZGVwZW5kZW5jeSBncmFwaCBhcm91bmQgdGhpcyBmdW5jdGlvbi4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoYXQgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgY29tcGlsYXRpb24gZmxhZ3MsIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgYW5kIGhvdyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpcyBhY3R1YWxseSBsaW5rZWQgaW50byB0aGUgZmluYWwga2VybmVsIGltYWdlLCBhc3N1bWluZyBpdCYjMzk7cyBjb21waWxlZCBhcyBhIG1vZHVsZS4KCk9uY2UgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBwcm9jZXNzIGZyb20gdGhlIE1ha2VmaWxlLCBJJiMzOTtsbCB0aGVuIHRyYWNlIHRocm91Z2ggdGhlIGNhbGxlcnMgb2YgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJZGVhbGx5LCB0aGlzIHdvdWxkIGludm9sdmUgdXNpbmcgYGNzY29wZWAgb3IgYGN0YWdzYCwgb3IgcGVyaGFwcyBldmVuIGBncmVwYCBqdWRpY2lvdXNseSwgY29tYmluZWQgd2l0aCBzb3VyY2UgY29kZSBicm93c2luZy4gSSB3YW50IHRvIHNlZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBjYWxsIGFyZ3VtZW50cywgYW5kIHRoZSBzcGVjaWZpYyBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIGludm9rZWQuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGRhdGEgZmxvdy4gVGhlIGFpbSBpcyB0byBidWlsZCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93OiB3aG8gdHJpZ2dlcnMgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYW5kIHdoYXQgaXMgdGhlIGJyb2FkZXIgcHVycG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDc1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBkaXZpbmcgaW50byB0aGUgY29kZToKCioqRGl2aW5nIGludG8gREFNT04mIzM5O3MgQXBwbGljYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgb2YgREFNT04mIzM5O3Mgc2NoZW1lIGFwcGxpY2F0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIFdoZXJlIGlzIHRoYXQgZnVuY3Rpb24gaW52b2tlZD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEtub3dpbmcgaG93IGl0JiMzOTtzIHRyaWdnZXJlZCB3aWxsIHRlbGwgbWUgdGhlIGNvcmUgb2YgaG93IERBTU9OIG9wZXJhdGVzLiBJcyBpdCBkcml2ZW4gYnkgc29tZSBzeXNmcyBpbnRlcmZhY2U/IE9yIG1heWJlIGl04oCZcyBpbnRlcndvdmVuIGludG8gdGhlIHJlY2xhaW0gcHJvY2VzcyBzb21laG93PyBJJiMzOTttIGJldHRpbmcgaXQmIzM5O3MgbGlua2VkIHRvIG9uZSBvZiB0aG9zZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzaW1wbGUgYGdyZXBgIGZvciBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBsaXN0IG9mIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGltcG9ydGFudCBmb3IgdHJhY2luZyB0aGlzIGRvd24uIFRoZW4gSSBjYW4gbmFycm93IGl0IGRvd24gdG8gdGhlIGV4YWN0IHBvaW50cyBpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMzUxPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX3N0YXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzY2LVxubW0vZGFtb24vY29yZS5jOjMzNjc6c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMzM2OC17XG4tLVxubW0vZGFtb24vY29yZS5jPTM5MDA9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM5NzYtXHRcdC8qXG5tbS9kYW1vbi9jb3JlLmM6Mzk3NzpcdFx0ICogZG8ga2RhbW9uZF9jYWxsKCkgYW5kIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIGFmdGVyXG5tbS9kYW1vbi9jb3JlLmMtMzk3OC1cdFx0ICoga2RhbW9uZF9tZXJnZV9yZWdpb25zKCkgaWYgcG9zc2libGUsIHRvIHJlZHVjZSBvdmVyaGVhZFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTkxLVx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2Y3R4LVx1MDAzZXNjaGVtZXMpKVxubW0vZGFtb24vY29yZS5jOjM5OTI6XHRcdFx0a2RhbW9uZF9hcHBseV9zY2hlbWVzKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzk5My1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjczCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFF1b3RhIFRyYWNraW5nIGFuZCBUYXJnZXQgVmFsaWRpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgREFNT04gY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRhcmdldCB2YWxpZGl0eS4gYGtkYW1vbmRfZm5gIGlzIHRoZSBrdGhyZWFkIGZvciBEQU1PTiwgYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgdGhlIGtleSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSBrbm93IEkgY2FuIGNvbmZpZ3VyZSB0YXJnZXRzLCBzY2hlbWVzLCBxdW90YXMsIGZpbHRlcnMsIGFuZCBzdGFydC9zdG9wIHRoZSBrZGFtb25kcyB0aHJvdWdoIHRoZSBzeXNmcy4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB3aGVuIGEgdGFyZ2V0IGJlY29tZXMgaW52YWxpZC4gSXQgc2VlbXMgdGhlIGBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlYCBjb25kaXRpb24gcmVwcmVzZW50cyB0aGlzIGludmFsaWQgc3RhdGUuCgpQcmV2aW91c2x5LCB0aGUgY29kZSBqdXN0IHNraXBwZWQgdGhlIHByb2Nlc3Npbmcgd2hlbiBhIHRhcmdldCB3YXMgaW52YWxpZCwgc2ltcGx5IGBjb250aW51ZTtgLiBOb3csIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlLCBkYW5nbGluZyBwb2ludGVycyBvciBzdGFsZSB0YXJnZXQgcmVmZXJlbmNlcyBpbiBEQU1PTiYjMzk7cyBxdW90YSB0cmFja2luZy4gVGhlIGZpeCBpbnZvbHZlcyByZXNldHRpbmcgYHMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbWAgdG8gTlVMTCBhbmQgYHMtJmd0O3F1b3RhLmNoYXJnZV9hZGRyX2Zyb21gIHRvIDAgZm9yIGFueSBzY2hlbWUgd2hlcmUgYGNoYXJnZV90YXJnZXRfZnJvbWAgd2FzIHBvaW50aW5nIHRvIHRoZSBub3cgaW52YWxpZCB0YXJnZXQgYHRgLiBTbWFydC4gVGhpcyBwcmV2ZW50cyB0aGVzZSBiYWQgcmVmZXJlbmNlcyBmcm9tIGNhdXNpbmcgcHJvYmxlbXMuCgpMZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gdmVyaWZ5IERBTU9OJiMzOTtzIHJlYWNoYWJpbGl0eSBpbiBjb21tb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcyBpbiBRRU1VIGFuZCBHQ0UsIHNpbmNlIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9gIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHN5emthbGxlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXNmcyBkZXNjcmlwdGlvbnMgb3IgaWYgREFNT04gc3lzZnMgaXMgZXhwb3NlZCB0aGVyZS4gSSBjYW4gc2VlIGZyb20gdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgdGhlc2UgYXJlIHNldDogYENPTkZJR19EQU1PTj15YCwgYENPTkZJR19EQU1PTl9TWVNGUz15YCwgYENPTkZJR19EQU1PTl9WQUREUj15YCwgYW5kIGBDT05GSUdfREFNT05fUEFERFI9eWAuCgpJJiMzOTtsbCBkaXZlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBpbnNwZWN0IGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgYG1tL2RhbW9uL2NvcmUuY2AgYXJvdW5kIGZ1bmN0aW9ucyBsaWtlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBgZGFtb3NfYXBwbHlfdGFyZ2V0YCwgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGVzZSBxdW90YSBhZGp1c3RtZW50cy4gR290dGEgYmUgc3VyZSB0byBleGFtaW5lIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM2MDpcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjMzNjE6XHRcdFx0XHRicmVhaztcbjMzNjI6XHRcdFx0c2lkeCYjNDM7JiM0Mzs7XG4zMzYzOlx0XHR9XG4zMzY0Olx0XHR0cmFjZV9jYWxsX19kYW1vc19zdGF0X2FmdGVyX2FwcGx5X2ludGVydmFsKGNpZHgsIHNpZHgsIFx1MDAyNnMtXHUwMDNlc3RhdCk7XG4zMzY1Olx0fVxuMzM2NjpcdFxuMzM2NzpcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuMzM2ODpcdHtcbjMzNjk6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMzcwOlx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4zMzcxOlx0XHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XG4zMzcyOlx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XG4zMzczOlx0XG4zMzc0Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzM3NTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zMzc2Olx0XHRcdFx0Y29udGludWU7XG4zMzc3Olx0XG4zMzc4Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMzM3OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzM4MDpcdFxuMzM4MTpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zMzgyOlx0XG4zMzgzOlx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjMzODQ6XHRcdH1cbjMzODU6XHRcbjMzODY6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zMzg3Olx0XHRcdHJldHVybjtcbjMzODg6XHRcbjMzODk6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zMzkwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzM5MTpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMzOTI6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zMzkzOlx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzOTQ6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzM5NTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjMzOTY6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjMzOTc6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zMzk4Olx0XHRcdFx0fVxuMzM5OTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTE0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERBTU9OIEtlcm5lbCBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBrZXJuZWwgY29kZS4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgZGVjbGFyZWQgYHN0YXRpY2Agd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIE5vdywgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSBga2RhbW9uZF9mbmAsIGFzIHdlbGwgYXMgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20uIEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBvdGhlciBlbnRyeSBwb2ludHMsIHdoZXRoZXIgdGhleSBhcmUgc3RhdGljIG9yIG5vdCwgdGhhdCBhcmUgZGVmaW5lZCBpbiBgbW0vZGFtb24vY29yZS5jYCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZXh0ZW5kIHRoZSBzZWFyY2ggdG8gb3RoZXIgZmlsZXMgYXMgd2VsbC4gRmluYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBleHRlcm5hbCBpbnRlcmZhY2UgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3N0b3BgLCBhbmQgYGRhbW9uX3N5c2ZzX2NtZF9jb21taXRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGhvdyBEQU1PTiBpcyBpbml0aWF0ZWQsIHRlcm1pbmF0ZWQsIGFuZCBob3cgaXRzIGNvbW1hbmRzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExMDgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcbm1tL2RhbW9uL2NvcmUuYzoyMDQyOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0yMDQzLSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA0OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA1MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA3MjogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbm1tL2RhbW9uL2NvcmUuYy0yMDczLSAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODAtICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAmIzM5O2RhbW9uX3N0YXJ0KCkmIzM5OyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcbm1tL2RhbW9uL2NvcmUuYy0yMDgyLSAqIHJldHVybnMgLUVCVVNZLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDg1LSAqL1xubW0vZGFtb24vY29yZS5jOjIwODY6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMTEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIxMTI6XHRcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjIxND1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNjItICpcbm1tL2RhbW9uL2NvcmUuYzoyMjYzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjI2NC0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xubW0vZGFtb24vc3RhdC5jLTIxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTE9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNS1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjUzNjpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yNTM3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY1MAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA3ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gVnVsbmVyYWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikgZnJhbWV3b3JrIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdC4gTXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIGZvY3VzZWQgb24gdGhlIGZ1bmN0aW9uIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIHRoZSBga2RhbW9uZF9mbmAgaW4gdGhlIERBTU9OIGt0aHJlYWQgbG9vcC4gSXQgbG9va3MgbGlrZSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBjb3VsZCBiZSBpbmxpbmVkIGludG8gYGtkYW1vbmRfZm5gLCBkZXBlbmRpbmcgb24gY29tcGlsZXIgb3B0aW1pemF0aW9uLCBidXQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gc28gdGhlcmUmIzM5O3Mgbm90IG11Y2ggdG8gd29ycnkgYWJvdXQgaGVyZS4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgYW5kIG90aGVyIHJlbGV2YW50IGZpbGVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGluY2x1ZGluZyBgZGFtb25fc3RhcnRgLiBXaGF0IEkmIzM5O3ZlIGZvdW5kIGlzIHRoYXQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXRlcmF0ZXMgdGhyb3VnaCBEQU1PTiB0YXJnZXRzLiBOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGlmIGEgdGFyZ2V0IGlzIGRlZW1lZCBpbnZhbGlkIChgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZWApLCB0aGUgZnVuY3Rpb24gcmVzZXRzIHF1b3RhLXJlbGF0ZWQgc3RydWN0dXJlcyAoYHMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbWAsIGBzLSZndDtxdW90YS5jaGFyZ2VfYWRkcl9mcm9tYCkuIFRoaXMsIGluIHByaW5jaXBsZSwgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBjb3VsZCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvdXIgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LgoKVGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUgaXMga2V5LiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyAoYENPTkZJR19EQU1PTl9TWVNGU2ApIGFuZCB0aHJvdWdoIHZhcmlvdXMgREFNT04gbW9kdWxlIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCkuIFRoaXMgbWFrZXMgdGhlIGF0dGFjayBzdXJmYWNlIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc2luY2UgYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdmlhIERBTU9OIGFyZSBzdXBwb3J0ZWQuCgpHaXZlbiB0aGlzLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uczogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYW5kIGBEQU1PTl9QQUREUmAuIFRoZXNlIGFyZSBhbGwgYm9vbGVhbiBjb25maWd1cmF0aW9ucywgYXMgZXhwZWN0ZWQsIGFuZCBJJiMzOTt2ZSB2ZXJpZmllZCB0aGUgY29kZSBwYXRocyByZWxhdGVkIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgZmluYWxpemUgdGhlIGZpbmRpbmdzIGZvciB0aGUgcmVzdWx0czoKCiogICBgV29ydGhGdXp6aW5nYDogWWVzLCBhYnNvbHV0ZWx5LiBUaGUgY29kZSBpcyBpbiBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEgYW5kIGltcGFjdHMgcXVvdGEgbWFuYWdlbWVudC4KKiAgIGBSZWFzb25pbmdgOiAgVGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGV4aXN0cyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gaG93IGludmFsaWQgdGFyZ2V0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uLiBJbmNvcnJlY3QgaGFuZGxpbmcgb2YgaW52YWxpZCB0YXJnZXRzIGFuZCBxdW90YSByZXNldCwgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW91ci4KKiAgIGBFbmFibGVDb25maWdzYDogQ29uZmlybWVkOiBgWyYjMzQ7REFNT04mIzM0OywgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LCAmIzM0O0RBTU9OX1ZBRERSJiMzNDssICYjMzQ7REFNT05fUEFERFImIzM0O11gLgoqICAgYEZvY3VzU3ltYm9sc2A6IENvbmZpcm1lZDogYFsmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LCAmIzM0O2tkYW1vbmRfZm4mIzM0OywgJiMzNDtkYW1vbl9zdGFydCYjMzQ7XWAuIFRoZXNlIGFyZSBzcGVjaWZpYyBhbmQgbm9uLXViaXF1aXRvdXMgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KClNvLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIChrZGFtb25kX2FwcGx5X3NjaGVtZXMpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YSB0YXJnZXQgdHJhY2tpbmcgc3RhdGUgd2hlbiBhIHRhcmdldCBpcyBtYXJrZWQgaW52YWxpZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBvciBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgZGVyZWZlcmVuY2VzIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIChrZGFtb25kX2FwcGx5X3NjaGVtZXMpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YSB0YXJnZXQgdHJhY2tpbmcgc3RhdGUgd2hlbiBhIHRhcmdldCBpcyBtYXJrZWQgaW52YWxpZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBvciBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgZGVyZWZlcmVuY2VzIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW4gbW0vZGFtb24vY29yZS5jIHVwZGF0ZXMga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgdG8gcmVzZXQgc2NoZW1lIHF1b3RhIHRyYWNraW5nIHN0YXRlIChzZXR0aW5nIHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSB0byAwKSB3aGVuIGEgdGFyZ2V0IGlzIGZvdW5kIHRvIGJlIGludmFsaWQuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBwb2ludGVyIGFuZCBhZGRyZXNzIHRyYWNraW5nIHN0YXRlIHRvIHByZXZlbnQgc3RhbGUgdGFyZ2V0IHJlZmVyZW5jZXMgYW5kIGxvZ2ljIGJ1Z3MgYWNyb3NzIHNjaGVtZSBldmFsdWF0aW9uIGN5Y2xlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2UvVUFGIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggdGFyZ2V0IGxpZmV0aW1lIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50aW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGZmMzMzNjg4ODNkYjQ1ZDUxZGY4YzUxNTkyYjExYWJhMTI0ZTdmOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uYTM2MGM0MWNkYTg5YyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzM4OSw4ICYjNDM7MzM4OSwxNSBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYykKIAltYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpOwogCW11dGV4X2xvY2soJmFtcDtjLSZndDt3YWxrX2NvbnRyb2xfbG9jayk7CiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKLQkJaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKQomIzQzOwkJaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7CiYjNDM7CQkJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHsKJiM0MzsJCQkJaWYgKHMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCXMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CQkJCXMtJmd0O3F1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzOwkJCX0KIAkJCWNvbnRpbnVlOwomIzQzOwkJfQogCQlkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvcmUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBjaGFuZ2VzIHdpdGhpbiB0aGUgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBgbW0vZGFtb24vY29yZS5jYC4gIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiBhbnkgbW9kaWZpY2F0aW9uLCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBsaWtlIERBTU9OLiAgQmVmb3JlIEkgZXZlbiBiZWdpbiB0byBkaXNzZWN0IHRoZSBjb2RlIGRpcmVjdGx5LCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlIGFuZCB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aGUgY29udGVudCBhcm91bmQgbGluZSAzMzg5IG9mIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGxvY2FsIGNvbnRleHQsIGFuZCBnaXZlIG1lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIGludGVudCBvZiB0aGUgY2hhbmdlZCBjb2RlLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4zMzcxOlx0XHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XG4zMzcyOlx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XG4zMzczOlx0XG4zMzc0Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzM3NTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zMzc2Olx0XHRcdFx0Y29udGludWU7XG4zMzc3Olx0XG4zMzc4Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMzM3OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzM4MDpcdFxuMzM4MTpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zMzgyOlx0XG4zMzgzOlx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjMzODQ6XHRcdH1cbjMzODU6XHRcbjMzODY6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zMzg3Olx0XHRcdHJldHVybjtcbjMzODg6XHRcbjMzODk6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zMzkwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzM5MTpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMzOTI6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zMzkzOlx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzOTQ6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzM5NTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjMzOTY6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjMzOTc6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zMzk4Olx0XHRcdFx0fVxuMzM5OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwMDpcdFx0XHR9XG4zNDAxOlx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MDI6XHRcdH1cbjM0MDM6XHRcbjM0MDQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDA1Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjM0MDY6XHRcdFx0XHRjb250aW51ZTtcbjM0MDc6XHRcdFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcbjM0MDg6XHRcdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xuMzQwOTpcdFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XG4zNDEwOlx0XHRcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XG4zNDExOlx0XHR9XG4zNDEyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDEzOlx0fVxuMzQxNDpcdFxuMzQxNTpcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4zNDE2Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQxNzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQxODpcdHtcbjM0MTk6XHRcdC8qIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKCkgbWF5IGNyZWF0ZWQgaW5jb3JyZWN0IGxlZnQgcmVnaW9uICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGluIGBtbS9kYW1vbi9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiB0aGUgZnVuY3Rpb24gYGNoYXJnZV90YXJnZXRfZnJvbWAgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIE15IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcHBlcmAsIGFzIHRoYXQmIzM5O3MgbXkgZ28tdG8gdG9vbCBmb3IgcXVpY2sgY29kZSBzZWFyY2hlcywgZXNwZWNpYWxseSB3aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGEgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIHJ1biBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIHdpdGhpbiB0aGF0IHNwZWNpZmljIHBhdGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gcmVsYXRlZCB0byBEQU1PTi4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIERBTU9OJiMzOTtzIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYXJnZV90YXJnZXRfZnJvbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MzgtXHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xubW0vZGFtb24vY29yZS5jOjczOTpcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtNzQwLVx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTE2OTY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcyMi1cdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcyMzpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcyNDpcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTE3MjUtXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI0NDk9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDU2LVx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xubW0vZGFtb24vY29yZS5jOjI0NTc6XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjQ1ODpcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxubW0vZGFtb24vY29yZS5jLTI0NTktXHRcdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9jb3JlLmMtMjQ2MC1cdFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNDYxOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMjQ2Mi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ4MC1cdFx0fVxubW0vZGFtb24vY29yZS5jOjI0ODE6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMjQ4Mi1cdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI2ODI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NDEtXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG5tbS9kYW1vbi9jb3JlLmM6Mjc0MjpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xubW0vZGFtb24vY29yZS5jLTI3NDMtXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IHItXHUwMDNlYXIuZW5kO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzY3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzkzLVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzM5NDpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxubW0vZGFtb24vY29yZS5jLTMzOTUtXHRcdFx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjMzOTY6XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMzM5Ny1cdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjMKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBUYXJnZXQgSW52YWxpZGl0eSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgc3RhbGUgcG9pbnRlciBpc3N1ZSB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBgcy0mZ3Q7cXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tYCBpcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGRhbW9uX3RhcmdldCAqdGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgaWYgdGhlIHRhcmdldCBgdGAgYmVjb21lcyBpbnZhbGlkLCBzaWduYWxlZCBieSBgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZWAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgb3VyIGludGVybmFsIHN0YXRlIGluIGBzLSZndDtxdW90YWAgcmVmbGVjdHMgdGhpcy4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBoYXZlIGBzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb21gIHN0aWxsIHBvaW50aW5nIHRvIGEgbm93LWludmFsaWQgb3IgZnJlZWQgdGFyZ2V0LCBsZWFkaW5nIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBzaWRlIGVmZmVjdHMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChVQUYpLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgaW5jb3JyZWN0IHByb2dyYW0gbG9naWMuCgpUaGUgcHJvcG9zZWQgcGF0Y2ggaXMgc21hcnQ7IGl0IGFkZHJlc3NlcyB0aGlzIGhlYWQtb24uIFdoZW4gdGhlIHRhcmdldCBiZWNvbWVzIGludmFsaWQsIHRoZSBwYXRjaCAqZXhwbGljaXRseSogY2xlYXJzIGBzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMYCBhbmQgYHMtJmd0O3F1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwYC4gVGhhdCBtYWtlcyBzZW5zZTsgd2Ugd2FudCBhIGNsZWFuIHNsYXRlIHdoZW4gdGhlIHRhcmdldCBpcyBnb25lLiBUaGlzIGF2b2lkcyB0aGUgc3RhbGUgcG9pbnRlciBwcm9ibGVtLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIEtNU0FOIHZzLiBLQVNBTiBpbXBsaWNhdGlvbnMuICBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgb3IgaGVhcCwgYW5kIGNyaXRpY2FsbHksIHRoZXJlIGFyZSAqbm8qIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSYjMzk7cmUgKnNldHRpbmcqIHBvaW50ZXIgYW5kIGludGVnZXIgbWVtYmVycyB0byBkZWZpbmVkLCBzYWZlIHZhbHVlcyAoTlVMTCBhbmQgMCByZXNwZWN0aXZlbHkpLCB3aGljaCBpcyBpbml0aWFsaXphdGlvbi9yZXNldHRpbmcsIG5vdCBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZSYjMzk7cyBhbHNvIG5vIGBjb3B5X3RvX3VzZXJgIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFraW5nIHRvIHVzZXJzcGFjZS4gU2luY2UgYHMtJmd0O3F1b3RhYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIHZpYSBgZGFtb3NfcXVvdGFfaW5pdGAgb3Igc3RydWN0IHplcm9pbmcsIGl0JiMzOTtzIHNhZmUuIFRoZXJlZm9yZSwgdGhlIGFuc3dlciBpcyAqbm8qLCB3ZSBkb24mIzM5O3QgbmVlZCBLTVNBTiBmb3IgdGhpcy4KCktBU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgcmVsZXZhbnQuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCBwcmV2ZW50aW5nIFVBRiBhbmQgc3RhbGUgcmVmZXJlbmNlczsgS0FTQU4gaXMgdGhlIGlkZWFsIHRvb2wgdG8gZGV0ZWN0IHN1Y2ggbWVtb3J5IHNhZmV0eSBlcnJvcnMgcmVsYXRlZCB0byBwb3RlbnRpYWwgdGFyZ2V0IGxpZmVjeWNsZSBpc3N1ZXMuCgpJbiBzdW1tYXJ5OgoKKiAgICoqS0FTQU46KiogVGhpcyBpcyB0aGUgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoZSBzdGFsZSBwb2ludGVyL1VBRiBpc3N1ZXMgdGhlIHBhdGNoIGlzIHRhcmdldGluZy4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBubyBzdWJzZXF1ZW50IGNvZGUgYXR0ZW1wdHMgdG8gZGVyZWZlcmVuY2UgdGhhdCBkYW5nbGluZyBwb2ludGVyLgoqICAgKipLTVNBTjoqKiBUaGlzIGlzICpub3QqIHJlbGV2YW50LiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgZXhwbGljaXRseSAqaW5pdGlhbGl6YXRpbmcqIHRoZXNlIGZpZWxkcyB0byBrbm93bi1zYWZlIHZhbHVlcy4KClRoaXMgbWVhbnMgd2Ugc2hvdWxkIGJlIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLCBhcyB0aGUgcGF0Y2ggaXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHBvdGVudGlhbCBVQUYsIGEgY2xhc3NpYyBLQVNBTiBzY2VuYXJpby4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuCgpPa2F5LCBsZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGluIG1tL2RhbW9uL2NvcmUuYyB1cGRhdGVzIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIHRvIHJlc2V0IHNjaGVtZSBxdW90YSB0cmFja2luZyBzdGF0ZSAoc2V0dGluZyBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gdG8gMCkgd2hlbiBhIHRhcmdldCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgaW50ZXJuYWwgcG9pbnRlciBhbmQgYWRkcmVzcyB0cmFja2luZyBzdGF0ZSB0byBwcmV2ZW50IHN0YWxlIHRhcmdldCByZWZlcmVuY2VzIGFuZCBsb2dpYyBidWdzIGFjcm9zcyBzY2hlbWUgZXZhbHVhdGlvbiBjeWNsZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlL1VBRiBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIHRhcmdldCBsaWZldGltZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudGluZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGluIG1tL2RhbW9uL2NvcmUuYyB1cGRhdGVzIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIHRvIHJlc2V0IHNjaGVtZSBxdW90YSB0cmFja2luZyBzdGF0ZSAoc2V0dGluZyBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gdG8gMCkgd2hlbiBhIHRhcmdldCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgaW50ZXJuYWwgcG9pbnRlciBhbmQgYWRkcmVzcyB0cmFja2luZyBzdGF0ZSB0byBwcmV2ZW50IHN0YWxlIHRhcmdldCByZWZlcmVuY2VzIGFuZCBsb2dpYyBidWdzIGFjcm9zcyBzY2hlbWUgZXZhbHVhdGlvbiBjeWNsZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlL1VBRiBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIHRhcmdldCBsaWZldGltZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudGluZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MTIuODUyNTc4Mzc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0OTA0MTI2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImtkYW1vbmRfZm5cIixcbiAgICBcImRhbW9uX3N0YXJ0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbiBtbS9kYW1vbi9jb3JlLmMgdXBkYXRlcyBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSB0byByZXNldCBzY2hlbWUgcXVvdGEgdHJhY2tpbmcgc3RhdGUgKHNldHRpbmcgcy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gdG8gMCkgd2hlbiBhIHRhcmdldCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBwb2ludGVyIGFuZCBhZGRyZXNzIHRyYWNraW5nIHN0YXRlIHRvIHByZXZlbnQgc3RhbGUgdGFyZ2V0IHJlZmVyZW5jZXMgYW5kIGxvZ2ljIGJ1Z3MgYWNyb3NzIHNjaGVtZSBldmFsdWF0aW9uIGN5Y2xlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2UvVUFGIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggdGFyZ2V0IGxpZmV0aW1lIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50aW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJ3MgY29yZSBzY2hlbWUgYXBwbGljYXRpb24gbG9naWMgKGtkYW1vbmRfYXBwbHlfc2NoZW1lcykgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhIHRhcmdldCB0cmFja2luZyBzdGF0ZSB3aGVuIGEgdGFyZ2V0IGlzIG1hcmtlZCBpbnZhbGlkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIG9yIGtlcm5lbCBpbnRlcmZhY2VzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBkZXJlZmVyZW5jZXMgZHVyaW5nIHNjaGVtZSBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjEyLjg1MjU4NDE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODUwMjQwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZmYzMzM2ODg4M2RiNDVkNTFkZjhjNTE1OTJiMTFhYmExMjRlN2Y4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggY2U4YzZmOTkxMDZlZC4uYTM2MGM0MWNkYTg5YyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMzM4OSw4ICszMzg5LDE1IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbiBcXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuLVxcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXFxuK1xcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcXG4rXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoxMy40Mzg0MTA4NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM1NjUzODIyNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJ3MgY29yZSBzY2hlbWUgYXBwbGljYXRpb24gbG9naWMgKGtkYW1vbmRfYXBwbHlfc2NoZW1lcykgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhIHRhcmdldCB0cmFja2luZyBzdGF0ZSB3aGVuIGEgdGFyZ2V0IGlzIG1hcmtlZCBpbnZhbGlkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIG9yIGtlcm5lbCBpbnRlcmZhY2VzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBkZXJlZmVyZW5jZXMgZHVyaW5nIHNjaGVtZSBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZmMzMzNjg4ODNkYjQ1ZDUxZGY4YzUxNTkyYjExYWJhMTI0ZTdmOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLmEzNjBjNDFjZGE4OWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMzODksOCArMzM4OSwxNSBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbiBcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbi1cdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKVxuK1x0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcbitcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuK1x0XHRcdFx0aWYgKHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tICE9IHQpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbitcdFx0XHR9XG4gXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MTMuNDM4NDEyMjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTE2NTQwNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gQ29yZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgZGlmZiBpcyBkb2luZy4gSSBzZWUgaXQncyB0b3VjaGluZyBgbW0vZGFtb24vY29yZS5jYC4gQWgsIERBTU9OIOKAkyBEYXRhIEFjY2VzcyBNb25pdG9yaW5nLiBSaWdodCwgdGhhdCdzIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHN1YnN5c3RlbSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYS4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIGdldCBncmFudWxhci4gSSBuZWVkIHRvIGtub3cgKndoYXQqIGZ1bmN0aW9uIHdpdGhpbiBgY29yZS5jYCBpcyBiZWluZyB0d2Vha2VkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGNoYW5nZSwgYW5kIHRoZW4gSSdsbCBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24sIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQsIGFuZCBob3cgaXQgaW1wYWN0cyBjb25maWd1cmF0aW9uIHRocm91Z2ggS2NvbmZpZy4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGlzIGhhcyBhbnkgaW1wbGljYXRpb25zIGZvciBzeXNmcyBvciBwcm9jZnMgaW50ZXJmYWNlcywgc2luY2UgREFNT04gb2Z0ZW4gZXhwb3NlcyBkYXRhIHRocm91Z2ggdGhvc2UgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuSSdsbCBiZSB1c2luZyBgZ3JlcGAgZXh0ZW5zaXZlbHkgaGVyZSwgYW5kIG9mIGNvdXJzZSwgSSdsbCBiZSByZWFkaW5nIHRoZSByZWxldmFudCBjb2RlLiBOZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTEsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjE4LjM1NDk1NTY3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM4MDpcXHRcXG4zMzgxOlxcdFxcdFxcdGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gdHJ1ZTtcXG4zMzgyOlxcdFxcbjMzODM6XFx0XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbjMzODQ6XFx0XFx0fVxcbjMzODU6XFx0XFxuMzM4NjpcXHRcXHRpZiAoIWhhc19zY2hlbWVzX3RvX2FwcGx5KVxcbjMzODc6XFx0XFx0XFx0cmV0dXJuO1xcbjMzODg6XFx0XFxuMzM4OTpcXHRcXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xcbjMzOTA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Yy1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbjMzOTE6XFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG4zMzkyOlxcdFxcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcXG4zMzkzOlxcdFxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzM5NDpcXHRcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tICE9IHQpXFxuMzM5NTpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzk2OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuMzM5NzpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4zMzk4OlxcdFxcdFxcdFxcdH1cXG4zMzk5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MDA6XFx0XFx0XFx0fVxcbjM0MDE6XFx0XFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbjM0MDI6XFx0XFx0fVxcbjM0MDM6XFx0XFxuMzQwNDpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjM0MDU6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMzQwNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDA3OlxcdFxcdFxcdGRhbW9zX3dhbGtfY29tcGxldGUoYywgcyk7XFxuMzQwODpcXHRcXHRcXHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgYyk7XFxuMzQwOTpcXHRcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbjM0MTA6XFx0XFx0XFx0ZGFtb3NfdHJhY2Vfc3RhdChjLCBzKTtcXG4zNDExOlxcdFxcdH1cXG4zNDEyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Yy1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbjM0MTM6XFx0fVxcbjM0MTQ6XFx0XFxuMzQxNTpcXHQjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbjM0MTY6XFx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxcbjM0MTc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4zNDE4OlxcdHtcXG4zNDE5OlxcdFxcdC8qIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKCkgbWF5IGNyZWF0ZWQgaW5jb3JyZWN0IGxlZnQgcmVnaW9uICovXFxuMzQyMDpcXHRcXHRXQVJOX09OQ0UobC1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzZT0gbC1cXHUwMDNlYXIuZW5kLCBcXFwibDogJWx1LSVsdSwgcjogJWx1LSVsdVxcXFxuXFxcIixcXG4zNDIxOlxcdFxcdFxcdFxcdGwtXFx1MDAzZWFyLnN0YXJ0LCBsLVxcdTAwM2Vhci5lbmQsIHItXFx1MDAzZWFyLnN0YXJ0LCByLVxcdTAwM2Vhci5lbmQpO1xcbjM0MjI6XFx0fVxcbjM0MjM6XFx0I2Vsc2VcXG4zNDI0OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG4zNDI1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuMzQyNjpcXHR7XFxuMzQyNzpcXHR9XFxuMzQyODpcXHQjZW5kaWZcXG4zNDI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoxOC4zNTUxMzQxOTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MTcxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MTguNDAwOTU5MDYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyNTg0MTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIERhbW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IERhbW9uJ3MgY29uZmlndXJlZCBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoaXMgZmlsZSAqc2hvdWxkKiBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBpbmNsdWRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLCBhbmQgYW55IHJlcXVpcmVkIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBvcHRpb25zLCB0aGVpciBkZWZhdWx0cywgaGVscCB0ZXh0IGV4cGxhaW5pbmcgdGhlaXIgcHVycG9zZSwgYW5kLCBtb3N0IGNyaXRpY2FsbHksIHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlcy4gVGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwgaW1tZWRpYXRlbHkgaGlnaGxpZ2h0IGFueSBleHRlcm5hbCBjb21wb25lbnRzIERhbW9uIHJlbGllcyBvbiwgc3VjaCBhcyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgb3IgZXZlbiBvdGhlciBkZWJ1Z2dpbmcgb3IgaW5zdHJ1bWVudGF0aW9uIHRvb2xzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmVsYXRpb25zaGlwcyBkZWZpbmVkIHRoZXJlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgRGFtb24gYW5kIHRvIGFudGljaXBhdGUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgRGFtb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBhbmQgaG93IHRvIGJlc3QgdXRpbGl6ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjIwLjYyNjgwMjk3N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcbiAgODE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA4NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuICA4OTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxuICA5MzpcXHRcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG4gIDk0OlxcdFxcdCAgdGhvc2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcXG4gIDk3OlxcdFxcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxcbiAgOTg6XFx0XFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjIwLjYyNjg5NjU0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTM1MjM5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gREFNT04ncyBNYWtlZmlsZSBhbmQgQ2FsbGVyIFBhdGhzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIGluIG9uIERBTU9OLCBzcGVjaWZpY2FsbHkgdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uIGlzIGludGVncmF0ZWQgYW5kIGNhbGxlZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYnVpbGQgcHJvY2VzcywgYW5kIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhhdCBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIFRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSBjb21waWxhdGlvbiBmbGFncywgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGlzIGFjdHVhbGx5IGxpbmtlZCBpbnRvIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UsIGFzc3VtaW5nIGl0J3MgY29tcGlsZWQgYXMgYSBtb2R1bGUuXG5cbk9uY2UgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIHByb2Nlc3MgZnJvbSB0aGUgTWFrZWZpbGUsIEknbGwgdGhlbiB0cmFjZSB0aHJvdWdoIHRoZSBjYWxsZXJzIG9mIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJZGVhbGx5LCB0aGlzIHdvdWxkIGludm9sdmUgdXNpbmcgYGNzY29wZWAgb3IgYGN0YWdzYCwgb3IgcGVyaGFwcyBldmVuIGBncmVwYCBqdWRpY2lvdXNseSwgY29tYmluZWQgd2l0aCBzb3VyY2UgY29kZSBicm93c2luZy4gSSB3YW50IHRvIHNlZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBjYWxsIGFyZ3VtZW50cywgYW5kIHRoZSBzcGVjaWZpYyBjb250ZXh0IGluIHdoaWNoIGl0J3MgaW52b2tlZC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgZGF0YSBmbG93LiBUaGUgYWltIGlzIHRvIGJ1aWxkIGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3c6IHdobyB0cmlnZ2VycyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgd2hhdCBpcyB0aGUgYnJvYWRlciBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDg5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoyMy4zODA0MjI1MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoyMy4zODA0ODQ3ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg1MDg5ODA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgZGl2aW5nIGludG8gdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gREFNT04ncyBBcHBsaWNhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IG9mIERBTU9OJ3Mgc2NoZW1lIGFwcGxpY2F0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gV2hlcmUgaXMgdGhhdCBmdW5jdGlvbiBpbnZva2VkPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzLiBLbm93aW5nIGhvdyBpdCdzIHRyaWdnZXJlZCB3aWxsIHRlbGwgbWUgdGhlIGNvcmUgb2YgaG93IERBTU9OIG9wZXJhdGVzLiBJcyBpdCBkcml2ZW4gYnkgc29tZSBzeXNmcyBpbnRlcmZhY2U/IE9yIG1heWJlIGl04oCZcyBpbnRlcndvdmVuIGludG8gdGhlIHJlY2xhaW0gcHJvY2VzcyBzb21laG93PyBJJ20gYmV0dGluZyBpdCdzIGxpbmtlZCB0byBvbmUgb2YgdGhvc2UuIExldCdzIHN0YXJ0IHdpdGggYSBzaW1wbGUgYGdyZXBgIGZvciBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBsaXN0IG9mIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGltcG9ydGFudCBmb3IgdHJhY2luZyB0aGlzIGRvd24uIFRoZW4gSSBjYW4gbmFycm93IGl0IGRvd24gdG8gdGhlIGV4YWN0IHBvaW50cyBpbiB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDc1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoyNy4yMzEzODU4NjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTI4ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzM1MT1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzY2LVxcbm1tL2RhbW9uL2NvcmUuYzozMzY3OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzY4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zOTAwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NzYtXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6Mzk3NzpcXHRcXHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcXG5tbS9kYW1vbi9jb3JlLmMtMzk3OC1cXHRcXHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk5MS1cXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmN0eC1cXHUwMDNlc2NoZW1lcykpXFxubW0vZGFtb24vY29yZS5jOjM5OTI6XFx0XFx0XFx0a2RhbW9uZF9hcHBseV9zY2hlbWVzKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTM5OTMtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoyNy4yNzg1MjA5NzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIzMTkyNzc0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUXVvdGEgVHJhY2tpbmcgYW5kIFRhcmdldCBWYWxpZGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRhcmdldCB2YWxpZGl0eS4gYGtkYW1vbmRfZm5gIGlzIHRoZSBrdGhyZWFkIGZvciBEQU1PTiwgYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgdGhlIGtleSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSBrbm93IEkgY2FuIGNvbmZpZ3VyZSB0YXJnZXRzLCBzY2hlbWVzLCBxdW90YXMsIGZpbHRlcnMsIGFuZCBzdGFydC9zdG9wIHRoZSBrZGFtb25kcyB0aHJvdWdoIHRoZSBzeXNmcy4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB3aGVuIGEgdGFyZ2V0IGJlY29tZXMgaW52YWxpZC4gSXQgc2VlbXMgdGhlIGBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2VgIGNvbmRpdGlvbiByZXByZXNlbnRzIHRoaXMgaW52YWxpZCBzdGF0ZS5cblxuUHJldmlvdXNseSwgdGhlIGNvZGUganVzdCBza2lwcGVkIHRoZSBwcm9jZXNzaW5nIHdoZW4gYSB0YXJnZXQgd2FzIGludmFsaWQsIHNpbXBseSBgY29udGludWU7YC4gTm93LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSwgZGFuZ2xpbmcgcG9pbnRlcnMgb3Igc3RhbGUgdGFyZ2V0IHJlZmVyZW5jZXMgaW4gREFNT04ncyBxdW90YSB0cmFja2luZy4gVGhlIGZpeCBpbnZvbHZlcyByZXNldHRpbmcgYHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tYCB0byBOVUxMIGFuZCBgcy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tYCB0byAwIGZvciBhbnkgc2NoZW1lIHdoZXJlIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIHdhcyBwb2ludGluZyB0byB0aGUgbm93IGludmFsaWQgdGFyZ2V0IGB0YC4gU21hcnQuIFRoaXMgcHJldmVudHMgdGhlc2UgYmFkIHJlZmVyZW5jZXMgZnJvbSBjYXVzaW5nIHByb2JsZW1zLlxuXG5MZXQncyBzZWUsIEkgbmVlZCB0byB2ZXJpZnkgREFNT04ncyByZWFjaGFiaWxpdHkgaW4gY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdtIHByZXR0eSBzdXJlIGl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzIGluIFFFTVUgYW5kIEdDRSwgc2luY2UgYC9zeXMva2VybmVsL21tL2RhbW9uL2AgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIEkgc2hvdWxkIGFsc28gY2hlY2sgc3l6a2FsbGVyIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN5c2ZzIGRlc2NyaXB0aW9ucyBvciBpZiBEQU1PTiBzeXNmcyBpcyBleHBvc2VkIHRoZXJlLiBJIGNhbiBzZWUgZnJvbSB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCB0aGVzZSBhcmUgc2V0OiBgQ09ORklHX0RBTU9OPXlgLCBgQ09ORklHX0RBTU9OX1NZU0ZTPXlgLCBgQ09ORklHX0RBTU9OX1ZBRERSPXlgLCBhbmQgYENPTkZJR19EQU1PTl9QQUREUj15YC5cblxuSSdsbCBkaXZlIGRlZXBlci4gSSdsbCBuZWVkIHRvIGluc3BlY3QgYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBgbW0vZGFtb24vY29yZS5jYCBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIGBkYW1vc19hcHBseV90YXJnZXRgLCBhbmQgYGRhbW9zX2FkanVzdF9xdW90YWAgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIHF1b3RhIGFkanVzdG1lbnRzLiBHb3R0YSBiZSBzdXJlIHRvIGV4YW1pbmUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MzkuNTk3ODAxMzE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM2MDpcXHRcXHRcXHRpZiAoc2l0ZXIgPT0gcylcXG4zMzYxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNjI6XFx0XFx0XFx0c2lkeCsrO1xcbjMzNjM6XFx0XFx0fVxcbjMzNjQ6XFx0XFx0dHJhY2VfY2FsbF9fZGFtb3Nfc3RhdF9hZnRlcl9hcHBseV9pbnRlcnZhbChjaWR4LCBzaWR4LCBcXHUwMDI2cy1cXHUwMDNlc3RhdCk7XFxuMzM2NTpcXHR9XFxuMzM2NjpcXHRcXG4zMzY3OlxcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbjMzNjg6XFx0e1xcbjMzNjk6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMzcwOlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4zMzcxOlxcdFxcdGJvb2wgaGFzX3NjaGVtZXNfdG9fYXBwbHkgPSBmYWxzZTtcXG4zMzcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zejtcXG4zMzczOlxcdFxcbjMzNzQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zMzc1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjMzNzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM3NzpcXHRcXG4zMzc4OlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4zMzc5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzODA6XFx0XFxuMzM4MTpcXHRcXHRcXHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XFxuMzM4MjpcXHRcXG4zMzgzOlxcdFxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG4zMzg0OlxcdFxcdH1cXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0aWYgKCFoYXNfc2NoZW1lc190b19hcHBseSlcXG4zMzg3OlxcdFxcdFxcdHJldHVybjtcXG4zMzg4OlxcdFxcbjMzODk6XFx0XFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcXG4zMzkwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zMzkxOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzM5MjpcXHRcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcXHUwMDI2XFx1MDAyNiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XFxuMzM5MzpcXHRcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjMzOTQ6XFx0XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxcbjMzOTU6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM5NjpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjMzOTc6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuMzM5ODpcXHRcXHRcXHRcXHR9XFxuMzM5OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MzkuNTk3OTU0NTk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzE2NjM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBLZXJuZWwgQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBrZXJuZWwgY29kZS4gRmlyc3QsIEknbSBub3RpbmcgdGhhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpcyBkZWNsYXJlZCBgc3RhdGljYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgaW50ZXJuYWwgdG8gdGhhdCBmaWxlLiBOb3csIEkgd2FudCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSBga2RhbW9uZF9mbmAsIGFzIHdlbGwgYXMgd2hlcmUgaXQncyBjYWxsZWQgZnJvbS4gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3Igb3RoZXIgZW50cnkgcG9pbnRzLCB3aGV0aGVyIHRoZXkgYXJlIHN0YXRpYyBvciBub3QsIHRoYXQgYXJlIGRlZmluZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGFuZCBJJ2xsIG5lZWQgdG8gZXh0ZW5kIHRoZSBzZWFyY2ggdG8gb3RoZXIgZmlsZXMgYXMgd2VsbC4gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGV4dGVybmFsIGludGVyZmFjZSBmdW5jdGlvbnMgbGlrZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc3RvcGAsIGFuZCBgZGFtb25fc3lzZnNfY21kX2NvbW1pdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gaG93IERBTU9OIGlzIGluaXRpYXRlZCwgdGVybWluYXRlZCwgYW5kIGhvdyBpdHMgY29tbWFuZHMgYXJlIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjQyLjQ2OTYyNTk1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1OTg1NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjA0MjogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTIwNDMtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQ4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXFxubW0vZGFtb24vY29yZS5jOjIwNzI6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTIwNzMtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTIwODItICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA4NjppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjExMS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIxMTI6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMTQ9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNjItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjI2MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMjY0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQxNDpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzM3OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vc3RhdC5jLTIxNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTE9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTM1LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjI1MzY6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNy1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjQyLjY5NTYxNzM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMDk4ODU1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gVnVsbmVyYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyAoREFNT04pIGZyYW1ld29yayB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3QuIE15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBmb2N1c2VkIG9uIHRoZSBmdW5jdGlvbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiB0aGUgYGtkYW1vbmRfZm5gIGluIHRoZSBEQU1PTiBrdGhyZWFkIGxvb3AuIEl0IGxvb2tzIGxpa2UgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgY291bGQgYmUgaW5saW5lZCBpbnRvIGBrZGFtb25kX2ZuYCwgZGVwZW5kaW5nIG9uIGNvbXBpbGVyIG9wdGltaXphdGlvbiwgYnV0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gc28gdGhlcmUncyBub3QgbXVjaCB0byB3b3JyeSBhYm91dCBoZXJlLlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgYW5kIG90aGVyIHJlbGV2YW50IGZpbGVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGluY2x1ZGluZyBgZGFtb25fc3RhcnRgLiBXaGF0IEkndmUgZm91bmQgaXMgdGhhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpdGVyYXRlcyB0aHJvdWdoIERBTU9OIHRhcmdldHMuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogaWYgYSB0YXJnZXQgaXMgZGVlbWVkIGludmFsaWQgKGBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2VgKSwgdGhlIGZ1bmN0aW9uIHJlc2V0cyBxdW90YS1yZWxhdGVkIHN0cnVjdHVyZXMgKGBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbWAsIGBzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb21gKS4gVGhpcywgaW4gcHJpbmNpcGxlLCBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIGNvdWxkIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW91ciBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuXG5cblRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjb2RlIGlzIGtleS4gSXQncyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyAoYENPTkZJR19EQU1PTl9TWVNGU2ApIGFuZCB0aHJvdWdoIHZhcmlvdXMgREFNT04gbW9kdWxlIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCkuIFRoaXMgbWFrZXMgdGhlIGF0dGFjayBzdXJmYWNlIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc2luY2UgYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdmlhIERBTU9OIGFyZSBzdXBwb3J0ZWQuXG5cbkdpdmVuIHRoaXMsIEkndmUgY29uZmlybWVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9WQUREUmAsIGFuZCBgREFNT05fUEFERFJgLiBUaGVzZSBhcmUgYWxsIGJvb2xlYW4gY29uZmlndXJhdGlvbnMsIGFzIGV4cGVjdGVkLCBhbmQgSSd2ZSB2ZXJpZmllZCB0aGUgY29kZSBwYXRocyByZWxhdGVkIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGxldCdzIGZpbmFsaXplIHRoZSBmaW5kaW5ncyBmb3IgdGhlIHJlc3VsdHM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogWWVzLCBhYnNvbHV0ZWx5LiBUaGUgY29kZSBpcyBpbiBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEgYW5kIGltcGFjdHMgcXVvdGEgbWFuYWdlbWVudC5cbiogICBgUmVhc29uaW5nYDogIFRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBleGlzdHMgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGhvdyBpbnZhbGlkIHRhcmdldHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmdW5jdGlvbi4gSW5jb3JyZWN0IGhhbmRsaW5nIG9mIGludmFsaWQgdGFyZ2V0cyBhbmQgcXVvdGEgcmVzZXQsIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvdXIuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBDb25maXJtZWQ6IGBbXCJEQU1PTlwiLCBcIkRBTU9OX1NZU0ZTXCIsIFwiREFNT05fVkFERFJcIiwgXCJEQU1PTl9QQUREUlwiXWAuXG4qICAgYEZvY3VzU3ltYm9sc2A6IENvbmZpcm1lZDogYFtcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiLCBcImtkYW1vbmRfZm5cIiwgXCJkYW1vbl9zdGFydFwiXWAuIFRoZXNlIGFyZSBzcGVjaWZpYyBhbmQgbm9uLXViaXF1aXRvdXMgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuU28sIEknbSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY1MCwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6NDkuMDA1NTA1MjY0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY3MjQzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJ3MgY29yZSBzY2hlbWUgYXBwbGljYXRpb24gbG9naWMgKGtkYW1vbmRfYXBwbHlfc2NoZW1lcykgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhIHRhcmdldCB0cmFja2luZyBzdGF0ZSB3aGVuIGEgdGFyZ2V0IGlzIG1hcmtlZCBpbnZhbGlkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIG9yIGtlcm5lbCBpbnRlcmZhY2VzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBkZXJlZmVyZW5jZXMgZHVyaW5nIHNjaGVtZSBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImtkYW1vbmRfZm5cIixcbiAgICBcImRhbW9uX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04ncyBjb3JlIHNjaGVtZSBhcHBsaWNhdGlvbiBsb2dpYyAoa2RhbW9uZF9hcHBseV9zY2hlbWVzKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmVzZXQgcXVvdGEgdGFyZ2V0IHRyYWNraW5nIHN0YXRlIHdoZW4gYSB0YXJnZXQgaXMgbWFya2VkIGludmFsaWQuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04gc3lzZnMgb3Iga2VybmVsIGludGVyZmFjZXMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHByZXZlbnQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIGRlcmVmZXJlbmNlcyBkdXJpbmcgc2NoZW1lIGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6NDkuMDkyMjM3NTUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI1MDc0MDIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjQ5LjA5MjgzNDE3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2MjUwMTM4NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbiBtbS9kYW1vbi9jb3JlLmMgdXBkYXRlcyBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSB0byByZXNldCBzY2hlbWUgcXVvdGEgdHJhY2tpbmcgc3RhdGUgKHNldHRpbmcgcy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gdG8gMCkgd2hlbiBhIHRhcmdldCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBwb2ludGVyIGFuZCBhZGRyZXNzIHRyYWNraW5nIHN0YXRlIHRvIHByZXZlbnQgc3RhbGUgdGFyZ2V0IHJlZmVyZW5jZXMgYW5kIGxvZ2ljIGJ1Z3MgYWNyb3NzIHNjaGVtZSBldmFsdWF0aW9uIGN5Y2xlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2UvVUFGIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggdGFyZ2V0IGxpZmV0aW1lIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50aW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmZjMzMzY4ODgzZGI0NWQ1MWRmOGM1MTU5MmIxMWFiYTEyNGU3ZjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE5OjE0OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi5hMzYwYzQxY2RhODljIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzg5LDggKzMzODksMTUgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4gXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4tXHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcbitcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4rXHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbitcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbitcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rXHRcdFx0fVxuIFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4gXHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjQ5LjA5MjgzNTExMloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTIxNTU4NzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvcmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIGNoYW5nZXMgd2l0aGluIHRoZSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBtbS9kYW1vbi9jb3JlLmNgLiAgTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIGFueSBtb2RpZmljYXRpb24sIGVzcGVjaWFsbHkgd2l0aGluIGEgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGxpa2UgREFNT04uICBCZWZvcmUgSSBldmVuIGJlZ2luIHRvIGRpc3NlY3QgdGhlIGNvZGUgZGlyZWN0bHksIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBjb2RlYmFzZSBhbmQgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIGNvbnRlbnQgYXJvdW5kIGxpbmUgMzM4OSBvZiBgbW0vZGFtb24vY29yZS5jYC4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBsb2NhbCBjb250ZXh0LCBhbmQgZ2l2ZSBtZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBpbnRlbnQgb2YgdGhlIGNoYW5nZWQgY29kZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNToxNC4zMDg0MjY1NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzcwOlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4zMzcxOlxcdFxcdGJvb2wgaGFzX3NjaGVtZXNfdG9fYXBwbHkgPSBmYWxzZTtcXG4zMzcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zejtcXG4zMzczOlxcdFxcbjMzNzQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zMzc1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjMzNzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM3NzpcXHRcXG4zMzc4OlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4zMzc5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzODA6XFx0XFxuMzM4MTpcXHRcXHRcXHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XFxuMzM4MjpcXHRcXG4zMzgzOlxcdFxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG4zMzg0OlxcdFxcdH1cXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0aWYgKCFoYXNfc2NoZW1lc190b19hcHBseSlcXG4zMzg3OlxcdFxcdFxcdHJldHVybjtcXG4zMzg4OlxcdFxcbjMzODk6XFx0XFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcXG4zMzkwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zMzkxOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzM5MjpcXHRcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcXHUwMDI2XFx1MDAyNiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XFxuMzM5MzpcXHRcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjMzOTQ6XFx0XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxcbjMzOTU6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM5NjpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjMzOTc6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuMzM5ODpcXHRcXHRcXHRcXHR9XFxuMzM5OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDAwOlxcdFxcdFxcdH1cXG4zNDAxOlxcdFxcdFxcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcXG4zNDAyOlxcdFxcdH1cXG4zNDAzOlxcdFxcbjM0MDQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDA1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjM0MDY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQwNzpcXHRcXHRcXHRkYW1vc193YWxrX2NvbXBsZXRlKGMsIHMpO1xcbjM0MDg6XFx0XFx0XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xcbjM0MDk6XFx0XFx0XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4zNDEwOlxcdFxcdFxcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XFxuMzQxMTpcXHRcXHR9XFxuMzQxMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zNDEzOlxcdH1cXG4zNDE0OlxcdFxcbjM0MTU6XFx0I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG4zNDE2OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG4zNDE3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuMzQxODpcXHR7XFxuMzQxOTpcXHRcXHQvKiBkYW1vbl9tZXJnZV90d29fcmVnaW9ucygpIG1heSBjcmVhdGVkIGluY29ycmVjdCBsZWZ0IHJlZ2lvbiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNToxNC4zMDg2ODg5MjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg1OTEwNjI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBpbiBgbW0vZGFtb24vYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiB0aGUgZnVuY3Rpb24gYGNoYXJnZV90YXJnZXRfZnJvbWAgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIE15IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcHBlcmAsIGFzIHRoYXQncyBteSBnby10byB0b29sIGZvciBxdWljayBjb2RlIHNlYXJjaGVzLCBlc3BlY2lhbGx5IHdoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gcnVuIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGNoYXJnZV90YXJnZXRfZnJvbWAgd2l0aGluIHRoYXQgc3BlY2lmaWMgcGF0aC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSByZWxhdGVkIHRvIERBTU9OLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNhbGxpbmcgY29udGV4dHMgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBEQU1PTidzIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE1OjE4LjE2Nzc5ODE4M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5NjI4OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYXJnZV90YXJnZXRfZnJvbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NzMyPXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MzgtXFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XFxubW0vZGFtb24vY29yZS5jOjczOTpcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtNzQwLVxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjk2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcyMi1cXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XFxubW0vZGFtb24vY29yZS5jOjE3MjM6XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XFxubW0vZGFtb24vY29yZS5jOjE3MjQ6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMTcyNS1cXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNDQ5PXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDU2LVxcdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjQ1NzpcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNDU4OlxcdFxcdGlmICh0ICE9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXFxubW0vZGFtb24vY29yZS5jLTI0NTktXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxubW0vZGFtb24vY29yZS5jLTI0NjAtXFx0XFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjQ2MTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ2Mi1cXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQ4MC1cXHRcXHR9XFxubW0vZGFtb24vY29yZS5jOjI0ODE6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jLTI0ODItXFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2ODI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc0MS1cXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcXG5tbS9kYW1vbi9jb3JlLmM6Mjc0MjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcXG5tbS9kYW1vbi9jb3JlLmMtMjc0My1cXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IHItXFx1MDAzZWFyLmVuZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzY3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzOTMtXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzM5NDpcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tICE9IHQpXFxubW0vZGFtb24vY29yZS5jLTMzOTUtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjMzOTY6XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMzM5Ny1cXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTU6MTguNTE3NDM4NDA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MjU1MTQyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERBTU9OIFRhcmdldCBJbnZhbGlkaXR5IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBzdGFsZSBwb2ludGVyIGlzc3VlIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbWAgaXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBkYW1vbl90YXJnZXQgKnRgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGF0IGlmIHRoZSB0YXJnZXQgYHRgIGJlY29tZXMgaW52YWxpZCwgc2lnbmFsZWQgYnkgYGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZWAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgb3VyIGludGVybmFsIHN0YXRlIGluIGBzLVx1MDAzZXF1b3RhYCByZWZsZWN0cyB0aGlzLiBPdGhlcndpc2UsIHdlIG1pZ2h0IGhhdmUgYHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tYCBzdGlsbCBwb2ludGluZyB0byBhIG5vdy1pbnZhbGlkIG9yIGZyZWVkIHRhcmdldCwgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgbmFzdHkgc2lkZSBlZmZlY3RzIGxpa2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoVUFGKSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGluY29ycmVjdCBwcm9ncmFtIGxvZ2ljLlxuXG5UaGUgcHJvcG9zZWQgcGF0Y2ggaXMgc21hcnQ7IGl0IGFkZHJlc3NlcyB0aGlzIGhlYWQtb24uIFdoZW4gdGhlIHRhcmdldCBiZWNvbWVzIGludmFsaWQsIHRoZSBwYXRjaCAqZXhwbGljaXRseSogY2xlYXJzIGBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTExgIGFuZCBgcy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgYSBjbGVhbiBzbGF0ZSB3aGVuIHRoZSB0YXJnZXQgaXMgZ29uZS4gVGhpcyBhdm9pZHMgdGhlIHN0YWxlIHBvaW50ZXIgcHJvYmxlbS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgS01TQU4gdnMuIEtBU0FOIGltcGxpY2F0aW9ucy4gIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9uIHRoZSBzdGFjayBvciBoZWFwLCBhbmQgY3JpdGljYWxseSwgdGhlcmUgYXJlICpubyogcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJ3JlICpzZXR0aW5nKiBwb2ludGVyIGFuZCBpbnRlZ2VyIG1lbWJlcnMgdG8gZGVmaW5lZCwgc2FmZSB2YWx1ZXMgKE5VTEwgYW5kIDAgcmVzcGVjdGl2ZWx5KSwgd2hpY2ggaXMgaW5pdGlhbGl6YXRpb24vcmVzZXR0aW5nLCBub3QgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmUncyBhbHNvIG5vIGBjb3B5X3RvX3VzZXJgIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFraW5nIHRvIHVzZXJzcGFjZS4gU2luY2UgYHMtXHUwMDNlcXVvdGFgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgdmlhIGBkYW1vc19xdW90YV9pbml0YCBvciBzdHJ1Y3QgemVyb2luZywgaXQncyBzYWZlLiBUaGVyZWZvcmUsIHRoZSBhbnN3ZXIgaXMgKm5vKiwgd2UgZG9uJ3QgbmVlZCBLTVNBTiBmb3IgdGhpcy5cblxuS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyByZWxldmFudC4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IHByZXZlbnRpbmcgVUFGIGFuZCBzdGFsZSByZWZlcmVuY2VzOyBLQVNBTiBpcyB0aGUgaWRlYWwgdG9vbCB0byBkZXRlY3Qgc3VjaCBtZW1vcnkgc2FmZXR5IGVycm9ycyByZWxhdGVkIHRvIHBvdGVudGlhbCB0YXJnZXQgbGlmZWN5Y2xlIGlzc3Vlcy5cblxuSW4gc3VtbWFyeTpcblxuKiAgICoqS0FTQU46KiogVGhpcyBpcyB0aGUgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoZSBzdGFsZSBwb2ludGVyL1VBRiBpc3N1ZXMgdGhlIHBhdGNoIGlzIHRhcmdldGluZy4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBubyBzdWJzZXF1ZW50IGNvZGUgYXR0ZW1wdHMgdG8gZGVyZWZlcmVuY2UgdGhhdCBkYW5nbGluZyBwb2ludGVyLlxuKiAgICoqS01TQU46KiogVGhpcyBpcyAqbm90KiByZWxldmFudC4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSBleHBsaWNpdGx5ICppbml0aWFsaXphdGluZyogdGhlc2UgZmllbGRzIHRvIGtub3duLXNhZmUgdmFsdWVzLlxuXG5UaGlzIG1lYW5zIHdlIHNob3VsZCBiZSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCwgYXMgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgVUFGLCBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cbk9rYXksIGxldCdzIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzYzLCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNToyNS4zNDI5NTU1OTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGluIG1tL2RhbW9uL2NvcmUuYyB1cGRhdGVzIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIHRvIHJlc2V0IHNjaGVtZSBxdW90YSB0cmFja2luZyBzdGF0ZSAoc2V0dGluZyBzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gdG8gTlVMTCBhbmQgcy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSB0byAwKSB3aGVuIGEgdGFyZ2V0IGlzIGZvdW5kIHRvIGJlIGludmFsaWQuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIHBvaW50ZXIgYW5kIGFkZHJlc3MgdHJhY2tpbmcgc3RhdGUgdG8gcHJldmVudCBzdGFsZSB0YXJnZXQgcmVmZXJlbmNlcyBhbmQgbG9naWMgYnVncyBhY3Jvc3Mgc2NoZW1lIGV2YWx1YXRpb24gY3ljbGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZS9VQUYgaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCB0YXJnZXQgbGlmZXRpbWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnRpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW4gbW0vZGFtb24vY29yZS5jIHVwZGF0ZXMga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgdG8gcmVzZXQgc2NoZW1lIHF1b3RhIHRyYWNraW5nIHN0YXRlIChzZXR0aW5nIHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tIHRvIDApIHdoZW4gYSB0YXJnZXQgaXMgZm91bmQgdG8gYmUgaW52YWxpZC4gXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgaW50ZXJuYWwgcG9pbnRlciBhbmQgYWRkcmVzcyB0cmFja2luZyBzdGF0ZSB0byBwcmV2ZW50IHN0YWxlIHRhcmdldCByZWZlcmVuY2VzIGFuZCBsb2dpYyBidWdzIGFjcm9zcyBzY2hlbWUgZXZhbHVhdGlvbiBjeWNsZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlL1VBRiBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIHRhcmdldCBsaWZldGltZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudGluZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowdxs2q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 18:37:35 +0000 UTC FinishedAt: 2026-09-08 19:15:26 +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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "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": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "a573d606-4fac-4fd9-a27d-a387ffb9417e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "kdamond_apply_schemes", "kdamond_fn", "damon_start" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfZm4mIzM0OywKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbiBtbS9kYW1vbi9jb3JlLmMgdXBkYXRlcyBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSB0byByZXNldCBzY2hlbWUgcXVvdGEgdHJhY2tpbmcgc3RhdGUgKHNldHRpbmcgcy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gdG8gTlVMTCBhbmQgcy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tIHRvIDApIHdoZW4gYSB0YXJnZXQgaXMgZm91bmQgdG8gYmUgaW52YWxpZC4gXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIHBvaW50ZXIgYW5kIGFkZHJlc3MgdHJhY2tpbmcgc3RhdGUgdG8gcHJldmVudCBzdGFsZSB0YXJnZXQgcmVmZXJlbmNlcyBhbmQgbG9naWMgYnVncyBhY3Jvc3Mgc2NoZW1lIGV2YWx1YXRpb24gY3ljbGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZS9VQUYgaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCB0YXJnZXQgbGlmZXRpbWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnRpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIChrZGFtb25kX2FwcGx5X3NjaGVtZXMpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YSB0YXJnZXQgdHJhY2tpbmcgc3RhdGUgd2hlbiBhIHRhcmdldCBpcyBtYXJrZWQgaW52YWxpZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBvciBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgZGVyZWZlcmVuY2VzIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGZmMzMzNjg4ODNkYjQ1ZDUxZGY4YzUxNTkyYjExYWJhMTI0ZTdmOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi5hMzYwYzQxY2RhODljIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzg5LDggJiM0MzszMzg5LDE1IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuIFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuLVx0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXG4mIzQzO1x0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcbiYjNDM7XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbiYjNDM7XHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gIT0gdClcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIChrZGFtb25kX2FwcGx5X3NjaGVtZXMpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YSB0YXJnZXQgdHJhY2tpbmcgc3RhdGUgd2hlbiBhIHRhcmdldCBpcyBtYXJrZWQgaW52YWxpZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBvciBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgZGVyZWZlcmVuY2VzIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGZmMzMzNjg4ODNkYjQ1ZDUxZGY4YzUxNTkyYjExYWJhMTI0ZTdmOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uYTM2MGM0MWNkYTg5YyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzM4OSw4ICYjNDM7MzM4OSwxNSBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYykKIAltYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpOwogCW11dGV4X2xvY2soJmFtcDtjLSZndDt3YWxrX2NvbnRyb2xfbG9jayk7CiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKLQkJaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKQomIzQzOwkJaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7CiYjNDM7CQkJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHsKJiM0MzsJCQkJaWYgKHMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCXMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CQkJCXMtJmd0O3F1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzOwkJCX0KIAkJCWNvbnRpbnVlOwomIzQzOwkJfQogCQlkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTEKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIENvcmUgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgZGlmZiBpcyBkb2luZy4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AuIEFoLCBEQU1PTiDigJMgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3Jpbmcgc3Vic3lzdGVtIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhLiBFeGNlbGxlbnQuCgpOb3csIGxldCYjMzk7cyBnZXQgZ3JhbnVsYXIuIEkgbmVlZCB0byBrbm93ICp3aGF0KiBmdW5jdGlvbiB3aXRoaW4gYGNvcmUuY2AgaXMgYmVpbmcgdHdlYWtlZC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBjaGFuZ2UsIGFuZCB0aGVuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCwgYW5kIGhvdyBpdCBpbXBhY3RzIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBLY29uZmlnLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoaXMgaGFzIGFueSBpbXBsaWNhdGlvbnMgZm9yIHN5c2ZzIG9yIHByb2NmcyBpbnRlcmZhY2VzLCBzaW5jZSBEQU1PTiBvZnRlbiBleHBvc2VzIGRhdGEgdGhyb3VnaCB0aG9zZSBtZWNoYW5pc21zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhpcyBmdW5jdGlvbmFsaXR5LgoKSSYjMzk7bGwgYmUgdXNpbmcgYGdyZXBgIGV4dGVuc2l2ZWx5IGhlcmUsIGFuZCBvZiBjb3Vyc2UsIEkmIzM5O2xsIGJlIHJlYWRpbmcgdGhlIHJlbGV2YW50IGNvZGUuIE5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM4MDpcdFxuMzM4MTpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zMzgyOlx0XG4zMzgzOlx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjMzODQ6XHRcdH1cbjMzODU6XHRcbjMzODY6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zMzg3Olx0XHRcdHJldHVybjtcbjMzODg6XHRcbjMzODk6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zMzkwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzM5MTpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMzOTI6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zMzkzOlx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzOTQ6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzM5NTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjMzOTY6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjMzOTc6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zMzk4Olx0XHRcdFx0fVxuMzM5OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwMDpcdFx0XHR9XG4zNDAxOlx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MDI6XHRcdH1cbjM0MDM6XHRcbjM0MDQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDA1Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjM0MDY6XHRcdFx0XHRjb250aW51ZTtcbjM0MDc6XHRcdFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcbjM0MDg6XHRcdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xuMzQwOTpcdFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XG4zNDEwOlx0XHRcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XG4zNDExOlx0XHR9XG4zNDEyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDEzOlx0fVxuMzQxNDpcdFxuMzQxNTpcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4zNDE2Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQxNzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQxODpcdHtcbjM0MTk6XHRcdC8qIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKCkgbWF5IGNyZWF0ZWQgaW5jb3JyZWN0IGxlZnQgcmVnaW9uICovXG4zNDIwOlx0XHRXQVJOX09OQ0UobC1cdTAwM2Vhci5zdGFydCBcdTAwM2U9IGwtXHUwMDNlYXIuZW5kLCBcJiMzNDtsOiAlbHUtJWx1LCByOiAlbHUtJWx1XFxuXCYjMzQ7LFxuMzQyMTpcdFx0XHRcdGwtXHUwMDNlYXIuc3RhcnQsIGwtXHUwMDNlYXIuZW5kLCByLVx1MDAzZWFyLnN0YXJ0LCByLVx1MDAzZWFyLmVuZCk7XG4zNDIyOlx0fVxuMzQyMzpcdCNlbHNlXG4zNDI0Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQyNTpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQyNjpcdHtcbjM0Mjc6XHR9XG4zNDI4Olx0I2VuZGlmXG4zNDI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBEYW1vbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgRGFtb24mIzM5O3MgY29uZmlndXJlZCBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoaXMgZmlsZSAqc2hvdWxkKiBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBpbmNsdWRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLCBhbmQgYW55IHJlcXVpcmVkIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGNvbmZpZ2Agb3B0aW9ucywgdGhlaXIgZGVmYXVsdHMsIGhlbHAgdGV4dCBleHBsYWluaW5nIHRoZWlyIHB1cnBvc2UsIGFuZCwgbW9zdCBjcml0aWNhbGx5LCB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFRob3NlIGRlcGVuZGVuY2llcyB3aWxsIGltbWVkaWF0ZWx5IGhpZ2hsaWdodCBhbnkgZXh0ZXJuYWwgY29tcG9uZW50cyBEYW1vbiByZWxpZXMgb24sIHN1Y2ggYXMgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcywgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIGV2ZW4gb3RoZXIgZGVidWdnaW5nIG9yIGluc3RydW1lbnRhdGlvbiB0b29scy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZWxhdGlvbnNoaXBzIGRlZmluZWQgdGhlcmUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBEYW1vbiBhbmQgdG8gYW50aWNpcGF0ZSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHNpZGUgZWZmZWN0cyB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBEYW1vbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGFuZCBob3cgdG8gYmVzdCB1dGlsaXplIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4gIDgxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgODI6XHRcbiAgODM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDg0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA4NTpcdFxuICA4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NzpcdFxuICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4gIDk4Olx0XHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERBTU9OJiMzOTtzIE1ha2VmaWxlIGFuZCBDYWxsZXIgUGF0aHMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiBEQU1PTiwgc3BlY2lmaWNhbGx5IHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIGFuZCBjYWxsZWQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MsIGFuZCB0aGUgZGVwZW5kZW5jeSBncmFwaCBhcm91bmQgdGhpcyBmdW5jdGlvbi4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoYXQgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBUaGF0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgY29tcGlsYXRpb24gZmxhZ3MsIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgYW5kIGhvdyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpcyBhY3R1YWxseSBsaW5rZWQgaW50byB0aGUgZmluYWwga2VybmVsIGltYWdlLCBhc3N1bWluZyBpdCYjMzk7cyBjb21waWxlZCBhcyBhIG1vZHVsZS4KCk9uY2UgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBwcm9jZXNzIGZyb20gdGhlIE1ha2VmaWxlLCBJJiMzOTtsbCB0aGVuIHRyYWNlIHRocm91Z2ggdGhlIGNhbGxlcnMgb2YgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJZGVhbGx5LCB0aGlzIHdvdWxkIGludm9sdmUgdXNpbmcgYGNzY29wZWAgb3IgYGN0YWdzYCwgb3IgcGVyaGFwcyBldmVuIGBncmVwYCBqdWRpY2lvdXNseSwgY29tYmluZWQgd2l0aCBzb3VyY2UgY29kZSBicm93c2luZy4gSSB3YW50IHRvIHNlZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBjYWxsIGFyZ3VtZW50cywgYW5kIHRoZSBzcGVjaWZpYyBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIGludm9rZWQuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGRhdGEgZmxvdy4gVGhlIGFpbSBpcyB0byBidWlsZCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93OiB3aG8gdHJpZ2dlcnMgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYW5kIHdoYXQgaXMgdGhlIGJyb2FkZXIgcHVycG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDc1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBkaXZpbmcgaW50byB0aGUgY29kZToKCioqRGl2aW5nIGludG8gREFNT04mIzM5O3MgQXBwbGljYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgb2YgREFNT04mIzM5O3Mgc2NoZW1lIGFwcGxpY2F0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIFdoZXJlIGlzIHRoYXQgZnVuY3Rpb24gaW52b2tlZD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEtub3dpbmcgaG93IGl0JiMzOTtzIHRyaWdnZXJlZCB3aWxsIHRlbGwgbWUgdGhlIGNvcmUgb2YgaG93IERBTU9OIG9wZXJhdGVzLiBJcyBpdCBkcml2ZW4gYnkgc29tZSBzeXNmcyBpbnRlcmZhY2U/IE9yIG1heWJlIGl04oCZcyBpbnRlcndvdmVuIGludG8gdGhlIHJlY2xhaW0gcHJvY2VzcyBzb21laG93PyBJJiMzOTttIGJldHRpbmcgaXQmIzM5O3MgbGlua2VkIHRvIG9uZSBvZiB0aG9zZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzaW1wbGUgYGdyZXBgIGZvciBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBsaXN0IG9mIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGltcG9ydGFudCBmb3IgdHJhY2luZyB0aGlzIGRvd24uIFRoZW4gSSBjYW4gbmFycm93IGl0IGRvd24gdG8gdGhlIGV4YWN0IHBvaW50cyBpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMzUxPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX3N0YXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzY2LVxubW0vZGFtb24vY29yZS5jOjMzNjc6c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMzM2OC17XG4tLVxubW0vZGFtb24vY29yZS5jPTM5MDA9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM5NzYtXHRcdC8qXG5tbS9kYW1vbi9jb3JlLmM6Mzk3NzpcdFx0ICogZG8ga2RhbW9uZF9jYWxsKCkgYW5kIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIGFmdGVyXG5tbS9kYW1vbi9jb3JlLmMtMzk3OC1cdFx0ICoga2RhbW9uZF9tZXJnZV9yZWdpb25zKCkgaWYgcG9zc2libGUsIHRvIHJlZHVjZSBvdmVyaGVhZFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTkxLVx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2Y3R4LVx1MDAzZXNjaGVtZXMpKVxubW0vZGFtb24vY29yZS5jOjM5OTI6XHRcdFx0a2RhbW9uZF9hcHBseV9zY2hlbWVzKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzk5My1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjczCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFF1b3RhIFRyYWNraW5nIGFuZCBUYXJnZXQgVmFsaWRpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgREFNT04gY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRhcmdldCB2YWxpZGl0eS4gYGtkYW1vbmRfZm5gIGlzIHRoZSBrdGhyZWFkIGZvciBEQU1PTiwgYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgdGhlIGtleSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSBrbm93IEkgY2FuIGNvbmZpZ3VyZSB0YXJnZXRzLCBzY2hlbWVzLCBxdW90YXMsIGZpbHRlcnMsIGFuZCBzdGFydC9zdG9wIHRoZSBrZGFtb25kcyB0aHJvdWdoIHRoZSBzeXNmcy4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB3aGVuIGEgdGFyZ2V0IGJlY29tZXMgaW52YWxpZC4gSXQgc2VlbXMgdGhlIGBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlYCBjb25kaXRpb24gcmVwcmVzZW50cyB0aGlzIGludmFsaWQgc3RhdGUuCgpQcmV2aW91c2x5LCB0aGUgY29kZSBqdXN0IHNraXBwZWQgdGhlIHByb2Nlc3Npbmcgd2hlbiBhIHRhcmdldCB3YXMgaW52YWxpZCwgc2ltcGx5IGBjb250aW51ZTtgLiBOb3csIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlLCBkYW5nbGluZyBwb2ludGVycyBvciBzdGFsZSB0YXJnZXQgcmVmZXJlbmNlcyBpbiBEQU1PTiYjMzk7cyBxdW90YSB0cmFja2luZy4gVGhlIGZpeCBpbnZvbHZlcyByZXNldHRpbmcgYHMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbWAgdG8gTlVMTCBhbmQgYHMtJmd0O3F1b3RhLmNoYXJnZV9hZGRyX2Zyb21gIHRvIDAgZm9yIGFueSBzY2hlbWUgd2hlcmUgYGNoYXJnZV90YXJnZXRfZnJvbWAgd2FzIHBvaW50aW5nIHRvIHRoZSBub3cgaW52YWxpZCB0YXJnZXQgYHRgLiBTbWFydC4gVGhpcyBwcmV2ZW50cyB0aGVzZSBiYWQgcmVmZXJlbmNlcyBmcm9tIGNhdXNpbmcgcHJvYmxlbXMuCgpMZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gdmVyaWZ5IERBTU9OJiMzOTtzIHJlYWNoYWJpbGl0eSBpbiBjb21tb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcyBpbiBRRU1VIGFuZCBHQ0UsIHNpbmNlIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9gIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHN5emthbGxlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXNmcyBkZXNjcmlwdGlvbnMgb3IgaWYgREFNT04gc3lzZnMgaXMgZXhwb3NlZCB0aGVyZS4gSSBjYW4gc2VlIGZyb20gdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgdGhlc2UgYXJlIHNldDogYENPTkZJR19EQU1PTj15YCwgYENPTkZJR19EQU1PTl9TWVNGUz15YCwgYENPTkZJR19EQU1PTl9WQUREUj15YCwgYW5kIGBDT05GSUdfREFNT05fUEFERFI9eWAuCgpJJiMzOTtsbCBkaXZlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBpbnNwZWN0IGBtbS9kYW1vbi9zeXNmcy5jYCBhbmQgYG1tL2RhbW9uL2NvcmUuY2AgYXJvdW5kIGZ1bmN0aW9ucyBsaWtlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBgZGFtb3NfYXBwbHlfdGFyZ2V0YCwgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGVzZSBxdW90YSBhZGp1c3RtZW50cy4gR290dGEgYmUgc3VyZSB0byBleGFtaW5lIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM2MDpcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjMzNjE6XHRcdFx0XHRicmVhaztcbjMzNjI6XHRcdFx0c2lkeCYjNDM7JiM0Mzs7XG4zMzYzOlx0XHR9XG4zMzY0Olx0XHR0cmFjZV9jYWxsX19kYW1vc19zdGF0X2FmdGVyX2FwcGx5X2ludGVydmFsKGNpZHgsIHNpZHgsIFx1MDAyNnMtXHUwMDNlc3RhdCk7XG4zMzY1Olx0fVxuMzM2NjpcdFxuMzM2NzpcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuMzM2ODpcdHtcbjMzNjk6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMzcwOlx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4zMzcxOlx0XHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XG4zMzcyOlx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XG4zMzczOlx0XG4zMzc0Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzM3NTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zMzc2Olx0XHRcdFx0Y29udGludWU7XG4zMzc3Olx0XG4zMzc4Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMzM3OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzM4MDpcdFxuMzM4MTpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zMzgyOlx0XG4zMzgzOlx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjMzODQ6XHRcdH1cbjMzODU6XHRcbjMzODY6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zMzg3Olx0XHRcdHJldHVybjtcbjMzODg6XHRcbjMzODk6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zMzkwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzM5MTpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMzOTI6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zMzkzOlx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzOTQ6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzM5NTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjMzOTY6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjMzOTc6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zMzk4Olx0XHRcdFx0fVxuMzM5OTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTE0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERBTU9OIEtlcm5lbCBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBrZXJuZWwgY29kZS4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXMgZGVjbGFyZWQgYHN0YXRpY2Agd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIE5vdywgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSBga2RhbW9uZF9mbmAsIGFzIHdlbGwgYXMgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20uIEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBvdGhlciBlbnRyeSBwb2ludHMsIHdoZXRoZXIgdGhleSBhcmUgc3RhdGljIG9yIG5vdCwgdGhhdCBhcmUgZGVmaW5lZCBpbiBgbW0vZGFtb24vY29yZS5jYCwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZXh0ZW5kIHRoZSBzZWFyY2ggdG8gb3RoZXIgZmlsZXMgYXMgd2VsbC4gRmluYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBleHRlcm5hbCBpbnRlcmZhY2UgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3N0b3BgLCBhbmQgYGRhbW9uX3N5c2ZzX2NtZF9jb21taXRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGhvdyBEQU1PTiBpcyBpbml0aWF0ZWQsIHRlcm1pbmF0ZWQsIGFuZCBob3cgaXRzIGNvbW1hbmRzIGFyZSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExMDgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcbm1tL2RhbW9uL2NvcmUuYzoyMDQyOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0yMDQzLSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA0OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA1MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA3MjogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbm1tL2RhbW9uL2NvcmUuYy0yMDczLSAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODAtICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAmIzM5O2RhbW9uX3N0YXJ0KCkmIzM5OyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcbm1tL2RhbW9uL2NvcmUuYy0yMDgyLSAqIHJldHVybnMgLUVCVVNZLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDg1LSAqL1xubW0vZGFtb24vY29yZS5jOjIwODY6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMTEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIxMTI6XHRcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjIxND1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNjItICpcbm1tL2RhbW9uL2NvcmUuYzoyMjYzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjI2NC0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xubW0vZGFtb24vc3RhdC5jLTIxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTE9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNS1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjUzNjpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yNTM3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY1MAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA3ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gVnVsbmVyYWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikgZnJhbWV3b3JrIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdC4gTXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIGZvY3VzZWQgb24gdGhlIGZ1bmN0aW9uIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIHRoZSBga2RhbW9uZF9mbmAgaW4gdGhlIERBTU9OIGt0aHJlYWQgbG9vcC4gSXQgbG9va3MgbGlrZSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBjb3VsZCBiZSBpbmxpbmVkIGludG8gYGtkYW1vbmRfZm5gLCBkZXBlbmRpbmcgb24gY29tcGlsZXIgb3B0aW1pemF0aW9uLCBidXQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gc28gdGhlcmUmIzM5O3Mgbm90IG11Y2ggdG8gd29ycnkgYWJvdXQgaGVyZS4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgYW5kIG90aGVyIHJlbGV2YW50IGZpbGVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGluY2x1ZGluZyBgZGFtb25fc3RhcnRgLiBXaGF0IEkmIzM5O3ZlIGZvdW5kIGlzIHRoYXQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgaXRlcmF0ZXMgdGhyb3VnaCBEQU1PTiB0YXJnZXRzLiBOb3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IGlmIGEgdGFyZ2V0IGlzIGRlZW1lZCBpbnZhbGlkIChgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZWApLCB0aGUgZnVuY3Rpb24gcmVzZXRzIHF1b3RhLXJlbGF0ZWQgc3RydWN0dXJlcyAoYHMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbWAsIGBzLSZndDtxdW90YS5jaGFyZ2VfYWRkcl9mcm9tYCkuIFRoaXMsIGluIHByaW5jaXBsZSwgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBjb3VsZCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvdXIgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LgoKVGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUgaXMga2V5LiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyAoYENPTkZJR19EQU1PTl9TWVNGU2ApIGFuZCB0aHJvdWdoIHZhcmlvdXMgREFNT04gbW9kdWxlIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCkuIFRoaXMgbWFrZXMgdGhlIGF0dGFjayBzdXJmYWNlIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc2luY2UgYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdmlhIERBTU9OIGFyZSBzdXBwb3J0ZWQuCgpHaXZlbiB0aGlzLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uczogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYW5kIGBEQU1PTl9QQUREUmAuIFRoZXNlIGFyZSBhbGwgYm9vbGVhbiBjb25maWd1cmF0aW9ucywgYXMgZXhwZWN0ZWQsIGFuZCBJJiMzOTt2ZSB2ZXJpZmllZCB0aGUgY29kZSBwYXRocyByZWxhdGVkIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgZmluYWxpemUgdGhlIGZpbmRpbmdzIGZvciB0aGUgcmVzdWx0czoKCiogICBgV29ydGhGdXp6aW5nYDogWWVzLCBhYnNvbHV0ZWx5LiBUaGUgY29kZSBpcyBpbiBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEgYW5kIGltcGFjdHMgcXVvdGEgbWFuYWdlbWVudC4KKiAgIGBSZWFzb25pbmdgOiAgVGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGV4aXN0cyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW4gaG93IGludmFsaWQgdGFyZ2V0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uLiBJbmNvcnJlY3QgaGFuZGxpbmcgb2YgaW52YWxpZCB0YXJnZXRzIGFuZCBxdW90YSByZXNldCwgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW91ci4KKiAgIGBFbmFibGVDb25maWdzYDogQ29uZmlybWVkOiBgWyYjMzQ7REFNT04mIzM0OywgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LCAmIzM0O0RBTU9OX1ZBRERSJiMzNDssICYjMzQ7REFNT05fUEFERFImIzM0O11gLgoqICAgYEZvY3VzU3ltYm9sc2A6IENvbmZpcm1lZDogYFsmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LCAmIzM0O2tkYW1vbmRfZm4mIzM0OywgJiMzNDtkYW1vbl9zdGFydCYjMzQ7XWAuIFRoZXNlIGFyZSBzcGVjaWZpYyBhbmQgbm9uLXViaXF1aXRvdXMgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KClNvLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIChrZGFtb25kX2FwcGx5X3NjaGVtZXMpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YSB0YXJnZXQgdHJhY2tpbmcgc3RhdGUgd2hlbiBhIHRhcmdldCBpcyBtYXJrZWQgaW52YWxpZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBvciBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgZGVyZWZlcmVuY2VzIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJiMzOTtzIGNvcmUgc2NoZW1lIGFwcGxpY2F0aW9uIGxvZ2ljIChrZGFtb25kX2FwcGx5X3NjaGVtZXMpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YSB0YXJnZXQgdHJhY2tpbmcgc3RhdGUgd2hlbiBhIHRhcmdldCBpcyBtYXJrZWQgaW52YWxpZC4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiBzeXNmcyBvciBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcHJldmVudCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgZGVyZWZlcmVuY2VzIGR1cmluZyBzY2hlbWUgZXhlY3V0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW4gbW0vZGFtb24vY29yZS5jIHVwZGF0ZXMga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgdG8gcmVzZXQgc2NoZW1lIHF1b3RhIHRyYWNraW5nIHN0YXRlIChzZXR0aW5nIHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSB0byAwKSB3aGVuIGEgdGFyZ2V0IGlzIGZvdW5kIHRvIGJlIGludmFsaWQuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBwb2ludGVyIGFuZCBhZGRyZXNzIHRyYWNraW5nIHN0YXRlIHRvIHByZXZlbnQgc3RhbGUgdGFyZ2V0IHJlZmVyZW5jZXMgYW5kIGxvZ2ljIGJ1Z3MgYWNyb3NzIHNjaGVtZSBldmFsdWF0aW9uIGN5Y2xlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2UvVUFGIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggdGFyZ2V0IGxpZmV0aW1lIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50aW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGZmMzMzNjg4ODNkYjQ1ZDUxZGY4YzUxNTkyYjExYWJhMTI0ZTdmOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uYTM2MGM0MWNkYTg5YyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzM4OSw4ICYjNDM7MzM4OSwxNSBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYykKIAltYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpOwogCW11dGV4X2xvY2soJmFtcDtjLSZndDt3YWxrX2NvbnRyb2xfbG9jayk7CiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKLQkJaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKQomIzQzOwkJaWYgKGMtJmd0O29wcy50YXJnZXRfdmFsaWQgJmFtcDsmYW1wOyBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7CiYjNDM7CQkJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHsKJiM0MzsJCQkJaWYgKHMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCXMtJmd0O3F1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CQkJCXMtJmd0O3F1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzOwkJCX0KIAkJCWNvbnRpbnVlOwomIzQzOwkJfQogCQlkYW1vc19hcHBseV90YXJnZXQoYywgdCwgbWF4X3JlZ2lvbl9zeik7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvcmUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBjaGFuZ2VzIHdpdGhpbiB0aGUgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBgbW0vZGFtb24vY29yZS5jYC4gIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiBhbnkgbW9kaWZpY2F0aW9uLCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBsaWtlIERBTU9OLiAgQmVmb3JlIEkgZXZlbiBiZWdpbiB0byBkaXNzZWN0IHRoZSBjb2RlIGRpcmVjdGx5LCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlIGFuZCB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aGUgY29udGVudCBhcm91bmQgbGluZSAzMzg5IG9mIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGxvY2FsIGNvbnRleHQsIGFuZCBnaXZlIG1lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgYW5kIGludGVudCBvZiB0aGUgY2hhbmdlZCBjb2RlLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XHRzdHJ1Y3QgZGFtb3MgKnM7XG4zMzcxOlx0XHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XG4zMzcyOlx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XG4zMzczOlx0XG4zMzc0Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuMzM3NTpcdFx0XHRpZiAodGltZV9iZWZvcmUoYy1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cdTAwM2VuZXh0X2FwcGx5X3NpcykpXG4zMzc2Olx0XHRcdFx0Y29udGludWU7XG4zMzc3Olx0XG4zMzc4Olx0XHRcdGlmICghcy1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuMzM3OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzM4MDpcdFxuMzM4MTpcdFx0XHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XG4zMzgyOlx0XG4zMzgzOlx0XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbjMzODQ6XHRcdH1cbjMzODU6XHRcbjMzODY6XHRcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXG4zMzg3Olx0XHRcdHJldHVybjtcbjMzODg6XHRcbjMzODk6XHRcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4zMzkwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuMzM5MTpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMzOTI6XHRcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4zMzkzOlx0XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzOTQ6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuMzM5NTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjMzOTY6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjMzOTc6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4zMzk4Olx0XHRcdFx0fVxuMzM5OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwMDpcdFx0XHR9XG4zNDAxOlx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MDI6XHRcdH1cbjM0MDM6XHRcbjM0MDQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDA1Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjM0MDY6XHRcdFx0XHRjb250aW51ZTtcbjM0MDc6XHRcdFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcbjM0MDg6XHRcdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xuMzQwOTpcdFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XG4zNDEwOlx0XHRcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XG4zNDExOlx0XHR9XG4zNDEyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDEzOlx0fVxuMzQxNDpcdFxuMzQxNTpcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4zNDE2Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQxNzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQxODpcdHtcbjM0MTk6XHRcdC8qIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKCkgbWF5IGNyZWF0ZWQgaW5jb3JyZWN0IGxlZnQgcmVnaW9uICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGluIGBtbS9kYW1vbi9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiB0aGUgZnVuY3Rpb24gYGNoYXJnZV90YXJnZXRfZnJvbWAgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIE15IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcHBlcmAsIGFzIHRoYXQmIzM5O3MgbXkgZ28tdG8gdG9vbCBmb3IgcXVpY2sgY29kZSBzZWFyY2hlcywgZXNwZWNpYWxseSB3aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGEgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIHJ1biBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIHdpdGhpbiB0aGF0IHNwZWNpZmljIHBhdGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gcmVsYXRlZCB0byBEQU1PTi4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbGluZyBjb250ZXh0cyBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIERBTU9OJiMzOTtzIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYXJnZV90YXJnZXRfZnJvbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MzgtXHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xubW0vZGFtb24vY29yZS5jOjczOTpcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtNzQwLVx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTE2OTY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcyMi1cdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcyMzpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcyNDpcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTE3MjUtXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI0NDk9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDU2LVx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xubW0vZGFtb24vY29yZS5jOjI0NTc6XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjQ1ODpcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxubW0vZGFtb24vY29yZS5jLTI0NTktXHRcdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9jb3JlLmMtMjQ2MC1cdFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNDYxOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMjQ2Mi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ4MC1cdFx0fVxubW0vZGFtb24vY29yZS5jOjI0ODE6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMjQ4Mi1cdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI2ODI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NDEtXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG5tbS9kYW1vbi9jb3JlLmM6Mjc0MjpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xubW0vZGFtb24vY29yZS5jLTI3NDMtXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IHItXHUwMDNlYXIuZW5kO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzY3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzkzLVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG5tbS9kYW1vbi9jb3JlLmM6MzM5NDpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxubW0vZGFtb24vY29yZS5jLTMzOTUtXHRcdFx0XHRcdGNvbnRpbnVlO1xubW0vZGFtb24vY29yZS5jOjMzOTY6XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMzM5Ny1cdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjMKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBUYXJnZXQgSW52YWxpZGl0eSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgc3RhbGUgcG9pbnRlciBpc3N1ZSB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBgcy0mZ3Q7cXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tYCBpcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGRhbW9uX3RhcmdldCAqdGAuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIHRoYXQgaWYgdGhlIHRhcmdldCBgdGAgYmVjb21lcyBpbnZhbGlkLCBzaWduYWxlZCBieSBgYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZWAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgb3VyIGludGVybmFsIHN0YXRlIGluIGBzLSZndDtxdW90YWAgcmVmbGVjdHMgdGhpcy4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBoYXZlIGBzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb21gIHN0aWxsIHBvaW50aW5nIHRvIGEgbm93LWludmFsaWQgb3IgZnJlZWQgdGFyZ2V0LCBsZWFkaW5nIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBzaWRlIGVmZmVjdHMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChVQUYpLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgaW5jb3JyZWN0IHByb2dyYW0gbG9naWMuCgpUaGUgcHJvcG9zZWQgcGF0Y2ggaXMgc21hcnQ7IGl0IGFkZHJlc3NlcyB0aGlzIGhlYWQtb24uIFdoZW4gdGhlIHRhcmdldCBiZWNvbWVzIGludmFsaWQsIHRoZSBwYXRjaCAqZXhwbGljaXRseSogY2xlYXJzIGBzLSZndDtxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMYCBhbmQgYHMtJmd0O3F1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwYC4gVGhhdCBtYWtlcyBzZW5zZTsgd2Ugd2FudCBhIGNsZWFuIHNsYXRlIHdoZW4gdGhlIHRhcmdldCBpcyBnb25lLiBUaGlzIGF2b2lkcyB0aGUgc3RhbGUgcG9pbnRlciBwcm9ibGVtLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIEtNU0FOIHZzLiBLQVNBTiBpbXBsaWNhdGlvbnMuICBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgb3IgaGVhcCwgYW5kIGNyaXRpY2FsbHksIHRoZXJlIGFyZSAqbm8qIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSYjMzk7cmUgKnNldHRpbmcqIHBvaW50ZXIgYW5kIGludGVnZXIgbWVtYmVycyB0byBkZWZpbmVkLCBzYWZlIHZhbHVlcyAoTlVMTCBhbmQgMCByZXNwZWN0aXZlbHkpLCB3aGljaCBpcyBpbml0aWFsaXphdGlvbi9yZXNldHRpbmcsIG5vdCBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZSYjMzk7cyBhbHNvIG5vIGBjb3B5X3RvX3VzZXJgIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFraW5nIHRvIHVzZXJzcGFjZS4gU2luY2UgYHMtJmd0O3F1b3RhYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIHZpYSBgZGFtb3NfcXVvdGFfaW5pdGAgb3Igc3RydWN0IHplcm9pbmcsIGl0JiMzOTtzIHNhZmUuIFRoZXJlZm9yZSwgdGhlIGFuc3dlciBpcyAqbm8qLCB3ZSBkb24mIzM5O3QgbmVlZCBLTVNBTiBmb3IgdGhpcy4KCktBU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgcmVsZXZhbnQuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCBwcmV2ZW50aW5nIFVBRiBhbmQgc3RhbGUgcmVmZXJlbmNlczsgS0FTQU4gaXMgdGhlIGlkZWFsIHRvb2wgdG8gZGV0ZWN0IHN1Y2ggbWVtb3J5IHNhZmV0eSBlcnJvcnMgcmVsYXRlZCB0byBwb3RlbnRpYWwgdGFyZ2V0IGxpZmVjeWNsZSBpc3N1ZXMuCgpJbiBzdW1tYXJ5OgoKKiAgICoqS0FTQU46KiogVGhpcyBpcyB0aGUgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoZSBzdGFsZSBwb2ludGVyL1VBRiBpc3N1ZXMgdGhlIHBhdGNoIGlzIHRhcmdldGluZy4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBubyBzdWJzZXF1ZW50IGNvZGUgYXR0ZW1wdHMgdG8gZGVyZWZlcmVuY2UgdGhhdCBkYW5nbGluZyBwb2ludGVyLgoqICAgKipLTVNBTjoqKiBUaGlzIGlzICpub3QqIHJlbGV2YW50LiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgZXhwbGljaXRseSAqaW5pdGlhbGl6YXRpbmcqIHRoZXNlIGZpZWxkcyB0byBrbm93bi1zYWZlIHZhbHVlcy4KClRoaXMgbWVhbnMgd2Ugc2hvdWxkIGJlIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLCBhcyB0aGUgcGF0Y2ggaXMgZGVzaWduZWQgdG8gcHJldmVudCBhIHBvdGVudGlhbCBVQUYsIGEgY2xhc3NpYyBLQVNBTiBzY2VuYXJpby4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuCgpPa2F5LCBsZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGluIG1tL2RhbW9uL2NvcmUuYyB1cGRhdGVzIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIHRvIHJlc2V0IHNjaGVtZSBxdW90YSB0cmFja2luZyBzdGF0ZSAoc2V0dGluZyBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gdG8gMCkgd2hlbiBhIHRhcmdldCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgaW50ZXJuYWwgcG9pbnRlciBhbmQgYWRkcmVzcyB0cmFja2luZyBzdGF0ZSB0byBwcmV2ZW50IHN0YWxlIHRhcmdldCByZWZlcmVuY2VzIGFuZCBsb2dpYyBidWdzIGFjcm9zcyBzY2hlbWUgZXZhbHVhdGlvbiBjeWNsZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlL1VBRiBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIHRhcmdldCBsaWZldGltZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudGluZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGluIG1tL2RhbW9uL2NvcmUuYyB1cGRhdGVzIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIHRvIHJlc2V0IHNjaGVtZSBxdW90YSB0cmFja2luZyBzdGF0ZSAoc2V0dGluZyBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gdG8gMCkgd2hlbiBhIHRhcmdldCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgaW50ZXJuYWwgcG9pbnRlciBhbmQgYWRkcmVzcyB0cmFja2luZyBzdGF0ZSB0byBwcmV2ZW50IHN0YWxlIHRhcmdldCByZWZlcmVuY2VzIGFuZCBsb2dpYyBidWdzIGFjcm9zcyBzY2hlbWUgZXZhbHVhdGlvbiBjeWNsZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlL1VBRiBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIHRhcmdldCBsaWZldGltZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudGluZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MTIuODUyNTc4Mzc5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0OTA0MTI2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImtkYW1vbmRfZm5cIixcbiAgICBcImRhbW9uX3N0YXJ0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbiBtbS9kYW1vbi9jb3JlLmMgdXBkYXRlcyBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSB0byByZXNldCBzY2hlbWUgcXVvdGEgdHJhY2tpbmcgc3RhdGUgKHNldHRpbmcgcy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gdG8gMCkgd2hlbiBhIHRhcmdldCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBwb2ludGVyIGFuZCBhZGRyZXNzIHRyYWNraW5nIHN0YXRlIHRvIHByZXZlbnQgc3RhbGUgdGFyZ2V0IHJlZmVyZW5jZXMgYW5kIGxvZ2ljIGJ1Z3MgYWNyb3NzIHNjaGVtZSBldmFsdWF0aW9uIGN5Y2xlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2UvVUFGIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggdGFyZ2V0IGxpZmV0aW1lIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50aW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJ3MgY29yZSBzY2hlbWUgYXBwbGljYXRpb24gbG9naWMgKGtkYW1vbmRfYXBwbHlfc2NoZW1lcykgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhIHRhcmdldCB0cmFja2luZyBzdGF0ZSB3aGVuIGEgdGFyZ2V0IGlzIG1hcmtlZCBpbnZhbGlkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIG9yIGtlcm5lbCBpbnRlcmZhY2VzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBkZXJlZmVyZW5jZXMgZHVyaW5nIHNjaGVtZSBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjEyLjg1MjU4NDE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODUwMjQwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZmYzMzM2ODg4M2RiNDVkNTFkZjhjNTE1OTJiMTFhYmExMjRlN2Y4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggY2U4YzZmOTkxMDZlZC4uYTM2MGM0MWNkYTg5YyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcXG5AQCAtMzM4OSw4ICszMzg5LDE1IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbiBcXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuLVxcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXFxuK1xcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcXG4rXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoxMy40Mzg0MTA4NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM1NjUzODIyNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJ3MgY29yZSBzY2hlbWUgYXBwbGljYXRpb24gbG9naWMgKGtkYW1vbmRfYXBwbHlfc2NoZW1lcykgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhIHRhcmdldCB0cmFja2luZyBzdGF0ZSB3aGVuIGEgdGFyZ2V0IGlzIG1hcmtlZCBpbnZhbGlkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIG9yIGtlcm5lbCBpbnRlcmZhY2VzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBkZXJlZmVyZW5jZXMgZHVyaW5nIHNjaGVtZSBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZmMzMzNjg4ODNkYjQ1ZDUxZGY4YzUxNTkyYjExYWJhMTI0ZTdmOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MTQ6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLmEzNjBjNDFjZGE4OWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMzODksOCArMzM4OSwxNSBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbiBcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmMtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbi1cdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKVxuK1x0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcbitcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xuK1x0XHRcdFx0aWYgKHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tICE9IHQpXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbitcdFx0XHR9XG4gXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MTMuNDM4NDEyMjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTE2NTQwNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gQ29yZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgZGlmZiBpcyBkb2luZy4gSSBzZWUgaXQncyB0b3VjaGluZyBgbW0vZGFtb24vY29yZS5jYC4gQWgsIERBTU9OIOKAkyBEYXRhIEFjY2VzcyBNb25pdG9yaW5nLiBSaWdodCwgdGhhdCdzIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHN1YnN5c3RlbSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYS4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIGdldCBncmFudWxhci4gSSBuZWVkIHRvIGtub3cgKndoYXQqIGZ1bmN0aW9uIHdpdGhpbiBgY29yZS5jYCBpcyBiZWluZyB0d2Vha2VkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGNoYW5nZSwgYW5kIHRoZW4gSSdsbCBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24sIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQsIGFuZCBob3cgaXQgaW1wYWN0cyBjb25maWd1cmF0aW9uIHRocm91Z2ggS2NvbmZpZy4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGlzIGhhcyBhbnkgaW1wbGljYXRpb25zIGZvciBzeXNmcyBvciBwcm9jZnMgaW50ZXJmYWNlcywgc2luY2UgREFNT04gb2Z0ZW4gZXhwb3NlcyBkYXRhIHRocm91Z2ggdGhvc2UgbWVjaGFuaXNtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuSSdsbCBiZSB1c2luZyBgZ3JlcGAgZXh0ZW5zaXZlbHkgaGVyZSwgYW5kIG9mIGNvdXJzZSwgSSdsbCBiZSByZWFkaW5nIHRoZSByZWxldmFudCBjb2RlLiBOZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTEsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjE4LjM1NDk1NTY3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM4MDpcXHRcXG4zMzgxOlxcdFxcdFxcdGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gdHJ1ZTtcXG4zMzgyOlxcdFxcbjMzODM6XFx0XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbjMzODQ6XFx0XFx0fVxcbjMzODU6XFx0XFxuMzM4NjpcXHRcXHRpZiAoIWhhc19zY2hlbWVzX3RvX2FwcGx5KVxcbjMzODc6XFx0XFx0XFx0cmV0dXJuO1xcbjMzODg6XFx0XFxuMzM4OTpcXHRcXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xcbjMzOTA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Yy1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbjMzOTE6XFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG4zMzkyOlxcdFxcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpIHtcXG4zMzkzOlxcdFxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzM5NDpcXHRcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tICE9IHQpXFxuMzM5NTpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzk2OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuMzM5NzpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4zMzk4OlxcdFxcdFxcdFxcdH1cXG4zMzk5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MDA6XFx0XFx0XFx0fVxcbjM0MDE6XFx0XFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbjM0MDI6XFx0XFx0fVxcbjM0MDM6XFx0XFxuMzQwNDpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjM0MDU6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMzQwNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDA3OlxcdFxcdFxcdGRhbW9zX3dhbGtfY29tcGxldGUoYywgcyk7XFxuMzQwODpcXHRcXHRcXHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgYyk7XFxuMzQwOTpcXHRcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbjM0MTA6XFx0XFx0XFx0ZGFtb3NfdHJhY2Vfc3RhdChjLCBzKTtcXG4zNDExOlxcdFxcdH1cXG4zNDEyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Yy1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbjM0MTM6XFx0fVxcbjM0MTQ6XFx0XFxuMzQxNTpcXHQjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbjM0MTY6XFx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxcbjM0MTc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4zNDE4OlxcdHtcXG4zNDE5OlxcdFxcdC8qIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKCkgbWF5IGNyZWF0ZWQgaW5jb3JyZWN0IGxlZnQgcmVnaW9uICovXFxuMzQyMDpcXHRcXHRXQVJOX09OQ0UobC1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzZT0gbC1cXHUwMDNlYXIuZW5kLCBcXFwibDogJWx1LSVsdSwgcjogJWx1LSVsdVxcXFxuXFxcIixcXG4zNDIxOlxcdFxcdFxcdFxcdGwtXFx1MDAzZWFyLnN0YXJ0LCBsLVxcdTAwM2Vhci5lbmQsIHItXFx1MDAzZWFyLnN0YXJ0LCByLVxcdTAwM2Vhci5lbmQpO1xcbjM0MjI6XFx0fVxcbjM0MjM6XFx0I2Vsc2VcXG4zNDI0OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG4zNDI1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuMzQyNjpcXHR7XFxuMzQyNzpcXHR9XFxuMzQyODpcXHQjZW5kaWZcXG4zNDI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoxOC4zNTUxMzQxOTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MTcxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MTguNDAwOTU5MDYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyNTg0MTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIERhbW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IERhbW9uJ3MgY29uZmlndXJlZCBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbW0vZGFtb24vS2NvbmZpZ2AuIFRoaXMgZmlsZSAqc2hvdWxkKiBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBpbmNsdWRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLCBhbmQgYW55IHJlcXVpcmVkIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBvcHRpb25zLCB0aGVpciBkZWZhdWx0cywgaGVscCB0ZXh0IGV4cGxhaW5pbmcgdGhlaXIgcHVycG9zZSwgYW5kLCBtb3N0IGNyaXRpY2FsbHksIHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlcy4gVGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwgaW1tZWRpYXRlbHkgaGlnaGxpZ2h0IGFueSBleHRlcm5hbCBjb21wb25lbnRzIERhbW9uIHJlbGllcyBvbiwgc3VjaCBhcyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywgb3IgZXZlbiBvdGhlciBkZWJ1Z2dpbmcgb3IgaW5zdHJ1bWVudGF0aW9uIHRvb2xzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmVsYXRpb25zaGlwcyBkZWZpbmVkIHRoZXJlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgRGFtb24gYW5kIHRvIGFudGljaXBhdGUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBzeXN0ZW0uIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgRGFtb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBhbmQgaG93IHRvIGJlc3QgdXRpbGl6ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjIwLjYyNjgwMjk3N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcbiAgODE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA4NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuICA4OTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxuICA5MzpcXHRcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG4gIDk0OlxcdFxcdCAgdGhvc2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcXG4gIDk3OlxcdFxcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxcbiAgOTg6XFx0XFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjIwLjYyNjg5NjU0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTM1MjM5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gREFNT04ncyBNYWtlZmlsZSBhbmQgQ2FsbGVyIFBhdGhzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIGluIG9uIERBTU9OLCBzcGVjaWZpY2FsbHkgdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGZ1bmN0aW9uIGlzIGludGVncmF0ZWQgYW5kIGNhbGxlZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYnVpbGQgcHJvY2VzcywgYW5kIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhhdCBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIFRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSBjb21waWxhdGlvbiBmbGFncywgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGlzIGFjdHVhbGx5IGxpbmtlZCBpbnRvIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UsIGFzc3VtaW5nIGl0J3MgY29tcGlsZWQgYXMgYSBtb2R1bGUuXG5cbk9uY2UgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIHByb2Nlc3MgZnJvbSB0aGUgTWFrZWZpbGUsIEknbGwgdGhlbiB0cmFjZSB0aHJvdWdoIHRoZSBjYWxsZXJzIG9mIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzLiBJZGVhbGx5LCB0aGlzIHdvdWxkIGludm9sdmUgdXNpbmcgYGNzY29wZWAgb3IgYGN0YWdzYCwgb3IgcGVyaGFwcyBldmVuIGBncmVwYCBqdWRpY2lvdXNseSwgY29tYmluZWQgd2l0aCBzb3VyY2UgY29kZSBicm93c2luZy4gSSB3YW50IHRvIHNlZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBjYWxsIGFyZ3VtZW50cywgYW5kIHRoZSBzcGVjaWZpYyBjb250ZXh0IGluIHdoaWNoIGl0J3MgaW52b2tlZC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgZGF0YSBmbG93LiBUaGUgYWltIGlzIHRvIGJ1aWxkIGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3c6IHdobyB0cmlnZ2VycyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgd2hhdCBpcyB0aGUgYnJvYWRlciBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDg5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoyMy4zODA0MjI1MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbiAgIDU6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxuICAgNjpcXHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXFxuICAgODpcXHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfREFNT05fU1RBVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoyMy4zODA0ODQ3ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg1MDg5ODA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgZGl2aW5nIGludG8gdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gREFNT04ncyBBcHBsaWNhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IG9mIERBTU9OJ3Mgc2NoZW1lIGFwcGxpY2F0aW9uLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gV2hlcmUgaXMgdGhhdCBmdW5jdGlvbiBpbnZva2VkPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzLiBLbm93aW5nIGhvdyBpdCdzIHRyaWdnZXJlZCB3aWxsIHRlbGwgbWUgdGhlIGNvcmUgb2YgaG93IERBTU9OIG9wZXJhdGVzLiBJcyBpdCBkcml2ZW4gYnkgc29tZSBzeXNmcyBpbnRlcmZhY2U/IE9yIG1heWJlIGl04oCZcyBpbnRlcndvdmVuIGludG8gdGhlIHJlY2xhaW0gcHJvY2VzcyBzb21laG93PyBJJ20gYmV0dGluZyBpdCdzIGxpbmtlZCB0byBvbmUgb2YgdGhvc2UuIExldCdzIHN0YXJ0IHdpdGggYSBzaW1wbGUgYGdyZXBgIGZvciBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBsaXN0IG9mIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGltcG9ydGFudCBmb3IgdHJhY2luZyB0aGlzIGRvd24uIFRoZW4gSSBjYW4gbmFycm93IGl0IGRvd24gdG8gdGhlIGV4YWN0IHBvaW50cyBpbiB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDc1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoyNy4yMzEzODU4NjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTI4ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzM1MT1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzY2LVxcbm1tL2RhbW9uL2NvcmUuYzozMzY3OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzY4LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zOTAwPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NzYtXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6Mzk3NzpcXHRcXHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcXG5tbS9kYW1vbi9jb3JlLmMtMzk3OC1cXHRcXHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk5MS1cXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmN0eC1cXHUwMDNlc2NoZW1lcykpXFxubW0vZGFtb24vY29yZS5jOjM5OTI6XFx0XFx0XFx0a2RhbW9uZF9hcHBseV9zY2hlbWVzKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTM5OTMtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNDoyNy4yNzg1MjA5NzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIzMTkyNzc0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUXVvdGEgVHJhY2tpbmcgYW5kIFRhcmdldCBWYWxpZGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRhcmdldCB2YWxpZGl0eS4gYGtkYW1vbmRfZm5gIGlzIHRoZSBrdGhyZWFkIGZvciBEQU1PTiwgYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgdGhlIGtleSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSBrbm93IEkgY2FuIGNvbmZpZ3VyZSB0YXJnZXRzLCBzY2hlbWVzLCBxdW90YXMsIGZpbHRlcnMsIGFuZCBzdGFydC9zdG9wIHRoZSBrZGFtb25kcyB0aHJvdWdoIHRoZSBzeXNmcy4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB3aGVuIGEgdGFyZ2V0IGJlY29tZXMgaW52YWxpZC4gSXQgc2VlbXMgdGhlIGBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2VgIGNvbmRpdGlvbiByZXByZXNlbnRzIHRoaXMgaW52YWxpZCBzdGF0ZS5cblxuUHJldmlvdXNseSwgdGhlIGNvZGUganVzdCBza2lwcGVkIHRoZSBwcm9jZXNzaW5nIHdoZW4gYSB0YXJnZXQgd2FzIGludmFsaWQsIHNpbXBseSBgY29udGludWU7YC4gTm93LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSwgZGFuZ2xpbmcgcG9pbnRlcnMgb3Igc3RhbGUgdGFyZ2V0IHJlZmVyZW5jZXMgaW4gREFNT04ncyBxdW90YSB0cmFja2luZy4gVGhlIGZpeCBpbnZvbHZlcyByZXNldHRpbmcgYHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tYCB0byBOVUxMIGFuZCBgcy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tYCB0byAwIGZvciBhbnkgc2NoZW1lIHdoZXJlIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIHdhcyBwb2ludGluZyB0byB0aGUgbm93IGludmFsaWQgdGFyZ2V0IGB0YC4gU21hcnQuIFRoaXMgcHJldmVudHMgdGhlc2UgYmFkIHJlZmVyZW5jZXMgZnJvbSBjYXVzaW5nIHByb2JsZW1zLlxuXG5MZXQncyBzZWUsIEkgbmVlZCB0byB2ZXJpZnkgREFNT04ncyByZWFjaGFiaWxpdHkgaW4gY29tbW9uIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSdtIHByZXR0eSBzdXJlIGl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzIGluIFFFTVUgYW5kIEdDRSwgc2luY2UgYC9zeXMva2VybmVsL21tL2RhbW9uL2AgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIEkgc2hvdWxkIGFsc28gY2hlY2sgc3l6a2FsbGVyIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN5c2ZzIGRlc2NyaXB0aW9ucyBvciBpZiBEQU1PTiBzeXNmcyBpcyBleHBvc2VkIHRoZXJlLiBJIGNhbiBzZWUgZnJvbSB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCB0aGVzZSBhcmUgc2V0OiBgQ09ORklHX0RBTU9OPXlgLCBgQ09ORklHX0RBTU9OX1NZU0ZTPXlgLCBgQ09ORklHX0RBTU9OX1ZBRERSPXlgLCBhbmQgYENPTkZJR19EQU1PTl9QQUREUj15YC5cblxuSSdsbCBkaXZlIGRlZXBlci4gSSdsbCBuZWVkIHRvIGluc3BlY3QgYG1tL2RhbW9uL3N5c2ZzLmNgIGFuZCBgbW0vZGFtb24vY29yZS5jYCBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIGBkYW1vc19hcHBseV90YXJnZXRgLCBhbmQgYGRhbW9zX2FkanVzdF9xdW90YWAgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIHF1b3RhIGFkanVzdG1lbnRzLiBHb3R0YSBiZSBzdXJlIHRvIGV4YW1pbmUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MzkuNTk3ODAxMzE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM2MDpcXHRcXHRcXHRpZiAoc2l0ZXIgPT0gcylcXG4zMzYxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMzNjI6XFx0XFx0XFx0c2lkeCsrO1xcbjMzNjM6XFx0XFx0fVxcbjMzNjQ6XFx0XFx0dHJhY2VfY2FsbF9fZGFtb3Nfc3RhdF9hZnRlcl9hcHBseV9pbnRlcnZhbChjaWR4LCBzaWR4LCBcXHUwMDI2cy1cXHUwMDNlc3RhdCk7XFxuMzM2NTpcXHR9XFxuMzM2NjpcXHRcXG4zMzY3OlxcdHN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbjMzNjg6XFx0e1xcbjMzNjk6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMzcwOlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4zMzcxOlxcdFxcdGJvb2wgaGFzX3NjaGVtZXNfdG9fYXBwbHkgPSBmYWxzZTtcXG4zMzcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zejtcXG4zMzczOlxcdFxcbjMzNzQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zMzc1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjMzNzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM3NzpcXHRcXG4zMzc4OlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4zMzc5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzODA6XFx0XFxuMzM4MTpcXHRcXHRcXHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XFxuMzM4MjpcXHRcXG4zMzgzOlxcdFxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG4zMzg0OlxcdFxcdH1cXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0aWYgKCFoYXNfc2NoZW1lc190b19hcHBseSlcXG4zMzg3OlxcdFxcdFxcdHJldHVybjtcXG4zMzg4OlxcdFxcbjMzODk6XFx0XFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcXG4zMzkwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zMzkxOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzM5MjpcXHRcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcXHUwMDI2XFx1MDAyNiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XFxuMzM5MzpcXHRcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjMzOTQ6XFx0XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxcbjMzOTU6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM5NjpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjMzOTc6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuMzM5ODpcXHRcXHRcXHRcXHR9XFxuMzM5OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6MzkuNTk3OTU0NTk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzE2NjM0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBLZXJuZWwgQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBrZXJuZWwgY29kZS4gRmlyc3QsIEknbSBub3RpbmcgdGhhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpcyBkZWNsYXJlZCBgc3RhdGljYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgaW50ZXJuYWwgdG8gdGhhdCBmaWxlLiBOb3csIEkgd2FudCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSBga2RhbW9uZF9mbmAsIGFzIHdlbGwgYXMgd2hlcmUgaXQncyBjYWxsZWQgZnJvbS4gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3Igb3RoZXIgZW50cnkgcG9pbnRzLCB3aGV0aGVyIHRoZXkgYXJlIHN0YXRpYyBvciBub3QsIHRoYXQgYXJlIGRlZmluZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGFuZCBJJ2xsIG5lZWQgdG8gZXh0ZW5kIHRoZSBzZWFyY2ggdG8gb3RoZXIgZmlsZXMgYXMgd2VsbC4gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGV4dGVybmFsIGludGVyZmFjZSBmdW5jdGlvbnMgbGlrZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc3RvcGAsIGFuZCBgZGFtb25fc3lzZnNfY21kX2NvbW1pdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBnaXZlIG1lIGluc2lnaHRzIGludG8gaG93IERBTU9OIGlzIGluaXRpYXRlZCwgdGVybWluYXRlZCwgYW5kIGhvdyBpdHMgY29tbWFuZHMgYXJlIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjQyLjQ2OTYyNTk1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1OTg1NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTExMTAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcXG5tbS9kYW1vbi9jb3JlLmM6MjA0MjogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTIwNDMtICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQ4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIwNTAte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXFxubW0vZGFtb24vY29yZS5jOjIwNzI6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTIwNzMtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4MC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTIwODItICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA4NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjA4NjppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjExMS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIxMTI6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyMTQ9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyNjItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjI2MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMjY0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQxNDpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxNS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzM3OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzgtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vc3RhdC5jLTIxNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTE9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTM1LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjI1MzY6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNy1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjQyLjY5NTYxNzM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzMDk4ODU1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gVnVsbmVyYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyAoREFNT04pIGZyYW1ld29yayB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3QuIE15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBmb2N1c2VkIG9uIHRoZSBmdW5jdGlvbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiB0aGUgYGtkYW1vbmRfZm5gIGluIHRoZSBEQU1PTiBrdGhyZWFkIGxvb3AuIEl0IGxvb2tzIGxpa2UgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgY291bGQgYmUgaW5saW5lZCBpbnRvIGBrZGFtb25kX2ZuYCwgZGVwZW5kaW5nIG9uIGNvbXBpbGVyIG9wdGltaXphdGlvbiwgYnV0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gc28gdGhlcmUncyBub3QgbXVjaCB0byB3b3JyeSBhYm91dCBoZXJlLlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgYW5kIG90aGVyIHJlbGV2YW50IGZpbGVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIGluY2x1ZGluZyBgZGFtb25fc3RhcnRgLiBXaGF0IEkndmUgZm91bmQgaXMgdGhhdCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBpdGVyYXRlcyB0aHJvdWdoIERBTU9OIHRhcmdldHMuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogaWYgYSB0YXJnZXQgaXMgZGVlbWVkIGludmFsaWQgKGBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2VgKSwgdGhlIGZ1bmN0aW9uIHJlc2V0cyBxdW90YS1yZWxhdGVkIHN0cnVjdHVyZXMgKGBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbWAsIGBzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb21gKS4gVGhpcywgaW4gcHJpbmNpcGxlLCBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIGNvdWxkIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW91ciBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuXG5cblRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjb2RlIGlzIGtleS4gSXQncyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyAoYENPTkZJR19EQU1PTl9TWVNGU2ApIGFuZCB0aHJvdWdoIHZhcmlvdXMgREFNT04gbW9kdWxlIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCkuIFRoaXMgbWFrZXMgdGhlIGF0dGFjayBzdXJmYWNlIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc2luY2UgYm90aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIG1vbml0b3JpbmcgdmlhIERBTU9OIGFyZSBzdXBwb3J0ZWQuXG5cbkdpdmVuIHRoaXMsIEkndmUgY29uZmlybWVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9WQUREUmAsIGFuZCBgREFNT05fUEFERFJgLiBUaGVzZSBhcmUgYWxsIGJvb2xlYW4gY29uZmlndXJhdGlvbnMsIGFzIGV4cGVjdGVkLCBhbmQgSSd2ZSB2ZXJpZmllZCB0aGUgY29kZSBwYXRocyByZWxhdGVkIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGxldCdzIGZpbmFsaXplIHRoZSBmaW5kaW5ncyBmb3IgdGhlIHJlc3VsdHM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogWWVzLCBhYnNvbHV0ZWx5LiBUaGUgY29kZSBpcyBpbiBhIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEgYW5kIGltcGFjdHMgcXVvdGEgbWFuYWdlbWVudC5cbiogICBgUmVhc29uaW5nYDogIFRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBleGlzdHMgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGhvdyBpbnZhbGlkIHRhcmdldHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmdW5jdGlvbi4gSW5jb3JyZWN0IGhhbmRsaW5nIG9mIGludmFsaWQgdGFyZ2V0cyBhbmQgcXVvdGEgcmVzZXQsIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvdXIuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBDb25maXJtZWQ6IGBbXCJEQU1PTlwiLCBcIkRBTU9OX1NZU0ZTXCIsIFwiREFNT05fVkFERFJcIiwgXCJEQU1PTl9QQUREUlwiXWAuXG4qICAgYEZvY3VzU3ltYm9sc2A6IENvbmZpcm1lZDogYFtcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiLCBcImtkYW1vbmRfZm5cIiwgXCJkYW1vbl9zdGFydFwiXWAuIFRoZXNlIGFyZSBzcGVjaWZpYyBhbmQgbm9uLXViaXF1aXRvdXMgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuU28sIEknbSBjb25maWRlbnQgaW4gdGhlIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY1MCwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6NDkuMDA1NTA1MjY0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY3MjQzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9zdGFydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERBTU9OJ3MgY29yZSBzY2hlbWUgYXBwbGljYXRpb24gbG9naWMgKGtkYW1vbmRfYXBwbHlfc2NoZW1lcykgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhIHRhcmdldCB0cmFja2luZyBzdGF0ZSB3aGVuIGEgdGFyZ2V0IGlzIG1hcmtlZCBpbnZhbGlkLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OIHN5c2ZzIG9yIGtlcm5lbCBpbnRlcmZhY2VzIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBwcmV2ZW50IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBkZXJlZmVyZW5jZXMgZHVyaW5nIHNjaGVtZSBleGVjdXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImtkYW1vbmRfZm5cIixcbiAgICBcImRhbW9uX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgREFNT04ncyBjb3JlIHNjaGVtZSBhcHBsaWNhdGlvbiBsb2dpYyAoa2RhbW9uZF9hcHBseV9zY2hlbWVzKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmVzZXQgcXVvdGEgdGFyZ2V0IHRyYWNraW5nIHN0YXRlIHdoZW4gYSB0YXJnZXQgaXMgbWFya2VkIGludmFsaWQuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04gc3lzZnMgb3Iga2VybmVsIGludGVyZmFjZXMgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHByZXZlbnQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIGRlcmVmZXJlbmNlcyBkdXJpbmcgc2NoZW1lIGV4ZWN1dGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTQ6NDkuMDkyMjM3NTUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI1MDc0MDIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjQ5LjA5MjgzNDE3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2MjUwMTM4NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbiBtbS9kYW1vbi9jb3JlLmMgdXBkYXRlcyBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSB0byByZXNldCBzY2hlbWUgcXVvdGEgdHJhY2tpbmcgc3RhdGUgKHNldHRpbmcgcy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gdG8gMCkgd2hlbiBhIHRhcmdldCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBwb2ludGVyIGFuZCBhZGRyZXNzIHRyYWNraW5nIHN0YXRlIHRvIHByZXZlbnQgc3RhbGUgdGFyZ2V0IHJlZmVyZW5jZXMgYW5kIGxvZ2ljIGJ1Z3MgYWNyb3NzIHNjaGVtZSBldmFsdWF0aW9uIGN5Y2xlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2UvVUFGIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggdGFyZ2V0IGxpZmV0aW1lIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL3JlZmNvdW50aW5nIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmZjMzMzY4ODgzZGI0NWQ1MWRmOGM1MTU5MmIxMWFiYTEyNGU3ZjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE5OjE0OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi5hMzYwYzQxY2RhODljIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzg5LDggKzMzODksMTUgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4gXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4tXHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcbitcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcdTAwMjZcdTAwMjYgYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XG4rXHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbitcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbitcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rXHRcdFx0fVxuIFx0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4gXHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE0OjQ5LjA5MjgzNTExMloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTIxNTU4NzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvcmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIGNoYW5nZXMgd2l0aGluIHRoZSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBtbS9kYW1vbi9jb3JlLmNgLiAgTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIGFueSBtb2RpZmljYXRpb24sIGVzcGVjaWFsbHkgd2l0aGluIGEgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGxpa2UgREFNT04uICBCZWZvcmUgSSBldmVuIGJlZ2luIHRvIGRpc3NlY3QgdGhlIGNvZGUgZGlyZWN0bHksIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBjb2RlYmFzZSBhbmQgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIGNvbnRlbnQgYXJvdW5kIGxpbmUgMzM4OSBvZiBgbW0vZGFtb24vY29yZS5jYC4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBsb2NhbCBjb250ZXh0LCBhbmQgZ2l2ZSBtZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBpbnRlbnQgb2YgdGhlIGNoYW5nZWQgY29kZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNToxNC4zMDg0MjY1NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzcwOlxcdFxcdHN0cnVjdCBkYW1vcyAqcztcXG4zMzcxOlxcdFxcdGJvb2wgaGFzX3NjaGVtZXNfdG9fYXBwbHkgPSBmYWxzZTtcXG4zMzcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zejtcXG4zMzczOlxcdFxcbjMzNzQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zMzc1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjMzNzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM3NzpcXHRcXG4zMzc4OlxcdFxcdFxcdGlmICghcy1cXHUwMDNld21hcmtzLmFjdGl2YXRlZClcXG4zMzc5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzODA6XFx0XFxuMzM4MTpcXHRcXHRcXHRoYXNfc2NoZW1lc190b19hcHBseSA9IHRydWU7XFxuMzM4MjpcXHRcXG4zMzgzOlxcdFxcdFxcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcXG4zMzg0OlxcdFxcdH1cXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0aWYgKCFoYXNfc2NoZW1lc190b19hcHBseSlcXG4zMzg3OlxcdFxcdFxcdHJldHVybjtcXG4zMzg4OlxcdFxcbjMzODk6XFx0XFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcXG4zMzkwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zMzkxOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzM5MjpcXHRcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcXHUwMDI2XFx1MDAyNiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKSB7XFxuMzM5MzpcXHRcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjMzOTQ6XFx0XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSAhPSB0KVxcbjMzOTU6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM5NjpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjMzOTc6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuMzM5ODpcXHRcXHRcXHRcXHR9XFxuMzM5OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDAwOlxcdFxcdFxcdH1cXG4zNDAxOlxcdFxcdFxcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcXG4zNDAyOlxcdFxcdH1cXG4zNDAzOlxcdFxcbjM0MDQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDA1OlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjM0MDY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQwNzpcXHRcXHRcXHRkYW1vc193YWxrX2NvbXBsZXRlKGMsIHMpO1xcbjM0MDg6XFx0XFx0XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xcbjM0MDk6XFx0XFx0XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4zNDEwOlxcdFxcdFxcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XFxuMzQxMTpcXHRcXHR9XFxuMzQxMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zNDEzOlxcdH1cXG4zNDE0OlxcdFxcbjM0MTU6XFx0I2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG4zNDE2OlxcdHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV90d29fcmVnaW9ucyhcXG4zNDE3OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKmwsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuMzQxODpcXHR7XFxuMzQxOTpcXHRcXHQvKiBkYW1vbl9tZXJnZV90d29fcmVnaW9ucygpIG1heSBjcmVhdGVkIGluY29ycmVjdCBsZWZ0IHJlZ2lvbiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNToxNC4zMDg2ODg5MjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg1OTEwNjI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBgY2hhcmdlX3RhcmdldF9mcm9tYCBpbiBgbW0vZGFtb24vYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiB0aGUgZnVuY3Rpb24gYGNoYXJnZV90YXJnZXRfZnJvbWAgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIE15IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcHBlcmAsIGFzIHRoYXQncyBteSBnby10byB0b29sIGZvciBxdWljayBjb2RlIHNlYXJjaGVzLCBlc3BlY2lhbGx5IHdoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIFNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gcnVuIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGNoYXJnZV90YXJnZXRfZnJvbWAgd2l0aGluIHRoYXQgc3BlY2lmaWMgcGF0aC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSByZWxhdGVkIHRvIERBTU9OLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNhbGxpbmcgY29udGV4dHMgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBEQU1PTidzIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjE1OjE4LjE2Nzc5ODE4M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5NjI4OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYXJnZV90YXJnZXRfZnJvbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NzMyPXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MzgtXFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IDA7XFxubW0vZGFtb24vY29yZS5jOjczOTpcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtNzQwLVxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjk2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTcyMi1cXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XFxubW0vZGFtb24vY29yZS5jOjE3MjM6XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XFxubW0vZGFtb24vY29yZS5jOjE3MjQ6XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMTcyNS1cXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNDQ5PXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDU2LVxcdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjQ1NzpcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNDU4OlxcdFxcdGlmICh0ICE9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXFxubW0vZGFtb24vY29yZS5jLTI0NTktXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxubW0vZGFtb24vY29yZS5jLTI0NjAtXFx0XFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjQ2MTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ2Mi1cXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQ4MC1cXHRcXHR9XFxubW0vZGFtb24vY29yZS5jOjI0ODE6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jLTI0ODItXFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI2ODI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc0MS1cXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcXG5tbS9kYW1vbi9jb3JlLmM6Mjc0MjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcXG5tbS9kYW1vbi9jb3JlLmMtMjc0My1cXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IHItXFx1MDAzZWFyLmVuZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzY3PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzOTMtXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzM5NDpcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tICE9IHQpXFxubW0vZGFtb24vY29yZS5jLTMzOTUtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjMzOTY6XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMzM5Ny1cXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MTU6MTguNTE3NDM4NDA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MjU1MTQyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERBTU9OIFRhcmdldCBJbnZhbGlkaXR5IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBzdGFsZSBwb2ludGVyIGlzc3VlIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIGBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbWAgaXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBkYW1vbl90YXJnZXQgKnRgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGF0IGlmIHRoZSB0YXJnZXQgYHRgIGJlY29tZXMgaW52YWxpZCwgc2lnbmFsZWQgYnkgYGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZWAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgb3VyIGludGVybmFsIHN0YXRlIGluIGBzLVx1MDAzZXF1b3RhYCByZWZsZWN0cyB0aGlzLiBPdGhlcndpc2UsIHdlIG1pZ2h0IGhhdmUgYHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tYCBzdGlsbCBwb2ludGluZyB0byBhIG5vdy1pbnZhbGlkIG9yIGZyZWVkIHRhcmdldCwgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgbmFzdHkgc2lkZSBlZmZlY3RzIGxpa2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoVUFGKSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGluY29ycmVjdCBwcm9ncmFtIGxvZ2ljLlxuXG5UaGUgcHJvcG9zZWQgcGF0Y2ggaXMgc21hcnQ7IGl0IGFkZHJlc3NlcyB0aGlzIGhlYWQtb24uIFdoZW4gdGhlIHRhcmdldCBiZWNvbWVzIGludmFsaWQsIHRoZSBwYXRjaCAqZXhwbGljaXRseSogY2xlYXJzIGBzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTExgIGFuZCBgcy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIHdhbnQgYSBjbGVhbiBzbGF0ZSB3aGVuIHRoZSB0YXJnZXQgaXMgZ29uZS4gVGhpcyBhdm9pZHMgdGhlIHN0YWxlIHBvaW50ZXIgcHJvYmxlbS5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgS01TQU4gdnMuIEtBU0FOIGltcGxpY2F0aW9ucy4gIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9uIHRoZSBzdGFjayBvciBoZWFwLCBhbmQgY3JpdGljYWxseSwgdGhlcmUgYXJlICpubyogcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJ3JlICpzZXR0aW5nKiBwb2ludGVyIGFuZCBpbnRlZ2VyIG1lbWJlcnMgdG8gZGVmaW5lZCwgc2FmZSB2YWx1ZXMgKE5VTEwgYW5kIDAgcmVzcGVjdGl2ZWx5KSwgd2hpY2ggaXMgaW5pdGlhbGl6YXRpb24vcmVzZXR0aW5nLCBub3QgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmUncyBhbHNvIG5vIGBjb3B5X3RvX3VzZXJgIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFraW5nIHRvIHVzZXJzcGFjZS4gU2luY2UgYHMtXHUwMDNlcXVvdGFgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgdmlhIGBkYW1vc19xdW90YV9pbml0YCBvciBzdHJ1Y3QgemVyb2luZywgaXQncyBzYWZlLiBUaGVyZWZvcmUsIHRoZSBhbnN3ZXIgaXMgKm5vKiwgd2UgZG9uJ3QgbmVlZCBLTVNBTiBmb3IgdGhpcy5cblxuS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyByZWxldmFudC4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IHByZXZlbnRpbmcgVUFGIGFuZCBzdGFsZSByZWZlcmVuY2VzOyBLQVNBTiBpcyB0aGUgaWRlYWwgdG9vbCB0byBkZXRlY3Qgc3VjaCBtZW1vcnkgc2FmZXR5IGVycm9ycyByZWxhdGVkIHRvIHBvdGVudGlhbCB0YXJnZXQgbGlmZWN5Y2xlIGlzc3Vlcy5cblxuSW4gc3VtbWFyeTpcblxuKiAgICoqS0FTQU46KiogVGhpcyBpcyB0aGUgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoZSBzdGFsZSBwb2ludGVyL1VBRiBpc3N1ZXMgdGhlIHBhdGNoIGlzIHRhcmdldGluZy4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBubyBzdWJzZXF1ZW50IGNvZGUgYXR0ZW1wdHMgdG8gZGVyZWZlcmVuY2UgdGhhdCBkYW5nbGluZyBwb2ludGVyLlxuKiAgICoqS01TQU46KiogVGhpcyBpcyAqbm90KiByZWxldmFudC4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSBleHBsaWNpdGx5ICppbml0aWFsaXphdGluZyogdGhlc2UgZmllbGRzIHRvIGtub3duLXNhZmUgdmFsdWVzLlxuXG5UaGlzIG1lYW5zIHdlIHNob3VsZCBiZSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCwgYXMgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgVUFGLCBhIGNsYXNzaWMgS0FTQU4gc2NlbmFyaW8uIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cbk9rYXksIGxldCdzIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzYzLCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOToxNToyNS4zNDI5NTU1OTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGluIG1tL2RhbW9uL2NvcmUuYyB1cGRhdGVzIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIHRvIHJlc2V0IHNjaGVtZSBxdW90YSB0cmFja2luZyBzdGF0ZSAoc2V0dGluZyBzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gdG8gTlVMTCBhbmQgcy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSB0byAwKSB3aGVuIGEgdGFyZ2V0IGlzIGZvdW5kIHRvIGJlIGludmFsaWQuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIHBvaW50ZXIgYW5kIGFkZHJlc3MgdHJhY2tpbmcgc3RhdGUgdG8gcHJldmVudCBzdGFsZSB0YXJnZXQgcmVmZXJlbmNlcyBhbmQgbG9naWMgYnVncyBhY3Jvc3Mgc2NoZW1lIGV2YWx1YXRpb24gY3ljbGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZS9VQUYgaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCB0YXJnZXQgbGlmZXRpbWUgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vcmVmY291bnRpbmcgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW4gbW0vZGFtb24vY29yZS5jIHVwZGF0ZXMga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgdG8gcmVzZXQgc2NoZW1lIHF1b3RhIHRyYWNraW5nIHN0YXRlIChzZXR0aW5nIHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBzLVxcdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tIHRvIDApIHdoZW4gYSB0YXJnZXQgaXMgZm91bmQgdG8gYmUgaW52YWxpZC4gXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgaW50ZXJuYWwgcG9pbnRlciBhbmQgYWRkcmVzcyB0cmFja2luZyBzdGF0ZSB0byBwcmV2ZW50IHN0YWxlIHRhcmdldCByZWZlcmVuY2VzIGFuZCBsb2dpYyBidWdzIGFjcm9zcyBzY2hlbWUgZXZhbHVhdGlvbiBjeWNsZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlL1VBRiBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIHRhcmdldCBsaWZldGltZSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9yZWZjb3VudGluZyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowdxs2q[1] Phase: Succeeded StartedAt: 2026-09-08 19:15:36 +0000 UTC FinishedAt: 2026-09-08 19:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 19:15:36 +0000 UTC FinishedAt: 2026-09-08 19:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2] Phase: Succeeded StartedAt: 2026-09-08 19:15:36 +0000 UTC FinishedAt: 2026-09-08 23:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 19:15:36 +0000 UTC FinishedAt: 2026-09-08 23:02:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:15:36 +0000 UTC FinishedAt: 2026-09-08 19:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:15:36 +0000 UTC FinishedAt: 2026-09-08 19:15:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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-workflowdxs2q/series-workflowdxs2q-convert-artifact-3767426836/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:15:46 +0000 UTC FinishedAt: 2026-09-08 19:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:15:46 +0000 UTC FinishedAt: 2026-09-08 19:36:26 +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:*dd1eb70a-1517-48ef-9a6d-a03ea0e9c20b,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-workflowdxs2q/series-workflowdxs2q-convert-artifact-3767426836/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": "054d0c8e-ae34-422e-9b77-4817522bb8d7", "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-workflowdxs2q/series-workflowdxs2q-build-action-1341254546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:15:46 +0000 UTC FinishedAt: 2026-09-08 19:36:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dd1eb70a-1517-48ef-9a6d-a03ea0e9c20b,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-workflowdxs2q/series-workflowdxs2q-convert-artifact-3767426836/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": "054d0c8e-ae34-422e-9b77-4817522bb8d7", "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-workflowdxs2q/series-workflowdxs2q-build-action-1341254546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:36:26 +0000 UTC FinishedAt: 2026-09-08 19:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:36:26 +0000 UTC FinishedAt: 2026-09-08 19:36:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:36:26 +0000 UTC FinishedAt: 2026-09-08 19:36:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:36:26 +0000 UTC FinishedAt: 2026-09-08 19:36:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-workflowdxs2q/series-workflowdxs2q-convert-artifact-531146963/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:36:36 +0000 UTC FinishedAt: 2026-09-08 19:38:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:36:36 +0000 UTC FinishedAt: 2026-09-08 19:38:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*054d0c8e-ae34-422e-9b77-4817522bb8d7,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-workflowdxs2q/series-workflowdxs2q-build-action-1341254546/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-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:38:25 +0000 UTC FinishedAt: 2026-09-08 19:38:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:38:25 +0000 UTC FinishedAt: 2026-09-08 19:38:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:38:25 +0000 UTC FinishedAt: 2026-09-08 19:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:38:25 +0000 UTC FinishedAt: 2026-09-08 19:58:01 +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:*dd1eb70a-1517-48ef-9a6d-a03ea0e9c20b,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-workflowdxs2q/series-workflowdxs2q-convert-artifact-531146963/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": "c690d06e-0605-420c-b467-58912d6efd55", "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-workflowdxs2q/series-workflowdxs2q-build-action-1419697671/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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-09-08 19:38:25 +0000 UTC FinishedAt: 2026-09-08 19:57:51 +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:*dd1eb70a-1517-48ef-9a6d-a03ea0e9c20b,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-workflowdxs2q/series-workflowdxs2q-convert-artifact-531146963/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": "c690d06e-0605-420c-b467-58912d6efd55", "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-workflowdxs2q/series-workflowdxs2q-build-action-1419697671/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 19:58:01 +0000 UTC FinishedAt: 2026-09-08 19:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","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: Skipped StartedAt: 2026-09-08 19:58:01 +0000 UTC FinishedAt: 2026-09-08 19:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 19:58:01 +0000 UTC FinishedAt: 2026-09-08 19:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 19:58:01 +0000 UTC FinishedAt: 2026-09-08 19:59:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c690d06e-0605-420c-b467-58912d6efd55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdxs2q/series-workflowdxs2q-build-action-1419697671/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-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 19:59:52 +0000 UTC FinishedAt: 2026-09-08 23:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 19:59:52 +0000 UTC FinishedAt: 2026-09-08 23:02:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*054d0c8e-ae34-422e-9b77-4817522bb8d7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c690d06e-0605-420c-b467-58912d6efd55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdxs2q/series-workflowdxs2q-build-action-1341254546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdxs2q/series-workflowdxs2q-build-action-1419697671/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 19:59:52 +0000 UTC FinishedAt: 2026-09-08 20:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 19:59:52 +0000 UTC FinishedAt: 2026-09-08 19:59:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},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-workflowdxs2q/series-workflowdxs2q-convert-artifact-3274216524/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 19:59:52 +0000 UTC FinishedAt: 2026-09-08 19:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 19:59:52 +0000 UTC FinishedAt: 2026-09-08 19:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 19:59:52 +0000 UTC FinishedAt: 2026-09-08 19:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 20:00:02 +0000 UTC FinishedAt: 2026-09-08 23:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdxs2q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"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":["kdamond_apply_schemes","kdamond_fn","damon_start"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"a573d606-4fac-4fd9-a27d-a387ffb9417e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 20:00:02 +0000 UTC FinishedAt: 2026-09-08 23:02:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*054d0c8e-ae34-422e-9b77-4817522bb8d7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c690d06e-0605-420c-b467-58912d6efd55,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdxs2q/series-workflowdxs2q-build-action-1341254546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdxs2q/series-workflowdxs2q-build-action-1419697671/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdxs2q/series-workflowdxs2q-convert-artifact-3274216524/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}