Name: series-workflowz2n2n Phase: Succeeded StartedAt: 2026-09-15 11:27:00 +0000 UTC FinishedAt: 2026-09-15 15:39:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[0] Phase: Succeeded StartedAt: 2026-09-15 11:27:00 +0000 UTC FinishedAt: 2026-09-15 11:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 11:27:00 +0000 UTC FinishedAt: 2026-09-15 11:51:28 +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": "9bbf9ab98625157430e1dde8fcada034668de7b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS" ], "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": "9bbf9ab98625157430e1dde8fcada034668de7b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS" ], "series_id": "76a5be07-5582-40b2-baff-1050c2d183be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_sysfs_turn_damon_on", "damon_sysfs_handle_cmd", "damon_call" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "9bbf9ab98625157430e1dde8fcada034668de7b5", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbiYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19oYW5kbGVfY21kJiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgc3RvcmluZyB0aGUgcmV0dXJuIGNvZGUgb2YgZGFtb25fY2FsbCgpIGluIHRoZSBleGlzdGluZyBsb2NhbCB2YXJpYWJsZSAmIzM5O2VyciYjMzk7IGFuZCBwcm9wYWdhdGluZyBpdCB0byB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGFuZCByZXR1cm5pbmcgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZGFyaWVzIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIHByb3BhZ2F0aW9uIGluIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKSBieSBwcm9wZXJseSByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUgZnJvbSBkYW1vbl9jYWxsKCkgaW5zdGVhZCBvZiBpZ25vcmluZyBpdCBhbmQgcmV0dXJuaW5nIHN1Y2Nlc3MuIFRoaXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSAoL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjaWRcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWIyYzI4NTJjZWE5OTZhZmIyZjQyNTMwMjNkY2I0NjRmN2I5MGJjNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjQ3OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5iZWI0YmRjNzQ0NjAxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIyODAsNyAmIzQzOzIyODAsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRhdGEgPSBrZGFtb25kO1xuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VyZXBlYXQgPSB0cnVlO1xuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XG4tXHRpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKVxuJiM0MztcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcbiYjNDM7XHRpZiAoZXJyKVxuIFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbiYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19oYW5kbGVfY21kJiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgcHJvcGFnYXRpb24gaW4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpIGJ5IHByb3Blcmx5IHJldHVybmluZyB0aGUgZXJyb3IgY29kZSBmcm9tIGRhbW9uX2NhbGwoKSBpbnN0ZWFkIG9mIGlnbm9yaW5nIGl0IGFuZCByZXR1cm5pbmcgc3VjY2Vzcy4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlICgvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NpZFx1MDAzZS9zdGF0ZSkgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjJjMjg1MmNlYTk5NmFmYjJmNDI1MzAyM2RjYjQ2NGY3YjkwYmM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDc6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCBlMzg1OGZmYWI0YjIyLi5iZWI0YmRjNzQ0NjAxIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTIyODAsNyAmIzQzOzIyODAsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpCiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7ZGF0YSA9IGtkYW1vbmQ7CiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7cmVwZWF0ID0gdHJ1ZTsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7Ci0JaWYgKGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKSkKJiM0MzsJZXJyID0gZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpOwomIzQzOwlpZiAoZXJyKQogCQlrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTsKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gU3lzZnMgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBzeXNmcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjI4MCBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEl0IHNlZW1zIGxpa2UgSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHR1cm5pbmcgREFNT04gb24sIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gSSYjMzk7bSBzZWVpbmcgYSBjaGFuZ2UgaGVyZSwgYSBzZWVtaW5nbHkgbWlub3IgdHdlYWssIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKUHJldmlvdXNseSwgdGhlcmUgd2FzIG5vIGVycm9yIGNoZWNraW5nIGFmdGVyIGNhbGxpbmcgYGRhbW9uX2NhbGxgIHdpdGggYSBgcmVwZWF0X2NhbGxfY29udHJvbGAgc3RydWN0dXJlLiBOb3csIHRoZXkmIzM5O3ZlIGFkZGVkIGFuIGBlcnJgIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRhbW9uX2NhbGxgLiBUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoZSBjb25kaXRpb25hbCBjaGVjayBgaWYgKGVycikga2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7YCB0byBmcmVlIHRoZSBgcmVwZWF0X2NhbGxfY29udHJvbGAgaWYgdGhlIGBkYW1vbl9jYWxsYCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGlmIGBkYW1vbl9jYWxsYCBmYWlscyB0byBleGVjdXRlIGNvcnJlY3RseS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0byBwcmV2ZW50IGlzc3VlcyB3aGVuIHRoZSBzeXN0ZW0gaXMgdW5kZXIgaGVhdnkgbG9hZCBvciBlbmNvdW50ZXJzIHVuZXhwZWN0ZWQgY29uZGl0aW9ucy4KCkl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IGl0JiMzOTtzIGEgZ29vZCBleGFtcGxlIG9mIGhvdyBldmVuIHNtYWxsIGNoYW5nZXMgY2FuIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBvZiB0aGUgc3lzdGVtLiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgYSBzaW1pbGFyIHBhdHRlcm4gdG8gYmUgaW1wbGVtZW50ZWQgYWNyb3NzIHRoZSBjb2RlLCB0byBlbnN1cmUgdGhhdCBhbGwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIGhhdmUgdGhlaXIgcmV0dXJuIHZhbHVlcyBjaGVja2VkIGFuZCBwcm9wZXJseSBoYW5kbGVkLiBJIHNob3VsZCBjaGVjayBpZiB0aGF0IGlzIHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI1MDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjI1MTpcdFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xuMjI1MjpcdFx0aWYgKGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyNTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjU0Olx0XG4yMjU1Olx0XHRpZiAoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjU2Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KTtcbjIyNTc6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gTlVMTDtcbjIyNTg6XHRcbjIyNTk6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjYwOlx0XHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXG4yMjYxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjI2MjpcdFxuMjI2MzpcdFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbjIyNjQ6XHRcdGlmIChJU19FUlIoY3R4KSkge1xuMjI2NTpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNjY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcbjIyNjc6XHRcdH1cbjIyNjg6XHRcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xuMjI2OTpcdFx0aWYgKGVycikge1xuMjI3MDpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNzE6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjIyNzI6XHRcdFx0cmV0dXJuIGVycjtcbjIyNzM6XHRcdH1cbjIyNzQ6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuMjI3NTpcdFxuMjI3NjpcdFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4yMjc3Olx0XHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuMjI3ODpcdFxuMjI3OTpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuMjI4MDpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbjIyODE6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcbjIyODI6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuMjI4MzpcdFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuMjI4NDpcdFx0aWYgKGVycilcbjIyODU6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjg2Olx0XHRyZXR1cm4gZXJyO1xuMjI4NzpcdH1cbjIyODg6XHRcbjIyODk6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI5MDpcdHtcbjIyOTE6XHRcdGlmICgha2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjkyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjI5MzpcdFx0ZGFtb25fc3RvcChcdTAwMjZrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgMSk7XG4yMjk0Olx0XHQvKlxuMjI5NTpcdFx0ICogVG8gYWxsb3cgdXNlcnMgc2hvdyBmaW5hbCBtb25pdG9yaW5nIHJlc3VsdHMgb2YgYWxyZWFkeSB0dXJuZWQtb2ZmXG4yMjk2Olx0XHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XG4yMjk3Olx0XHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcbjIyOTg6XHRcdCAqL1xuMjI5OTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGlzIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYmxvY2suIEkga25vdyBpdCYjMzk7cyBhIGJpdCBmdXJ0aGVyIGRvd24sIHNvIGxldCBtZSBwdWxsIHVwIHRoZSBzZWN0aW9uIGZyb20gbGluZXMgMjI0MCB0byAyMjYwLiBIb2xkIG9uLi4uIGFjdHVhbGx5LCB0byBnZXQgdGhlIGZ1bGwgY29udGV4dCwgaXQmIzM5O3MgYmVzdCB0byBleHBhbmQgdGhlIHZpZXcgYSBiaXQuIExldCYjMzk7cyBzbmFnIGxpbmVzIDIyMzUgdGhyb3VnaCAyMjU1IGluc3RlYWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kLCBjb25jaXNlIG92ZXJ2aWV3IG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGltbWVkaWF0ZSBzY29wZSwgZW5zdXJpbmcgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIzNTpcdFx0ZGFtb25fc3lzZnNfdXBkX3R1bmVkX2ludGVydmFscyhzeXNmc19rZGFtb25kKTtcbjIyMzY6XHRcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzNzpcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyhzeXNmc19rZGFtb25kKTtcbjIyMzg6XHRvdXQ6XG4yMjM5Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG4yMjQwOlx0XHRyZXR1cm4gMDtcbjIyNDE6XHR9XG4yMjQyOlx0XG4yMjQzOlx0c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI0NDpcdHtcbjIyNDU6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjIyNDY6XHRcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XG4yMjQ3Olx0XHRpbnQgZXJyO1xuMjI0ODpcdFxuMjI0OTpcdFx0aWYgKGRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcbjIyNTA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjIyNTE6XHRcdC8qIFRPRE86IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dHMgcGVyIGtkYW1vbmQgKi9cbjIyNTI6XHRcdGlmIChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZW5yICE9IDEpXG4yMjUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjI1NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBTeXN0ZW0gQ2FsbCBGbG93KioKCk9rYXksIGxldCBtZSBicmVhayBkb3duIHdoYXQgSSYjMzk7bSBzZWVpbmcgaGVyZS4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBJJiMzOTt2ZSBnb3QgdG8gc2F5LCBJJiMzOTttIGEgYml0IGNvbmNlcm5lZCBhYm91dCBob3cgZXJyb3IgaGFuZGxpbmcgd2FzIGJlaW5nIGhhbmRsZWQgcHJldmlvdXNseS4gQmVmb3JlIHRoaXMgY29tbWl0LCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9zdGFydGAgd2FzIGNvcnJlY3RseSBjaGVja2VkLCBidXQgZXZlbiBpZiBgZGFtb25fY2FsbGAgZmFpbGVkLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB3aG9sZSBmdW5jdGlvbiB3YXMgYWx3YXlzIDAhIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBvdmVyc2lnaHQsIHNpbmNlIGBlcnJgIHdvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIHJlc3VsdCBvZiBgZGFtb25fc3RhcnRgLCBidXQgYGRhbW9uX2NhbGwoKWAgY291bGQgZmFpbCBzaWxlbnRseS4gTm93LCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3MgZml4ZWQsIGFuZCBgZXJyYCBpcyBwcm9wZXJseSBzZXQgdG8gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGBkYW1vbl9jYWxsKClgLCBzbyB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3QuCgpCdXQgdGhhdCBtYWtlcyBtZSB0aGluay4uLiB3aGF0IGhhcHBlbnMgaWYgYGRhbW9uX2NhbGxgICpkb2VzKiBmYWlsPyBMb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhZnRlciBjYWxsaW5nIGBkYW1vbl9zdGFydGAgYW5kIHNldHRpbmcgdXAgYGtkYW1vbmQtJmd0O2RhbW9uX2N0eGAsIGBkYW1vbl9jYWxsYCBpcyBjYWxsZWQsIGFuZCBpZiBpdCBmYWlscywgdGhlbiB0aGUgY3VycmVudCBgZXJyYCBpcyByZXR1cm5lZCwgYnV0IHRoZSBEQU1PTiBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlcmUmIzM5O3Mgbm8gY2FsbCB0byBgZGFtb25fc3RvcGAgaW4gdGhlIGZhaWx1cmUgcGF0aC4gVGhpcyBtZWFucyBhIHN1YnNlcXVlbnQgYXR0ZW1wdCB0byBzdG9wIERBTU9OIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG1pZ2h0IGZhaWwgYmVjYXVzZSB0aGUgY29udGV4dCBpcyBhbHJlYWR5IHJ1bm5pbmcuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzOyBpdCBmZWVscyBsaWtlIGEgcG90ZW50aWFsIGJ1ZyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEgYmVoYXZpb3JhbCBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLiBJdCBjb3VsZCBiZSB0aGF0IERBTU9OIGVuZHMgdXAgcGFydGlhbGx5IGluaXRpYWxpemVkIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KCkkgc2hvdWxkIGFsc28gY2hlY2sgd2hlcmUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGlzIGNhbGxlZCBmcm9tLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgaGVscCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgdGhpcyBpcyBnb2luZyB0byBjYXVzZSBzb21lIG90aGVyIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMjIwPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDItXG5tbS9kYW1vbi9zeXNmcy5jOjIyNDM6c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxubW0vZGFtb24vc3lzZnMuYy0yMjQ0LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyODk9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTYtXHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XG5tbS9kYW1vbi9zeXNmcy5jOjIyOTc6XHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcbm1tL2RhbW9uL3N5c2ZzLmMtMjI5OC1cdCAqL1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjM2NT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Mi1cdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxubW0vZGFtb24vc3lzZnMuYzoyMzczOlx0XHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihrZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3NC1cdGNhc2UgREFNT05fU1lTRlNfQ01EX09GRjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIFN5c2ZzIENvbW1hbmQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZSBgZGFtb25fc3lzZnNfaGFuZGxlX2NtZGAgZnVuY3Rpb24gbWFuYWdlcyB0aGUgYERBTU9OX1NZU0ZTX0NNRF9PTmAgY29tbWFuZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGl0cyBpbnZvY2F0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgbGluZXMgMjM2MCB0aHJvdWdoIDI0MjAgd2l0aGluIGBtbS9kYW1vbi9zeXNmcy5jYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIHNlZWsuIFRoaXMgc2VjdGlvbiBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb21tYW5kIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuIFRoaXMgc2hvdWxkIHNob3cgbWUgdGhlIHJlbGV2YW50IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzYwOlx0ICpcbjIzNjE6XHQgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYSBEQU1PTiBzeXNmcyBjb21tYW5kIGZvciBhIGtkYW1vbmQuXG4yMzYyOlx0ICpcbjIzNjM6XHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4yMzY0Olx0ICovXG4yMzY1Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcbjIzNjY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4yMzY3Olx0e1xuMjM2ODpcdFx0aWYgKGNtZCAhPSBEQU1PTl9TWVNGU19DTURfT0ZGIFx1MDAyNlx1MDAyNiBrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZW5yICE9IDEpXG4yMzY5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjM3MDpcdFxuMjM3MTpcdFx0c3dpdGNoIChjbWQpIHtcbjIzNzI6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxuMjM3MzpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihrZGFtb25kKTtcbjIzNzQ6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX09GRjpcbjIzNzU6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKGtkYW1vbmQpO1xuMjM3NjpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUOlxuMjM3NzpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbjIzNzg6XHRcdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG4yMzc5Olx0XHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbjIzODA6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzgxOlx0XHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2FscyxcbjIzODI6XHRcdFx0XHRcdGtkYW1vbmQpO1xuMjM4MzpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfU1RBVFM6XG4yMzg0Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxuMjM4NTpcdFx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfc3RhdHMsIGtkYW1vbmQpO1xuMjM4NjpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfVFJJRURfQllURVM6XG4yMzg3Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIHRydWUpO1xuMjM4ODpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcbjIzODk6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMoa2RhbW9uZCwgZmFsc2UpO1xuMjM5MDpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ0xFQVJfU0NIRU1FU19UUklFRF9SRUdJT05TOlxuMjM5MTpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxuMjM5MjpcdFx0XHRcdGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdLVx1MDAzZXNjaGVtZXMpO1xuMjM5MzpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfRUZGRUNUSVZFX1FVT1RBUzpcbjIzOTQ6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzk1Olx0XHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzLFxuMjM5NjpcdFx0XHRcdFx0a2RhbW9uZCk7XG4yMzk3Olx0XHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfVFVORURfSU5URVJWQUxTOlxuMjM5ODpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbjIzOTk6XHRcdFx0XHRcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xuMjQwMDpcdFx0ZGVmYXVsdDpcbjI0MDE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNDAyOlx0XHR9XG4yNDAzOlx0fVxuMjQwNDpcdFxuMjQwNTpcdHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4yNDA2Olx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMjQwNzpcdHtcbjI0MDg6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gY29udGFpbmVyX29mKGtvYmosXG4yNDA5Olx0XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xuMjQxMDpcdFx0ZW51bSBkYW1vbl9zeXNmc19jbWQgY21kO1xuMjQxMTpcdFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuMjQxMjpcdFxuMjQxMzpcdFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuMjQxNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjQxNTpcdFx0Zm9yIChjbWQgPSAwOyBjbWQgXHUwMDNjIE5SX0RBTU9OX1NZU0ZTX0NNRFM7IGNtZCYjNDM7JiM0MzspIHtcbjI0MTY6XHRcdFx0aWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgZGFtb25fc3lzZnNfY21kX3N0cnNbY21kXSkpIHtcbjI0MTc6XHRcdFx0XHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XG4yNDE4Olx0XHRcdFx0YnJlYWs7XG4yNDE5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBTdGF0ZSBDb250cm9sOiBBIFF1aWNrIE1lbnRhbCBBdWRpdCoqCgpPa2F5LCBzbyBgc3RhdGVfc3RvcmVgIOKAkyB0aGF0JiMzOTtzIHRoZSBoYW5kbGVyIGZvciB3cml0aW5nIHRvIHRoZSBzeXNmcyBhdHRyaWJ1dGUhIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYG9uYCBjb21tYW5kIGFuZCBob3cgaXQgbGFuZHMgaW4gYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLyZsdDtpZCZndDsvc3RhdGVgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHdheSB0byBpbnRlcmZhY2Ugd2l0aCBrZXJuZWwgaW50ZXJuYWxzIGZyb20gdXNlcnNwYWNlLCBhbmQgaW4gdGhpcyBjYXNlLCBpdCYjMzk7cyBtYW5hZ2luZyB0aGUgREFNT04gZnJhbWV3b3JrLgoKUmlnaHQsIERBTU9OIOKAkyBEYXRhIEFjY2VzcyBNb25pdG9yaW5nLiBUaGF0JiMzOTtzIHdpdGhpbiB0aGUgTGludXgga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24gKGBtbS9kYW1vbmApLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhpcyBpcyBhIGZlYXR1cmUgSSBjYW4gcmVsaWFibHkgdGVzdCBpbiBteSB1c3VhbCBRRU1VIHNldHVwcyBvciBvdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFoLCB5ZXMhIFRoZSBwcmVzZW5jZSBvZiB0aGF0IHN5c2ZzIGZpbGUgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLy4uLmAgY29uZmlybXMgaXQuIEV4Y2VsbGVudCEKCk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwbHksIGxldCYjMzk7cyBqdXN0IG1ha2UgYSBtZW50YWwgbm90ZSB0byBxdWlja2x5IGdsYW5jZSBhdCB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIERBTU9OIGFuZCBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9zeXNmcy5jYCBmaWxlIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0ZXJtcyBvZiBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24vc3lzZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gREFNT04mIzM5O3MgTWFrZWZpbGUgYW5kIEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBidWlsZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBvcGVuIHVwIGBtbS9kYW1vbi9NYWtlZmlsZWAgYW5kIGBtbS9kYW1vbi9LY29uZmlnYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYnVpbGQgcnVsZXMgYW5kIGxpa2VseSB0aGUgbW9kdWxlIGRlZmluaXRpb25zIGluIHRoZSBNYWtlZmlsZS4gRnJvbSBhIEtjb25maWcgcGVyc3BlY3RpdmUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gREFNT04mIzM5O3MgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBydW50aW1lIGJlaGF2aW9ycyB0aGF0IGFyZSBjb250cm9sbGVkIHRocm91Z2gga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1aWxkIHN5c3RlbSBpbnRlZ3JhdGVzIERBTU9OIGFuZCB0byBzZWUgdGhlIG1vZHVsYXJpdHkgb2YgdGhlIGRlc2lnbiwgd2hpY2ggbWlnaHQgcmV2ZWFsIGFzcGVjdHMgcmVsYXRlZCB0byBpdHMgc2NhbGFiaWxpdHkgYW5kIGNvbmZpZ3VyYWJpbGl0eS4gQW5hbHl6aW5nIHRoZSBNYWtlZmlsZSB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIGJ1aWxkIHByb2Nlc3MsIHdoaWxlIEtjb25maWcgd2lsbCBpbGx1bWluYXRlIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBjaG9pY2VzLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBEQU1PTiBpcyBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhpcyBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2Ygd2hhdCYjMzk7cyAqY29uZmlndXJhYmxlKiB3aXRoaW4gREFNT04uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBlbmFibGluZy9kaXNhYmxpbmcgREFNT04gaXRzZWxmLCBpdHMgdmFyaW91cyBzYW1wbGluZyBhbmQgbW9uaXRvcmluZyB0ZWNobmlxdWVzIChsaWtlIHRoZSByZWdpb24gbW9uaXRvcmluZywgYWNjZXNzIHBhdHRlcm4gYW5hbHlzaXMpLCBhbmQgcHJvYmFibHkgcmVsYXRlZCB0dW5pbmcgcGFyYW1ldGVycy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY29udHJvbGxhYmxlIGxldmVycyBhbmQgc2VlIGhvdyB0aGV5IGltcGFjdCBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZmVhdHVyZXMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBjb25mbGljdHMgb3Igb3Bwb3J0dW5pdGllcyBmb3Igc3luZXJnaXN0aWMgY29uZmlndXJhdGlvbi4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGVzdGFibGlzaCB0aGUgY29uZmlndXJhYmlsaXR5IGxhbmRzY2FwZSBiZWZvcmUgZG9pbmcgYW55IGRlZXBlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgREFNT04mIzM5O3MgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYERBTU9OX1NZU0ZTYC4gUmlnaHQsIHNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEkga25vdyBgREFNT05gIGxpdmVzIGluIGBtbS9kYW1vbi9LY29uZmlnYCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgaWYgYERBTU9OYCBpdHNlbGYgaXMgZXZlbiBzb3VyY2VkIGZyb20gdGhlIG1haW4gYG1tL0tjb25maWdgLiBJdOKAmXMganVzdCBnb29kIHByYWN0aWNlIHRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LiBMZXQmIzM5O3MgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYG1tL2RhbW9uL0tjb25maWdgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBtbS9kYW1vbi9LY29uZmlnYCBpcyBhY3R1YWxseSBzb3VyY2VkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gIEl0JiMzOTtzIGEgYEtjb25maWdgIGZpbGUsIHNvIGl0JiMzOTtzIGNsZWFybHkgaW52b2x2ZWQgaW4gY29uZmlndXJpbmcgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBtb2R1bGUsIHdoaWNoIGlzIGEga2VybmVsIGZlYXR1cmUgSSYjMzk7bSBmYW1pbGlhciB3aXRoLiAgVGhlIHF1ZXN0aW9uIGlzICpob3cqIHRoZSBidWlsZCBzeXN0ZW0ga25vd3MgYWJvdXQgaXQuCgpNeSBpbml0aWFsIGxpbmUgb2YgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgdHlwaWNhbCBgS2NvbmZpZ2AgaW5jbHVzaW9uIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIGNvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGEgYHNvdXJjZSAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0O2Agc3RhdGVtZW50IChvciBzb21ldGhpbmcgc2ltaWxhcikgaW4gb3RoZXIgYEtjb25maWdgIGZpbGVzIGhpZ2hlciB1cCB0aGUgdHJlZS4gIFBlcmhhcHMgaW4gdGhlIG1haW4gYEtjb25maWdgIG9yIHdpdGhpbiB0aGUgYG1tYCBkaXJlY3RvcnkmIzM5O3MgYEtjb25maWdgIGZpbGUsIG9yIHBvdGVudGlhbGx5IHRocm91Z2ggYSBzZXJpZXMgb2YgJiMzNDtpZiYjMzQ7IHN0YXRlbWVudHMgdGhhdCBjb25kaXRpb25hbGx5IGluY2x1ZGUgaXQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3MuIEkgbWlnaHQgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHNvbWUgbWFjcm8tbGlrZSBkaXJlY3RpdmVzIGlmIHRoZXJlIGFyZSBhbnkgd2l0aGluIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKVGhlbiBJIGNvdWxkIHVzZSBgbWFrZSBtZW51Y29uZmlnYCAob3Igd2hpY2hldmVyIGNvbmZpZ3VyYXRpb24gdG9vbCBpcyByZWxldmFudCkgYW5kLCBpZiBwb3NzaWJsZSwgbG9vayBmb3IgdGhlIG9wdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0gdG8gc2VlIGhvdyB0aGV5IGxpbmsgdG8gdGhpcyBmaWxlLiBJIGhhdmUgc29tZSB0b29scyB0byBoZWxwIG1lIHdpdGggdGhpcy4gSSBjYW4gYWxzbyB0cnkgYSBgZ3JlcGAgc2VhcmNoIGZvciB0aGUgZmlsZSBuYW1lIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBsb29raW5nIGZvciBsaWtlbHkgaW5jbHVzaW9uIHBvaW50cy4gSWYgdGhlIERBTU9OIGZlYXR1cmUgaXRzZWxmIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHRoZXJlIHdvdWxkIGJlIHNvbWUgbW9yZSB3b3JrIHRvIGRvLCBidXQgdGhhdCBpcyBteSBnZW5lcmFsIGFwcHJvYWNoLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBkaXJlY3QgcGF0aCBmcm9tIGEgdG9wLWxldmVsIGBLY29uZmlnYCBmaWxlIG9yIGFub3RoZXIgcmVsZXZhbnQgYEtjb25maWdgIGZpbGUgdG8gYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIHNob3VsZCBsZWFkIG1lIHRvIHRoZSBlbnRyeSBwb2ludHMgd2hlcmUgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0ODU9Y29uZmlnIExBWllfTU1VX01PREVfS1VOSVRfVEVTVFxuLS1cbm1tL0tjb25maWctMTQ5Ni1cbm1tL0tjb25maWc6MTQ5Nzpzb3VyY2UgXCYjMzQ7bW0vZGFtb24vS2NvbmZpZ1wmIzM0O1xubW0vS2NvbmZpZy0xNDk4LVxuLS1cbnNhbXBsZXMvS2NvbmZpZz0zMjU9c291cmNlIFwmIzM0O3NhbXBsZXMvcnVzdC9LY29uZmlnXCYjMzQ7XG5zYW1wbGVzL0tjb25maWctMzI2LVxuc2FtcGxlcy9LY29uZmlnOjMyNzpzb3VyY2UgXCYjMzQ7c2FtcGxlcy9kYW1vbi9LY29uZmlnXCYjMzQ7XG5zYW1wbGVzL0tjb25maWctMzI4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcyNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFN5c2ZzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG1ha2luZyBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBgREFNT05gIGl0c2VsZiBpcyBwcmV0dHkgY2xlYW4g4oCTIG5vIGV4dHJhIGRlcGVuZGVuY2llcyBiZXlvbmQgTU0gY29uZmlncywgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gYERBTU9OX1NZU0ZTYCBidWlsZHMgb24gdG9wIG9mIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdC4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhpcyBwYXRjaC4gSSBzZWUgdGhlIGNoYW5nZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEl0JiMzOTtzIHJpZ2h0IGhlcmU6CmBgYGRpZmYKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jCmluZGV4IGUzODU4ZmZhYjRiMjIuLmJlYjRiZGM3NDQ2MDEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMjI4MCw3ICYjNDM7MjI4MCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCkKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkYXRhID0ga2RhbW9uZDsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtyZXBlYXQgPSB0cnVlOwogCXJlcGVhdF9jYWxsX2NvbnRyb2wtJmd0O2RlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTsKLQlpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKQomIzQzOwllcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7CiYjNDM7CWlmIChlcnIpCiAJCWtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpOwogCXJldHVybiBlcnI7CiB9CmBgYAoKQWgsIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZSBpcyBtaW5vci4gVGhleSYjMzk7dmUganVzdCBhZGRlZCBhbiBgZXJyYCB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jYWxsYCBiZWZvcmUgY2hlY2tpbmcgaXQuIFRoZW4gaWYgdGhlcmUmIzM5O3MgYW4gZXJyb3IsIHRoZXkgZnJlZSB0aGUgYHJlcGVhdF9jYWxsX2NvbnRyb2xgIHN0cnVjdHVyZS4gU2VlbXMgbGlrZSBhIHNpbXBsZSBjbGVhbnVwIG9yIG1heWJlIGFuIGF0dGVtcHQgdG8gbWFrZSB0aGUgZXJyb3IgaGFuZGxpbmcgbW9yZSByb2J1c3QuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGdpdCBsb2cgZm9yIHRoaXMgY29tbWl0IHRvIGdldCBzb21lIGNvbnRleHQuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCB3aGF0IHRoZSBvcmlnaW5hbCBpbnRlbnQgd2FzLCBvciBpZiB0aGVyZSB3YXMgYSBzcGVjaWZpYyBpc3N1ZSB0aGlzIGZpeGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWFsbG9jX29uX2NhbmNlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zNjc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgY2FuY2VsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjk4LVx0XHRcdGNvbXBsZXRlKFx1MDAyNmNvbnRyb2wtXHUwMDNlY29tcGxldGlvbik7XG5tbS9kYW1vbi9jb3JlLmM6MzY5OTpcdFx0ZWxzZSBpZiAoY29udHJvbC1cdTAwM2VjYW5jZWxlZCBcdTAwMjZcdTAwMjYgY29udHJvbC1cdTAwM2VkZWFsbG9jX29uX2NhbmNlbClcbm1tL2RhbW9uL2NvcmUuYy0zNzAwLVx0XHRcdGtmcmVlKGNvbnRyb2wpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjgxLVx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VyZXBlYXQgPSB0cnVlO1xubW0vZGFtb24vc3lzZnMuYzoyMjgyOlx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XG5tbS9kYW1vbi9zeXNmcy5jLTIyODMtXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIENvbW1pdCBNZXNzYWdlIGFuZCBgZGFtb25fY2FsbGAqKgoKSG1tLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IEdpdCBjb21taXQsIGlkZWFsbHkgdGhlIEhFQUQgY29tbWl0LiBJIGRvbiYjMzk7dCBoYXZlIHRoZSB0eXBpY2FsIGBnaXQgbG9nYCB0b29sIGF2YWlsYWJsZSwgd2hpY2ggaXMgYSBiaXQgb2YgYSBwYWluLiBCdXQgSSAqZG8qIHNlZSBhIG1lc3NhZ2UgaW4gdGhlIHByb21wdDogJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0Oy4gT2theSwgc28gdGhlIHByb21wdCBpcyBwcm92aWRpbmcgKmEqIGNvbW1pdCBtZXNzYWdlLCBidXQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGRlcml2ZWQgb25lLCBub3QgdGhlIG9yaWdpbmFsLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYnV0IGl0IGlzbiYjMzk7dCB3aGF0IEkgd2FudGVkLiBJIG5lZWQgbW9yZSBjb250ZXh0LgoKR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggaW52b2x2ZXMgJiMzNDtzeXotY2x1c3RlciYjMzQ7LCBpdCBtaWdodCBpbnZvbHZlIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgb3IgdGhlICYjMzQ7ZGFtb24mIzM0OyBzdWJzeXN0ZW0sIGFzIHRoZSB0b29sIGlzIG9mdGVuIGludm9sdmVkIGluIHRoZXNlIGFyZWFzLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYW1vbl9jYWxsYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHllcywgaXQmIzM5O3MgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGFuZCBzZWUgd2hhdCB0aGF0IGNvbW1pdCBtaWdodCBiZSBkb2luZyBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgZGFtb25fY2FsbGAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NhbGxcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTAwOD1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDM0LSAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcbm1tL2RhbW9uL2NvcmUuYzoxMDM1OiAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxubW0vZGFtb24vY29yZS5jLTEwMzYtICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXG4tLVxubW0vZGFtb24vY29yZS5jPTExMzQ9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTExNTQtICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG5tbS9kYW1vbi9jb3JlLmM6MTE1NTogKiBkYW1vbl9jYWxsKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTE1Ni0gKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgwND1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgzMC0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2Vcbm1tL2RhbW9uL2NvcmUuYzoxODMxOiAqIGRhbW9uX2NhbGwoKS5cbm1tL2RhbW9uL2NvcmUuYy0xODMyLSAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNjAtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA2MTogKiBkYW1vbl9jYWxsKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbiBvbiBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKS5cbm1tL2RhbW9uL2NvcmUuYy0yMDYyLSAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA4NC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDg1OmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMDg2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzY2Mj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM2NzItICogSWYgdGhlcmUgYXJlIFx1MDAyNnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgcmVxdWVzdHMgdGhhdCByZWdpc3RlcmVkIHZpYVxubW0vZGFtb24vY29yZS5jOjM2NzM6ICogXHUwMDI2ZGFtb25fY2FsbCgpIG9uIEBjdHgsIGRvIG9yIGNhbmNlbCB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZGVwZW5kaW5nXG5tbS9kYW1vbi9jb3JlLmMtMzY3NC0gKiBvbiBAY2FuY2VsLiAgQGNhbmNlbCBpcyBzZXQgd2hlbiB0aGUga2RhbW9uZCBpcyBhbHJlYWR5IG91dCBvZiB0aGUgbWFpbiBsb29wXG4tLVxubW0vZGFtb24vY29yZS5jPTM3NjE9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4NDItXHRcdFx0a2RhbW9uZF91c2xlZXAoY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCk7XG5tbS9kYW1vbi9jb3JlLmM6Mzg0MzpcdFx0XHQvKiBhbGxvdyBjYWxsZXIgdW5zZXQgcGF1c2UgdmlhIGRhbW9uX2NhbGwoKSAqL1xubW0vZGFtb24vY29yZS5jLTM4NDQtXHRcdFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MzUxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM3MTpcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzItXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc0LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzU6XHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM3Ni1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyNi1cdFx0ZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xubW0vZGFtb24vbHJ1X3NvcnQuYzo0Mjc6XHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQyOC19XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTI3Nj1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI5NS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoyOTY6XHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbm1tL2RhbW9uL3JlY2xhaW0uYy0yOTctXHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI5OS1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMDA6XHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzAxLVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzA9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ3LVx0XHRkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTtcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDg6XHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ5LX1cbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yMjEtXHRjYWxsX2NvbnRyb2wuZGF0YSA9IGRhbW9uX3N0YXRfY29udGV4dDtcbm1tL2RhbW9uL3N0YXQuYzoyMjI6XHRyZXR1cm4gZGFtb25fY2FsbChkYW1vbl9zdGF0X2NvbnRleHQsIFx1MDAyNmNhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9zdGF0LmMtMjIzLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI4Mi1cdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xubW0vZGFtb24vc3lzZnMuYzoyMjgzOlx0ZXJyID0gZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xubW0vZGFtb24vc3lzZnMuYy0yMjg0LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyODk9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzMDEtXG5tbS9kYW1vbi9zeXNmcy5jOjIzMDI6c3RhdGljIGludCBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKGludCAoKmZuKSh2b2lkICpkYXRhKSxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMwMy1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzExLVx0Y2FsbF9jb250cm9sLmRhdGEgPSBrZGFtb25kO1xubW0vZGFtb24vc3lzZnMuYzoyMzEyOlx0ZXJyID0gZGFtb25fY2FsbChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgXHUwMDI2Y2FsbF9jb250cm9sKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjMxMy1cdHJldHVybiBlcnIgPyBlcnIgOiBjYWxsX2NvbnRyb2wucmV0dXJuX2NvZGU7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzY1PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzc2LVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUOlxubW0vZGFtb24vc3lzZnMuYzoyMzc3Olx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3OC1cdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIzNzktXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM4MDpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzODEtXHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzODMtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfU0NIRU1FU19TVEFUUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM4NDpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzODUtXHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzkzLVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfRUZGRUNUSVZFX1FVT1RBUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM5NDpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTUtXHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM5Ny1cdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XG5tbS9kYW1vbi9zeXNmcy5jOjIzOTg6XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxubW0vZGFtb24vc3lzZnMuYy0yMzk5LVx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3R1bmVkX2ludGVydmFscywga2RhbW9uZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgYGRhbW9uX2NhbGxgIGZ1bmN0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gQ29yZTogVHJhY2luZyBgZGFtb25fY2FsbGAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGRhbW9uX2NhbGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yay4gSXQmIzM5O3MgbmFtZWQgJiMzNDtjYWxsLCYjMzQ7IHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSBzb21lIERBTU9OIGZ1bmN0aW9uYWxpdHkgaXMgaW52b2tlZC4gSSBleHBlY3QgdGhpcyB0byBiZSBhIGNydWNpYWwgY29udHJvbCBwb2ludC4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSwgbG9va2luZyBmb3IgdGhlIGtleSBjb21wb25lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZDoKCiogICAqKldoYXQgdHJpZ2dlcnMgdGhpcyBjYWxsPyoqIElzIGl0IHRpbWUtYmFzZWQsIGV2ZW50LWRyaXZlbiwgb3IgYSBjb21iaW5hdGlvbj8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IElzIGl0IGNhbGxlZCBmcm9tIGEga2VybmVsIHRocmVhZCwgaW50ZXJydXB0IGNvbnRleHQsIG9yIHRhc2sgY29udGV4dD8KKiAgICoqV2hhdCBhcmUgaXRzIGlucHV0cz8qKiBJIG5lZWQgdG8ga25vdyB3aGF0IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLiBBcmUgdGhleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIGhhbmRsZXMgdG8gdGhlIERBTU9OIHN0cnVjdHVyZXMsIG9yIG1lbW9yeSByZWdpb24gaW5mb3JtYXRpb24/CiogICAqKldoYXQgZG9lcyBpdCBkbz8qKiBXaGF0IGlzIHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGl0ZXJhdGUgdGhyb3VnaCBzb21lIGRhdGEgc3RydWN0dXJlcywgcHJvYmFibHkgREFNT04mIzM5O3MgaW50ZXJuYWwgc3RhdGUsIGFuZCBtYWtlIGRlY2lzaW9ucyBhYm91dCBtZW1vcnkgcmVnaW9ucyBiYXNlZCBvbiB0aGUgREFNT04gYWxnb3JpdGhtIG9yIGFueSBvdGhlciBwb2xpY3kuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MuIERvZXMgaXQgc2NoZWR1bGUgb3BlcmF0aW9ucywgbWFrZSBpbW1lZGlhdGUgY2hhbmdlcywgb3IgdHJpZ2dlciBmdXJ0aGVyIGFjdGlvbnM/CiogICAqKldoYXQgYXJlIGl0cyBvdXRwdXRzL3NpZGUgZWZmZWN0cz8qKiBEb2VzIGl0IG1vZGlmeSBhbnkgbWVtb3J5IHJlZ2lvbnM/IERvZXMgaXQgY2hhbmdlIGFueSBrZXJuZWwgc3RydWN0dXJlcz8gRG9lcyBpdCByZXBvcnQgYW55IG1ldHJpY3Mgb3Igc3RhdGlzdGljcz8KKiAgICoqV2hlcmUgZG9lcyBpdCBmaXQgaW4gdGhlIG92ZXJhbGwgREFNT04gZXhlY3V0aW9uIGZsb3c/KiogSG93IGlzIGl0IHJlbGF0ZWQgdG8gb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX2luaXRgIG9yIGBkYW1vbl91cGRhdGVgPwoKSSYjMzk7bSBwcmVwYXJlZCB0byBmb2xsb3cgdGhlIGNvbnRyb2wgZmxvdywgcG90ZW50aWFsbHkgdXNpbmcgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgbG9va2luZyBhdCB3aGF0IHRoaXMgZnVuY3Rpb24gY2FsbHMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMsIGlucHV0cywgb3BlcmF0aW9ucywgYW5kIHRoZSBvdmVyYWxsIHJvbGUgd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmsgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGluc2lnaHQgaW50byBpdHMgcHVycG9zZS4gTGV0JiMzOTtzIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA4MDpcdCAqXG4yMDgxOlx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGZhaWxlZCwgdGhlIEBjdHggaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9wcGVkLlxuMjA4MjpcdCAqXG4yMDgzOlx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuMjA4NDpcdCAqL1xuMjA4NTpcdGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbjIwODY6XHR7XG4yMDg3Olx0XHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuMjA4ODpcdFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbjIwODk6XHRcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbjIwOTA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbnRyb2wtXHUwMDNlbGlzdCk7XG4yMDkxOlx0XG4yMDkyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xuMjA5MzpcdFx0aWYgKGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlKSB7XG4yMDk0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbjIwOTU6XHRcdFx0Z290byBjYW5jZWxlZDtcbjIwOTY6XHRcdH1cbjIwOTc6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y29udHJvbC1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9scyk7XG4yMDk4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG4yMDk5Olx0XHRpZiAoY29udHJvbC1cdTAwM2VyZXBlYXQpXG4yMTAwOlx0XHRcdHJldHVybiAwO1xuMjEwMTpcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb250cm9sLVx1MDAzZWNvbXBsZXRpb24pO1xuMjEwMjpcdFx0aWYgKGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQpXG4yMTAzOlx0XHRcdGdvdG8gY2FuY2VsZWQ7XG4yMTA0Olx0XHRyZXR1cm4gMDtcbjIxMDU6XHRcbjIxMDY6XHRjYW5jZWxlZDpcbjIxMDc6XHRcdHdoaWxlIChkYW1vbl9pc19ydW5uaW5nKGN0eCkpXG4yMTA4Olx0XHRcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuMjEwOTpcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4yMTEwOlx0XG4yMTExOlx0fVxuMjExMjpcdFxuMjExMzpcdC8qKlxuMjExNDpcdCAqIGRhbW9zX3dhbGsoKSAtIEludm9rZSBhIGdpdmVuIGZ1bmN0aW9ucyB3aGlsZSBEQU1PUyB3YWxrIHJlZ2lvbnMuXG4yMTE1Olx0ICogQGN0eDpcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGZvci5cbjIxMTY6XHQgKiBAY29udHJvbDpcdENvbnRyb2wgdmFyaWFibGUgb2YgdGhlIHdhbGsgcmVxdWVzdC5cbjIxMTc6XHQgKlxuMjExODpcdCAqIEFzayBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKSBvZiBAY3R4IHRvIGNhbGwgYSBmdW5jdGlvbiBmb3IgZWFjaCByZWdpb25cbjIxMTk6XHQgKiB0aGF0IHRoZSBrZGFtb25kIHdpbGwgYXBwbHkgREFNT1MgYWN0aW9uIHRvLCBhbmQgd2FpdCB1bnRpbCB0aGUga2RhbW9uZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY4OQoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiAxOTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIERBTU9OIHN5c2ZzIGVycm9yIGhhbmRsaW5nIGZvciBmdXp6aW5nIHBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGNoYW5nZXMgaG93IGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBoYW5kbGVzIGVycm9ycyB3aGVuIGNhbGxpbmcgYGRhbW9uX2NhbGxgLiBQcmV2aW91c2x5LCBhIGZhaWx1cmUgZnJvbSBgZGFtb25fY2FsbGAgKHNwZWNpZmljYWxseSwgYC1FQ0FOQ0VMRURgKSBjb3VsZCBiZSBtYXNrZWQsIHJldHVybmluZyBzdWNjZXNzIGZyb20gdGhlIHN5c2ZzIGNhbGwuIE5vdywgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGV2ZW4gcmVhY2hhYmxlLiAgWWVzLCBpdCYjMzk7cyB0cmlnZ2VyZWQgYnkgd3JpdGluZyAmIzM0O29uJiMzNDsgdG8gdGhlIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7aWQmZ3Q7L3N0YXRlYCBzeXNmcyBlbnRyeS4gVGhhdCYjMzk7cyBhIGNsZWFyIGVudHJ5IHBvaW50LgoKTm93LCBpcyB0aGlzIGZ1enphYmxlPyBBY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCB0aGlzICppcyogYSBjYW5kaWRhdGU6IGl0JiMzOTtzIGEgbW9kaWZpY2F0aW9uIGluIGBtbS9kYW1vbi9zeXNmcy5jYCwgd2hpY2ggZmFsbHMgdW5kZXIgdGhlICYjMzQ7Y29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tLykmIzM0OyBhbmQgdGhlIGNoYW5nZSBhZmZlY3RzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBkYXRhIHN0cnVjdHVyZSBpbnRlcmFjdGlvbi4gREFNT04gaXMgYWxzbyBhY3RpdmVseSBpbnRlcmFjdGVkIHdpdGggYnkgc3l6a2FsbGVyIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4KClRvIGNvbmZpcm0gZnV6emFiaWxpdHksIEkmIzM5O20gY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3M6IGBDT05GSUdfREFNT05gIGFuZCBgQ09ORklHX0RBTU9OX1NZU0ZTYC4gYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGFyZSBib3RoIHN0YW5kYXJkLCBzbyB0aG9zZSBhcmUgbXkgYEVuYWJsZUNvbmZpZ3NgLgoKTmV4dCwgSSBuZWVkIHRvIGRlZmluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gSSBtdXN0IGFsc28gaW5jbHVkZSBgZGFtb25fc3lzZnNfaGFuZGxlX2NtZGAgKHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0KSwgc28gdGhlIGZ1enplciBkb2VzbiYjMzk7dCBnZXQgY29uZnVzZWQgYnkgaW5saW5pbmcsIGFuZCBgZGFtb25fY2FsbGAgaXRzZWxmICh0aGUgZnVuY3Rpb24gd2hvc2UgcmV0dXJuIHZhbHVlIGlzIGNoYW5nZWQpLiAgVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoZXkmIzM5O3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIHBhdGNoLiBUaGUgbG9naWMgYmVpbmcgbW9kaWZpZWQgaXMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBjcml0ZXJpYSB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm90aGluZyB0aGF0IHdvdWxkIG1ha2UgdGhpcyAqbm90KiB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIGtlcm5lbCBjb2RlIGNoYW5nZSwgZXhlY3V0YWJsZSwgYW5kIGEgcmVhY2hhYmxlIHBhdGggdmlhIHN5c2ZzLiBTbyBXb3J0aEZ1enppbmcgbXVzdCBiZSB0cnVlLgoKU28sIGhlcmUmIzM5O3MgbXkgY29uZmlndXJhdGlvbjoKCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtEQU1PTiYjMzQ7LCAmIzM0O0RBTU9OX1NZU0ZTJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbiwgZGFtb25fc3lzZnNfaGFuZGxlX2NtZCwgZGFtb25fY2FsbF1gCgpFdmVyeXRoaW5nIGFsaWducywgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2hhbmRsZV9jbWQmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY2lkXHUwMDNlL3N0YXRlKSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2hhbmRsZV9jbWQmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY2lkXHUwMDNlL3N0YXRlKSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKSBieSBzdG9yaW5nIHRoZSByZXR1cm4gY29kZSBvZiBkYW1vbl9jYWxsKCkgaW4gdGhlIGV4aXN0aW5nIGxvY2FsIHZhcmlhYmxlICYjMzk7ZXJyJiMzOTsgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIHRoZSBjYWxsZXIsIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcgaXQgYW5kIHJldHVybmluZyAwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kYXJpZXMgb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliMmMyODUyY2VhOTk2YWZiMmY0MjUzMDIzZGNiNDY0ZjdiOTBiYzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0NzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jCmluZGV4IGUzODU4ZmZhYjRiMjIuLmJlYjRiZGM3NDQ2MDEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMjI4MCw3ICYjNDM7MjI4MCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCkKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkYXRhID0ga2RhbW9uZDsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtyZXBlYXQgPSB0cnVlOwogCXJlcGVhdF9jYWxsX2NvbnRyb2wtJmd0O2RlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTsKLQlpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKQomIzQzOwllcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7CiYjNDM7CWlmIChlcnIpCiAJCWtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpOwogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBTeXNmcyBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIHRoZSBzdGFuZGFyZCB0b29sczsgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGRpZmYgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgdGhlbiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZW50IG9mIGBtbS9kYW1vbi9zeXNmcy5jYCBhcm91bmQgbGluZSAyMjgwLiBVbmRlcnN0YW5kaW5nIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSB3aWxsIGJlIGNydWNpYWwgZm9yIGEgcHJvcGVyIGV2YWx1YXRpb24uIEdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBzdXJyb3VuZGluZyBsb2dpYyBiZWZvcmUgSSBjYW4gYW5hbHl6ZSB0aGUgYWN0dWFsIGRpZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI1MDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjI1MTpcdFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xuMjI1MjpcdFx0aWYgKGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyNTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjU0Olx0XG4yMjU1Olx0XHRpZiAoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjU2Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KTtcbjIyNTc6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gTlVMTDtcbjIyNTg6XHRcbjIyNTk6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjYwOlx0XHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXG4yMjYxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjI2MjpcdFxuMjI2MzpcdFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbjIyNjQ6XHRcdGlmIChJU19FUlIoY3R4KSkge1xuMjI2NTpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNjY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcbjIyNjc6XHRcdH1cbjIyNjg6XHRcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xuMjI2OTpcdFx0aWYgKGVycikge1xuMjI3MDpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNzE6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjIyNzI6XHRcdFx0cmV0dXJuIGVycjtcbjIyNzM6XHRcdH1cbjIyNzQ6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuMjI3NTpcdFxuMjI3NjpcdFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4yMjc3Olx0XHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuMjI3ODpcdFxuMjI3OTpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuMjI4MDpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbjIyODE6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcbjIyODI6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuMjI4MzpcdFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuMjI4NDpcdFx0aWYgKGVycilcbjIyODU6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjg2Olx0XHRyZXR1cm4gZXJyO1xuMjI4NzpcdH1cbjIyODg6XHRcbjIyODk6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI5MDpcdHtcbjIyOTE6XHRcdGlmICgha2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjkyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjI5MzpcdFx0ZGFtb25fc3RvcChcdTAwMjZrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgMSk7XG4yMjk0Olx0XHQvKlxuMjI5NTpcdFx0ICogVG8gYWxsb3cgdXNlcnMgc2hvdyBmaW5hbCBtb25pdG9yaW5nIHJlc3VsdHMgb2YgYWxyZWFkeSB0dXJuZWQtb2ZmXG4yMjk2Olx0XHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XG4yMjk3Olx0XHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcbjIyOTg6XHRcdCAqL1xuMjI5OTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBEQU1PTiBwYXRjaC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgY29kZSBsb29rZWQgbGlrZSB0aGlzIChJIGNhbiBwcmFjdGljYWxseSBzZWUgaXQgaW4gbXkgaGVhZCk6CgpgYGBjCglyZXBlYXRfY2FsbF9jb250cm9sLSZndDtmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuOwoJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7ZGF0YSA9IGtkYW1vbmQ7CglyZXBlYXRfY2FsbF9jb250cm9sLSZndDtyZXBlYXQgPSB0cnVlOwoJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7ZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlOwotCWlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpCiYjNDM7CWVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTsKJiM0MzsJaWYgKGVycikKIAkJa2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7CiAJcmV0dXJuIGVycjsKYGBgCgpSaWdodCwgdGhlIGtleSBoZXJlIGlzIHdoYXQgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgcGF0Y2guIFByZXZpb3VzbHksIGBlcnJgIHdhcyBvbmx5IGluaXRpYWxpemVkIHRvIHRoZSByZXN1bHQgb2YgYGRhbW9uX3N0YXJ0KClgLCB3aGljaCB3b3VsZCBiZSB6ZXJvIGlmIGV4ZWN1dGlvbiBtYWRlIGl0IHRvIGxpbmUgMjI3Ni4gQ3J1Y2lhbGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jYWxsKClgIHdhcyAqaWdub3JlZCouIFRoaXMgaXMgYSBnbGFyaW5nIG9taXNzaW9uLiBUaGF0IG1lYW50IHRoYXQgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIHdvdWxkIHJlcG9ydCBzdWNjZXNzIChyZXR1cm5pbmcgMCkgZXZlbiBpZiBgZGFtb25fY2FsbCgpYCBmYWlsZWQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGVycm9yLCBhbmQgYSBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuCgpOb3csIHdpdGggdGhpcyBwYXRjaCwgYGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtgIHByb3Blcmx5IGNhcHR1cmVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuIFRoZW4gdGhlIGBpZiAoZXJyKWAgY29uZGl0aW9uYWwgY29ycmVjdGx5IGV2YWx1YXRlcywgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMsIGFzIGV4cGVjdGVkLCByZXR1cm5lZCBmcm9tIHRoZSBmdW5jdGlvbi4gTXVjaCBiZXR0ZXIhCgpJJiMzOTttIG1ha2luZyBhIHF1aWNrIG1lbnRhbCBjaGVjayBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IG1pZ2h0IGJlIGhpZGluZy4gVGhlIGBpbnQgZXJyO2AgZGVjbGFyYXRpb24gc2VlbXMgZmluZSBmcm9tIGEgcXVpY2sgZ2xhbmNlLCBidXQgaXQmIzM5O3Mgd29ydGggYSBkb3VibGUtY2hlY2suIEkmIzM5O20gZ29pbmcgdG8gcmVhZCBsaW5lcyAyMjQwIHRvIDIyNjAgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMzA6XHRcbjIyMzE6XHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcbjIyMzI6XHRcdFx0cmV0dXJuIDA7XG4yMjMzOlx0XHRpZiAoc3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2VuciAhPSAxKVxuMjIzNDpcdFx0XHRnb3RvIG91dDtcbjIyMzU6XHRcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMoc3lzZnNfa2RhbW9uZCk7XG4yMjM2Olx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcbjIyMzc6XHRcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMoc3lzZnNfa2RhbW9uZCk7XG4yMjM4Olx0b3V0OlxuMjIzOTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xuMjI0MDpcdFx0cmV0dXJuIDA7XG4yMjQxOlx0fVxuMjI0MjpcdFxuMjI0MzpcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbjIyNDQ6XHR7XG4yMjQ1Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4yMjQ2Olx0XHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpyZXBlYXRfY2FsbF9jb250cm9sO1xuMjI0NzpcdFx0aW50IGVycjtcbjIyNDg6XHRcbjIyNDk6XHRcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXG4yMjUwOlx0XHRcdHJldHVybiAtRUJVU1k7XG4yMjUxOlx0XHQvKiBUT0RPOiBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHRzIHBlciBrZGFtb25kICovXG4yMjUyOlx0XHRpZiAoa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2VuciAhPSAxKVxuMjI1MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIyNTQ6XHRcbjIyNTU6XHRcdGlmIChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eClcbjIyNTY6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpO1xuMjI1NzpcdFx0a2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggPSBOVUxMO1xuMjI1ODpcdFxuMjI1OTpcdFx0cmVwZWF0X2NhbGxfY29udHJvbCA9IGttYWxsb2Nfb2JqKCpyZXBlYXRfY2FsbF9jb250cm9sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaDogQSBRdWljayBEZWJ1ZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiB0aGUgb3JpZ2luYWwgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGZ1bmN0aW9uLCB0aGUgYGVycmAgdmFyaWFibGUsIHdoaWNoIHN0b3JlcyB0aGUgZXJyb3IgY29kZSwgd2FzIGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgYGRhbW9uX3N0YXJ0YC4gSWYgYGRhbW9uX3N0YXJ0YCB3b3JrZWQsIGBlcnJgIHdhcyB6ZXJvLiBUaGVuLCB0aGVyZSB3YXMgYSBjb25kaXRpb25hbCBjaGVjayB3aXRoIGBkYW1vbl9jYWxsYCwgYW5kIGlmIHRoYXQgd2FzIHRydWUsIGByZXBlYXRfY2FsbF9jb250cm9sYCB3YXMgZnJlZWQuIENydWNpYWxseSwgdGhlIGZ1bmN0aW9uIHRoZW4gcmV0dXJuZWQgYGVycmAuIFRoaXMgc2VlbXMgd3JvbmcsIGJlY2F1c2UgYSBub24temVybyBlcnJvciBmcm9tIGBkYW1vbl9jYWxsYCB3YXMgYmVpbmcgZWZmZWN0aXZlbHkgbWFza2VkLCB0aGUgZnVuY3Rpb24gd2FzIHJldHVybmluZyAwIGV2ZW4gaWYgYGRhbW9uX2NhbGxgIGhhZCBhbiBpc3N1ZS4KClRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGZpcnN0IGNhbGxpbmcgYGRhbW9uX2NhbGxgIGFuZCBhc3NpZ25pbmcgaXRzIHJldHVybiB2YWx1ZSB0byBgZXJyYC4gVGhlbiwgaXQgY2hlY2tzIGBlcnJgIGFuZCBvbmx5IGZyZWVzIGByZXBlYXRfY2FsbF9jb250cm9sYCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuIEZpbmFsbHksIGl0IHJldHVybnMgYGVycmAuIFRoaXMgZml4ZXMgdGhlIG9yaWdpbmFsIHByb2JsZW0sIG1ha2VzIGl0IHNvIGEgZmFpbGVkIGNhbGwgcmV0dXJucyBhbiBlcnJvci4KClRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBleHBvc2UgYSBuZXcgdnVsbmVyYWJpbGl0eT8gU3BlY2lmaWNhbGx5LCBhcmUgd2UgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3Igc2VuZGluZyBpdCB0byB1c2VyIHNwYWNlPyBJIGRvbiYjMzk7dCBzZWUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGVycmAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgKmJlZm9yZSogaXQmIzM5O3MgY2hlY2tlZCBvciByZXR1cm5lZCwgc28gdGhhdCYjMzk7cyBzYWZlLiBMb29raW5nIGNsb3NlciBhdCBgcmVwZWF0X2NhbGxfY29udHJvbGAgSSBzZWUgaXQmIzM5O3MgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCwgYW5kIHRoYXQgaXRzIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoYXQgcHJvY2Vzcy4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZmllbGRzIGluIGByZXBlYXRfY2FsbF9jb250cm9sYD8gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHkgYnkgbG9va2luZyBhdCB0aGUgc3RydWN0IGRlZmluaXRpb24gb2YgYGRhbW9uX2NhbGxfY29udHJvbGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTY3Nj1zdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY5My0vKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY5NDogKiBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIC0gQ29udHJvbCBkYW1vbl9jYWxsKCkuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjk1LSAqXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTcwNC0gKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaDo3MDU6c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzA2LVx0aW50ICgqZm4pKHZvaWQgKmRhdGEpO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD04NTc9c3RydWN0IGRhbW9uX2N0eCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTg4Mi1cbmluY2x1ZGUvbGludXgvZGFtb24uaDo4ODM6XHQvKiBsaXN0cyBvZiBcdTAwMjZzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODg0LVx0c3RydWN0IGxpc3RfaGVhZCBjYWxsX2NvbnRyb2xzO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDk3PWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwOTgtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA5OTppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTExMDAtaW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA0OT1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDg0LSAqL1xubW0vZGFtb24vY29yZS5jOjIwODU6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIwODYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNjYyPXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzY3MS0gKlxubW0vZGFtb24vY29yZS5jOjM2NzI6ICogSWYgdGhlcmUgYXJlIFx1MDAyNnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgcmVxdWVzdHMgdGhhdCByZWdpc3RlcmVkIHZpYVxubW0vZGFtb24vY29yZS5jLTM2NzMtICogXHUwMDI2ZGFtb25fY2FsbCgpIG9uIEBjdHgsIGRvIG9yIGNhbmNlbCB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZGVwZW5kaW5nXG4tLVxubW0vZGFtb24vY29yZS5jPTM2Nzc9c3RhdGljIHZvaWQga2RhbW9uZF9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjYW5jZWwpXG5tbS9kYW1vbi9jb3JlLmMtMzY3OC17XG5tbS9kYW1vbi9jb3JlLmM6MzY3OTpcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTM2ODAtXHRMSVNUX0hFQUQoY29udHJvbHMpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MzUxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTUtXHRpbnQgZXJyO1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNTY6XHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNvbnRyb2wgPSB7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM1Ny1cdFx0LmZuID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbixcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM4OD1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDAzLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MDQ6c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MDUtXHQuZm4gPSBkYW1vbl9scnVfc29ydF9kYW1vbl9jYWxsX2ZuLFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0yNzY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yODAtXHRpbnQgZXJyO1xubW0vZGFtb24vcmVjbGFpbS5jOjI4MTpcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY29udHJvbCA9IHtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODItXHRcdC5mbiA9IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbixcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzEzPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuKHZvaWQgKmFyZylcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzI0LVxubW0vZGFtb24vcmVjbGFpbS5jOjMyNTpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzI2LVx0LmZuID0gZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuLFxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE5NC1cbm1tL2RhbW9uL3N0YXQuYzoxOTU6c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xubW0vZGFtb24vc3RhdC5jLTE5Ni1cdC5mbiA9IGRhbW9uX3N0YXRfZGFtb25fY2FsbF9mbixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI0NS1cdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbm1tL2RhbW9uL3N5c2ZzLmM6MjI0NjpcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XG5tbS9kYW1vbi9zeXNmcy5jLTIyNDctXHRpbnQgZXJyO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjMwNC17XG5tbS9kYW1vbi9zeXNmcy5jOjIzMDU6XHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHt9O1xubW0vZGFtb24vc3lzZnMuYy0yMzA2LVx0aW50IGVycjtcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz0zNz1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4tLVxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNTQtXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzo1NTpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXBlYXRfY2FsbF9jb250cm9sID0ge1xuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNTYtXHQuZm4gPSBkYW1vbl9zYW1wbGVfcHJjbF9yZXBlYXRfY2FsbF9mbixcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz0zOD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4tLVxuc2FtcGxlcy9kYW1vbi93c3NlLmMtNTUtXG5zYW1wbGVzL2RhbW9uL3dzc2UuYzo1NjpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXBlYXRfY2FsbF9jb250cm9sID0ge1xuc2FtcGxlcy9kYW1vbi93c3NlLmMtNTctXHQuZm4gPSBkYW1vbl9zYW1wbGVfd3NzZV9yZXBlYXRfY2FsbF9mbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBDYWxsIENvbnRyb2wgU3RydWN0dXJlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGFyb3VuZCBsaW5lIDcwNS4gTXkgaW50ZW50aW9uIGlzIHRvIGZvY3VzIG9uIHRoYXQgYHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2xgIGRlZmluaXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgREFNT04gc3Vic3lzdGVtIG9yY2hlc3RyYXRlcyBpdHMgc2FtcGxpbmcgYW5kIG1vbml0b3JpbmcgY2FsbHMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjb250cm9sIGZsb3cgbWVjaGFuaXNtcyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aG9zZSBjYWxscyDigJMgaG93IHRoZSBtb25pdG9ycyBhcmUgY29uZmlndXJlZCwgaG93IHRoZSBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZCwgYW5kIGhvdyB0aGUgb3ZlcmFsbCBleGVjdXRpb24gaXMgY29vcmRpbmF0ZWQuIEdldHRpbmcgYSBzb2xpZCBncmFzcCBvbiB0aGlzIGBkYW1vbl9jYWxsX2NvbnRyb2xgIHN0cnVjdHVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBwb2ludHMgb2YgREFNT04mIzM5O3Mgb3BlcmF0aW9uLCBlc3BlY2lhbGx5IGlmIEnigJltIHRyeWluZyB0byBvcHRpbWl6ZSBvciBkZWJ1ZyBhbnkgREFNT04tcmVsYXRlZCBjb2RlLiBUaGlzIHdpbGwgY2xhcmlmeSBob3cgdGhlIHN5c3RlbSByZWd1bGF0ZXMgdGhlIGFzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdmFyaW91cyBEQU1PTiBtb25pdG9yaW5nIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHQgKiBAZGVhbGxvY19vbl9jYW5jZWw6XHRJZiBAcmVwZWF0IGlzIHRydWUsIGRlLWFsbG9jYXRlIHdoZW4gY2FuY2VsZWQuXG4gNzAxOlx0ICpcbiA3MDI6XHQgKiBDb250cm9sIGRhbW9uX2NhbGwoKSwgd2hpY2ggcmVxdWVzdHMgc3BlY2lmaWMga2RhbW9uZCB0byBpbnZva2UgYSBnaXZlblxuIDcwMzpcdCAqIGZ1bmN0aW9uLiAgUmVmZXIgdG8gZGFtb25fY2FsbCgpIGZvciBtb3JlIGRldGFpbHMuXG4gNzA0Olx0ICovXG4gNzA1Olx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCB7XG4gNzA2Olx0XHRpbnQgKCpmbikodm9pZCAqZGF0YSk7XG4gNzA3Olx0XHR2b2lkICpkYXRhO1xuIDcwODpcdFx0Ym9vbCByZXBlYXQ7XG4gNzA5Olx0XHRpbnQgcmV0dXJuX2NvZGU7XG4gNzEwOlx0XHRib29sIGRlYWxsb2Nfb25fY2FuY2VsO1xuIDcxMTpcdC8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovXG4gNzEyOlx0XHQvKiBpbmZvcm1zIGlmIHRoZSBrZGFtb25kIGZpbmlzaGVkIGhhbmRsaW5nIG9mIHRoZSByZXF1ZXN0ICovXG4gNzEzOlx0XHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uO1xuIDcxNDpcdFx0LyogaW5mb3JtcyBpZiB0aGUga2RhbW9uZCBjYW5jZWxlZCBAZm4gaW5mb2NhdGlvbiAqL1xuIDcxNTpcdFx0Ym9vbCBjYW5jZWxlZDtcbiA3MTY6XHRcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gNzE3Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gNzE4Olx0fTtcbiA3MTk6XHRcbiA3MjA6XHQvKipcbiA3MjE6XHQgKiBzdHJ1Y3QgZGFtb25faW50ZXJ2YWxzX2dvYWwgLSBNb25pdG9yaW5nIGludGVydmFscyBhdXRvLXR1bmluZyBnb2FsLlxuIDcyMjpcdCAqXG4gNzIzOlx0ICogQGFjY2Vzc19icDpcdFx0QWNjZXNzIGV2ZW50cyBvYnNlcnZhdGlvbiByYXRpbyB0byBhY2hpZXZlIGluIGJwLlxuIDcyNDpcdCAqIEBhZ2dyczpcdFx0TnVtYmVyIG9mIGFnZ3JlZ2F0aW9ucyB0byBhY2hpZXZlIEBhY2Nlc3NfYnAgd2l0aGluLlxuIDcyNTpcdCAqIEBtaW5fc2FtcGxlX3VzOlx0TWluaW11bSByZXN1bHRpbmcgc2FtcGxpbmcgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzLlxuIDcyNjpcdCAqIEBtYXhfc2FtcGxlX3VzOlx0TWF4aW11bSByZXN1bHRpbmcgc2FtcGxpbmcgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzLlxuIDcyNzpcdCAqXG4gNzI4Olx0ICogREFNT04gYXV0b21hdGljYWxseSB0dW5lcyBcdTAwMjZkYW1vbl9hdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwgYW5kXG4gNzI5Olx0ICogXHUwMDI2ZGFtb25fYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCBhaW1pbmcgdGhlIHJhdGlvIGluIGJwICgxLzEwLDAwMCkgb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIERBTU9OJiMzOTtzIENvcmUqKgoKT2theSwgc28gd2UmIzM5O3ZlIGJlZW4gZXhhbWluaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIG9mIERBTU9OLCBhbmQgSSB0aGluayBpdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIGEgc3BlY2lmaWMgYXJlYS4gSSBuZWVkIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGFsbCAqcmVhbGx5KiB3b3JrcyB1bmRlciB0aGUgaG9vZC4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIHRoZSBgZGFtb25fY2FsbGAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlLCBzbyB0aGF04oCZcyB3aGVyZSBJJiMzOTtsbCBzdGFydC4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIEkmIzM5O20gYmV0dGluZyBpdCBnaXZlcyB1cyBhIGdvb2QgZ3Jhc3Agb24gdGhlIG92ZXJhbGwgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyBEQU1PTiBpcyAqY2FsbGVkKiBpbnRvIGFjdGlvbi4gSSB3YW50IHRvIHVucmF2ZWwgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBtZW1vcnkgbW9uaXRvcmluZyBhbmQgb3B0aW1pemF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgaW5zaWdodHMgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwODA6XHQgKlxuMjA4MTpcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cbjIwODI6XHQgKlxuMjA4MzpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbjIwODQ6XHQgKi9cbjIwODU6XHRpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4yMDg2Olx0e1xuMjA4NzpcdFx0aWYgKCFjb250cm9sLVx1MDAzZXJlcGVhdClcbjIwODg6XHRcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbnRyb2wtXHUwMDNlY29tcGxldGlvbik7XG4yMDg5Olx0XHRjb250cm9sLVx1MDAzZWNhbmNlbGVkID0gZmFsc2U7XG4yMDkwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjb250cm9sLVx1MDAzZWxpc3QpO1xuMjA5MTpcdFxuMjA5MjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbjIwOTM6XHRcdGlmIChjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSkge1xuMjA5NDpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG4yMDk1Olx0XHRcdGdvdG8gY2FuY2VsZWQ7XG4yMDk2Olx0XHR9XG4yMDk3Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNvbnRyb2wtXHUwMDNlbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHMpO1xuMjA5ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xuMjA5OTpcdFx0aWYgKGNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuMjEwMDpcdFx0XHRyZXR1cm4gMDtcbjIxMDE6XHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbjIxMDI6XHRcdGlmIChjb250cm9sLVx1MDAzZWNhbmNlbGVkKVxuMjEwMzpcdFx0XHRnb3RvIGNhbmNlbGVkO1xuMjEwNDpcdFx0cmV0dXJuIDA7XG4yMTA1Olx0XG4yMTA2Olx0Y2FuY2VsZWQ6XG4yMTA3Olx0XHR3aGlsZSAoZGFtb25faXNfcnVubmluZyhjdHgpKVxuMjEwODpcdFx0XHRzY2hlZHVsZV90aW1lb3V0X2lkbGUobXNlY3NfdG9famlmZmllcygxMDApKTtcbjIxMDk6XHRcdHJldHVybiAtRUNBTkNFTEVEO1xuMjExMDpcdFxuMjExMTpcdH1cbjIxMTI6XHRcbjIxMTM6XHQvKipcbjIxMTQ6XHQgKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxuMjExNTpcdCAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXG4yMTE2Olx0ICogQGNvbnRyb2w6XHRDb250cm9sIHZhcmlhYmxlIG9mIHRoZSB3YWxrIHJlcXVlc3QuXG4yMTE3Olx0ICpcbjIxMTg6XHQgKiBBc2sgREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkgb2YgQGN0eCB0byBjYWxsIGEgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaW9uXG4yMTE5Olx0ICogdGhhdCB0aGUga2RhbW9uZCB3aWxsIGFwcGx5IERBTU9TIGFjdGlvbiB0bywgYW5kIHdhaXQgdW50aWwgdGhlIGtkYW1vbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0MQoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgS01TQU4gSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIGNoYW5nZSBpcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGp1c3QgY2FwdHVyaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRhbW9uX2NhbGxgIGludG8gYGVycmAgaW4gYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgbWFraW5nIHN1cmUgdGhhdCBpZiBgZGFtb25fY2FsbGAgc2lnbmFscyBhbiBlcnJvciwgdGhhdCBlcnJvciBpcyBub3cgY29ycmVjdGx5IHByb3BhZ2F0ZWQgYmFjayB1cCB0aGUgY2FsbCBzdGFjaywgaW5zdGVhZCBvZiBnZXR0aW5nIG1hc2tlZCBieSBhIHJldHVybiBvZiAwLiBCZWZvcmUgdGhlIHBhdGNoLCBhIGZhaWx1cmUgd2FzIGVmZmVjdGl2ZWx5IHRyZWF0ZWQgYXMgYSBzdWNjZXNzOyBub3csIHRoZSBlcnJvciBpcyBoYW5kbGVkIGFzIGl0IHNob3VsZCBiZS4KCk5vdywgZG9lcyB0aGlzIGhhdmUgYW55dGhpbmcgYXQgYWxsIHRvIGRvIHdpdGggS01TQU4/IEFic29sdXRlbHkgbm90LiBNeSBjaGVja2xpc3QgZm9yIEtNU0FOIGNvbmNlcm5zOgoqICAgRG9lcyBpdCAqcmVhZCogdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLgoqICAgRG9lcyBpdCAqcGFzcyogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlPyBOby4KKiAgIERvZXMgaXQgbGVhdmUgYW55IG1lbW9yeSBmaWVsZCB1bmluaXRpYWxpemVkPyBOby4KKiAgIERvZXMgaXQgYWZmZWN0IG1lbW9yeSBib3VuZHMgb3IgbGVuZ3RocyBpbiBhbnkgd2F5PyBOby4KKiAgIENvdWxkIGl0IGNvbmNlaXZhYmx5IGludHJvZHVjZSBhbnkgS01TQU4tZGV0ZWN0YWJsZSBidWdzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhPyBOby4KClRoaXMgcGF0Y2ggaXMgcHVyZWx5IGFib3V0IGVycm9yIGhhbmRsaW5nLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyB0aGUgKmNvcnJlY3QqIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQsIGFuZCBpdCBjbGVhbnMgdXAgYSBwb2ludGVyIG9uIGVycm9yLiBJdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgYWNjZXNzZXMsIGRhdGEgY29weWluZywgb3IgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMuIEl0IHNpbXBseSBpbXByb3ZlcyB0aGUgZXJyb3IgcHJvcGFnYXRpb24gbG9naWMuIFdlIGFyZSBub3QgdG91Y2hpbmcgb3IgbW9kaWZ5aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQsIGFzIHN1Y2gsIHRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgS01TQU4gY29uY2VybnMuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIHRlc3Qgc3VpdGVzIHdpbGwgYmUgc3VmZmljaWVudCBmb3IgdGhpcyBjaGFuZ2UuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGhlcmUuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgc3RvcmluZyB0aGUgcmV0dXJuIGNvZGUgb2YgZGFtb25fY2FsbCgpIGluIHRoZSBleGlzdGluZyBsb2NhbCB2YXJpYWJsZSAmIzM5O2VyciYjMzk7IGFuZCBwcm9wYWdhdGluZyBpdCB0byB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGFuZCByZXR1cm5pbmcgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZGFyaWVzIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgc3RvcmluZyB0aGUgcmV0dXJuIGNvZGUgb2YgZGFtb25fY2FsbCgpIGluIHRoZSBleGlzdGluZyBsb2NhbCB2YXJpYWJsZSAmIzM5O2VyciYjMzk7IGFuZCBwcm9wYWdhdGluZyBpdCB0byB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGFuZCByZXR1cm5pbmcgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZGFyaWVzIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjMwLjIzMzU5NDA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2ODEwNjE3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25cIixcbiAgICBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKSBieSBzdG9yaW5nIHRoZSByZXR1cm4gY29kZSBvZiBkYW1vbl9jYWxsKCkgaW4gdGhlIGV4aXN0aW5nIGxvY2FsIHZhcmlhYmxlICdlcnInIGFuZCBwcm9wYWdhdGluZyBpdCB0byB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGFuZCByZXR1cm5pbmcgMC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kYXJpZXMgb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NpZFxcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0NzozMC4yMzM2MDI3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNDg4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWIyYzI4NTJjZWE5OTZhZmIyZjQyNTMwMjNkY2I0NjRmN2I5MGJjNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0NzoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xcbmluZGV4IGUzODU4ZmZhYjRiMjIuLmJlYjRiZGM3NDQ2MDEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtMjI4MCw3ICsyMjgwLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbiBcXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VkYXRhID0ga2RhbW9uZDtcXG4gXFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcXG4gXFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xcbi1cXHRpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKVxcbitcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XFxuK1xcdGlmIChlcnIpXFxuIFxcdFxcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjMwLjc0Njg4ODgzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE0NjkzNzQ4MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25cIixcbiAgICBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NpZFxcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliMmMyODUyY2VhOTk2YWZiMmY0MjUzMDIzZGNiNDY0ZjdiOTBiYzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0NzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5iZWI0YmRjNzQ0NjAxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIyODAsNyArMjI4MCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZXJlcGVhdCA9IHRydWU7XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcbi1cdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXG4rXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XG4rXHRpZiAoZXJyKVxuIFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDc6MzAuNzQ2ODkxMDE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODg2MTY3NTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFN5c2ZzIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIHN5c2ZzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjgwIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSXQgc2VlbXMgbGlrZSBJJ20gZGVhbGluZyB3aXRoIHRoZSBmdW5jdGlvbiB0aGF0J3MgcmVzcG9uc2libGUgZm9yIHR1cm5pbmcgREFNT04gb24sIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gSSdtIHNlZWluZyBhIGNoYW5nZSBoZXJlLCBhIHNlZW1pbmdseSBtaW5vciB0d2VhaywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuUHJldmlvdXNseSwgdGhlcmUgd2FzIG5vIGVycm9yIGNoZWNraW5nIGFmdGVyIGNhbGxpbmcgYGRhbW9uX2NhbGxgIHdpdGggYSBgcmVwZWF0X2NhbGxfY29udHJvbGAgc3RydWN0dXJlLiBOb3csIHRoZXkndmUgYWRkZWQgYW4gYGVycmAgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBgZGFtb25fY2FsbGAuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBpZiAoZXJyKSBrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtgIHRvIGZyZWUgdGhlIGByZXBlYXRfY2FsbF9jb250cm9sYCBpZiB0aGUgYGRhbW9uX2NhbGxgIHJldHVybnMgYW4gZXJyb3IuIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaWYgYGRhbW9uX2NhbGxgIGZhaWxzIHRvIGV4ZWN1dGUgY29ycmVjdGx5LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRvIHByZXZlbnQgaXNzdWVzIHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlciBoZWF2eSBsb2FkIG9yIGVuY291bnRlcnMgdW5leHBlY3RlZCBjb25kaXRpb25zLlxuXG5JdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IGl0J3MgYSBnb29kIGV4YW1wbGUgb2YgaG93IGV2ZW4gc21hbGwgY2hhbmdlcyBjYW4gY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIHNpbWlsYXIgcGF0dGVybiB0byBiZSBpbXBsZW1lbnRlZCBhY3Jvc3MgdGhlIGNvZGUsIHRvIGVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgaGF2ZSB0aGVpciByZXR1cm4gdmFsdWVzIGNoZWNrZWQgYW5kIHByb3Blcmx5IGhhbmRsZWQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoYXQgaXMgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0NzozOS42MDg1Njk4ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjUwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjI1MTpcXHRcXHQvKiBUT0RPOiBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHRzIHBlciBrZGFtb25kICovXFxuMjI1MjpcXHRcXHRpZiAoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjI1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0aWYgKGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eClcXG4yMjU2OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCk7XFxuMjI1NzpcXHRcXHRrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggPSBOVUxMO1xcbjIyNTg6XFx0XFxuMjI1OTpcXHRcXHRyZXBlYXRfY2FsbF9jb250cm9sID0ga21hbGxvY19vYmooKnJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbjIyNjA6XFx0XFx0aWYgKCFyZXBlYXRfY2FsbF9jb250cm9sKVxcbjIyNjE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjI2MjpcXHRcXG4yMjYzOlxcdFxcdGN0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcXG4yMjY0OlxcdFxcdGlmIChJU19FUlIoY3R4KSkge1xcbjIyNjU6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI2NjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjdHgpO1xcbjIyNjc6XFx0XFx0fVxcbjIyNjg6XFx0XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbjIyNjk6XFx0XFx0aWYgKGVycikge1xcbjIyNzA6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI3MTpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbjIyNzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMjczOlxcdFxcdH1cXG4yMjc0OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcXG4yMjc1OlxcdFxcbjIyNzY6XFx0XFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XFxuMjI3NzpcXHRcXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4yMjc4OlxcdFxcbjIyNzk6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcXG4yMjgwOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcbjIyODE6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcXG4yMjgyOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcXG4yMjgzOlxcdFxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjg0OlxcdFxcdGlmIChlcnIpXFxuMjI4NTpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjg2OlxcdFxcdHJldHVybiBlcnI7XFxuMjI4NzpcXHR9XFxuMjI4ODpcXHRcXG4yMjg5OlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjI5MDpcXHR7XFxuMjI5MTpcXHRcXHRpZiAoIWtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eClcXG4yMjkyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIyOTM6XFx0XFx0ZGFtb25fc3RvcChcXHUwMDI2a2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4LCAxKTtcXG4yMjk0OlxcdFxcdC8qXFxuMjI5NTpcXHRcXHQgKiBUbyBhbGxvdyB1c2VycyBzaG93IGZpbmFsIG1vbml0b3JpbmcgcmVzdWx0cyBvZiBhbHJlYWR5IHR1cm5lZC1vZmZcXG4yMjk2OlxcdFxcdCAqIERBTU9OLCB3ZSBmcmVlIGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XFxuMjI5NzpcXHRcXHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcXG4yMjk4OlxcdFxcdCAqL1xcbjIyOTk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjM5LjYwODgyODIxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgwNzg2ODAxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIEZ1bmN0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgYSBncmlwIG9uIHRoaXMgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGZ1bmN0aW9uLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLiBJIGtub3cgaXQncyBhIGJpdCBmdXJ0aGVyIGRvd24sIHNvIGxldCBtZSBwdWxsIHVwIHRoZSBzZWN0aW9uIGZyb20gbGluZXMgMjI0MCB0byAyMjYwLiBIb2xkIG9uLi4uIGFjdHVhbGx5LCB0byBnZXQgdGhlIGZ1bGwgY29udGV4dCwgaXQncyBiZXN0IHRvIGV4cGFuZCB0aGUgdmlldyBhIGJpdC4gTGV0J3Mgc25hZyBsaW5lcyAyMjM1IHRocm91Z2ggMjI1NSBpbnN0ZWFkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCwgY29uY2lzZSBvdmVydmlldyBvZiB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGltbWVkaWF0ZSBzY29wZSwgZW5zdXJpbmcgSSBkb24ndCBtaXNzIGFueXRoaW5nIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjQ3LjY4NzUxMjI4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzU6XFx0XFx0ZGFtb25fc3lzZnNfdXBkX3R1bmVkX2ludGVydmFscyhzeXNmc19rZGFtb25kKTtcXG4yMjM2OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHN5c2ZzX2tkYW1vbmQpO1xcbjIyMzc6XFx0XFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyhzeXNmc19rZGFtb25kKTtcXG4yMjM4OlxcdG91dDpcXG4yMjM5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XFxuMjI0MDpcXHRcXHRyZXR1cm4gMDtcXG4yMjQxOlxcdH1cXG4yMjQyOlxcdFxcbjIyNDM6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbjIyNDQ6XFx0e1xcbjIyNDU6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbjIyNDY6XFx0XFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqcmVwZWF0X2NhbGxfY29udHJvbDtcXG4yMjQ3OlxcdFxcdGludCBlcnI7XFxuMjI0ODpcXHRcXG4yMjQ5OlxcdFxcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXFxuMjI1MDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjIyNTE6XFx0XFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xcbjIyNTI6XFx0XFx0aWYgKGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2VuciAhPSAxKVxcbjIyNTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjI1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDc6NDcuNjg3OTc1NDQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE1NTIyODIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFN5c3RlbSBDYWxsIEZsb3cqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgZG93biB3aGF0IEknbSBzZWVpbmcgaGVyZS4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBJJ3ZlIGdvdCB0byBzYXksIEknbSBhIGJpdCBjb25jZXJuZWQgYWJvdXQgaG93IGVycm9yIGhhbmRsaW5nIHdhcyBiZWluZyBoYW5kbGVkIHByZXZpb3VzbHkuIEJlZm9yZSB0aGlzIGNvbW1pdCwgdGhlIHJldHVybiB2YWx1ZSBvZiBgZGFtb25fc3RhcnRgIHdhcyBjb3JyZWN0bHkgY2hlY2tlZCwgYnV0IGV2ZW4gaWYgYGRhbW9uX2NhbGxgIGZhaWxlZCwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgd2hvbGUgZnVuY3Rpb24gd2FzIGFsd2F5cyAwISBUaGF0J3MgYSBkZWZpbml0ZSBvdmVyc2lnaHQsIHNpbmNlIGBlcnJgIHdvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIHJlc3VsdCBvZiBgZGFtb25fc3RhcnRgLCBidXQgYGRhbW9uX2NhbGwoKWAgY291bGQgZmFpbCBzaWxlbnRseS4gTm93LCBpdCBsb29rcyBsaWtlIHRoYXQncyBmaXhlZCwgYW5kIGBlcnJgIGlzIHByb3Blcmx5IHNldCB0byB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYGRhbW9uX2NhbGwoKWAsIHNvIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkLiBUaGF0J3MgZ29vZCwgdGhhdCdzIHdoYXQgSSdkIGV4cGVjdC5cblxuQnV0IHRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gd2hhdCBoYXBwZW5zIGlmIGBkYW1vbl9jYWxsYCAqZG9lcyogZmFpbD8gTG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYWZ0ZXIgY2FsbGluZyBgZGFtb25fc3RhcnRgIGFuZCBzZXR0aW5nIHVwIGBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eGAsIGBkYW1vbl9jYWxsYCBpcyBjYWxsZWQsIGFuZCBpZiBpdCBmYWlscywgdGhlbiB0aGUgY3VycmVudCBgZXJyYCBpcyByZXR1cm5lZCwgYnV0IHRoZSBEQU1PTiBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlcmUncyBubyBjYWxsIHRvIGBkYW1vbl9zdG9wYCBpbiB0aGUgZmFpbHVyZSBwYXRoLiBUaGlzIG1lYW5zIGEgc3Vic2VxdWVudCBhdHRlbXB0IHRvIHN0b3AgREFNT04gdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UgbWlnaHQgZmFpbCBiZWNhdXNlIHRoZSBjb250ZXh0IGlzIGFscmVhZHkgcnVubmluZy4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoaXM7IGl0IGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgYnVnIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYSBiZWhhdmlvcmFsIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuIEl0IGNvdWxkIGJlIHRoYXQgREFNT04gZW5kcyB1cCBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIHdoZXJlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyBjYWxsZWQgZnJvbS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiB3aWxsIGhlbHAgYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIHRoaXMgaXMgZ29pbmcgdG8gY2F1c2Ugc29tZSBvdGhlciBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0Nzo1Mi44NDMyMDY5NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU4ODc5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTIyMjA9c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMjQyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjI0MzpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxubW0vZGFtb24vc3lzZnMuYy0yMjQ0LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI4OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMjk2LVxcdCAqIERBTU9OLCB3ZSBmcmVlIGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XFxubW0vZGFtb24vc3lzZnMuYzoyMjk3OlxcdCAqIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKSwgb3Iga2RhbW9uZHNfbnJfc3RvcmUoKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI5OC1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjM2NT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzcyLVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM3MzpcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihrZGFtb25kKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIzNzQtXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfT0ZGOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0Nzo1Mi45MzkxMDE5ODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjMzOTMyMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTidzIFN5c2ZzIENvbW1hbmQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGZ1bmN0aW9uIG1hbmFnZXMgdGhlIGBEQU1PTl9TWVNGU19DTURfT05gIGNvbW1hbmQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgaW52b2NhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIExldCdzIGRlbHZlIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgbGluZXMgMjM2MCB0aHJvdWdoIDI0MjAgd2l0aGluIGBtbS9kYW1vbi9zeXNmcy5jYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIHNlZWsuIFRoaXMgc2VjdGlvbiBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb21tYW5kIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuIFRoaXMgc2hvdWxkIHNob3cgbWUgdGhlIHJlbGV2YW50IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMzMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjU2LjU3MzAzNzkyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzYwOlxcdCAqXFxuMjM2MTpcXHQgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYSBEQU1PTiBzeXNmcyBjb21tYW5kIGZvciBhIGtkYW1vbmQuXFxuMjM2MjpcXHQgKlxcbjIzNjM6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbjIzNjQ6XFx0ICovXFxuMjM2NTpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbjIzNjY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjM2NzpcXHR7XFxuMjM2ODpcXHRcXHRpZiAoY21kICE9IERBTU9OX1NZU0ZTX0NNRF9PRkYgXFx1MDAyNlxcdTAwMjYga2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjM2OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMzcwOlxcdFxcbjIzNzE6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4yMzcyOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxcbjIzNzM6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XFxuMjM3NDpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XFxuMjM3NTpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoa2RhbW9uZCk7XFxuMjM3NjpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVQ6XFxuMjM3NzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzc4OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XFxuMjM3OTpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG4yMzgwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbjIzODE6XFx0XFx0XFx0XFx0XFx0ZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHMsXFxuMjM4MjpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzgzOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1NUQVRTOlxcbjIzODQ6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxuMjM4NTpcXHRcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XFxuMjM4NjpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfU0NIRU1FU19UUklFRF9CWVRFUzpcXG4yMzg3OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIHRydWUpO1xcbjIzODg6XFx0XFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcXG4yMzg5OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIGZhbHNlKTtcXG4yMzkwOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcXG4yMzkxOlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuMjM5MjpcXHRcXHRcXHRcXHRrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdLVxcdTAwM2VzY2hlbWVzKTtcXG4yMzkzOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XFxuMjM5NDpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk1OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxuMjM5NjpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzk3OlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XFxuMjM5ODpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk5OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xcbjI0MDA6XFx0XFx0ZGVmYXVsdDpcXG4yNDAxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0MDI6XFx0XFx0fVxcbjI0MDM6XFx0fVxcbjI0MDQ6XFx0XFxuMjQwNTpcXHRzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbjI0MDY6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuMjQwNzpcXHR7XFxuMjQwODpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbjI0MDk6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xcbjI0MTA6XFx0XFx0ZW51bSBkYW1vbl9zeXNmc19jbWQgY21kO1xcbjI0MTE6XFx0XFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbjI0MTI6XFx0XFxuMjQxMzpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjI0MTQ6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNDE1OlxcdFxcdGZvciAoY21kID0gMDsgY21kIFxcdTAwM2MgTlJfREFNT05fU1lTRlNfQ01EUzsgY21kKyspIHtcXG4yNDE2OlxcdFxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIGRhbW9uX3N5c2ZzX2NtZF9zdHJzW2NtZF0pKSB7XFxuMjQxNzpcXHRcXHRcXHRcXHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XFxuMjQxODpcXHRcXHRcXHRcXHRicmVhaztcXG4yNDE5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDc6NTYuNTczMjY0MDI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3MzY2MDU1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gU3RhdGUgQ29udHJvbDogQSBRdWljayBNZW50YWwgQXVkaXQqKlxuXG5Pa2F5LCBzbyBgc3RhdGVfc3RvcmVgIOKAkyB0aGF0J3MgdGhlIGhhbmRsZXIgZm9yIHdyaXRpbmcgdG8gdGhlIHN5c2ZzIGF0dHJpYnV0ZSEgU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBvbmAgY29tbWFuZCBhbmQgaG93IGl0IGxhbmRzIGluIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NpZFx1MDAzZS9zdGF0ZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgd2F5IHRvIGludGVyZmFjZSB3aXRoIGtlcm5lbCBpbnRlcm5hbHMgZnJvbSB1c2Vyc3BhY2UsIGFuZCBpbiB0aGlzIGNhc2UsIGl0J3MgbWFuYWdpbmcgdGhlIERBTU9OIGZyYW1ld29yay5cblxuUmlnaHQsIERBTU9OIOKAkyBEYXRhIEFjY2VzcyBNb25pdG9yaW5nLiBUaGF0J3Mgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzZWN0aW9uIChgbW0vZGFtb25gKS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIHRoaXMgaXMgYSBmZWF0dXJlIEkgY2FuIHJlbGlhYmx5IHRlc3QgaW4gbXkgdXN1YWwgUUVNVSBzZXR1cHMgb3Igb3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBBaCwgeWVzISBUaGUgcHJlc2VuY2Ugb2YgdGhhdCBzeXNmcyBmaWxlIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8uLi5gIGNvbmZpcm1zIGl0LiBFeGNlbGxlbnQhXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwbHksIGxldCdzIGp1c3QgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgREFNT04gYW5kIGRvdWJsZS1jaGVjayB0aGUgYG1tL2RhbW9uL3N5c2ZzLmNgIGZpbGUgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGVybXMgb2YgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzE1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MDIuMzA5ODcyNTIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjcwMjg0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb24vc3lzZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjAyLjM2MjU4MjU3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDk0NzcyNTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIERBTU9OJ3MgTWFrZWZpbGUgYW5kIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIGJ1aWxkIGluZnJhc3RydWN0dXJlIGZvciB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG9wZW4gdXAgYG1tL2RhbW9uL01ha2VmaWxlYCBhbmQgYG1tL2RhbW9uL0tjb25maWdgLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGJ1aWxkIHJ1bGVzIGFuZCBsaWtlbHkgdGhlIG1vZHVsZSBkZWZpbml0aW9ucyBpbiB0aGUgTWFrZWZpbGUuIEZyb20gYSBLY29uZmlnIHBlcnNwZWN0aXZlLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gREFNT04ncyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJ1bnRpbWUgYmVoYXZpb3JzIHRoYXQgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyBEQU1PTiBhbmQgdG8gc2VlIHRoZSBtb2R1bGFyaXR5IG9mIHRoZSBkZXNpZ24sIHdoaWNoIG1pZ2h0IHJldmVhbCBhc3BlY3RzIHJlbGF0ZWQgdG8gaXRzIHNjYWxhYmlsaXR5IGFuZCBjb25maWd1cmFiaWxpdHkuIEFuYWx5emluZyB0aGUgTWFrZWZpbGUgd2lsbCBxdWlja2x5IGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLCB3aGlsZSBLY29uZmlnIHdpbGwgaWxsdW1pbmF0ZSB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gaXMgYmFrZWQgaW50byB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MTMuMzEwMzEwNTk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjEzLjMxMDQwNjI0NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzI0NDM5NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIG1lYW5zIEknbSBnb2luZyB0byBiZSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgREFNT04gc3Vic3lzdGVtLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2Ygd2hhdCdzICpjb25maWd1cmFibGUqIHdpdGhpbiBEQU1PTi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gZW5hYmxpbmcvZGlzYWJsaW5nIERBTU9OIGl0c2VsZiwgaXRzIHZhcmlvdXMgc2FtcGxpbmcgYW5kIG1vbml0b3JpbmcgdGVjaG5pcXVlcyAobGlrZSB0aGUgcmVnaW9uIG1vbml0b3JpbmcsIGFjY2VzcyBwYXR0ZXJuIGFuYWx5c2lzKSwgYW5kIHByb2JhYmx5IHJlbGF0ZWQgdHVuaW5nIHBhcmFtZXRlcnMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNvbnRyb2xsYWJsZSBsZXZlcnMgYW5kIHNlZSBob3cgdGhleSBpbXBhY3Qgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZmVhdHVyZXMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBjb25mbGljdHMgb3Igb3Bwb3J0dW5pdGllcyBmb3Igc3luZXJnaXN0aWMgY29uZmlndXJhdGlvbi4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gZXN0YWJsaXNoIHRoZSBjb25maWd1cmFiaWxpdHkgbGFuZHNjYXBlIGJlZm9yZSBkb2luZyBhbnkgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoxNS42MzQ4NDkxNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIERBTU9OXFxuICAgNjpcXHRcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcXG4gICA5OlxcdFxcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXFxuICAxMDpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXFxuICAxMzpcXHRcXHQgIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxuICAyMDpcXHRcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbiAgMjE6XFx0XFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbiAgMjI6XFx0XFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbiAgMjc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgMjk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICAzNDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgNjQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjE1LjYzNDk4NjAwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzU4NzQ5MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIERBTU9OJ3MgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBEQU1PTl9TWVNGU2AuIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgREFNT05gIGFuZCBgU1lTRlNgIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBJIGtub3cgYERBTU9OYCBsaXZlcyBpbiBgbW0vZGFtb24vS2NvbmZpZ2AsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgaWYgYERBTU9OYCBpdHNlbGYgaXMgZXZlbiBzb3VyY2VkIGZyb20gdGhlIG1haW4gYG1tL0tjb25maWdgLiBJdOKAmXMganVzdCBnb29kIHByYWN0aWNlIHRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LiBMZXQncyBnbyB0YWtlIGEgbG9vayBhdCB0aGUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MTkuOTkzNzY0MDc5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE4OTY5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MjAuMDUzOTYwNDM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NjI0NTU2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOlxuXG4qKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgbW0vZGFtb24vS2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbW0vZGFtb24vS2NvbmZpZ2AgaXMgYWN0dWFsbHkgc291cmNlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uICBJdCdzIGEgYEtjb25maWdgIGZpbGUsIHNvIGl0J3MgY2xlYXJseSBpbnZvbHZlZCBpbiBjb25maWd1cmluZyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIG1vZHVsZSwgd2hpY2ggaXMgYSBrZXJuZWwgZmVhdHVyZSBJJ20gZmFtaWxpYXIgd2l0aC4gIFRoZSBxdWVzdGlvbiBpcyAqaG93KiB0aGUgYnVpbGQgc3lzdGVtIGtub3dzIGFib3V0IGl0LlxuXG5NeSBpbml0aWFsIGxpbmUgb2YgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgdHlwaWNhbCBgS2NvbmZpZ2AgaW5jbHVzaW9uIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIGNvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGEgYHNvdXJjZSBcIm1tL2RhbW9uL0tjb25maWdcImAgc3RhdGVtZW50IChvciBzb21ldGhpbmcgc2ltaWxhcikgaW4gb3RoZXIgYEtjb25maWdgIGZpbGVzIGhpZ2hlciB1cCB0aGUgdHJlZS4gIFBlcmhhcHMgaW4gdGhlIG1haW4gYEtjb25maWdgIG9yIHdpdGhpbiB0aGUgYG1tYCBkaXJlY3RvcnkncyBgS2NvbmZpZ2AgZmlsZSwgb3IgcG90ZW50aWFsbHkgdGhyb3VnaCBhIHNlcmllcyBvZiBcImlmXCIgc3RhdGVtZW50cyB0aGF0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZSBpdCBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gSSBtaWdodCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgc29tZSBtYWNyby1saWtlIGRpcmVjdGl2ZXMgaWYgdGhlcmUgYXJlIGFueSB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuXG5cblRoZW4gSSBjb3VsZCB1c2UgYG1ha2UgbWVudWNvbmZpZ2AgKG9yIHdoaWNoZXZlciBjb25maWd1cmF0aW9uIHRvb2wgaXMgcmVsZXZhbnQpIGFuZCwgaWYgcG9zc2libGUsIGxvb2sgZm9yIHRoZSBvcHRpb25zIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtIHRvIHNlZSBob3cgdGhleSBsaW5rIHRvIHRoaXMgZmlsZS4gSSBoYXZlIHNvbWUgdG9vbHMgdG8gaGVscCBtZSB3aXRoIHRoaXMuIEkgY2FuIGFsc28gdHJ5IGEgYGdyZXBgIHNlYXJjaCBmb3IgdGhlIGZpbGUgbmFtZSBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbG9va2luZyBmb3IgbGlrZWx5IGluY2x1c2lvbiBwb2ludHMuIElmIHRoZSBEQU1PTiBmZWF0dXJlIGl0c2VsZiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCB0aGVyZSB3b3VsZCBiZSBzb21lIG1vcmUgd29yayB0byBkbywgYnV0IHRoYXQgaXMgbXkgZ2VuZXJhbCBhcHByb2FjaC5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBkaXJlY3QgcGF0aCBmcm9tIGEgdG9wLWxldmVsIGBLY29uZmlnYCBmaWxlIG9yIGFub3RoZXIgcmVsZXZhbnQgYEtjb25maWdgIGZpbGUgdG8gYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIHNob3VsZCBsZWFkIG1lIHRvIHRoZSBlbnRyeSBwb2ludHMgd2hlcmUgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyNi41MTY0MTkxMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTg1MzAyNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0ODU9Y29uZmlnIExBWllfTU1VX01PREVfS1VOSVRfVEVTVFxcbi0tXFxubW0vS2NvbmZpZy0xNDk2LVxcbm1tL0tjb25maWc6MTQ5Nzpzb3VyY2UgXFxcIm1tL2RhbW9uL0tjb25maWdcXFwiXFxubW0vS2NvbmZpZy0xNDk4LVxcbi0tXFxuc2FtcGxlcy9LY29uZmlnPTMyNT1zb3VyY2UgXFxcInNhbXBsZXMvcnVzdC9LY29uZmlnXFxcIlxcbnNhbXBsZXMvS2NvbmZpZy0zMjYtXFxuc2FtcGxlcy9LY29uZmlnOjMyNzpzb3VyY2UgXFxcInNhbXBsZXMvZGFtb24vS2NvbmZpZ1xcXCJcXG5zYW1wbGVzL0tjb25maWctMzI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyOS4yMTQ5NTg0NjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODk3ODU0MzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFN5c2ZzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gYERBTU9OYCBpdHNlbGYgaXMgcHJldHR5IGNsZWFuIOKAkyBubyBleHRyYSBkZXBlbmRlbmNpZXMgYmV5b25kIE1NIGNvbmZpZ3MsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBEQU1PTl9TWVNGU2AgYnVpbGRzIG9uIHRvcCBvZiBgREFNT05gIGFuZCBgU1lTRlNgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdC5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoaXMgcGF0Y2guIEkgc2VlIHRoZSBjaGFuZ2UgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJdCdzIHJpZ2h0IGhlcmU6XG5gYGBkaWZmXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcbmluZGV4IGUzODU4ZmZhYjRiMjIuLmJlYjRiZGM3NDQ2MDEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMjI4MCw3ICsyMjgwLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuLVx0aWYgKGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKSlcbitcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcbitcdGlmIChlcnIpXG4gXHRcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5gYGBcblxuQWgsIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZSBpcyBtaW5vci4gVGhleSd2ZSBqdXN0IGFkZGVkIGFuIGBlcnJgIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRhbW9uX2NhbGxgIGJlZm9yZSBjaGVja2luZyBpdC4gVGhlbiBpZiB0aGVyZSdzIGFuIGVycm9yLCB0aGV5IGZyZWUgdGhlIGByZXBlYXRfY2FsbF9jb250cm9sYCBzdHJ1Y3R1cmUuIFNlZW1zIGxpa2UgYSBzaW1wbGUgY2xlYW51cCBvciBtYXliZSBhbiBhdHRlbXB0IHRvIG1ha2UgdGhlIGVycm9yIGhhbmRsaW5nIG1vcmUgcm9idXN0LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGdpdCBsb2cgZm9yIHRoaXMgY29tbWl0IHRvIGdldCBzb21lIGNvbnRleHQuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCB3aGF0IHRoZSBvcmlnaW5hbCBpbnRlbnQgd2FzLCBvciBpZiB0aGVyZSB3YXMgYSBzcGVjaWZpYyBpc3N1ZSB0aGlzIGZpeGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODozOC4xOTM1MDU3MDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODA2NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlYWxsb2Nfb25fY2FuY2VsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zNjc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgY2FuY2VsKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2OTgtXFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmNvbnRyb2wtXFx1MDAzZWNvbXBsZXRpb24pO1xcbm1tL2RhbW9uL2NvcmUuYzozNjk5OlxcdFxcdGVsc2UgaWYgKGNvbnRyb2wtXFx1MDAzZWNhbmNlbGVkIFxcdTAwMjZcXHUwMDI2IGNvbnRyb2wtXFx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsKVxcbm1tL2RhbW9uL2NvcmUuYy0zNzAwLVxcdFxcdFxcdGtmcmVlKGNvbnRyb2wpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjQzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI4MS1cXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VyZXBlYXQgPSB0cnVlO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjI4MjpcXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XFxubW0vZGFtb24vc3lzZnMuYy0yMjgzLVxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MzguMjU2MzE3NTY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNjQ4Nzc4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21taXQgTWVzc2FnZSBhbmQgYGRhbW9uX2NhbGxgKipcblxuSG1tLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IEdpdCBjb21taXQsIGlkZWFsbHkgdGhlIEhFQUQgY29tbWl0LiBJIGRvbid0IGhhdmUgdGhlIHR5cGljYWwgYGdpdCBsb2dgIHRvb2wgYXZhaWxhYmxlLCB3aGljaCBpcyBhIGJpdCBvZiBhIHBhaW4uIEJ1dCBJICpkbyogc2VlIGEgbWVzc2FnZSBpbiB0aGUgcHJvbXB0OiBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiLiBPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHByb3ZpZGluZyAqYSogY29tbWl0IG1lc3NhZ2UsIGJ1dCBpdCBsb29rcyBsaWtlIGl0J3MgYSBkZXJpdmVkIG9uZSwgbm90IHRoZSBvcmlnaW5hbC4gVGhhdCdzIGdvb2QgdG8ga25vdywgYnV0IGl0IGlzbid0IHdoYXQgSSB3YW50ZWQuIEkgbmVlZCBtb3JlIGNvbnRleHQuXG5cbkdpdmVuIHRoYXQgdGhlIHBhdGNoIGludm9sdmVzIFwic3l6LWNsdXN0ZXJcIiwgaXQgbWlnaHQgaW52b2x2ZSB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgb3IgdGhlIFwiZGFtb25cIiBzdWJzeXN0ZW0sIGFzIHRoZSB0b29sIGlzIG9mdGVuIGludm9sdmVkIGluIHRoZXNlIGFyZWFzLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYW1vbl9jYWxsYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHllcywgaXQncyBpbiBgbW0vZGFtb24vY29yZS5jYC4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgdGhhdCBjb21taXQgbWlnaHQgYmUgZG9pbmcgaW4gcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgZGFtb25fY2FsbGAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODEwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NDEuNDIxMTk4ODA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc1NTEzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fY2FsbFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDA4PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAzNC0gKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jOjEwMzU6ICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbm1tL2RhbW9uL2NvcmUuYy0xMDM2LSAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExMzQ9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE1NC0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2VcXG5tbS9kYW1vbi9jb3JlLmM6MTE1NTogKiBkYW1vbl9jYWxsKCkuXFxubW0vZGFtb24vY29yZS5jLTExNTYtICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTgwND1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODMwLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxcbm1tL2RhbW9uL2NvcmUuYzoxODMxOiAqIGRhbW9uX2NhbGwoKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTgzMi0gKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjA2MTogKiBkYW1vbl9jYWxsKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbiBvbiBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKS5cXG5tbS9kYW1vbi9jb3JlLmMtMjA2Mi0gKiBAY3R4OlxcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gZm9yLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwODQtICovXFxubW0vZGFtb24vY29yZS5jOjIwODU6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNjYyPXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjcyLSAqIElmIHRoZXJlIGFyZSBcXHUwMDI2c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXF1ZXN0cyB0aGF0IHJlZ2lzdGVyZWQgdmlhXFxubW0vZGFtb24vY29yZS5jOjM2NzM6ICogXFx1MDAyNmRhbW9uX2NhbGwoKSBvbiBAY3R4LCBkbyBvciBjYW5jZWwgdGhlIGludm9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGRlcGVuZGluZ1xcbm1tL2RhbW9uL2NvcmUuYy0zNjc0LSAqIG9uIEBjYW5jZWwuICBAY2FuY2VsIGlzIHNldCB3aGVuIHRoZSBrZGFtb25kIGlzIGFscmVhZHkgb3V0IG9mIHRoZSBtYWluIGxvb3BcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzYxPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4NDItXFx0XFx0XFx0a2RhbW9uZF91c2xlZXAoY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xcbm1tL2RhbW9uL2NvcmUuYzozODQzOlxcdFxcdFxcdC8qIGFsbG93IGNhbGxlciB1bnNldCBwYXVzZSB2aWEgZGFtb25fY2FsbCgpICovXFxubW0vZGFtb24vY29yZS5jLTM4NDQtXFx0XFx0XFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNTE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzcwLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzcxOlxcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzcyLVxcdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM3NC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM3NTpcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNvbnRyb2wpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc2LVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyNi1cXHRcXHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0Mjc6XFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyOC19XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9Mjc2PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yOTUtXFxubW0vZGFtb24vcmVjbGFpbS5jOjI5NjpcXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjk3LVxcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yOTktXFxubW0vZGFtb24vcmVjbGFpbS5jOjMwMDpcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNvbnRyb2wpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMDEtXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzMwPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ3LVxcdFxcdGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDg6XFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ5LX1cXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjIxLVxcdGNhbGxfY29udHJvbC5kYXRhID0gZGFtb25fc3RhdF9jb250ZXh0O1xcbm1tL2RhbW9uL3N0YXQuYzoyMjI6XFx0cmV0dXJuIGRhbW9uX2NhbGwoZGFtb25fc3RhdF9jb250ZXh0LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjIzLX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyODItXFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjI4MzpcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjg0LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyODk9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMwMS1cXG5tbS9kYW1vbi9zeXNmcy5jOjIzMDI6c3RhdGljIGludCBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKGludCAoKmZuKSh2b2lkICpkYXRhKSxcXG5tbS9kYW1vbi9zeXNmcy5jLTIzMDMtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzMTEtXFx0Y2FsbF9jb250cm9sLmRhdGEgPSBrZGFtb25kO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjMxMjpcXHRlcnIgPSBkYW1vbl9jYWxsKGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCwgXFx1MDAyNmNhbGxfY29udHJvbCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMzEzLVxcdHJldHVybiBlcnIgPyBlcnIgOiBjYWxsX2NvbnRyb2wucmV0dXJuX2NvZGU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjU9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Ni1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVQ6XFxubW0vZGFtb24vc3lzZnMuYzoyMzc3OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3OC1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3OS1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzODA6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYy0yMzgxLVxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzgzLVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1NUQVRTOlxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM4NDpcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG5tbS9kYW1vbi9zeXNmcy5jLTIzODUtXFx0XFx0XFx0XFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfc3RhdHMsIGtkYW1vbmQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzkzLVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XFxubW0vZGFtb24vc3lzZnMuYzoyMzk0OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM5NS1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzk3LVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XFxubW0vZGFtb24vc3lzZnMuYzoyMzk4OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM5OS1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzLCBrZGFtb25kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NDEuNTM4NzU3NDYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1OTEyNDkxNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgYGRhbW9uX2NhbGxgIGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBDb3JlOiBUcmFjaW5nIGBkYW1vbl9jYWxsYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGRhbW9uX2NhbGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yay4gSXQncyBuYW1lZCBcImNhbGwsXCIgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQncyBsaWtlbHkgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgc29tZSBEQU1PTiBmdW5jdGlvbmFsaXR5IGlzIGludm9rZWQuIEkgZXhwZWN0IHRoaXMgdG8gYmUgYSBjcnVjaWFsIGNvbnRyb2wgcG9pbnQuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLCBsb29raW5nIGZvciB0aGUga2V5IGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipXaGF0IHRyaWdnZXJzIHRoaXMgY2FsbD8qKiBJcyBpdCB0aW1lLWJhc2VkLCBldmVudC1kcml2ZW4sIG9yIGEgY29tYmluYXRpb24/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBJcyBpdCBjYWxsZWQgZnJvbSBhIGtlcm5lbCB0aHJlYWQsIGludGVycnVwdCBjb250ZXh0LCBvciB0YXNrIGNvbnRleHQ/XG4qICAgKipXaGF0IGFyZSBpdHMgaW5wdXRzPyoqIEkgbmVlZCB0byBrbm93IHdoYXQgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4uIEFyZSB0aGV5IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgaGFuZGxlcyB0byB0aGUgREFNT04gc3RydWN0dXJlcywgb3IgbWVtb3J5IHJlZ2lvbiBpbmZvcm1hdGlvbj9cbiogICAqKldoYXQgZG9lcyBpdCBkbz8qKiBXaGF0IGlzIHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQncyBnb2luZyB0byBpdGVyYXRlIHRocm91Z2ggc29tZSBkYXRhIHN0cnVjdHVyZXMsIHByb2JhYmx5IERBTU9OJ3MgaW50ZXJuYWwgc3RhdGUsIGFuZCBtYWtlIGRlY2lzaW9ucyBhYm91dCBtZW1vcnkgcmVnaW9ucyBiYXNlZCBvbiB0aGUgREFNT04gYWxnb3JpdGhtIG9yIGFueSBvdGhlciBwb2xpY3kuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBkZWNpc2lvbi1tYWtpbmcgcHJvY2Vzcy4gRG9lcyBpdCBzY2hlZHVsZSBvcGVyYXRpb25zLCBtYWtlIGltbWVkaWF0ZSBjaGFuZ2VzLCBvciB0cmlnZ2VyIGZ1cnRoZXIgYWN0aW9ucz9cbiogICAqKldoYXQgYXJlIGl0cyBvdXRwdXRzL3NpZGUgZWZmZWN0cz8qKiBEb2VzIGl0IG1vZGlmeSBhbnkgbWVtb3J5IHJlZ2lvbnM/IERvZXMgaXQgY2hhbmdlIGFueSBrZXJuZWwgc3RydWN0dXJlcz8gRG9lcyBpdCByZXBvcnQgYW55IG1ldHJpY3Mgb3Igc3RhdGlzdGljcz9cbiogICAqKldoZXJlIGRvZXMgaXQgZml0IGluIHRoZSBvdmVyYWxsIERBTU9OIGV4ZWN1dGlvbiBmbG93PyoqIEhvdyBpcyBpdCByZWxhdGVkIHRvIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBkYW1vbl9pbml0YCBvciBgZGFtb25fdXBkYXRlYD9cblxuSSdtIHByZXBhcmVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LCBwb3RlbnRpYWxseSB1c2luZyBjcm9zcy1yZWZlcmVuY2VzIGFuZCBsb29raW5nIGF0IHdoYXQgdGhpcyBmdW5jdGlvbiBjYWxscy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0cywgaW5wdXRzLCBvcGVyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgcm9sZSB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yayB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIGl0cyBwdXJwb3NlLiBMZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODo1Ny40NTEyNTI0MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDgwOlxcdCAqXFxuMjA4MTpcXHQgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgZmFpbGVkLCB0aGUgQGN0eCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0b3BwZWQuXFxuMjA4MjpcXHQgKlxcbjIwODM6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbjIwODQ6XFx0ICovXFxuMjA4NTpcXHRpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuMjA4NjpcXHR7XFxuMjA4NzpcXHRcXHRpZiAoIWNvbnRyb2wtXFx1MDAzZXJlcGVhdClcXG4yMDg4OlxcdFxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuMjA4OTpcXHRcXHRjb250cm9sLVxcdTAwM2VjYW5jZWxlZCA9IGZhbHNlO1xcbjIwOTA6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmNvbnRyb2wtXFx1MDAzZWxpc3QpO1xcbjIwOTE6XFx0XFxuMjA5MjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XFxuMjA5MzpcXHRcXHRpZiAoY3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlKSB7XFxuMjA5NDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG4yMDk1OlxcdFxcdFxcdGdvdG8gY2FuY2VsZWQ7XFxuMjA5NjpcXHRcXHR9XFxuMjA5NzpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjb250cm9sLVxcdTAwM2VsaXN0LCBcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzKTtcXG4yMDk4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbjIwOTk6XFx0XFx0aWYgKGNvbnRyb2wtXFx1MDAzZXJlcGVhdClcXG4yMTAwOlxcdFxcdFxcdHJldHVybiAwO1xcbjIxMDE6XFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuMjEwMjpcXHRcXHRpZiAoY29udHJvbC1cXHUwMDNlY2FuY2VsZWQpXFxuMjEwMzpcXHRcXHRcXHRnb3RvIGNhbmNlbGVkO1xcbjIxMDQ6XFx0XFx0cmV0dXJuIDA7XFxuMjEwNTpcXHRcXG4yMTA2OlxcdGNhbmNlbGVkOlxcbjIxMDc6XFx0XFx0d2hpbGUgKGRhbW9uX2lzX3J1bm5pbmcoY3R4KSlcXG4yMTA4OlxcdFxcdFxcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xcbjIxMDk6XFx0XFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XFxuMjExMDpcXHRcXG4yMTExOlxcdH1cXG4yMTEyOlxcdFxcbjIxMTM6XFx0LyoqXFxuMjExNDpcXHQgKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxcbjIxMTU6XFx0ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXFxuMjExNjpcXHQgKiBAY29udHJvbDpcXHRDb250cm9sIHZhcmlhYmxlIG9mIHRoZSB3YWxrIHJlcXVlc3QuXFxuMjExNzpcXHQgKlxcbjIxMTg6XFx0ICogQXNrIERBTU9OIHdvcmtlciB0aHJlYWQgKGtkYW1vbmQpIG9mIEBjdHggdG8gY2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIHJlZ2lvblxcbjIxMTk6XFx0ICogdGhhdCB0aGUga2RhbW9uZCB3aWxsIGFwcGx5IERBTU9TIGFjdGlvbiB0bywgYW5kIHdhaXQgdW50aWwgdGhlIGtkYW1vbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NTcuNDUxNDE1MDEzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3ODQ3NDY0OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIERBTU9OIHN5c2ZzIGVycm9yIGhhbmRsaW5nIGZvciBmdXp6aW5nIHBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGNoYW5nZXMgaG93IGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBoYW5kbGVzIGVycm9ycyB3aGVuIGNhbGxpbmcgYGRhbW9uX2NhbGxgLiBQcmV2aW91c2x5LCBhIGZhaWx1cmUgZnJvbSBgZGFtb25fY2FsbGAgKHNwZWNpZmljYWxseSwgYC1FQ0FOQ0VMRURgKSBjb3VsZCBiZSBtYXNrZWQsIHJldHVybmluZyBzdWNjZXNzIGZyb20gdGhlIHN5c2ZzIGNhbGwuIE5vdywgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiByZWFjaGFibGUuICBZZXMsIGl0J3MgdHJpZ2dlcmVkIGJ5IHdyaXRpbmcgXCJvblwiIHRvIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjaWRcdTAwM2Uvc3RhdGVgIHN5c2ZzIGVudHJ5LiBUaGF0J3MgYSBjbGVhciBlbnRyeSBwb2ludC5cblxuTm93LCBpcyB0aGlzIGZ1enphYmxlPyBBY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCB0aGlzICppcyogYSBjYW5kaWRhdGU6IGl0J3MgYSBtb2RpZmljYXRpb24gaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLCB3aGljaCBmYWxscyB1bmRlciB0aGUgXCJjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vKVwiIGFuZCB0aGUgY2hhbmdlIGFmZmVjdHMgZXJyb3IgcHJvcGFnYXRpb24gYW5kIGRhdGEgc3RydWN0dXJlIGludGVyYWN0aW9uLiBEQU1PTiBpcyBhbHNvIGFjdGl2ZWx5IGludGVyYWN0ZWQgd2l0aCBieSBzeXprYWxsZXIgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLlxuXG5UbyBjb25maXJtIGZ1enphYmlsaXR5LCBJJ20gY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3M6IGBDT05GSUdfREFNT05gIGFuZCBgQ09ORklHX0RBTU9OX1NZU0ZTYC4gYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGFyZSBib3RoIHN0YW5kYXJkLCBzbyB0aG9zZSBhcmUgbXkgYEVuYWJsZUNvbmZpZ3NgLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGJlIHByZWNpc2UuICBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLiBJIG11c3QgYWxzbyBpbmNsdWRlIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCAodGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXQpLCBzbyB0aGUgZnV6emVyIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGlubGluaW5nLCBhbmQgYGRhbW9uX2NhbGxgIGl0c2VsZiAodGhlIGZ1bmN0aW9uIHdob3NlIHJldHVybiB2YWx1ZSBpcyBjaGFuZ2VkKS4gIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGV5J3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIHBhdGNoLiBUaGUgbG9naWMgYmVpbmcgbW9kaWZpZWQgaXMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgY3JpdGVyaWEgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyB0aGF0IHdvdWxkIG1ha2UgdGhpcyAqbm90KiB3b3J0aCBmdXp6aW5nLiBJdCdzIGEga2VybmVsIGNvZGUgY2hhbmdlLCBleGVjdXRhYmxlLCBhbmQgYSByZWFjaGFibGUgcGF0aCB2aWEgc3lzZnMuIFNvIFdvcnRoRnV6emluZyBtdXN0IGJlIHRydWUuXG5cblNvLCBoZXJlJ3MgbXkgY29uZmlndXJhdGlvbjpcblxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIkRBTU9OXCIsIFwiREFNT05fU1lTRlNcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbiwgZGFtb25fc3lzZnNfaGFuZGxlX2NtZCwgZGFtb25fY2FsbF1gXG5cbkV2ZXJ5dGhpbmcgYWxpZ25zLCB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg5LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OToyNS4yOTg4ODM5OTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE3NDkzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25cIixcbiAgICBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NpZFxcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25cIixcbiAgICBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NpZFxcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OToyNS40NDA2NDEwNzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTYwMzU2MDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjI1LjQ0MTExMjQyOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExMTYwMzA4NTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpIGJ5IHN0b3JpbmcgdGhlIHJldHVybiBjb2RlIG9mIGRhbW9uX2NhbGwoKSBpbiB0aGUgZXhpc3RpbmcgbG9jYWwgdmFyaWFibGUgJ2VycicgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIHRoZSBjYWxsZXIsIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcgaXQgYW5kIHJldHVybmluZyAwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRhcmllcyBvciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliMmMyODUyY2VhOTk2YWZiMmY0MjUzMDIzZGNiNDY0ZjdiOTBiYzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0NzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5iZWI0YmRjNzQ0NjAxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIyODAsNyArMjI4MCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZXJlcGVhdCA9IHRydWU7XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcbi1cdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXG4rXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XG4rXHRpZiAoZXJyKVxuIFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MjUuNDQxMTE0MTE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc4MjkwMjY5NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gU3lzZnMgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIHRoZSBzdGFuZGFyZCB0b29sczsgbGV0J3MgcHVsbCB1cCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCB0aGVuIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGVudCBvZiBgbW0vZGFtb24vc3lzZnMuY2AgYXJvdW5kIGxpbmUgMjI4MC4gVW5kZXJzdGFuZGluZyB0aGUgaW1tZWRpYXRlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2lsbCBiZSBjcnVjaWFsIGZvciBhIHByb3BlciBldmFsdWF0aW9uLiBHb3R0YSBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgc3Vycm91bmRpbmcgbG9naWMgYmVmb3JlIEkgY2FuIGFuYWx5emUgdGhlIGFjdHVhbCBkaWZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTEyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MDo0My43MzEzODcxMDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI1MDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjIyNTE6XFx0XFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xcbjIyNTI6XFx0XFx0aWYgKGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2VuciAhPSAxKVxcbjIyNTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjI1NDpcXHRcXG4yMjU1OlxcdFxcdGlmIChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgpXFxuMjI1NjpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgpO1xcbjIyNTc6XFx0XFx0a2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4ID0gTlVMTDtcXG4yMjU4OlxcdFxcbjIyNTk6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbCA9IGttYWxsb2Nfb2JqKCpyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjYwOlxcdFxcdGlmICghcmVwZWF0X2NhbGxfY29udHJvbClcXG4yMjYxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIyNjI6XFx0XFxuMjI2MzpcXHRcXHRjdHggPSBkYW1vbl9zeXNmc19idWlsZF9jdHgoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXSk7XFxuMjI2NDpcXHRcXHRpZiAoSVNfRVJSKGN0eCkpIHtcXG4yMjY1OlxcdFxcdFxcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbjIyNjY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcXG4yMjY3OlxcdFxcdH1cXG4yMjY4OlxcdFxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIGZhbHNlKTtcXG4yMjY5OlxcdFxcdGlmIChlcnIpIHtcXG4yMjcwOlxcdFxcdFxcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbjIyNzE6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4yMjcyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjI3MzpcXHRcXHR9XFxuMjI3NDpcXHRcXHRrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggPSBjdHg7XFxuMjI3NTpcXHRcXG4yMjc2OlxcdFxcdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxcbjIyNzc6XFx0XFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cXHUwMDNlcmVmcmVzaF9tcyk7XFxuMjI3ODpcXHRcXG4yMjc5OlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47XFxuMjI4MDpcXHRcXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VkYXRhID0ga2RhbW9uZDtcXG4yMjgxOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZXJlcGVhdCA9IHRydWU7XFxuMjI4MjpcXHRcXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XFxuMjI4MzpcXHRcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI4NDpcXHRcXHRpZiAoZXJyKVxcbjIyODU6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI4NjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIyODc6XFx0fVxcbjIyODg6XFx0XFxuMjI4OTpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbjIyOTA6XFx0e1xcbjIyOTE6XFx0XFx0aWYgKCFrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgpXFxuMjI5MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMjkzOlxcdFxcdGRhbW9uX3N0b3AoXFx1MDAyNmtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCwgMSk7XFxuMjI5NDpcXHRcXHQvKlxcbjIyOTU6XFx0XFx0ICogVG8gYWxsb3cgdXNlcnMgc2hvdyBmaW5hbCBtb25pdG9yaW5nIHJlc3VsdHMgb2YgYWxyZWFkeSB0dXJuZWQtb2ZmXFxuMjI5NjpcXHRcXHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggaW4gbmV4dFxcbjIyOTc6XFx0XFx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXFxuMjI5ODpcXHRcXHQgKi9cXG4yMjk5OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MDo0My43MzE1NzQyNjdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzU1NTM1NTU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBEQU1PTiBwYXRjaC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgY29kZSBsb29rZWQgbGlrZSB0aGlzIChJIGNhbiBwcmFjdGljYWxseSBzZWUgaXQgaW4gbXkgaGVhZCk6XG5cbmBgYGNcblx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRhdGEgPSBrZGFtb25kO1xuXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZXJlcGVhdCA9IHRydWU7XG5cdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuLVx0aWYgKGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKSlcbitcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcbitcdGlmIChlcnIpXG4gXHRcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuIFx0cmV0dXJuIGVycjtcbmBgYFxuXG5SaWdodCwgdGhlIGtleSBoZXJlIGlzIHdoYXQgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgcGF0Y2guIFByZXZpb3VzbHksIGBlcnJgIHdhcyBvbmx5IGluaXRpYWxpemVkIHRvIHRoZSByZXN1bHQgb2YgYGRhbW9uX3N0YXJ0KClgLCB3aGljaCB3b3VsZCBiZSB6ZXJvIGlmIGV4ZWN1dGlvbiBtYWRlIGl0IHRvIGxpbmUgMjI3Ni4gQ3J1Y2lhbGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jYWxsKClgIHdhcyAqaWdub3JlZCouIFRoaXMgaXMgYSBnbGFyaW5nIG9taXNzaW9uLiBUaGF0IG1lYW50IHRoYXQgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIHdvdWxkIHJlcG9ydCBzdWNjZXNzIChyZXR1cm5pbmcgMCkgZXZlbiBpZiBgZGFtb25fY2FsbCgpYCBmYWlsZWQuIFRoYXQncyBhIGNsYXNzaWMgZXJyb3IsIGFuZCBhIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy5cblxuTm93LCB3aXRoIHRoaXMgcGF0Y2gsIGBlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7YCBwcm9wZXJseSBjYXB0dXJlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLiBUaGVuIHRoZSBgaWYgKGVycilgIGNvbmRpdGlvbmFsIGNvcnJlY3RseSBldmFsdWF0ZXMsIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzLCBhcyBleHBlY3RlZCwgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24uIE11Y2ggYmV0dGVyIVxuXG5JJ20gbWFraW5nIGEgcXVpY2sgbWVudGFsIGNoZWNrIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoYXQgbWlnaHQgYmUgaGlkaW5nLiBUaGUgYGludCBlcnI7YCBkZWNsYXJhdGlvbiBzZWVtcyBmaW5lIGZyb20gYSBxdWljayBnbGFuY2UsIGJ1dCBpdCdzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBJJ20gZ29pbmcgdG8gcmVhZCBsaW5lcyAyMjQwIHRvIDIyNjAgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6NTEuMjg2OTMzNDQ0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzA6XFx0XFxuMjIzMTpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjIyMzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIzMzpcXHRcXHRpZiAoc3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjIzNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjM1OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzNjpcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcXG4yMjM3OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzODpcXHRvdXQ6XFxuMjIzOTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbjIyNDA6XFx0XFx0cmV0dXJuIDA7XFxuMjI0MTpcXHR9XFxuMjI0MjpcXHRcXG4yMjQzOlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4yMjQ0OlxcdHtcXG4yMjQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4yMjQ2OlxcdFxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XFxuMjI0NzpcXHRcXHRpbnQgZXJyO1xcbjIyNDg6XFx0XFxuMjI0OTpcXHRcXHRpZiAoZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxcbjIyNTA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yMjUxOlxcdFxcdC8qIFRPRE86IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dHMgcGVyIGtkYW1vbmQgKi9cXG4yMjUyOlxcdFxcdGlmIChrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlbnIgIT0gMSlcXG4yMjUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIyNTQ6XFx0XFxuMjI1NTpcXHRcXHRpZiAoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KVxcbjIyNTY6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4yMjU3OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IE5VTEw7XFxuMjI1ODpcXHRcXG4yMjU5OlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUwOjUxLjI4NzE5Mjk1NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDc1MjU1MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBBIFF1aWNrIERlYnVnKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiB0aGUgb3JpZ2luYWwgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGZ1bmN0aW9uLCB0aGUgYGVycmAgdmFyaWFibGUsIHdoaWNoIHN0b3JlcyB0aGUgZXJyb3IgY29kZSwgd2FzIGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgYGRhbW9uX3N0YXJ0YC4gSWYgYGRhbW9uX3N0YXJ0YCB3b3JrZWQsIGBlcnJgIHdhcyB6ZXJvLiBUaGVuLCB0aGVyZSB3YXMgYSBjb25kaXRpb25hbCBjaGVjayB3aXRoIGBkYW1vbl9jYWxsYCwgYW5kIGlmIHRoYXQgd2FzIHRydWUsIGByZXBlYXRfY2FsbF9jb250cm9sYCB3YXMgZnJlZWQuIENydWNpYWxseSwgdGhlIGZ1bmN0aW9uIHRoZW4gcmV0dXJuZWQgYGVycmAuIFRoaXMgc2VlbXMgd3JvbmcsIGJlY2F1c2UgYSBub24temVybyBlcnJvciBmcm9tIGBkYW1vbl9jYWxsYCB3YXMgYmVpbmcgZWZmZWN0aXZlbHkgbWFza2VkLCB0aGUgZnVuY3Rpb24gd2FzIHJldHVybmluZyAwIGV2ZW4gaWYgYGRhbW9uX2NhbGxgIGhhZCBhbiBpc3N1ZS5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgZmlyc3QgY2FsbGluZyBgZGFtb25fY2FsbGAgYW5kIGFzc2lnbmluZyBpdHMgcmV0dXJuIHZhbHVlIHRvIGBlcnJgLiBUaGVuLCBpdCBjaGVja3MgYGVycmAgYW5kIG9ubHkgZnJlZXMgYHJlcGVhdF9jYWxsX2NvbnRyb2xgIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gRmluYWxseSwgaXQgcmV0dXJucyBgZXJyYC4gVGhpcyBmaXhlcyB0aGUgb3JpZ2luYWwgcHJvYmxlbSwgbWFrZXMgaXQgc28gYSBmYWlsZWQgY2FsbCByZXR1cm5zIGFuIGVycm9yLlxuXG5UaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgZXhwb3NlIGEgbmV3IHZ1bG5lcmFiaWxpdHk/IFNwZWNpZmljYWxseSwgYXJlIHdlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHNlbmRpbmcgaXQgdG8gdXNlciBzcGFjZT8gSSBkb24ndCBzZWUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGVycmAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgKmJlZm9yZSogaXQncyBjaGVja2VkIG9yIHJldHVybmVkLCBzbyB0aGF0J3Mgc2FmZS4gTG9va2luZyBjbG9zZXIgYXQgYHJlcGVhdF9jYWxsX2NvbnRyb2xgIEkgc2VlIGl0J3MgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCwgYW5kIHRoYXQgaXRzIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoYXQgcHJvY2Vzcy5cblxuTm93IHRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBmaWVsZHMgaW4gYHJlcGVhdF9jYWxsX2NvbnRyb2xgPyBMZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5IGJ5IGxvb2tpbmcgYXQgdGhlIHN0cnVjdCBkZWZpbml0aW9uIG9mIGBkYW1vbl9jYWxsX2NvbnRyb2xgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6NTUuMzYyNDUwMjkxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgyODM4NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTY3Nj1zdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjkzLS8qXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY5NDogKiBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIC0gQ29udHJvbCBkYW1vbl9jYWxsKCkuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY5NS0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTcwNC0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NzA1OnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC03MDYtXFx0aW50ICgqZm4pKHZvaWQgKmRhdGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTg1Nz1zdHJ1Y3QgZGFtb25fY3R4IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04ODItXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjg4MzpcXHQvKiBsaXN0cyBvZiBcXHUwMDI2c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC04ODQtXFx0c3RydWN0IGxpc3RfaGVhZCBjYWxsX2NvbnRyb2xzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTc9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwOTgtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTk6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTEwMC1pbnQgZGFtb3Nfd2FsayhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vc193YWxrX2NvbnRyb2wgKmNvbnRyb2wpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwNDk9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDg1OmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzY2Mj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzY3MS0gKlxcbm1tL2RhbW9uL2NvcmUuYzozNjcyOiAqIElmIHRoZXJlIGFyZSBcXHUwMDI2c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXF1ZXN0cyB0aGF0IHJlZ2lzdGVyZWQgdmlhXFxubW0vZGFtb24vY29yZS5jLTM2NzMtICogXFx1MDAyNmRhbW9uX2NhbGwoKSBvbiBAY3R4LCBkbyBvciBjYW5jZWwgdGhlIGludm9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGRlcGVuZGluZ1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM2Nzc9c3RhdGljIHZvaWQga2RhbW9uZF9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjYW5jZWwpXFxubW0vZGFtb24vY29yZS5jLTM2Nzgte1xcbm1tL2RhbW9uL2NvcmUuYzozNjc5OlxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYy0zNjgwLVxcdExJU1RfSEVBRChjb250cm9scyk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM1MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTUtXFx0aW50IGVycjtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM1NjpcXHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNvbnRyb2wgPSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTctXFx0XFx0LmZuID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbixcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9Mzg4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZGFtb25fY2FsbF9mbih2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQwMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQwNDpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MDUtXFx0LmZuID0gZGFtb25fbHJ1X3NvcnRfZGFtb25fY2FsbF9mbixcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0yNzY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI4MC1cXHRpbnQgZXJyO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODE6XFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjb250cm9sID0ge1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODItXFx0XFx0LmZuID0gZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuLFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMxMz1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fZGFtb25fY2FsbF9mbih2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzI0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozMjU6c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMjYtXFx0LmZuID0gZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuLFxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0xOTQtXFxubW0vZGFtb24vc3RhdC5jOjE5NTpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XFxubW0vZGFtb24vc3RhdC5jLTE5Ni1cXHQuZm4gPSBkYW1vbl9zdGF0X2RhbW9uX2NhbGxfZm4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMjQ1LVxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG5tbS9kYW1vbi9zeXNmcy5jOjIyNDY6XFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqcmVwZWF0X2NhbGxfY29udHJvbDtcXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDctXFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjMwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzA0LXtcXG5tbS9kYW1vbi9zeXNmcy5jOjIzMDU6XFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7fTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIzMDYtXFx0aW50IGVycjtcXG4tLVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jPTM3PXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcXG4tLVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTU0LVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjU1OnN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIHJlcGVhdF9jYWxsX2NvbnRyb2wgPSB7XFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNTYtXFx0LmZuID0gZGFtb25fc2FtcGxlX3ByY2xfcmVwZWF0X2NhbGxfZm4sXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz0zOD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy01NS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYzo1NjpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXBlYXRfY2FsbF9jb250cm9sID0ge1xcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTU3LVxcdC5mbiA9IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MDo1Ny45NDUyOTYzNDJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAyMzMxMjEyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBDYWxsIENvbnRyb2wgU3RydWN0dXJlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGFyb3VuZCBsaW5lIDcwNS4gTXkgaW50ZW50aW9uIGlzIHRvIGZvY3VzIG9uIHRoYXQgYHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2xgIGRlZmluaXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgREFNT04gc3Vic3lzdGVtIG9yY2hlc3RyYXRlcyBpdHMgc2FtcGxpbmcgYW5kIG1vbml0b3JpbmcgY2FsbHMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNvbnRyb2wgZmxvdyBtZWNoYW5pc21zIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIG1hbmFnaW5nIHRob3NlIGNhbGxzIOKAkyBob3cgdGhlIG1vbml0b3JzIGFyZSBjb25maWd1cmVkLCBob3cgdGhlIGNhbGxiYWNrcyBhcmUgdHJpZ2dlcmVkLCBhbmQgaG93IHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBpcyBjb29yZGluYXRlZC4gR2V0dGluZyBhIHNvbGlkIGdyYXNwIG9uIHRoaXMgYGRhbW9uX2NhbGxfY29udHJvbGAgc3RydWN0dXJlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZpbmVyIHBvaW50cyBvZiBEQU1PTidzIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBpZiBJ4oCZbSB0cnlpbmcgdG8gb3B0aW1pemUgb3IgZGVidWcgYW55IERBTU9OLXJlbGF0ZWQgY29kZS4gVGhpcyB3aWxsIGNsYXJpZnkgaG93IHRoZSBzeXN0ZW0gcmVndWxhdGVzIHRoZSBhc3luY2hyb25vdXMgZXhlY3V0aW9uIG9mIHZhcmlvdXMgREFNT04gbW9uaXRvcmluZyBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6MDguMTc4NDIwNDEyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdCAqIEBkZWFsbG9jX29uX2NhbmNlbDpcXHRJZiBAcmVwZWF0IGlzIHRydWUsIGRlLWFsbG9jYXRlIHdoZW4gY2FuY2VsZWQuXFxuIDcwMTpcXHQgKlxcbiA3MDI6XFx0ICogQ29udHJvbCBkYW1vbl9jYWxsKCksIHdoaWNoIHJlcXVlc3RzIHNwZWNpZmljIGtkYW1vbmQgdG8gaW52b2tlIGEgZ2l2ZW5cXG4gNzAzOlxcdCAqIGZ1bmN0aW9uLiAgUmVmZXIgdG8gZGFtb25fY2FsbCgpIGZvciBtb3JlIGRldGFpbHMuXFxuIDcwNDpcXHQgKi9cXG4gNzA1OlxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wge1xcbiA3MDY6XFx0XFx0aW50ICgqZm4pKHZvaWQgKmRhdGEpO1xcbiA3MDc6XFx0XFx0dm9pZCAqZGF0YTtcXG4gNzA4OlxcdFxcdGJvb2wgcmVwZWF0O1xcbiA3MDk6XFx0XFx0aW50IHJldHVybl9jb2RlO1xcbiA3MTA6XFx0XFx0Ym9vbCBkZWFsbG9jX29uX2NhbmNlbDtcXG4gNzExOlxcdC8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovXFxuIDcxMjpcXHRcXHQvKiBpbmZvcm1zIGlmIHRoZSBrZGFtb25kIGZpbmlzaGVkIGhhbmRsaW5nIG9mIHRoZSByZXF1ZXN0ICovXFxuIDcxMzpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uO1xcbiA3MTQ6XFx0XFx0LyogaW5mb3JtcyBpZiB0aGUga2RhbW9uZCBjYW5jZWxlZCBAZm4gaW5mb2NhdGlvbiAqL1xcbiA3MTU6XFx0XFx0Ym9vbCBjYW5jZWxlZDtcXG4gNzE2OlxcdFxcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIDcxNzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIDcxODpcXHR9O1xcbiA3MTk6XFx0XFxuIDcyMDpcXHQvKipcXG4gNzIxOlxcdCAqIHN0cnVjdCBkYW1vbl9pbnRlcnZhbHNfZ29hbCAtIE1vbml0b3JpbmcgaW50ZXJ2YWxzIGF1dG8tdHVuaW5nIGdvYWwuXFxuIDcyMjpcXHQgKlxcbiA3MjM6XFx0ICogQGFjY2Vzc19icDpcXHRcXHRBY2Nlc3MgZXZlbnRzIG9ic2VydmF0aW9uIHJhdGlvIHRvIGFjaGlldmUgaW4gYnAuXFxuIDcyNDpcXHQgKiBAYWdncnM6XFx0XFx0TnVtYmVyIG9mIGFnZ3JlZ2F0aW9ucyB0byBhY2hpZXZlIEBhY2Nlc3NfYnAgd2l0aGluLlxcbiA3MjU6XFx0ICogQG1pbl9zYW1wbGVfdXM6XFx0TWluaW11bSByZXN1bHRpbmcgc2FtcGxpbmcgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzLlxcbiA3MjY6XFx0ICogQG1heF9zYW1wbGVfdXM6XFx0TWF4aW11bSByZXN1bHRpbmcgc2FtcGxpbmcgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzLlxcbiA3Mjc6XFx0ICpcXG4gNzI4OlxcdCAqIERBTU9OIGF1dG9tYXRpY2FsbHkgdHVuZXMgXFx1MDAyNmRhbW9uX2F0dHJzLVxcdTAwM2VzYW1wbGVfaW50ZXJ2YWwgYW5kXFxuIDcyOTpcXHQgKiBcXHUwMDI2ZGFtb25fYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgYWltaW5nIHRoZSByYXRpbyBpbiBicCAoMS8xMCwwMDApIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjA4LjE3ODYzODE4MloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTMwNzEzNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIENvcmUqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBiZWVuIGV4YW1pbmluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyBvZiBEQU1PTiwgYW5kIEkgdGhpbmsgaXQncyB0aW1lIHRvIGRpZyBpbnRvIGEgc3BlY2lmaWMgYXJlYS4gSSBuZWVkIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGFsbCAqcmVhbGx5KiB3b3JrcyB1bmRlciB0aGUgaG9vZC4gVGhlcmVmb3JlLCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGBkYW1vbl9jYWxsYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUsIHNvIHRoYXTigJlzIHdoZXJlIEknbGwgc3RhcnQuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIEknbSBiZXR0aW5nIGl0IGdpdmVzIHVzIGEgZ29vZCBncmFzcCBvbiB0aGUgb3ZlcmFsbCBmbG93LCBzcGVjaWZpY2FsbHkgaG93IERBTU9OIGlzICpjYWxsZWQqIGludG8gYWN0aW9uLiBJIHdhbnQgdG8gdW5yYXZlbCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIG1lbW9yeSBtb25pdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24uIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIGluc2lnaHRzIGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjEwLjMwOTM2MTU4NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTc3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwODA6XFx0ICpcXG4yMDgxOlxcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cXG4yMDgyOlxcdCAqXFxuMjA4MzpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuMjA4NDpcXHQgKi9cXG4yMDg1OlxcdGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG4yMDg2OlxcdHtcXG4yMDg3OlxcdFxcdGlmICghY29udHJvbC1cXHUwMDNlcmVwZWF0KVxcbjIwODg6XFx0XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjb250cm9sLVxcdTAwM2Vjb21wbGV0aW9uKTtcXG4yMDg5OlxcdFxcdGNvbnRyb2wtXFx1MDAzZWNhbmNlbGVkID0gZmFsc2U7XFxuMjA5MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29udHJvbC1cXHUwMDNlbGlzdCk7XFxuMjA5MTpcXHRcXG4yMDkyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG4yMDkzOlxcdFxcdGlmIChjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfb2Jzb2xldGUpIHtcXG4yMDk0OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbjIwOTU6XFx0XFx0XFx0Z290byBjYW5jZWxlZDtcXG4yMDk2OlxcdFxcdH1cXG4yMDk3OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNvbnRyb2wtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHMpO1xcbjIwOTg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XFxuMjA5OTpcXHRcXHRpZiAoY29udHJvbC1cXHUwMDNlcmVwZWF0KVxcbjIxMDA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjEwMTpcXHRcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZjb250cm9sLVxcdTAwM2Vjb21wbGV0aW9uKTtcXG4yMTAyOlxcdFxcdGlmIChjb250cm9sLVxcdTAwM2VjYW5jZWxlZClcXG4yMTAzOlxcdFxcdFxcdGdvdG8gY2FuY2VsZWQ7XFxuMjEwNDpcXHRcXHRyZXR1cm4gMDtcXG4yMTA1OlxcdFxcbjIxMDY6XFx0Y2FuY2VsZWQ6XFxuMjEwNzpcXHRcXHR3aGlsZSAoZGFtb25faXNfcnVubmluZyhjdHgpKVxcbjIxMDg6XFx0XFx0XFx0c2NoZWR1bGVfdGltZW91dF9pZGxlKG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuMjEwOTpcXHRcXHRyZXR1cm4gLUVDQU5DRUxFRDtcXG4yMTEwOlxcdFxcbjIxMTE6XFx0fVxcbjIxMTI6XFx0XFxuMjExMzpcXHQvKipcXG4yMTE0OlxcdCAqIGRhbW9zX3dhbGsoKSAtIEludm9rZSBhIGdpdmVuIGZ1bmN0aW9ucyB3aGlsZSBEQU1PUyB3YWxrIHJlZ2lvbnMuXFxuMjExNTpcXHQgKiBAY3R4OlxcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGZvci5cXG4yMTE2OlxcdCAqIEBjb250cm9sOlxcdENvbnRyb2wgdmFyaWFibGUgb2YgdGhlIHdhbGsgcmVxdWVzdC5cXG4yMTE3OlxcdCAqXFxuMjExODpcXHQgKiBBc2sgREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkgb2YgQGN0eCB0byBjYWxsIGEgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaW9uXFxuMjExOTpcXHQgKiB0aGF0IHRoZSBrZGFtb25kIHdpbGwgYXBwbHkgREFNT1MgYWN0aW9uIHRvLCBhbmQgd2FpdCB1bnRpbCB0aGUga2RhbW9uZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MToxMC4zMDk3MjI5OTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjczNDQ0NTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEtNU0FOIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBqdXN0IGNhcHR1cmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jYWxsYCBpbnRvIGBlcnJgIGluIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gRXNzZW50aWFsbHksIGl0J3MgbWFraW5nIHN1cmUgdGhhdCBpZiBgZGFtb25fY2FsbGAgc2lnbmFscyBhbiBlcnJvciwgdGhhdCBlcnJvciBpcyBub3cgY29ycmVjdGx5IHByb3BhZ2F0ZWQgYmFjayB1cCB0aGUgY2FsbCBzdGFjaywgaW5zdGVhZCBvZiBnZXR0aW5nIG1hc2tlZCBieSBhIHJldHVybiBvZiAwLiBCZWZvcmUgdGhlIHBhdGNoLCBhIGZhaWx1cmUgd2FzIGVmZmVjdGl2ZWx5IHRyZWF0ZWQgYXMgYSBzdWNjZXNzOyBub3csIHRoZSBlcnJvciBpcyBoYW5kbGVkIGFzIGl0IHNob3VsZCBiZS5cblxuTm93LCBkb2VzIHRoaXMgaGF2ZSBhbnl0aGluZyBhdCBhbGwgdG8gZG8gd2l0aCBLTVNBTj8gQWJzb2x1dGVseSBub3QuIE15IGNoZWNrbGlzdCBmb3IgS01TQU4gY29uY2VybnM6XG4qICAgRG9lcyBpdCAqcmVhZCogdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLlxuKiAgIERvZXMgaXQgKnBhc3MqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZT8gTm8uXG4qICAgRG9lcyBpdCBsZWF2ZSBhbnkgbWVtb3J5IGZpZWxkIHVuaW5pdGlhbGl6ZWQ/IE5vLlxuKiAgIERvZXMgaXQgYWZmZWN0IG1lbW9yeSBib3VuZHMgb3IgbGVuZ3RocyBpbiBhbnkgd2F5PyBOby5cbiogICBDb3VsZCBpdCBjb25jZWl2YWJseSBpbnRyb2R1Y2UgYW55IEtNU0FOLWRldGVjdGFibGUgYnVncyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uXG5cblRoaXMgcGF0Y2ggaXMgcHVyZWx5IGFib3V0IGVycm9yIGhhbmRsaW5nLiBJdCdzIGFib3V0IGVuc3VyaW5nIHRoZSAqY29ycmVjdCogZXJyb3IgY29kZSBpcyByZXR1cm5lZCwgYW5kIGl0IGNsZWFucyB1cCBhIHBvaW50ZXIgb24gZXJyb3IuIEl0J3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgbWVtb3J5IGFjY2Vzc2VzLCBkYXRhIGNvcHlpbmcsIG9yIGluaXRpYWxpemF0aW9uIHByb2JsZW1zLiBJdCBzaW1wbHkgaW1wcm92ZXMgdGhlIGVycm9yIHByb3BhZ2F0aW9uIGxvZ2ljLiBXZSBhcmUgbm90IHRvdWNoaW5nIG9yIG1vZGlmeWluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kLCBhcyBzdWNoLCB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IEtNU0FOIGNvbmNlcm5zLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCB0ZXN0IHN1aXRlcyB3aWxsIGJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY2hhbmdlLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBoZXJlLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDEsIk91dHB1dFRva2VucyI6MTQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6MTcuMDQ0MTc3Nzk4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgc3RvcmluZyB0aGUgcmV0dXJuIGNvZGUgb2YgZGFtb25fY2FsbCgpIGluIHRoZSBleGlzdGluZyBsb2NhbCB2YXJpYWJsZSAnZXJyJyBhbmQgcHJvcGFnYXRpbmcgaXQgdG8gdGhlIGNhbGxlciwgcmF0aGVyIHRoYW4gZGlzY2FyZGluZyBpdCBhbmQgcmV0dXJuaW5nIDAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZGFyaWVzIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpIGJ5IHN0b3JpbmcgdGhlIHJldHVybiBjb2RlIG9mIGRhbW9uX2NhbGwoKSBpbiB0aGUgZXhpc3RpbmcgbG9jYWwgdmFyaWFibGUgJ2VycicgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIHRoZSBjYWxsZXIsIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcgaXQgYW5kIHJldHVybmluZyAwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRhcmllcyBvciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 11:27:00 +0000 UTC FinishedAt: 2026-09-15 11:51:18 +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": "9bbf9ab98625157430e1dde8fcada034668de7b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS" ], "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": "9bbf9ab98625157430e1dde8fcada034668de7b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS" ], "series_id": "76a5be07-5582-40b2-baff-1050c2d183be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_sysfs_turn_damon_on", "damon_sysfs_handle_cmd", "damon_call" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "9bbf9ab98625157430e1dde8fcada034668de7b5", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbiYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19oYW5kbGVfY21kJiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgc3RvcmluZyB0aGUgcmV0dXJuIGNvZGUgb2YgZGFtb25fY2FsbCgpIGluIHRoZSBleGlzdGluZyBsb2NhbCB2YXJpYWJsZSAmIzM5O2VyciYjMzk7IGFuZCBwcm9wYWdhdGluZyBpdCB0byB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGFuZCByZXR1cm5pbmcgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZGFyaWVzIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIHByb3BhZ2F0aW9uIGluIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKSBieSBwcm9wZXJseSByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUgZnJvbSBkYW1vbl9jYWxsKCkgaW5zdGVhZCBvZiBpZ25vcmluZyBpdCBhbmQgcmV0dXJuaW5nIHN1Y2Nlc3MuIFRoaXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSAoL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjaWRcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWIyYzI4NTJjZWE5OTZhZmIyZjQyNTMwMjNkY2I0NjRmN2I5MGJjNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjQ3OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5iZWI0YmRjNzQ0NjAxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIyODAsNyAmIzQzOzIyODAsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRhdGEgPSBrZGFtb25kO1xuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VyZXBlYXQgPSB0cnVlO1xuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XG4tXHRpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKVxuJiM0MztcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcbiYjNDM7XHRpZiAoZXJyKVxuIFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbiYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19oYW5kbGVfY21kJiMzNDssCiAgICAmIzM0O2RhbW9uX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgcHJvcGFnYXRpb24gaW4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpIGJ5IHByb3Blcmx5IHJldHVybmluZyB0aGUgZXJyb3IgY29kZSBmcm9tIGRhbW9uX2NhbGwoKSBpbnN0ZWFkIG9mIGlnbm9yaW5nIGl0IGFuZCByZXR1cm5pbmcgc3VjY2Vzcy4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlICgvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NpZFx1MDAzZS9zdGF0ZSkgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjJjMjg1MmNlYTk5NmFmYjJmNDI1MzAyM2RjYjQ2NGY3YjkwYmM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTE6NDc6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCBlMzg1OGZmYWI0YjIyLi5iZWI0YmRjNzQ0NjAxIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTIyODAsNyAmIzQzOzIyODAsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpCiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7ZGF0YSA9IGtkYW1vbmQ7CiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7cmVwZWF0ID0gdHJ1ZTsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7Ci0JaWYgKGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKSkKJiM0MzsJZXJyID0gZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpOwomIzQzOwlpZiAoZXJyKQogCQlrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTsKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gU3lzZnMgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBzeXNmcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjI4MCBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEl0IHNlZW1zIGxpa2UgSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHR1cm5pbmcgREFNT04gb24sIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gSSYjMzk7bSBzZWVpbmcgYSBjaGFuZ2UgaGVyZSwgYSBzZWVtaW5nbHkgbWlub3IgdHdlYWssIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKUHJldmlvdXNseSwgdGhlcmUgd2FzIG5vIGVycm9yIGNoZWNraW5nIGFmdGVyIGNhbGxpbmcgYGRhbW9uX2NhbGxgIHdpdGggYSBgcmVwZWF0X2NhbGxfY29udHJvbGAgc3RydWN0dXJlLiBOb3csIHRoZXkmIzM5O3ZlIGFkZGVkIGFuIGBlcnJgIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRhbW9uX2NhbGxgLiBUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoZSBjb25kaXRpb25hbCBjaGVjayBgaWYgKGVycikga2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7YCB0byBmcmVlIHRoZSBgcmVwZWF0X2NhbGxfY29udHJvbGAgaWYgdGhlIGBkYW1vbl9jYWxsYCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGlmIGBkYW1vbl9jYWxsYCBmYWlscyB0byBleGVjdXRlIGNvcnJlY3RseS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0byBwcmV2ZW50IGlzc3VlcyB3aGVuIHRoZSBzeXN0ZW0gaXMgdW5kZXIgaGVhdnkgbG9hZCBvciBlbmNvdW50ZXJzIHVuZXhwZWN0ZWQgY29uZGl0aW9ucy4KCkl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IGl0JiMzOTtzIGEgZ29vZCBleGFtcGxlIG9mIGhvdyBldmVuIHNtYWxsIGNoYW5nZXMgY2FuIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBvZiB0aGUgc3lzdGVtLiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgYSBzaW1pbGFyIHBhdHRlcm4gdG8gYmUgaW1wbGVtZW50ZWQgYWNyb3NzIHRoZSBjb2RlLCB0byBlbnN1cmUgdGhhdCBhbGwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIGhhdmUgdGhlaXIgcmV0dXJuIHZhbHVlcyBjaGVja2VkIGFuZCBwcm9wZXJseSBoYW5kbGVkLiBJIHNob3VsZCBjaGVjayBpZiB0aGF0IGlzIHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI1MDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjI1MTpcdFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xuMjI1MjpcdFx0aWYgKGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyNTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjU0Olx0XG4yMjU1Olx0XHRpZiAoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjU2Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KTtcbjIyNTc6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gTlVMTDtcbjIyNTg6XHRcbjIyNTk6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjYwOlx0XHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXG4yMjYxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjI2MjpcdFxuMjI2MzpcdFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbjIyNjQ6XHRcdGlmIChJU19FUlIoY3R4KSkge1xuMjI2NTpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNjY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcbjIyNjc6XHRcdH1cbjIyNjg6XHRcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xuMjI2OTpcdFx0aWYgKGVycikge1xuMjI3MDpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNzE6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjIyNzI6XHRcdFx0cmV0dXJuIGVycjtcbjIyNzM6XHRcdH1cbjIyNzQ6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuMjI3NTpcdFxuMjI3NjpcdFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4yMjc3Olx0XHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuMjI3ODpcdFxuMjI3OTpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuMjI4MDpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbjIyODE6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcbjIyODI6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuMjI4MzpcdFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuMjI4NDpcdFx0aWYgKGVycilcbjIyODU6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjg2Olx0XHRyZXR1cm4gZXJyO1xuMjI4NzpcdH1cbjIyODg6XHRcbjIyODk6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI5MDpcdHtcbjIyOTE6XHRcdGlmICgha2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjkyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjI5MzpcdFx0ZGFtb25fc3RvcChcdTAwMjZrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgMSk7XG4yMjk0Olx0XHQvKlxuMjI5NTpcdFx0ICogVG8gYWxsb3cgdXNlcnMgc2hvdyBmaW5hbCBtb25pdG9yaW5nIHJlc3VsdHMgb2YgYWxyZWFkeSB0dXJuZWQtb2ZmXG4yMjk2Olx0XHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XG4yMjk3Olx0XHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcbjIyOTg6XHRcdCAqL1xuMjI5OTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB0aGlzIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYmxvY2suIEkga25vdyBpdCYjMzk7cyBhIGJpdCBmdXJ0aGVyIGRvd24sIHNvIGxldCBtZSBwdWxsIHVwIHRoZSBzZWN0aW9uIGZyb20gbGluZXMgMjI0MCB0byAyMjYwLiBIb2xkIG9uLi4uIGFjdHVhbGx5LCB0byBnZXQgdGhlIGZ1bGwgY29udGV4dCwgaXQmIzM5O3MgYmVzdCB0byBleHBhbmQgdGhlIHZpZXcgYSBiaXQuIExldCYjMzk7cyBzbmFnIGxpbmVzIDIyMzUgdGhyb3VnaCAyMjU1IGluc3RlYWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kLCBjb25jaXNlIG92ZXJ2aWV3IG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGltbWVkaWF0ZSBzY29wZSwgZW5zdXJpbmcgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIzNTpcdFx0ZGFtb25fc3lzZnNfdXBkX3R1bmVkX2ludGVydmFscyhzeXNmc19rZGFtb25kKTtcbjIyMzY6XHRcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHN5c2ZzX2tkYW1vbmQpO1xuMjIzNzpcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyhzeXNmc19rZGFtb25kKTtcbjIyMzg6XHRvdXQ6XG4yMjM5Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XG4yMjQwOlx0XHRyZXR1cm4gMDtcbjIyNDE6XHR9XG4yMjQyOlx0XG4yMjQzOlx0c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI0NDpcdHtcbjIyNDU6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjIyNDY6XHRcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XG4yMjQ3Olx0XHRpbnQgZXJyO1xuMjI0ODpcdFxuMjI0OTpcdFx0aWYgKGRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcbjIyNTA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjIyNTE6XHRcdC8qIFRPRE86IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dHMgcGVyIGtkYW1vbmQgKi9cbjIyNTI6XHRcdGlmIChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZW5yICE9IDEpXG4yMjUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjI1NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBTeXN0ZW0gQ2FsbCBGbG93KioKCk9rYXksIGxldCBtZSBicmVhayBkb3duIHdoYXQgSSYjMzk7bSBzZWVpbmcgaGVyZS4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBJJiMzOTt2ZSBnb3QgdG8gc2F5LCBJJiMzOTttIGEgYml0IGNvbmNlcm5lZCBhYm91dCBob3cgZXJyb3IgaGFuZGxpbmcgd2FzIGJlaW5nIGhhbmRsZWQgcHJldmlvdXNseS4gQmVmb3JlIHRoaXMgY29tbWl0LCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9zdGFydGAgd2FzIGNvcnJlY3RseSBjaGVja2VkLCBidXQgZXZlbiBpZiBgZGFtb25fY2FsbGAgZmFpbGVkLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB3aG9sZSBmdW5jdGlvbiB3YXMgYWx3YXlzIDAhIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBvdmVyc2lnaHQsIHNpbmNlIGBlcnJgIHdvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIHJlc3VsdCBvZiBgZGFtb25fc3RhcnRgLCBidXQgYGRhbW9uX2NhbGwoKWAgY291bGQgZmFpbCBzaWxlbnRseS4gTm93LCBpdCBsb29rcyBsaWtlIHRoYXQmIzM5O3MgZml4ZWQsIGFuZCBgZXJyYCBpcyBwcm9wZXJseSBzZXQgdG8gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGBkYW1vbl9jYWxsKClgLCBzbyB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3QuCgpCdXQgdGhhdCBtYWtlcyBtZSB0aGluay4uLiB3aGF0IGhhcHBlbnMgaWYgYGRhbW9uX2NhbGxgICpkb2VzKiBmYWlsPyBMb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhZnRlciBjYWxsaW5nIGBkYW1vbl9zdGFydGAgYW5kIHNldHRpbmcgdXAgYGtkYW1vbmQtJmd0O2RhbW9uX2N0eGAsIGBkYW1vbl9jYWxsYCBpcyBjYWxsZWQsIGFuZCBpZiBpdCBmYWlscywgdGhlbiB0aGUgY3VycmVudCBgZXJyYCBpcyByZXR1cm5lZCwgYnV0IHRoZSBEQU1PTiBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlcmUmIzM5O3Mgbm8gY2FsbCB0byBgZGFtb25fc3RvcGAgaW4gdGhlIGZhaWx1cmUgcGF0aC4gVGhpcyBtZWFucyBhIHN1YnNlcXVlbnQgYXR0ZW1wdCB0byBzdG9wIERBTU9OIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIG1pZ2h0IGZhaWwgYmVjYXVzZSB0aGUgY29udGV4dCBpcyBhbHJlYWR5IHJ1bm5pbmcuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzOyBpdCBmZWVscyBsaWtlIGEgcG90ZW50aWFsIGJ1ZyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEgYmVoYXZpb3JhbCBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLiBJdCBjb3VsZCBiZSB0aGF0IERBTU9OIGVuZHMgdXAgcGFydGlhbGx5IGluaXRpYWxpemVkIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KCkkgc2hvdWxkIGFsc28gY2hlY2sgd2hlcmUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGlzIGNhbGxlZCBmcm9tLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgaGVscCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgdGhpcyBpcyBnb2luZyB0byBjYXVzZSBzb21lIG90aGVyIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMjIwPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDItXG5tbS9kYW1vbi9zeXNmcy5jOjIyNDM6c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxubW0vZGFtb24vc3lzZnMuYy0yMjQ0LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyODk9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTYtXHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XG5tbS9kYW1vbi9zeXNmcy5jOjIyOTc6XHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcbm1tL2RhbW9uL3N5c2ZzLmMtMjI5OC1cdCAqL1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjM2NT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Mi1cdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxubW0vZGFtb24vc3lzZnMuYzoyMzczOlx0XHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihrZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3NC1cdGNhc2UgREFNT05fU1lTRlNfQ01EX09GRjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIFN5c2ZzIENvbW1hbmQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZSBgZGFtb25fc3lzZnNfaGFuZGxlX2NtZGAgZnVuY3Rpb24gbWFuYWdlcyB0aGUgYERBTU9OX1NZU0ZTX0NNRF9PTmAgY29tbWFuZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGl0cyBpbnZvY2F0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgbGluZXMgMjM2MCB0aHJvdWdoIDI0MjAgd2l0aGluIGBtbS9kYW1vbi9zeXNmcy5jYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIHNlZWsuIFRoaXMgc2VjdGlvbiBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb21tYW5kIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuIFRoaXMgc2hvdWxkIHNob3cgbWUgdGhlIHJlbGV2YW50IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzYwOlx0ICpcbjIzNjE6XHQgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYSBEQU1PTiBzeXNmcyBjb21tYW5kIGZvciBhIGtkYW1vbmQuXG4yMzYyOlx0ICpcbjIzNjM6XHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4yMzY0Olx0ICovXG4yMzY1Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcbjIzNjY6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4yMzY3Olx0e1xuMjM2ODpcdFx0aWYgKGNtZCAhPSBEQU1PTl9TWVNGU19DTURfT0ZGIFx1MDAyNlx1MDAyNiBrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZW5yICE9IDEpXG4yMzY5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjM3MDpcdFxuMjM3MTpcdFx0c3dpdGNoIChjbWQpIHtcbjIzNzI6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxuMjM3MzpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihrZGFtb25kKTtcbjIzNzQ6XHRcdGNhc2UgREFNT05fU1lTRlNfQ01EX09GRjpcbjIzNzU6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKGtkYW1vbmQpO1xuMjM3NjpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUOlxuMjM3NzpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbjIzNzg6XHRcdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG4yMzc5Olx0XHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbjIzODA6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzgxOlx0XHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2FscyxcbjIzODI6XHRcdFx0XHRcdGtkYW1vbmQpO1xuMjM4MzpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfU1RBVFM6XG4yMzg0Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxuMjM4NTpcdFx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfc3RhdHMsIGtkYW1vbmQpO1xuMjM4NjpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfVFJJRURfQllURVM6XG4yMzg3Olx0XHRcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIHRydWUpO1xuMjM4ODpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcbjIzODk6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMoa2RhbW9uZCwgZmFsc2UpO1xuMjM5MDpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ0xFQVJfU0NIRU1FU19UUklFRF9SRUdJT05TOlxuMjM5MTpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxuMjM5MjpcdFx0XHRcdGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdLVx1MDAzZXNjaGVtZXMpO1xuMjM5MzpcdFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfRUZGRUNUSVZFX1FVT1RBUzpcbjIzOTQ6XHRcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG4yMzk1Olx0XHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzLFxuMjM5NjpcdFx0XHRcdFx0a2RhbW9uZCk7XG4yMzk3Olx0XHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfVFVORURfSU5URVJWQUxTOlxuMjM5ODpcdFx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbjIzOTk6XHRcdFx0XHRcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xuMjQwMDpcdFx0ZGVmYXVsdDpcbjI0MDE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNDAyOlx0XHR9XG4yNDAzOlx0fVxuMjQwNDpcdFxuMjQwNTpcdHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4yNDA2Olx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMjQwNzpcdHtcbjI0MDg6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gY29udGFpbmVyX29mKGtvYmosXG4yNDA5Olx0XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xuMjQxMDpcdFx0ZW51bSBkYW1vbl9zeXNmc19jbWQgY21kO1xuMjQxMTpcdFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuMjQxMjpcdFxuMjQxMzpcdFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuMjQxNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjQxNTpcdFx0Zm9yIChjbWQgPSAwOyBjbWQgXHUwMDNjIE5SX0RBTU9OX1NZU0ZTX0NNRFM7IGNtZCYjNDM7JiM0MzspIHtcbjI0MTY6XHRcdFx0aWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgZGFtb25fc3lzZnNfY21kX3N0cnNbY21kXSkpIHtcbjI0MTc6XHRcdFx0XHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XG4yNDE4Olx0XHRcdFx0YnJlYWs7XG4yNDE5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBTdGF0ZSBDb250cm9sOiBBIFF1aWNrIE1lbnRhbCBBdWRpdCoqCgpPa2F5LCBzbyBgc3RhdGVfc3RvcmVgIOKAkyB0aGF0JiMzOTtzIHRoZSBoYW5kbGVyIGZvciB3cml0aW5nIHRvIHRoZSBzeXNmcyBhdHRyaWJ1dGUhIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYG9uYCBjb21tYW5kIGFuZCBob3cgaXQgbGFuZHMgaW4gYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLyZsdDtpZCZndDsvc3RhdGVgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHdheSB0byBpbnRlcmZhY2Ugd2l0aCBrZXJuZWwgaW50ZXJuYWxzIGZyb20gdXNlcnNwYWNlLCBhbmQgaW4gdGhpcyBjYXNlLCBpdCYjMzk7cyBtYW5hZ2luZyB0aGUgREFNT04gZnJhbWV3b3JrLgoKUmlnaHQsIERBTU9OIOKAkyBEYXRhIEFjY2VzcyBNb25pdG9yaW5nLiBUaGF0JiMzOTtzIHdpdGhpbiB0aGUgTGludXgga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24gKGBtbS9kYW1vbmApLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhpcyBpcyBhIGZlYXR1cmUgSSBjYW4gcmVsaWFibHkgdGVzdCBpbiBteSB1c3VhbCBRRU1VIHNldHVwcyBvciBvdGhlciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFoLCB5ZXMhIFRoZSBwcmVzZW5jZSBvZiB0aGF0IHN5c2ZzIGZpbGUgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzLy4uLmAgY29uZmlybXMgaXQuIEV4Y2VsbGVudCEKCk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwbHksIGxldCYjMzk7cyBqdXN0IG1ha2UgYSBtZW50YWwgbm90ZSB0byBxdWlja2x5IGdsYW5jZSBhdCB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIERBTU9OIGFuZCBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9zeXNmcy5jYCBmaWxlIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0ZXJtcyBvZiBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24vc3lzZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gREFNT04mIzM5O3MgTWFrZWZpbGUgYW5kIEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBidWlsZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpbXBsZW1lbnRhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBvcGVuIHVwIGBtbS9kYW1vbi9NYWtlZmlsZWAgYW5kIGBtbS9kYW1vbi9LY29uZmlnYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYnVpbGQgcnVsZXMgYW5kIGxpa2VseSB0aGUgbW9kdWxlIGRlZmluaXRpb25zIGluIHRoZSBNYWtlZmlsZS4gRnJvbSBhIEtjb25maWcgcGVyc3BlY3RpdmUsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gREFNT04mIzM5O3MgZmVhdHVyZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBydW50aW1lIGJlaGF2aW9ycyB0aGF0IGFyZSBjb250cm9sbGVkIHRocm91Z2gga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1aWxkIHN5c3RlbSBpbnRlZ3JhdGVzIERBTU9OIGFuZCB0byBzZWUgdGhlIG1vZHVsYXJpdHkgb2YgdGhlIGRlc2lnbiwgd2hpY2ggbWlnaHQgcmV2ZWFsIGFzcGVjdHMgcmVsYXRlZCB0byBpdHMgc2NhbGFiaWxpdHkgYW5kIGNvbmZpZ3VyYWJpbGl0eS4gQW5hbHl6aW5nIHRoZSBNYWtlZmlsZSB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIGJ1aWxkIHByb2Nlc3MsIHdoaWxlIEtjb25maWcgd2lsbCBpbGx1bWluYXRlIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBjaG9pY2VzLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBEQU1PTiBpcyBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXlcdFx0XHRcdDo9IGNvcmUub1xuICAgNDpcdG9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuICAgNTpcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xuICAgNjpcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcdCYjNDM7PSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xuICAgNzpcdG9iai0kKENPTkZJR19EQU1PTl9SRUNMQUlNKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gcmVjbGFpbS5vXG4gICA4Olx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xuICAgOTpcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVx0JiM0Mzs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhpcyBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2Ygd2hhdCYjMzk7cyAqY29uZmlndXJhYmxlKiB3aXRoaW4gREFNT04uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBlbmFibGluZy9kaXNhYmxpbmcgREFNT04gaXRzZWxmLCBpdHMgdmFyaW91cyBzYW1wbGluZyBhbmQgbW9uaXRvcmluZyB0ZWNobmlxdWVzIChsaWtlIHRoZSByZWdpb24gbW9uaXRvcmluZywgYWNjZXNzIHBhdHRlcm4gYW5hbHlzaXMpLCBhbmQgcHJvYmFibHkgcmVsYXRlZCB0dW5pbmcgcGFyYW1ldGVycy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gbWFwIG91dCB0aGUgY29udHJvbGxhYmxlIGxldmVycyBhbmQgc2VlIGhvdyB0aGV5IGltcGFjdCBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZmVhdHVyZXMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBjb25mbGljdHMgb3Igb3Bwb3J0dW5pdGllcyBmb3Igc3luZXJnaXN0aWMgY29uZmlndXJhdGlvbi4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGVzdGFibGlzaCB0aGUgY29uZmlndXJhYmlsaXR5IGxhbmRzY2FwZSBiZWZvcmUgZG9pbmcgYW55IGRlZXBlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgREFNT04mIzM5O3MgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYERBTU9OX1NZU0ZTYC4gUmlnaHQsIHNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEkga25vdyBgREFNT05gIGxpdmVzIGluIGBtbS9kYW1vbi9LY29uZmlnYCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgaWYgYERBTU9OYCBpdHNlbGYgaXMgZXZlbiBzb3VyY2VkIGZyb20gdGhlIG1haW4gYG1tL0tjb25maWdgLiBJdOKAmXMganVzdCBnb29kIHByYWN0aWNlIHRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LiBMZXQmIzM5O3MgZ28gdGFrZSBhIGxvb2sgYXQgdGhlIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipUcmFjaW5nIHRoZSBTb3VyY2Ugb2YgYG1tL2RhbW9uL0tjb25maWdgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBtbS9kYW1vbi9LY29uZmlnYCBpcyBhY3R1YWxseSBzb3VyY2VkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gIEl0JiMzOTtzIGEgYEtjb25maWdgIGZpbGUsIHNvIGl0JiMzOTtzIGNsZWFybHkgaW52b2x2ZWQgaW4gY29uZmlndXJpbmcgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yaW5nKSBtb2R1bGUsIHdoaWNoIGlzIGEga2VybmVsIGZlYXR1cmUgSSYjMzk7bSBmYW1pbGlhciB3aXRoLiAgVGhlIHF1ZXN0aW9uIGlzICpob3cqIHRoZSBidWlsZCBzeXN0ZW0ga25vd3MgYWJvdXQgaXQuCgpNeSBpbml0aWFsIGxpbmUgb2YgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgdHlwaWNhbCBgS2NvbmZpZ2AgaW5jbHVzaW9uIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIGNvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGEgYHNvdXJjZSAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0O2Agc3RhdGVtZW50IChvciBzb21ldGhpbmcgc2ltaWxhcikgaW4gb3RoZXIgYEtjb25maWdgIGZpbGVzIGhpZ2hlciB1cCB0aGUgdHJlZS4gIFBlcmhhcHMgaW4gdGhlIG1haW4gYEtjb25maWdgIG9yIHdpdGhpbiB0aGUgYG1tYCBkaXJlY3RvcnkmIzM5O3MgYEtjb25maWdgIGZpbGUsIG9yIHBvdGVudGlhbGx5IHRocm91Z2ggYSBzZXJpZXMgb2YgJiMzNDtpZiYjMzQ7IHN0YXRlbWVudHMgdGhhdCBjb25kaXRpb25hbGx5IGluY2x1ZGUgaXQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3MuIEkgbWlnaHQgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHNvbWUgbWFjcm8tbGlrZSBkaXJlY3RpdmVzIGlmIHRoZXJlIGFyZSBhbnkgd2l0aGluIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKVGhlbiBJIGNvdWxkIHVzZSBgbWFrZSBtZW51Y29uZmlnYCAob3Igd2hpY2hldmVyIGNvbmZpZ3VyYXRpb24gdG9vbCBpcyByZWxldmFudCkgYW5kLCBpZiBwb3NzaWJsZSwgbG9vayBmb3IgdGhlIG9wdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0gdG8gc2VlIGhvdyB0aGV5IGxpbmsgdG8gdGhpcyBmaWxlLiBJIGhhdmUgc29tZSB0b29scyB0byBoZWxwIG1lIHdpdGggdGhpcy4gSSBjYW4gYWxzbyB0cnkgYSBgZ3JlcGAgc2VhcmNoIGZvciB0aGUgZmlsZSBuYW1lIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBsb29raW5nIGZvciBsaWtlbHkgaW5jbHVzaW9uIHBvaW50cy4gSWYgdGhlIERBTU9OIGZlYXR1cmUgaXRzZWxmIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHRoZXJlIHdvdWxkIGJlIHNvbWUgbW9yZSB3b3JrIHRvIGRvLCBidXQgdGhhdCBpcyBteSBnZW5lcmFsIGFwcHJvYWNoLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBkaXJlY3QgcGF0aCBmcm9tIGEgdG9wLWxldmVsIGBLY29uZmlnYCBmaWxlIG9yIGFub3RoZXIgcmVsZXZhbnQgYEtjb25maWdgIGZpbGUgdG8gYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIHNob3VsZCBsZWFkIG1lIHRvIHRoZSBlbnRyeSBwb2ludHMgd2hlcmUgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0ODU9Y29uZmlnIExBWllfTU1VX01PREVfS1VOSVRfVEVTVFxuLS1cbm1tL0tjb25maWctMTQ5Ni1cbm1tL0tjb25maWc6MTQ5Nzpzb3VyY2UgXCYjMzQ7bW0vZGFtb24vS2NvbmZpZ1wmIzM0O1xubW0vS2NvbmZpZy0xNDk4LVxuLS1cbnNhbXBsZXMvS2NvbmZpZz0zMjU9c291cmNlIFwmIzM0O3NhbXBsZXMvcnVzdC9LY29uZmlnXCYjMzQ7XG5zYW1wbGVzL0tjb25maWctMzI2LVxuc2FtcGxlcy9LY29uZmlnOjMyNzpzb3VyY2UgXCYjMzQ7c2FtcGxlcy9kYW1vbi9LY29uZmlnXCYjMzQ7XG5zYW1wbGVzL0tjb25maWctMzI4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcyNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFN5c2ZzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG1ha2luZyBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBgREFNT05gIGl0c2VsZiBpcyBwcmV0dHkgY2xlYW4g4oCTIG5vIGV4dHJhIGRlcGVuZGVuY2llcyBiZXlvbmQgTU0gY29uZmlncywgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gYERBTU9OX1NZU0ZTYCBidWlsZHMgb24gdG9wIG9mIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdC4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhpcyBwYXRjaC4gSSBzZWUgdGhlIGNoYW5nZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEl0JiMzOTtzIHJpZ2h0IGhlcmU6CmBgYGRpZmYKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jCmluZGV4IGUzODU4ZmZhYjRiMjIuLmJlYjRiZGM3NDQ2MDEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMjI4MCw3ICYjNDM7MjI4MCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCkKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkYXRhID0ga2RhbW9uZDsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtyZXBlYXQgPSB0cnVlOwogCXJlcGVhdF9jYWxsX2NvbnRyb2wtJmd0O2RlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTsKLQlpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKQomIzQzOwllcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7CiYjNDM7CWlmIChlcnIpCiAJCWtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpOwogCXJldHVybiBlcnI7CiB9CmBgYAoKQWgsIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZSBpcyBtaW5vci4gVGhleSYjMzk7dmUganVzdCBhZGRlZCBhbiBgZXJyYCB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jYWxsYCBiZWZvcmUgY2hlY2tpbmcgaXQuIFRoZW4gaWYgdGhlcmUmIzM5O3MgYW4gZXJyb3IsIHRoZXkgZnJlZSB0aGUgYHJlcGVhdF9jYWxsX2NvbnRyb2xgIHN0cnVjdHVyZS4gU2VlbXMgbGlrZSBhIHNpbXBsZSBjbGVhbnVwIG9yIG1heWJlIGFuIGF0dGVtcHQgdG8gbWFrZSB0aGUgZXJyb3IgaGFuZGxpbmcgbW9yZSByb2J1c3QuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGdpdCBsb2cgZm9yIHRoaXMgY29tbWl0IHRvIGdldCBzb21lIGNvbnRleHQuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCB3aGF0IHRoZSBvcmlnaW5hbCBpbnRlbnQgd2FzLCBvciBpZiB0aGVyZSB3YXMgYSBzcGVjaWZpYyBpc3N1ZSB0aGlzIGZpeGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWFsbG9jX29uX2NhbmNlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zNjc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgY2FuY2VsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjk4LVx0XHRcdGNvbXBsZXRlKFx1MDAyNmNvbnRyb2wtXHUwMDNlY29tcGxldGlvbik7XG5tbS9kYW1vbi9jb3JlLmM6MzY5OTpcdFx0ZWxzZSBpZiAoY29udHJvbC1cdTAwM2VjYW5jZWxlZCBcdTAwMjZcdTAwMjYgY29udHJvbC1cdTAwM2VkZWFsbG9jX29uX2NhbmNlbClcbm1tL2RhbW9uL2NvcmUuYy0zNzAwLVx0XHRcdGtmcmVlKGNvbnRyb2wpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjgxLVx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VyZXBlYXQgPSB0cnVlO1xubW0vZGFtb24vc3lzZnMuYzoyMjgyOlx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XG5tbS9kYW1vbi9zeXNmcy5jLTIyODMtXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIENvbW1pdCBNZXNzYWdlIGFuZCBgZGFtb25fY2FsbGAqKgoKSG1tLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IEdpdCBjb21taXQsIGlkZWFsbHkgdGhlIEhFQUQgY29tbWl0LiBJIGRvbiYjMzk7dCBoYXZlIHRoZSB0eXBpY2FsIGBnaXQgbG9nYCB0b29sIGF2YWlsYWJsZSwgd2hpY2ggaXMgYSBiaXQgb2YgYSBwYWluLiBCdXQgSSAqZG8qIHNlZSBhIG1lc3NhZ2UgaW4gdGhlIHByb21wdDogJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0Oy4gT2theSwgc28gdGhlIHByb21wdCBpcyBwcm92aWRpbmcgKmEqIGNvbW1pdCBtZXNzYWdlLCBidXQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGRlcml2ZWQgb25lLCBub3QgdGhlIG9yaWdpbmFsLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYnV0IGl0IGlzbiYjMzk7dCB3aGF0IEkgd2FudGVkLiBJIG5lZWQgbW9yZSBjb250ZXh0LgoKR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggaW52b2x2ZXMgJiMzNDtzeXotY2x1c3RlciYjMzQ7LCBpdCBtaWdodCBpbnZvbHZlIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgb3IgdGhlICYjMzQ7ZGFtb24mIzM0OyBzdWJzeXN0ZW0sIGFzIHRoZSB0b29sIGlzIG9mdGVuIGludm9sdmVkIGluIHRoZXNlIGFyZWFzLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYW1vbl9jYWxsYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHllcywgaXQmIzM5O3MgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGFuZCBzZWUgd2hhdCB0aGF0IGNvbW1pdCBtaWdodCBiZSBkb2luZyBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgZGFtb25fY2FsbGAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NhbGxcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTAwOD1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDM0LSAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcbm1tL2RhbW9uL2NvcmUuYzoxMDM1OiAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxubW0vZGFtb24vY29yZS5jLTEwMzYtICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXG4tLVxubW0vZGFtb24vY29yZS5jPTExMzQ9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTExNTQtICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG5tbS9kYW1vbi9jb3JlLmM6MTE1NTogKiBkYW1vbl9jYWxsKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTE1Ni0gKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTgwND1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTgzMC0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2Vcbm1tL2RhbW9uL2NvcmUuYzoxODMxOiAqIGRhbW9uX2NhbGwoKS5cbm1tL2RhbW9uL2NvcmUuYy0xODMyLSAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNjAtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA2MTogKiBkYW1vbl9jYWxsKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbiBvbiBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKS5cbm1tL2RhbW9uL2NvcmUuYy0yMDYyLSAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIGZvci5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA4NC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDg1OmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbm1tL2RhbW9uL2NvcmUuYy0yMDg2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzY2Mj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM2NzItICogSWYgdGhlcmUgYXJlIFx1MDAyNnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgcmVxdWVzdHMgdGhhdCByZWdpc3RlcmVkIHZpYVxubW0vZGFtb24vY29yZS5jOjM2NzM6ICogXHUwMDI2ZGFtb25fY2FsbCgpIG9uIEBjdHgsIGRvIG9yIGNhbmNlbCB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZGVwZW5kaW5nXG5tbS9kYW1vbi9jb3JlLmMtMzY3NC0gKiBvbiBAY2FuY2VsLiAgQGNhbmNlbCBpcyBzZXQgd2hlbiB0aGUga2RhbW9uZCBpcyBhbHJlYWR5IG91dCBvZiB0aGUgbWFpbiBsb29wXG4tLVxubW0vZGFtb24vY29yZS5jPTM3NjE9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4NDItXHRcdFx0a2RhbW9uZF91c2xlZXAoY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCk7XG5tbS9kYW1vbi9jb3JlLmM6Mzg0MzpcdFx0XHQvKiBhbGxvdyBjYWxsZXIgdW5zZXQgcGF1c2UgdmlhIGRhbW9uX2NhbGwoKSAqL1xubW0vZGFtb24vY29yZS5jLTM4NDQtXHRcdFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MzUxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM3MTpcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzItXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc0LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzU6XHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM3Ni1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyNi1cdFx0ZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xubW0vZGFtb24vbHJ1X3NvcnQuYzo0Mjc6XHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQyOC19XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTI3Nj1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI5NS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoyOTY6XHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbm1tL2RhbW9uL3JlY2xhaW0uYy0yOTctXHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI5OS1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMDA6XHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzAxLVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzA9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ3LVx0XHRkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTtcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDg6XHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ5LX1cbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yMjEtXHRjYWxsX2NvbnRyb2wuZGF0YSA9IGRhbW9uX3N0YXRfY29udGV4dDtcbm1tL2RhbW9uL3N0YXQuYzoyMjI6XHRyZXR1cm4gZGFtb25fY2FsbChkYW1vbl9zdGF0X2NvbnRleHQsIFx1MDAyNmNhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9zdGF0LmMtMjIzLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI4Mi1cdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xubW0vZGFtb24vc3lzZnMuYzoyMjgzOlx0ZXJyID0gZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xubW0vZGFtb24vc3lzZnMuYy0yMjg0LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyODk9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzMDEtXG5tbS9kYW1vbi9zeXNmcy5jOjIzMDI6c3RhdGljIGludCBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKGludCAoKmZuKSh2b2lkICpkYXRhKSxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMwMy1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzExLVx0Y2FsbF9jb250cm9sLmRhdGEgPSBrZGFtb25kO1xubW0vZGFtb24vc3lzZnMuYzoyMzEyOlx0ZXJyID0gZGFtb25fY2FsbChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgXHUwMDI2Y2FsbF9jb250cm9sKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjMxMy1cdHJldHVybiBlcnIgPyBlcnIgOiBjYWxsX2NvbnRyb2wucmV0dXJuX2NvZGU7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzY1PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzc2LVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfQ09NTUlUOlxubW0vZGFtb24vc3lzZnMuYzoyMzc3Olx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3OC1cdFx0XHRcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIzNzktXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM4MDpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzODEtXHRcdFx0XHRkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzODMtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfU0NIRU1FU19TVEFUUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM4NDpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzODUtXHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzkzLVx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfRUZGRUNUSVZFX1FVT1RBUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM5NDpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTUtXHRcdFx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM5Ny1cdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XG5tbS9kYW1vbi9zeXNmcy5jOjIzOTg6XHRcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxubW0vZGFtb24vc3lzZnMuYy0yMzk5LVx0XHRcdFx0ZGFtb25fc3lzZnNfdXBkX3R1bmVkX2ludGVydmFscywga2RhbW9uZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgYGRhbW9uX2NhbGxgIGZ1bmN0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gQ29yZTogVHJhY2luZyBgZGFtb25fY2FsbGAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGRhbW9uX2NhbGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yay4gSXQmIzM5O3MgbmFtZWQgJiMzNDtjYWxsLCYjMzQ7IHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCB3aGVyZSBzb21lIERBTU9OIGZ1bmN0aW9uYWxpdHkgaXMgaW52b2tlZC4gSSBleHBlY3QgdGhpcyB0byBiZSBhIGNydWNpYWwgY29udHJvbCBwb2ludC4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSwgbG9va2luZyBmb3IgdGhlIGtleSBjb21wb25lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZDoKCiogICAqKldoYXQgdHJpZ2dlcnMgdGhpcyBjYWxsPyoqIElzIGl0IHRpbWUtYmFzZWQsIGV2ZW50LWRyaXZlbiwgb3IgYSBjb21iaW5hdGlvbj8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IElzIGl0IGNhbGxlZCBmcm9tIGEga2VybmVsIHRocmVhZCwgaW50ZXJydXB0IGNvbnRleHQsIG9yIHRhc2sgY29udGV4dD8KKiAgICoqV2hhdCBhcmUgaXRzIGlucHV0cz8qKiBJIG5lZWQgdG8ga25vdyB3aGF0IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLiBBcmUgdGhleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIGhhbmRsZXMgdG8gdGhlIERBTU9OIHN0cnVjdHVyZXMsIG9yIG1lbW9yeSByZWdpb24gaW5mb3JtYXRpb24/CiogICAqKldoYXQgZG9lcyBpdCBkbz8qKiBXaGF0IGlzIHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGl0ZXJhdGUgdGhyb3VnaCBzb21lIGRhdGEgc3RydWN0dXJlcywgcHJvYmFibHkgREFNT04mIzM5O3MgaW50ZXJuYWwgc3RhdGUsIGFuZCBtYWtlIGRlY2lzaW9ucyBhYm91dCBtZW1vcnkgcmVnaW9ucyBiYXNlZCBvbiB0aGUgREFNT04gYWxnb3JpdGhtIG9yIGFueSBvdGhlciBwb2xpY3kuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MuIERvZXMgaXQgc2NoZWR1bGUgb3BlcmF0aW9ucywgbWFrZSBpbW1lZGlhdGUgY2hhbmdlcywgb3IgdHJpZ2dlciBmdXJ0aGVyIGFjdGlvbnM/CiogICAqKldoYXQgYXJlIGl0cyBvdXRwdXRzL3NpZGUgZWZmZWN0cz8qKiBEb2VzIGl0IG1vZGlmeSBhbnkgbWVtb3J5IHJlZ2lvbnM/IERvZXMgaXQgY2hhbmdlIGFueSBrZXJuZWwgc3RydWN0dXJlcz8gRG9lcyBpdCByZXBvcnQgYW55IG1ldHJpY3Mgb3Igc3RhdGlzdGljcz8KKiAgICoqV2hlcmUgZG9lcyBpdCBmaXQgaW4gdGhlIG92ZXJhbGwgREFNT04gZXhlY3V0aW9uIGZsb3c/KiogSG93IGlzIGl0IHJlbGF0ZWQgdG8gb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRhbW9uX2luaXRgIG9yIGBkYW1vbl91cGRhdGVgPwoKSSYjMzk7bSBwcmVwYXJlZCB0byBmb2xsb3cgdGhlIGNvbnRyb2wgZmxvdywgcG90ZW50aWFsbHkgdXNpbmcgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgbG9va2luZyBhdCB3aGF0IHRoaXMgZnVuY3Rpb24gY2FsbHMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMsIGlucHV0cywgb3BlcmF0aW9ucywgYW5kIHRoZSBvdmVyYWxsIHJvbGUgd2l0aGluIHRoZSBEQU1PTiBmcmFtZXdvcmsgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGluc2lnaHQgaW50byBpdHMgcHVycG9zZS4gTGV0JiMzOTtzIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA4MDpcdCAqXG4yMDgxOlx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGZhaWxlZCwgdGhlIEBjdHggaXMgZ3VhcmFudGVlZCB0byBiZSBzdG9wcGVkLlxuMjA4MjpcdCAqXG4yMDgzOlx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuMjA4NDpcdCAqL1xuMjA4NTpcdGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbjIwODY6XHR7XG4yMDg3Olx0XHRpZiAoIWNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuMjA4ODpcdFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbjIwODk6XHRcdGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQgPSBmYWxzZTtcbjIwOTA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbnRyb2wtXHUwMDNlbGlzdCk7XG4yMDkxOlx0XG4yMDkyOlx0XHRtdXRleF9sb2NrKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xuMjA5MzpcdFx0aWYgKGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlKSB7XG4yMDk0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbjIwOTU6XHRcdFx0Z290byBjYW5jZWxlZDtcbjIwOTY6XHRcdH1cbjIwOTc6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y29udHJvbC1cdTAwM2VsaXN0LCBcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9scyk7XG4yMDk4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG4yMDk5Olx0XHRpZiAoY29udHJvbC1cdTAwM2VyZXBlYXQpXG4yMTAwOlx0XHRcdHJldHVybiAwO1xuMjEwMTpcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb250cm9sLVx1MDAzZWNvbXBsZXRpb24pO1xuMjEwMjpcdFx0aWYgKGNvbnRyb2wtXHUwMDNlY2FuY2VsZWQpXG4yMTAzOlx0XHRcdGdvdG8gY2FuY2VsZWQ7XG4yMTA0Olx0XHRyZXR1cm4gMDtcbjIxMDU6XHRcbjIxMDY6XHRjYW5jZWxlZDpcbjIxMDc6XHRcdHdoaWxlIChkYW1vbl9pc19ydW5uaW5nKGN0eCkpXG4yMTA4Olx0XHRcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuMjEwOTpcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4yMTEwOlx0XG4yMTExOlx0fVxuMjExMjpcdFxuMjExMzpcdC8qKlxuMjExNDpcdCAqIGRhbW9zX3dhbGsoKSAtIEludm9rZSBhIGdpdmVuIGZ1bmN0aW9ucyB3aGlsZSBEQU1PUyB3YWxrIHJlZ2lvbnMuXG4yMTE1Olx0ICogQGN0eDpcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGZvci5cbjIxMTY6XHQgKiBAY29udHJvbDpcdENvbnRyb2wgdmFyaWFibGUgb2YgdGhlIHdhbGsgcmVxdWVzdC5cbjIxMTc6XHQgKlxuMjExODpcdCAqIEFzayBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKSBvZiBAY3R4IHRvIGNhbGwgYSBmdW5jdGlvbiBmb3IgZWFjaCByZWdpb25cbjIxMTk6XHQgKiB0aGF0IHRoZSBrZGFtb25kIHdpbGwgYXBwbHkgREFNT1MgYWN0aW9uIHRvLCBhbmQgd2FpdCB1bnRpbCB0aGUga2RhbW9uZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY4OQoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiAxOTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIERBTU9OIHN5c2ZzIGVycm9yIGhhbmRsaW5nIGZvciBmdXp6aW5nIHBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGNoYW5nZXMgaG93IGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBoYW5kbGVzIGVycm9ycyB3aGVuIGNhbGxpbmcgYGRhbW9uX2NhbGxgLiBQcmV2aW91c2x5LCBhIGZhaWx1cmUgZnJvbSBgZGFtb25fY2FsbGAgKHNwZWNpZmljYWxseSwgYC1FQ0FOQ0VMRURgKSBjb3VsZCBiZSBtYXNrZWQsIHJldHVybmluZyBzdWNjZXNzIGZyb20gdGhlIHN5c2ZzIGNhbGwuIE5vdywgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGV2ZW4gcmVhY2hhYmxlLiAgWWVzLCBpdCYjMzk7cyB0cmlnZ2VyZWQgYnkgd3JpdGluZyAmIzM0O29uJiMzNDsgdG8gdGhlIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7aWQmZ3Q7L3N0YXRlYCBzeXNmcyBlbnRyeS4gVGhhdCYjMzk7cyBhIGNsZWFyIGVudHJ5IHBvaW50LgoKTm93LCBpcyB0aGlzIGZ1enphYmxlPyBBY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCB0aGlzICppcyogYSBjYW5kaWRhdGU6IGl0JiMzOTtzIGEgbW9kaWZpY2F0aW9uIGluIGBtbS9kYW1vbi9zeXNmcy5jYCwgd2hpY2ggZmFsbHMgdW5kZXIgdGhlICYjMzQ7Y29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1tLykmIzM0OyBhbmQgdGhlIGNoYW5nZSBhZmZlY3RzIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBkYXRhIHN0cnVjdHVyZSBpbnRlcmFjdGlvbi4gREFNT04gaXMgYWxzbyBhY3RpdmVseSBpbnRlcmFjdGVkIHdpdGggYnkgc3l6a2FsbGVyIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4KClRvIGNvbmZpcm0gZnV6emFiaWxpdHksIEkmIzM5O20gY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3M6IGBDT05GSUdfREFNT05gIGFuZCBgQ09ORklHX0RBTU9OX1NZU0ZTYC4gYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGFyZSBib3RoIHN0YW5kYXJkLCBzbyB0aG9zZSBhcmUgbXkgYEVuYWJsZUNvbmZpZ3NgLgoKTmV4dCwgSSBuZWVkIHRvIGRlZmluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gSSBtdXN0IGFsc28gaW5jbHVkZSBgZGFtb25fc3lzZnNfaGFuZGxlX2NtZGAgKHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0KSwgc28gdGhlIGZ1enplciBkb2VzbiYjMzk7dCBnZXQgY29uZnVzZWQgYnkgaW5saW5pbmcsIGFuZCBgZGFtb25fY2FsbGAgaXRzZWxmICh0aGUgZnVuY3Rpb24gd2hvc2UgcmV0dXJuIHZhbHVlIGlzIGNoYW5nZWQpLiAgVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoZXkmIzM5O3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIHBhdGNoLiBUaGUgbG9naWMgYmVpbmcgbW9kaWZpZWQgaXMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBjcml0ZXJpYSB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm90aGluZyB0aGF0IHdvdWxkIG1ha2UgdGhpcyAqbm90KiB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIGtlcm5lbCBjb2RlIGNoYW5nZSwgZXhlY3V0YWJsZSwgYW5kIGEgcmVhY2hhYmxlIHBhdGggdmlhIHN5c2ZzLiBTbyBXb3J0aEZ1enppbmcgbXVzdCBiZSB0cnVlLgoKU28sIGhlcmUmIzM5O3MgbXkgY29uZmlndXJhdGlvbjoKCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtEQU1PTiYjMzQ7LCAmIzM0O0RBTU9OX1NZU0ZTJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbiwgZGFtb25fc3lzZnNfaGFuZGxlX2NtZCwgZGFtb25fY2FsbF1gCgpFdmVyeXRoaW5nIGFsaWducywgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2hhbmRsZV9jbWQmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY2lkXHUwMDNlL3N0YXRlKSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX2hhbmRsZV9jbWQmIzM0OywKICAgICYjMzQ7ZGFtb25fY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY2lkXHUwMDNlL3N0YXRlKSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKSBieSBzdG9yaW5nIHRoZSByZXR1cm4gY29kZSBvZiBkYW1vbl9jYWxsKCkgaW4gdGhlIGV4aXN0aW5nIGxvY2FsIHZhcmlhYmxlICYjMzk7ZXJyJiMzOTsgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIHRoZSBjYWxsZXIsIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcgaXQgYW5kIHJldHVybmluZyAwLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kYXJpZXMgb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliMmMyODUyY2VhOTk2YWZiMmY0MjUzMDIzZGNiNDY0ZjdiOTBiYzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0NzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jCmluZGV4IGUzODU4ZmZhYjRiMjIuLmJlYjRiZGM3NDQ2MDEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMjI4MCw3ICYjNDM7MjI4MCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCkKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkYXRhID0ga2RhbW9uZDsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtyZXBlYXQgPSB0cnVlOwogCXJlcGVhdF9jYWxsX2NvbnRyb2wtJmd0O2RlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTsKLQlpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKQomIzQzOwllcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7CiYjNDM7CWlmIChlcnIpCiAJCWtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpOwogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBTeXNmcyBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIHRoZSBzdGFuZGFyZCB0b29sczsgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGRpZmYgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgdGhlbiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZW50IG9mIGBtbS9kYW1vbi9zeXNmcy5jYCBhcm91bmQgbGluZSAyMjgwLiBVbmRlcnN0YW5kaW5nIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSB3aWxsIGJlIGNydWNpYWwgZm9yIGEgcHJvcGVyIGV2YWx1YXRpb24uIEdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBzdXJyb3VuZGluZyBsb2dpYyBiZWZvcmUgSSBjYW4gYW5hbHl6ZSB0aGUgYWN0dWFsIGRpZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI1MDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjI1MTpcdFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xuMjI1MjpcdFx0aWYgKGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlbnIgIT0gMSlcbjIyNTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMjU0Olx0XG4yMjU1Olx0XHRpZiAoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjU2Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4KTtcbjIyNTc6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gTlVMTDtcbjIyNTg6XHRcbjIyNTk6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjYwOlx0XHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXG4yMjYxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjI2MjpcdFxuMjI2MzpcdFx0Y3R4ID0gZGFtb25fc3lzZnNfYnVpbGRfY3R4KGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcbjIyNjQ6XHRcdGlmIChJU19FUlIoY3R4KSkge1xuMjI2NTpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNjY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcbjIyNjc6XHRcdH1cbjIyNjg6XHRcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xuMjI2OTpcdFx0aWYgKGVycikge1xuMjI3MDpcdFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbjIyNzE6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbjIyNzI6XHRcdFx0cmV0dXJuIGVycjtcbjIyNzM6XHRcdH1cbjIyNzQ6XHRcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuMjI3NTpcdFxuMjI3NjpcdFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4yMjc3Olx0XHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuMjI3ODpcdFxuMjI3OTpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuMjI4MDpcdFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbjIyODE6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcbjIyODI6XHRcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuMjI4MzpcdFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuMjI4NDpcdFx0aWYgKGVycilcbjIyODU6XHRcdFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XG4yMjg2Olx0XHRyZXR1cm4gZXJyO1xuMjI4NzpcdH1cbjIyODg6XHRcbjIyODk6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuMjI5MDpcdHtcbjIyOTE6XHRcdGlmICgha2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpXG4yMjkyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjI5MzpcdFx0ZGFtb25fc3RvcChcdTAwMjZrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgMSk7XG4yMjk0Olx0XHQvKlxuMjI5NTpcdFx0ICogVG8gYWxsb3cgdXNlcnMgc2hvdyBmaW5hbCBtb25pdG9yaW5nIHJlc3VsdHMgb2YgYWxyZWFkeSB0dXJuZWQtb2ZmXG4yMjk2Olx0XHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XG4yMjk3Olx0XHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcbjIyOTg6XHRcdCAqL1xuMjI5OTpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBEQU1PTiBwYXRjaC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgY29kZSBsb29rZWQgbGlrZSB0aGlzIChJIGNhbiBwcmFjdGljYWxseSBzZWUgaXQgaW4gbXkgaGVhZCk6CgpgYGBjCglyZXBlYXRfY2FsbF9jb250cm9sLSZndDtmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuOwoJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7ZGF0YSA9IGtkYW1vbmQ7CglyZXBlYXRfY2FsbF9jb250cm9sLSZndDtyZXBlYXQgPSB0cnVlOwoJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7ZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlOwotCWlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpCiYjNDM7CWVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTsKJiM0MzsJaWYgKGVycikKIAkJa2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7CiAJcmV0dXJuIGVycjsKYGBgCgpSaWdodCwgdGhlIGtleSBoZXJlIGlzIHdoYXQgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgcGF0Y2guIFByZXZpb3VzbHksIGBlcnJgIHdhcyBvbmx5IGluaXRpYWxpemVkIHRvIHRoZSByZXN1bHQgb2YgYGRhbW9uX3N0YXJ0KClgLCB3aGljaCB3b3VsZCBiZSB6ZXJvIGlmIGV4ZWN1dGlvbiBtYWRlIGl0IHRvIGxpbmUgMjI3Ni4gQ3J1Y2lhbGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jYWxsKClgIHdhcyAqaWdub3JlZCouIFRoaXMgaXMgYSBnbGFyaW5nIG9taXNzaW9uLiBUaGF0IG1lYW50IHRoYXQgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIHdvdWxkIHJlcG9ydCBzdWNjZXNzIChyZXR1cm5pbmcgMCkgZXZlbiBpZiBgZGFtb25fY2FsbCgpYCBmYWlsZWQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGVycm9yLCBhbmQgYSBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuCgpOb3csIHdpdGggdGhpcyBwYXRjaCwgYGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtgIHByb3Blcmx5IGNhcHR1cmVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuIFRoZW4gdGhlIGBpZiAoZXJyKWAgY29uZGl0aW9uYWwgY29ycmVjdGx5IGV2YWx1YXRlcywgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMsIGFzIGV4cGVjdGVkLCByZXR1cm5lZCBmcm9tIHRoZSBmdW5jdGlvbi4gTXVjaCBiZXR0ZXIhCgpJJiMzOTttIG1ha2luZyBhIHF1aWNrIG1lbnRhbCBjaGVjayBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IG1pZ2h0IGJlIGhpZGluZy4gVGhlIGBpbnQgZXJyO2AgZGVjbGFyYXRpb24gc2VlbXMgZmluZSBmcm9tIGEgcXVpY2sgZ2xhbmNlLCBidXQgaXQmIzM5O3Mgd29ydGggYSBkb3VibGUtY2hlY2suIEkmIzM5O20gZ29pbmcgdG8gcmVhZCBsaW5lcyAyMjQwIHRvIDIyNjAgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMzA6XHRcbjIyMzE6XHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcbjIyMzI6XHRcdFx0cmV0dXJuIDA7XG4yMjMzOlx0XHRpZiAoc3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2VuciAhPSAxKVxuMjIzNDpcdFx0XHRnb3RvIG91dDtcbjIyMzU6XHRcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMoc3lzZnNfa2RhbW9uZCk7XG4yMjM2Olx0XHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcbjIyMzc6XHRcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMoc3lzZnNfa2RhbW9uZCk7XG4yMjM4Olx0b3V0OlxuMjIzOTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xuMjI0MDpcdFx0cmV0dXJuIDA7XG4yMjQxOlx0fVxuMjI0MjpcdFxuMjI0MzpcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbjIyNDQ6XHR7XG4yMjQ1Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4yMjQ2Olx0XHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpyZXBlYXRfY2FsbF9jb250cm9sO1xuMjI0NzpcdFx0aW50IGVycjtcbjIyNDg6XHRcbjIyNDk6XHRcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXG4yMjUwOlx0XHRcdHJldHVybiAtRUJVU1k7XG4yMjUxOlx0XHQvKiBUT0RPOiBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHRzIHBlciBrZGFtb25kICovXG4yMjUyOlx0XHRpZiAoa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2VuciAhPSAxKVxuMjI1MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIyNTQ6XHRcbjIyNTU6XHRcdGlmIChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eClcbjIyNTY6XHRcdFx0ZGFtb25fZGVzdHJveV9jdHgoa2RhbW9uZC1cdTAwM2VkYW1vbl9jdHgpO1xuMjI1NzpcdFx0a2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggPSBOVUxMO1xuMjI1ODpcdFxuMjI1OTpcdFx0cmVwZWF0X2NhbGxfY29udHJvbCA9IGttYWxsb2Nfb2JqKCpyZXBlYXRfY2FsbF9jb250cm9sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaDogQSBRdWljayBEZWJ1ZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiB0aGUgb3JpZ2luYWwgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGZ1bmN0aW9uLCB0aGUgYGVycmAgdmFyaWFibGUsIHdoaWNoIHN0b3JlcyB0aGUgZXJyb3IgY29kZSwgd2FzIGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgYGRhbW9uX3N0YXJ0YC4gSWYgYGRhbW9uX3N0YXJ0YCB3b3JrZWQsIGBlcnJgIHdhcyB6ZXJvLiBUaGVuLCB0aGVyZSB3YXMgYSBjb25kaXRpb25hbCBjaGVjayB3aXRoIGBkYW1vbl9jYWxsYCwgYW5kIGlmIHRoYXQgd2FzIHRydWUsIGByZXBlYXRfY2FsbF9jb250cm9sYCB3YXMgZnJlZWQuIENydWNpYWxseSwgdGhlIGZ1bmN0aW9uIHRoZW4gcmV0dXJuZWQgYGVycmAuIFRoaXMgc2VlbXMgd3JvbmcsIGJlY2F1c2UgYSBub24temVybyBlcnJvciBmcm9tIGBkYW1vbl9jYWxsYCB3YXMgYmVpbmcgZWZmZWN0aXZlbHkgbWFza2VkLCB0aGUgZnVuY3Rpb24gd2FzIHJldHVybmluZyAwIGV2ZW4gaWYgYGRhbW9uX2NhbGxgIGhhZCBhbiBpc3N1ZS4KClRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGZpcnN0IGNhbGxpbmcgYGRhbW9uX2NhbGxgIGFuZCBhc3NpZ25pbmcgaXRzIHJldHVybiB2YWx1ZSB0byBgZXJyYC4gVGhlbiwgaXQgY2hlY2tzIGBlcnJgIGFuZCBvbmx5IGZyZWVzIGByZXBlYXRfY2FsbF9jb250cm9sYCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuIEZpbmFsbHksIGl0IHJldHVybnMgYGVycmAuIFRoaXMgZml4ZXMgdGhlIG9yaWdpbmFsIHByb2JsZW0sIG1ha2VzIGl0IHNvIGEgZmFpbGVkIGNhbGwgcmV0dXJucyBhbiBlcnJvci4KClRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBleHBvc2UgYSBuZXcgdnVsbmVyYWJpbGl0eT8gU3BlY2lmaWNhbGx5LCBhcmUgd2UgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3Igc2VuZGluZyBpdCB0byB1c2VyIHNwYWNlPyBJIGRvbiYjMzk7dCBzZWUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGVycmAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgKmJlZm9yZSogaXQmIzM5O3MgY2hlY2tlZCBvciByZXR1cm5lZCwgc28gdGhhdCYjMzk7cyBzYWZlLiBMb29raW5nIGNsb3NlciBhdCBgcmVwZWF0X2NhbGxfY29udHJvbGAgSSBzZWUgaXQmIzM5O3MgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCwgYW5kIHRoYXQgaXRzIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoYXQgcHJvY2Vzcy4KCk5vdyB0aGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZmllbGRzIGluIGByZXBlYXRfY2FsbF9jb250cm9sYD8gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHkgYnkgbG9va2luZyBhdCB0aGUgc3RydWN0IGRlZmluaXRpb24gb2YgYGRhbW9uX2NhbGxfY29udHJvbGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTY3Nj1zdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY5My0vKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY5NDogKiBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIC0gQ29udHJvbCBkYW1vbl9jYWxsKCkuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjk1LSAqXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTcwNC0gKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaDo3MDU6c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNzA2LVx0aW50ICgqZm4pKHZvaWQgKmRhdGEpO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD04NTc9c3RydWN0IGRhbW9uX2N0eCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTg4Mi1cbmluY2x1ZGUvbGludXgvZGFtb24uaDo4ODM6XHQvKiBsaXN0cyBvZiBcdTAwMjZzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODg0LVx0c3RydWN0IGxpc3RfaGVhZCBjYWxsX2NvbnRyb2xzO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDk3PWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwOTgtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA5OTppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTExMDAtaW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjA0OT1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDg0LSAqL1xubW0vZGFtb24vY29yZS5jOjIwODU6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxubW0vZGFtb24vY29yZS5jLTIwODYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNjYyPXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzY3MS0gKlxubW0vZGFtb24vY29yZS5jOjM2NzI6ICogSWYgdGhlcmUgYXJlIFx1MDAyNnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgcmVxdWVzdHMgdGhhdCByZWdpc3RlcmVkIHZpYVxubW0vZGFtb24vY29yZS5jLTM2NzMtICogXHUwMDI2ZGFtb25fY2FsbCgpIG9uIEBjdHgsIGRvIG9yIGNhbmNlbCB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZGVwZW5kaW5nXG4tLVxubW0vZGFtb24vY29yZS5jPTM2Nzc9c3RhdGljIHZvaWQga2RhbW9uZF9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjYW5jZWwpXG5tbS9kYW1vbi9jb3JlLmMtMzY3OC17XG5tbS9kYW1vbi9jb3JlLmM6MzY3OTpcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wsICpuZXh0O1xubW0vZGFtb24vY29yZS5jLTM2ODAtXHRMSVNUX0hFQUQoY29udHJvbHMpO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MzUxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTUtXHRpbnQgZXJyO1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNTY6XHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNvbnRyb2wgPSB7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM1Ny1cdFx0LmZuID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbixcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM4OD1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDAzLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MDQ6c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MDUtXHQuZm4gPSBkYW1vbl9scnVfc29ydF9kYW1vbl9jYWxsX2ZuLFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0yNzY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yODAtXHRpbnQgZXJyO1xubW0vZGFtb24vcmVjbGFpbS5jOjI4MTpcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY29udHJvbCA9IHtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODItXHRcdC5mbiA9IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbixcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzEzPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuKHZvaWQgKmFyZylcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzI0LVxubW0vZGFtb24vcmVjbGFpbS5jOjMyNTpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzI2LVx0LmZuID0gZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuLFxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE5NC1cbm1tL2RhbW9uL3N0YXQuYzoxOTU6c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xubW0vZGFtb24vc3RhdC5jLTE5Ni1cdC5mbiA9IGRhbW9uX3N0YXRfZGFtb25fY2FsbF9mbixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI0NS1cdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbm1tL2RhbW9uL3N5c2ZzLmM6MjI0NjpcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XG5tbS9kYW1vbi9zeXNmcy5jLTIyNDctXHRpbnQgZXJyO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjMwNC17XG5tbS9kYW1vbi9zeXNmcy5jOjIzMDU6XHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHt9O1xubW0vZGFtb24vc3lzZnMuYy0yMzA2LVx0aW50IGVycjtcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz0zNz1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4tLVxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNTQtXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzo1NTpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXBlYXRfY2FsbF9jb250cm9sID0ge1xuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNTYtXHQuZm4gPSBkYW1vbl9zYW1wbGVfcHJjbF9yZXBlYXRfY2FsbF9mbixcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz0zOD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4tLVxuc2FtcGxlcy9kYW1vbi93c3NlLmMtNTUtXG5zYW1wbGVzL2RhbW9uL3dzc2UuYzo1NjpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXBlYXRfY2FsbF9jb250cm9sID0ge1xuc2FtcGxlcy9kYW1vbi93c3NlLmMtNTctXHQuZm4gPSBkYW1vbl9zYW1wbGVfd3NzZV9yZXBlYXRfY2FsbF9mbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBDYWxsIENvbnRyb2wgU3RydWN0dXJlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGFyb3VuZCBsaW5lIDcwNS4gTXkgaW50ZW50aW9uIGlzIHRvIGZvY3VzIG9uIHRoYXQgYHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2xgIGRlZmluaXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgREFNT04gc3Vic3lzdGVtIG9yY2hlc3RyYXRlcyBpdHMgc2FtcGxpbmcgYW5kIG1vbml0b3JpbmcgY2FsbHMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjb250cm9sIGZsb3cgbWVjaGFuaXNtcyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aG9zZSBjYWxscyDigJMgaG93IHRoZSBtb25pdG9ycyBhcmUgY29uZmlndXJlZCwgaG93IHRoZSBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZCwgYW5kIGhvdyB0aGUgb3ZlcmFsbCBleGVjdXRpb24gaXMgY29vcmRpbmF0ZWQuIEdldHRpbmcgYSBzb2xpZCBncmFzcCBvbiB0aGlzIGBkYW1vbl9jYWxsX2NvbnRyb2xgIHN0cnVjdHVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmaW5lciBwb2ludHMgb2YgREFNT04mIzM5O3Mgb3BlcmF0aW9uLCBlc3BlY2lhbGx5IGlmIEnigJltIHRyeWluZyB0byBvcHRpbWl6ZSBvciBkZWJ1ZyBhbnkgREFNT04tcmVsYXRlZCBjb2RlLiBUaGlzIHdpbGwgY2xhcmlmeSBob3cgdGhlIHN5c3RlbSByZWd1bGF0ZXMgdGhlIGFzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgdmFyaW91cyBEQU1PTiBtb25pdG9yaW5nIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MDA6XHQgKiBAZGVhbGxvY19vbl9jYW5jZWw6XHRJZiBAcmVwZWF0IGlzIHRydWUsIGRlLWFsbG9jYXRlIHdoZW4gY2FuY2VsZWQuXG4gNzAxOlx0ICpcbiA3MDI6XHQgKiBDb250cm9sIGRhbW9uX2NhbGwoKSwgd2hpY2ggcmVxdWVzdHMgc3BlY2lmaWMga2RhbW9uZCB0byBpbnZva2UgYSBnaXZlblxuIDcwMzpcdCAqIGZ1bmN0aW9uLiAgUmVmZXIgdG8gZGFtb25fY2FsbCgpIGZvciBtb3JlIGRldGFpbHMuXG4gNzA0Olx0ICovXG4gNzA1Olx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCB7XG4gNzA2Olx0XHRpbnQgKCpmbikodm9pZCAqZGF0YSk7XG4gNzA3Olx0XHR2b2lkICpkYXRhO1xuIDcwODpcdFx0Ym9vbCByZXBlYXQ7XG4gNzA5Olx0XHRpbnQgcmV0dXJuX2NvZGU7XG4gNzEwOlx0XHRib29sIGRlYWxsb2Nfb25fY2FuY2VsO1xuIDcxMTpcdC8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovXG4gNzEyOlx0XHQvKiBpbmZvcm1zIGlmIHRoZSBrZGFtb25kIGZpbmlzaGVkIGhhbmRsaW5nIG9mIHRoZSByZXF1ZXN0ICovXG4gNzEzOlx0XHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uO1xuIDcxNDpcdFx0LyogaW5mb3JtcyBpZiB0aGUga2RhbW9uZCBjYW5jZWxlZCBAZm4gaW5mb2NhdGlvbiAqL1xuIDcxNTpcdFx0Ym9vbCBjYW5jZWxlZDtcbiA3MTY6XHRcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gNzE3Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gNzE4Olx0fTtcbiA3MTk6XHRcbiA3MjA6XHQvKipcbiA3MjE6XHQgKiBzdHJ1Y3QgZGFtb25faW50ZXJ2YWxzX2dvYWwgLSBNb25pdG9yaW5nIGludGVydmFscyBhdXRvLXR1bmluZyBnb2FsLlxuIDcyMjpcdCAqXG4gNzIzOlx0ICogQGFjY2Vzc19icDpcdFx0QWNjZXNzIGV2ZW50cyBvYnNlcnZhdGlvbiByYXRpbyB0byBhY2hpZXZlIGluIGJwLlxuIDcyNDpcdCAqIEBhZ2dyczpcdFx0TnVtYmVyIG9mIGFnZ3JlZ2F0aW9ucyB0byBhY2hpZXZlIEBhY2Nlc3NfYnAgd2l0aGluLlxuIDcyNTpcdCAqIEBtaW5fc2FtcGxlX3VzOlx0TWluaW11bSByZXN1bHRpbmcgc2FtcGxpbmcgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzLlxuIDcyNjpcdCAqIEBtYXhfc2FtcGxlX3VzOlx0TWF4aW11bSByZXN1bHRpbmcgc2FtcGxpbmcgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzLlxuIDcyNzpcdCAqXG4gNzI4Olx0ICogREFNT04gYXV0b21hdGljYWxseSB0dW5lcyBcdTAwMjZkYW1vbl9hdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwgYW5kXG4gNzI5Olx0ICogXHUwMDI2ZGFtb25fYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCBhaW1pbmcgdGhlIHJhdGlvIGluIGJwICgxLzEwLDAwMCkgb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIERBTU9OJiMzOTtzIENvcmUqKgoKT2theSwgc28gd2UmIzM5O3ZlIGJlZW4gZXhhbWluaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIG9mIERBTU9OLCBhbmQgSSB0aGluayBpdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIGEgc3BlY2lmaWMgYXJlYS4gSSBuZWVkIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGFsbCAqcmVhbGx5KiB3b3JrcyB1bmRlciB0aGUgaG9vZC4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIHRoZSBgZGFtb25fY2FsbGAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlLCBzbyB0aGF04oCZcyB3aGVyZSBJJiMzOTtsbCBzdGFydC4gSXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIEkmIzM5O20gYmV0dGluZyBpdCBnaXZlcyB1cyBhIGdvb2QgZ3Jhc3Agb24gdGhlIG92ZXJhbGwgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyBEQU1PTiBpcyAqY2FsbGVkKiBpbnRvIGFjdGlvbi4gSSB3YW50IHRvIHVucmF2ZWwgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBtZW1vcnkgbW9uaXRvcmluZyBhbmQgb3B0aW1pemF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgaW5zaWdodHMgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwODA6XHQgKlxuMjA4MTpcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cbjIwODI6XHQgKlxuMjA4MzpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbjIwODQ6XHQgKi9cbjIwODU6XHRpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4yMDg2Olx0e1xuMjA4NzpcdFx0aWYgKCFjb250cm9sLVx1MDAzZXJlcGVhdClcbjIwODg6XHRcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbnRyb2wtXHUwMDNlY29tcGxldGlvbik7XG4yMDg5Olx0XHRjb250cm9sLVx1MDAzZWNhbmNlbGVkID0gZmFsc2U7XG4yMDkwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjb250cm9sLVx1MDAzZWxpc3QpO1xuMjA5MTpcdFxuMjA5MjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbjIwOTM6XHRcdGlmIChjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSkge1xuMjA5NDpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG4yMDk1Olx0XHRcdGdvdG8gY2FuY2VsZWQ7XG4yMDk2Olx0XHR9XG4yMDk3Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNvbnRyb2wtXHUwMDNlbGlzdCwgXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHMpO1xuMjA5ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xuMjA5OTpcdFx0aWYgKGNvbnRyb2wtXHUwMDNlcmVwZWF0KVxuMjEwMDpcdFx0XHRyZXR1cm4gMDtcbjIxMDE6XHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29udHJvbC1cdTAwM2Vjb21wbGV0aW9uKTtcbjIxMDI6XHRcdGlmIChjb250cm9sLVx1MDAzZWNhbmNlbGVkKVxuMjEwMzpcdFx0XHRnb3RvIGNhbmNlbGVkO1xuMjEwNDpcdFx0cmV0dXJuIDA7XG4yMTA1Olx0XG4yMTA2Olx0Y2FuY2VsZWQ6XG4yMTA3Olx0XHR3aGlsZSAoZGFtb25faXNfcnVubmluZyhjdHgpKVxuMjEwODpcdFx0XHRzY2hlZHVsZV90aW1lb3V0X2lkbGUobXNlY3NfdG9famlmZmllcygxMDApKTtcbjIxMDk6XHRcdHJldHVybiAtRUNBTkNFTEVEO1xuMjExMDpcdFxuMjExMTpcdH1cbjIxMTI6XHRcbjIxMTM6XHQvKipcbjIxMTQ6XHQgKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxuMjExNTpcdCAqIEBjdHg6XHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXG4yMTE2Olx0ICogQGNvbnRyb2w6XHRDb250cm9sIHZhcmlhYmxlIG9mIHRoZSB3YWxrIHJlcXVlc3QuXG4yMTE3Olx0ICpcbjIxMTg6XHQgKiBBc2sgREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkgb2YgQGN0eCB0byBjYWxsIGEgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaW9uXG4yMTE5Olx0ICogdGhhdCB0aGUga2RhbW9uZCB3aWxsIGFwcGx5IERBTU9TIGFjdGlvbiB0bywgYW5kIHdhaXQgdW50aWwgdGhlIGtkYW1vbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0MQoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgS01TQU4gSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIGNoYW5nZSBpcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGp1c3QgY2FwdHVyaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRhbW9uX2NhbGxgIGludG8gYGVycmAgaW4gYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgbWFraW5nIHN1cmUgdGhhdCBpZiBgZGFtb25fY2FsbGAgc2lnbmFscyBhbiBlcnJvciwgdGhhdCBlcnJvciBpcyBub3cgY29ycmVjdGx5IHByb3BhZ2F0ZWQgYmFjayB1cCB0aGUgY2FsbCBzdGFjaywgaW5zdGVhZCBvZiBnZXR0aW5nIG1hc2tlZCBieSBhIHJldHVybiBvZiAwLiBCZWZvcmUgdGhlIHBhdGNoLCBhIGZhaWx1cmUgd2FzIGVmZmVjdGl2ZWx5IHRyZWF0ZWQgYXMgYSBzdWNjZXNzOyBub3csIHRoZSBlcnJvciBpcyBoYW5kbGVkIGFzIGl0IHNob3VsZCBiZS4KCk5vdywgZG9lcyB0aGlzIGhhdmUgYW55dGhpbmcgYXQgYWxsIHRvIGRvIHdpdGggS01TQU4/IEFic29sdXRlbHkgbm90LiBNeSBjaGVja2xpc3QgZm9yIEtNU0FOIGNvbmNlcm5zOgoqICAgRG9lcyBpdCAqcmVhZCogdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLgoqICAgRG9lcyBpdCAqcGFzcyogdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlPyBOby4KKiAgIERvZXMgaXQgbGVhdmUgYW55IG1lbW9yeSBmaWVsZCB1bmluaXRpYWxpemVkPyBOby4KKiAgIERvZXMgaXQgYWZmZWN0IG1lbW9yeSBib3VuZHMgb3IgbGVuZ3RocyBpbiBhbnkgd2F5PyBOby4KKiAgIENvdWxkIGl0IGNvbmNlaXZhYmx5IGludHJvZHVjZSBhbnkgS01TQU4tZGV0ZWN0YWJsZSBidWdzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhPyBOby4KClRoaXMgcGF0Y2ggaXMgcHVyZWx5IGFib3V0IGVycm9yIGhhbmRsaW5nLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyB0aGUgKmNvcnJlY3QqIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQsIGFuZCBpdCBjbGVhbnMgdXAgYSBwb2ludGVyIG9uIGVycm9yLiBJdCYjMzk7cyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgYWNjZXNzZXMsIGRhdGEgY29weWluZywgb3IgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMuIEl0IHNpbXBseSBpbXByb3ZlcyB0aGUgZXJyb3IgcHJvcGFnYXRpb24gbG9naWMuIFdlIGFyZSBub3QgdG91Y2hpbmcgb3IgbW9kaWZ5aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQsIGFzIHN1Y2gsIHRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgS01TQU4gY29uY2VybnMuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIHRlc3Qgc3VpdGVzIHdpbGwgYmUgc3VmZmljaWVudCBmb3IgdGhpcyBjaGFuZ2UuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGhlcmUuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgc3RvcmluZyB0aGUgcmV0dXJuIGNvZGUgb2YgZGFtb25fY2FsbCgpIGluIHRoZSBleGlzdGluZyBsb2NhbCB2YXJpYWJsZSAmIzM5O2VyciYjMzk7IGFuZCBwcm9wYWdhdGluZyBpdCB0byB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGFuZCByZXR1cm5pbmcgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZGFyaWVzIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgc3RvcmluZyB0aGUgcmV0dXJuIGNvZGUgb2YgZGFtb25fY2FsbCgpIGluIHRoZSBleGlzdGluZyBsb2NhbCB2YXJpYWJsZSAmIzM5O2VyciYjMzk7IGFuZCBwcm9wYWdhdGluZyBpdCB0byB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGFuZCByZXR1cm5pbmcgMC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZGFyaWVzIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjMwLjIzMzU5NDA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2ODEwNjE3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25cIixcbiAgICBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKSBieSBzdG9yaW5nIHRoZSByZXR1cm4gY29kZSBvZiBkYW1vbl9jYWxsKCkgaW4gdGhlIGV4aXN0aW5nIGxvY2FsIHZhcmlhYmxlICdlcnInIGFuZCBwcm9wYWdhdGluZyBpdCB0byB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGFuZCByZXR1cm5pbmcgMC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kYXJpZXMgb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NpZFxcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0NzozMC4yMzM2MDI3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNDg4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWIyYzI4NTJjZWE5OTZhZmIyZjQyNTMwMjNkY2I0NjRmN2I5MGJjNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0NzoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xcbmluZGV4IGUzODU4ZmZhYjRiMjIuLmJlYjRiZGM3NDQ2MDEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtMjI4MCw3ICsyMjgwLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbiBcXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VkYXRhID0ga2RhbW9uZDtcXG4gXFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcXG4gXFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xcbi1cXHRpZiAoZGFtb25fY2FsbChjdHgsIHJlcGVhdF9jYWxsX2NvbnRyb2wpKVxcbitcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XFxuK1xcdGlmIChlcnIpXFxuIFxcdFxcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjMwLjc0Njg4ODgzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE0NjkzNzQ4MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25cIixcbiAgICBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NpZFxcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliMmMyODUyY2VhOTk2YWZiMmY0MjUzMDIzZGNiNDY0ZjdiOTBiYzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0NzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5iZWI0YmRjNzQ0NjAxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIyODAsNyArMjI4MCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZXJlcGVhdCA9IHRydWU7XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcbi1cdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXG4rXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XG4rXHRpZiAoZXJyKVxuIFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDc6MzAuNzQ2ODkxMDE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODg2MTY3NTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFN5c2ZzIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIHN5c2ZzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMjgwIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gSXQgc2VlbXMgbGlrZSBJJ20gZGVhbGluZyB3aXRoIHRoZSBmdW5jdGlvbiB0aGF0J3MgcmVzcG9uc2libGUgZm9yIHR1cm5pbmcgREFNT04gb24sIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gSSdtIHNlZWluZyBhIGNoYW5nZSBoZXJlLCBhIHNlZW1pbmdseSBtaW5vciB0d2VhaywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuUHJldmlvdXNseSwgdGhlcmUgd2FzIG5vIGVycm9yIGNoZWNraW5nIGFmdGVyIGNhbGxpbmcgYGRhbW9uX2NhbGxgIHdpdGggYSBgcmVwZWF0X2NhbGxfY29udHJvbGAgc3RydWN0dXJlLiBOb3csIHRoZXkndmUgYWRkZWQgYW4gYGVycmAgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBgZGFtb25fY2FsbGAuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaXMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGBpZiAoZXJyKSBrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtgIHRvIGZyZWUgdGhlIGByZXBlYXRfY2FsbF9jb250cm9sYCBpZiB0aGUgYGRhbW9uX2NhbGxgIHJldHVybnMgYW4gZXJyb3IuIFRoaXMgaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaWYgYGRhbW9uX2NhbGxgIGZhaWxzIHRvIGV4ZWN1dGUgY29ycmVjdGx5LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRvIHByZXZlbnQgaXNzdWVzIHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlciBoZWF2eSBsb2FkIG9yIGVuY291bnRlcnMgdW5leHBlY3RlZCBjb25kaXRpb25zLlxuXG5JdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IGl0J3MgYSBnb29kIGV4YW1wbGUgb2YgaG93IGV2ZW4gc21hbGwgY2hhbmdlcyBjYW4gY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIG9mIHRoZSBzeXN0ZW0uIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIHNpbWlsYXIgcGF0dGVybiB0byBiZSBpbXBsZW1lbnRlZCBhY3Jvc3MgdGhlIGNvZGUsIHRvIGVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgaGF2ZSB0aGVpciByZXR1cm4gdmFsdWVzIGNoZWNrZWQgYW5kIHByb3Blcmx5IGhhbmRsZWQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoYXQgaXMgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0NzozOS42MDg1Njk4ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjUwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMjI1MTpcXHRcXHQvKiBUT0RPOiBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHRzIHBlciBrZGFtb25kICovXFxuMjI1MjpcXHRcXHRpZiAoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjI1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0aWYgKGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eClcXG4yMjU2OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCk7XFxuMjI1NzpcXHRcXHRrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggPSBOVUxMO1xcbjIyNTg6XFx0XFxuMjI1OTpcXHRcXHRyZXBlYXRfY2FsbF9jb250cm9sID0ga21hbGxvY19vYmooKnJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbjIyNjA6XFx0XFx0aWYgKCFyZXBlYXRfY2FsbF9jb250cm9sKVxcbjIyNjE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjI2MjpcXHRcXG4yMjYzOlxcdFxcdGN0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdKTtcXG4yMjY0OlxcdFxcdGlmIChJU19FUlIoY3R4KSkge1xcbjIyNjU6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI2NjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjdHgpO1xcbjIyNjc6XFx0XFx0fVxcbjIyNjg6XFx0XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbjIyNjk6XFx0XFx0aWYgKGVycikge1xcbjIyNzA6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI3MTpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbjIyNzI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yMjczOlxcdFxcdH1cXG4yMjc0OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcXG4yMjc1OlxcdFxcbjIyNzY6XFx0XFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XFxuMjI3NzpcXHRcXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4yMjc4OlxcdFxcbjIyNzk6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcXG4yMjgwOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcbjIyODE6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcXG4yMjgyOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcXG4yMjgzOlxcdFxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjg0OlxcdFxcdGlmIChlcnIpXFxuMjI4NTpcXHRcXHRcXHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjg2OlxcdFxcdHJldHVybiBlcnI7XFxuMjI4NzpcXHR9XFxuMjI4ODpcXHRcXG4yMjg5OlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjI5MDpcXHR7XFxuMjI5MTpcXHRcXHRpZiAoIWtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eClcXG4yMjkyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIyOTM6XFx0XFx0ZGFtb25fc3RvcChcXHUwMDI2a2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4LCAxKTtcXG4yMjk0OlxcdFxcdC8qXFxuMjI5NTpcXHRcXHQgKiBUbyBhbGxvdyB1c2VycyBzaG93IGZpbmFsIG1vbml0b3JpbmcgcmVzdWx0cyBvZiBhbHJlYWR5IHR1cm5lZC1vZmZcXG4yMjk2OlxcdFxcdCAqIERBTU9OLCB3ZSBmcmVlIGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XFxuMjI5NzpcXHRcXHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcXG4yMjk4OlxcdFxcdCAqL1xcbjIyOTk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjM5LjYwODgyODIxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgwNzg2ODAxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIEZ1bmN0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgYSBncmlwIG9uIHRoaXMgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGZ1bmN0aW9uLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLiBJIGtub3cgaXQncyBhIGJpdCBmdXJ0aGVyIGRvd24sIHNvIGxldCBtZSBwdWxsIHVwIHRoZSBzZWN0aW9uIGZyb20gbGluZXMgMjI0MCB0byAyMjYwLiBIb2xkIG9uLi4uIGFjdHVhbGx5LCB0byBnZXQgdGhlIGZ1bGwgY29udGV4dCwgaXQncyBiZXN0IHRvIGV4cGFuZCB0aGUgdmlldyBhIGJpdC4gTGV0J3Mgc25hZyBsaW5lcyAyMjM1IHRocm91Z2ggMjI1NSBpbnN0ZWFkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCwgY29uY2lzZSBvdmVydmlldyBvZiB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGltbWVkaWF0ZSBzY29wZSwgZW5zdXJpbmcgSSBkb24ndCBtaXNzIGFueXRoaW5nIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjQ3LjY4NzUxMjI4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzU6XFx0XFx0ZGFtb25fc3lzZnNfdXBkX3R1bmVkX2ludGVydmFscyhzeXNmc19rZGFtb25kKTtcXG4yMjM2OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHN5c2ZzX2tkYW1vbmQpO1xcbjIyMzc6XFx0XFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyhzeXNmc19rZGFtb25kKTtcXG4yMjM4OlxcdG91dDpcXG4yMjM5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fc3lzZnNfbG9jayk7XFxuMjI0MDpcXHRcXHRyZXR1cm4gMDtcXG4yMjQxOlxcdH1cXG4yMjQyOlxcdFxcbjIyNDM6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbjIyNDQ6XFx0e1xcbjIyNDU6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbjIyNDY6XFx0XFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqcmVwZWF0X2NhbGxfY29udHJvbDtcXG4yMjQ3OlxcdFxcdGludCBlcnI7XFxuMjI0ODpcXHRcXG4yMjQ5OlxcdFxcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXFxuMjI1MDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjIyNTE6XFx0XFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xcbjIyNTI6XFx0XFx0aWYgKGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2VuciAhPSAxKVxcbjIyNTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjI1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDc6NDcuNjg3OTc1NDQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTE1NTIyODIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFN5c3RlbSBDYWxsIEZsb3cqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgZG93biB3aGF0IEknbSBzZWVpbmcgaGVyZS4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBJJ3ZlIGdvdCB0byBzYXksIEknbSBhIGJpdCBjb25jZXJuZWQgYWJvdXQgaG93IGVycm9yIGhhbmRsaW5nIHdhcyBiZWluZyBoYW5kbGVkIHByZXZpb3VzbHkuIEJlZm9yZSB0aGlzIGNvbW1pdCwgdGhlIHJldHVybiB2YWx1ZSBvZiBgZGFtb25fc3RhcnRgIHdhcyBjb3JyZWN0bHkgY2hlY2tlZCwgYnV0IGV2ZW4gaWYgYGRhbW9uX2NhbGxgIGZhaWxlZCwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgd2hvbGUgZnVuY3Rpb24gd2FzIGFsd2F5cyAwISBUaGF0J3MgYSBkZWZpbml0ZSBvdmVyc2lnaHQsIHNpbmNlIGBlcnJgIHdvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIHJlc3VsdCBvZiBgZGFtb25fc3RhcnRgLCBidXQgYGRhbW9uX2NhbGwoKWAgY291bGQgZmFpbCBzaWxlbnRseS4gTm93LCBpdCBsb29rcyBsaWtlIHRoYXQncyBmaXhlZCwgYW5kIGBlcnJgIGlzIHByb3Blcmx5IHNldCB0byB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYGRhbW9uX2NhbGwoKWAsIHNvIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkLiBUaGF0J3MgZ29vZCwgdGhhdCdzIHdoYXQgSSdkIGV4cGVjdC5cblxuQnV0IHRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gd2hhdCBoYXBwZW5zIGlmIGBkYW1vbl9jYWxsYCAqZG9lcyogZmFpbD8gTG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYWZ0ZXIgY2FsbGluZyBgZGFtb25fc3RhcnRgIGFuZCBzZXR0aW5nIHVwIGBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eGAsIGBkYW1vbl9jYWxsYCBpcyBjYWxsZWQsIGFuZCBpZiBpdCBmYWlscywgdGhlbiB0aGUgY3VycmVudCBgZXJyYCBpcyByZXR1cm5lZCwgYnV0IHRoZSBEQU1PTiBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlcmUncyBubyBjYWxsIHRvIGBkYW1vbl9zdG9wYCBpbiB0aGUgZmFpbHVyZSBwYXRoLiBUaGlzIG1lYW5zIGEgc3Vic2VxdWVudCBhdHRlbXB0IHRvIHN0b3AgREFNT04gdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UgbWlnaHQgZmFpbCBiZWNhdXNlIHRoZSBjb250ZXh0IGlzIGFscmVhZHkgcnVubmluZy4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoaXM7IGl0IGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgYnVnIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYSBiZWhhdmlvcmFsIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuIEl0IGNvdWxkIGJlIHRoYXQgREFNT04gZW5kcyB1cCBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIHdoZXJlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyBjYWxsZWQgZnJvbS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiB3aWxsIGhlbHAgYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIHRoaXMgaXMgZ29pbmcgdG8gY2F1c2Ugc29tZSBvdGhlciBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0Nzo1Mi44NDMyMDY5NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU4ODc5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTIyMjA9c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMjQyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjI0MzpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxubW0vZGFtb24vc3lzZnMuYy0yMjQ0LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI4OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMjk2LVxcdCAqIERBTU9OLCB3ZSBmcmVlIGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCBpbiBuZXh0XFxubW0vZGFtb24vc3lzZnMuYzoyMjk3OlxcdCAqIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oKSwgb3Iga2RhbW9uZHNfbnJfc3RvcmUoKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI5OC1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjM2NT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzcyLVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM3MzpcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihrZGFtb25kKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIzNzQtXFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfT0ZGOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0Nzo1Mi45MzkxMDE5ODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjMzOTMyMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTidzIFN5c2ZzIENvbW1hbmQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGZ1bmN0aW9uIG1hbmFnZXMgdGhlIGBEQU1PTl9TWVNGU19DTURfT05gIGNvbW1hbmQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB0cmFjZSBpdHMgaW52b2NhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIExldCdzIGRlbHZlIGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgbGluZXMgMjM2MCB0aHJvdWdoIDI0MjAgd2l0aGluIGBtbS9kYW1vbi9zeXNmcy5jYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIHNlZWsuIFRoaXMgc2VjdGlvbiBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgcGFydGljdWxhciBjb21tYW5kIGlzIGludGVncmF0ZWQgd2l0aGluIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuIFRoaXMgc2hvdWxkIHNob3cgbWUgdGhlIHJlbGV2YW50IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMzMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ3OjU2LjU3MzAzNzkyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzYwOlxcdCAqXFxuMjM2MTpcXHQgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYSBEQU1PTiBzeXNmcyBjb21tYW5kIGZvciBhIGtkYW1vbmQuXFxuMjM2MjpcXHQgKlxcbjIzNjM6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbjIzNjQ6XFx0ICovXFxuMjM2NTpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxcbjIzNjY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMjM2NzpcXHR7XFxuMjM2ODpcXHRcXHRpZiAoY21kICE9IERBTU9OX1NZU0ZTX0NNRF9PRkYgXFx1MDAyNlxcdTAwMjYga2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjM2OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMzcwOlxcdFxcbjIzNzE6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4yMzcyOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX09OOlxcbjIzNzM6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XFxuMjM3NDpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XFxuMjM3NTpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoa2RhbW9uZCk7XFxuMjM3NjpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVQ6XFxuMjM3NzpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzc4OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX2NvbW1pdF9pbnB1dCwga2RhbW9uZCk7XFxuMjM3OTpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG4yMzgwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbjIzODE6XFx0XFx0XFx0XFx0XFx0ZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHMsXFxuMjM4MjpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzgzOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1NUQVRTOlxcbjIzODQ6XFx0XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxuMjM4NTpcXHRcXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cywga2RhbW9uZCk7XFxuMjM4NjpcXHRcXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9VUERBVEVfU0NIRU1FU19UUklFRF9CWVRFUzpcXG4yMzg3OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIHRydWUpO1xcbjIzODg6XFx0XFx0Y2FzZSBEQU1PTl9TWVNGU19DTURfVVBEQVRFX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcXG4yMzg5OlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKGtkYW1vbmQsIGZhbHNlKTtcXG4yMzkwOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcXG4yMzkxOlxcdFxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuMjM5MjpcXHRcXHRcXHRcXHRrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdLVxcdTAwM2VzY2hlbWVzKTtcXG4yMzkzOlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XFxuMjM5NDpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk1OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxuMjM5NjpcXHRcXHRcXHRcXHRcXHRrZGFtb25kKTtcXG4yMzk3OlxcdFxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XFxuMjM5ODpcXHRcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG4yMzk5OlxcdFxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMsIGtkYW1vbmQpO1xcbjI0MDA6XFx0XFx0ZGVmYXVsdDpcXG4yNDAxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0MDI6XFx0XFx0fVxcbjI0MDM6XFx0fVxcbjI0MDQ6XFx0XFxuMjQwNTpcXHRzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbjI0MDY6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuMjQwNzpcXHR7XFxuMjQwODpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbjI0MDk6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQsIGtvYmopO1xcbjI0MTA6XFx0XFx0ZW51bSBkYW1vbl9zeXNmc19jbWQgY21kO1xcbjI0MTE6XFx0XFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbjI0MTI6XFx0XFxuMjQxMzpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjI0MTQ6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNDE1OlxcdFxcdGZvciAoY21kID0gMDsgY21kIFxcdTAwM2MgTlJfREFNT05fU1lTRlNfQ01EUzsgY21kKyspIHtcXG4yNDE2OlxcdFxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIGRhbW9uX3N5c2ZzX2NtZF9zdHJzW2NtZF0pKSB7XFxuMjQxNzpcXHRcXHRcXHRcXHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XFxuMjQxODpcXHRcXHRcXHRcXHRicmVhaztcXG4yNDE5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDc6NTYuNTczMjY0MDI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3MzY2MDU1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gU3RhdGUgQ29udHJvbDogQSBRdWljayBNZW50YWwgQXVkaXQqKlxuXG5Pa2F5LCBzbyBgc3RhdGVfc3RvcmVgIOKAkyB0aGF0J3MgdGhlIGhhbmRsZXIgZm9yIHdyaXRpbmcgdG8gdGhlIHN5c2ZzIGF0dHJpYnV0ZSEgU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBvbmAgY29tbWFuZCBhbmQgaG93IGl0IGxhbmRzIGluIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NpZFx1MDAzZS9zdGF0ZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgd2F5IHRvIGludGVyZmFjZSB3aXRoIGtlcm5lbCBpbnRlcm5hbHMgZnJvbSB1c2Vyc3BhY2UsIGFuZCBpbiB0aGlzIGNhc2UsIGl0J3MgbWFuYWdpbmcgdGhlIERBTU9OIGZyYW1ld29yay5cblxuUmlnaHQsIERBTU9OIOKAkyBEYXRhIEFjY2VzcyBNb25pdG9yaW5nLiBUaGF0J3Mgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzZWN0aW9uIChgbW0vZGFtb25gKS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIHRoaXMgaXMgYSBmZWF0dXJlIEkgY2FuIHJlbGlhYmx5IHRlc3QgaW4gbXkgdXN1YWwgUUVNVSBzZXR1cHMgb3Igb3RoZXIgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBBaCwgeWVzISBUaGUgcHJlc2VuY2Ugb2YgdGhhdCBzeXNmcyBmaWxlIGAvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8uLi5gIGNvbmZpcm1zIGl0LiBFeGNlbGxlbnQhXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluIHRvbyBkZWVwbHksIGxldCdzIGp1c3QgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgREFNT04gYW5kIGRvdWJsZS1jaGVjayB0aGUgYG1tL2RhbW9uL3N5c2ZzLmNgIGZpbGUgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGVybXMgb2YgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzE1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MDIuMzA5ODcyNTIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjcwMjg0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb24vc3lzZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjAyLjM2MjU4MjU3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDk0NzcyNTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIERBTU9OJ3MgTWFrZWZpbGUgYW5kIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIGJ1aWxkIGluZnJhc3RydWN0dXJlIGZvciB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvciAoREFNT04pIGltcGxlbWVudGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG9wZW4gdXAgYG1tL2RhbW9uL01ha2VmaWxlYCBhbmQgYG1tL2RhbW9uL0tjb25maWdgLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGJ1aWxkIHJ1bGVzIGFuZCBsaWtlbHkgdGhlIG1vZHVsZSBkZWZpbml0aW9ucyBpbiB0aGUgTWFrZWZpbGUuIEZyb20gYSBLY29uZmlnIHBlcnNwZWN0aXZlLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gREFNT04ncyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJ1bnRpbWUgYmVoYXZpb3JzIHRoYXQgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyBEQU1PTiBhbmQgdG8gc2VlIHRoZSBtb2R1bGFyaXR5IG9mIHRoZSBkZXNpZ24sIHdoaWNoIG1pZ2h0IHJldmVhbCBhc3BlY3RzIHJlbGF0ZWQgdG8gaXRzIHNjYWxhYmlsaXR5IGFuZCBjb25maWd1cmFiaWxpdHkuIEFuYWx5emluZyB0aGUgTWFrZWZpbGUgd2lsbCBxdWlja2x5IGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLCB3aGlsZSBLY29uZmlnIHdpbGwgaWxsdW1pbmF0ZSB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gaXMgYmFrZWQgaW50byB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MTMuMzEwMzEwNTk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjEzLjMxMDQwNjI0NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzI0NDM5NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIG1lYW5zIEknbSBnb2luZyB0byBiZSBsb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgREFNT04gc3Vic3lzdGVtLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGVmYXVsdCBzZXR0aW5ncy4gVGhpcyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2Ygd2hhdCdzICpjb25maWd1cmFibGUqIHdpdGhpbiBEQU1PTi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgb24gZW5hYmxpbmcvZGlzYWJsaW5nIERBTU9OIGl0c2VsZiwgaXRzIHZhcmlvdXMgc2FtcGxpbmcgYW5kIG1vbml0b3JpbmcgdGVjaG5pcXVlcyAobGlrZSB0aGUgcmVnaW9uIG1vbml0b3JpbmcsIGFjY2VzcyBwYXR0ZXJuIGFuYWx5c2lzKSwgYW5kIHByb2JhYmx5IHJlbGF0ZWQgdHVuaW5nIHBhcmFtZXRlcnMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGNvbnRyb2xsYWJsZSBsZXZlcnMgYW5kIHNlZSBob3cgdGhleSBpbXBhY3Qgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZmVhdHVyZXMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBjb25mbGljdHMgb3Igb3Bwb3J0dW5pdGllcyBmb3Igc3luZXJnaXN0aWMgY29uZmlndXJhdGlvbi4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gZXN0YWJsaXNoIHRoZSBjb25maWd1cmFiaWxpdHkgbGFuZHNjYXBlIGJlZm9yZSBkb2luZyBhbnkgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoxNS42MzQ4NDkxNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIERBTU9OXFxuICAgNjpcXHRcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcXG4gICA5OlxcdFxcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXFxuICAxMDpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXFxuICAxMzpcXHRcXHQgIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxuICAyMDpcXHRcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbiAgMjE6XFx0XFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbiAgMjI6XFx0XFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbiAgMjc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgMjk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICAzNDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgNjQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ4OjE1LjYzNDk4NjAwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzU4NzQ5MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIERBTU9OJ3MgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBEQU1PTl9TWVNGU2AuIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgREFNT05gIGFuZCBgU1lTRlNgIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBJIGtub3cgYERBTU9OYCBsaXZlcyBpbiBgbW0vZGFtb24vS2NvbmZpZ2AsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgaWYgYERBTU9OYCBpdHNlbGYgaXMgZXZlbiBzb3VyY2VkIGZyb20gdGhlIG1haW4gYG1tL0tjb25maWdgLiBJdOKAmXMganVzdCBnb29kIHByYWN0aWNlIHRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LiBMZXQncyBnbyB0YWtlIGEgbG9vayBhdCB0aGUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MTkuOTkzNzY0MDc5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE4OTY5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MjAuMDUzOTYwNDM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NjI0NTU2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOlxuXG4qKlRyYWNpbmcgdGhlIFNvdXJjZSBvZiBgbW0vZGFtb24vS2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbW0vZGFtb24vS2NvbmZpZ2AgaXMgYWN0dWFsbHkgc291cmNlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uICBJdCdzIGEgYEtjb25maWdgIGZpbGUsIHNvIGl0J3MgY2xlYXJseSBpbnZvbHZlZCBpbiBjb25maWd1cmluZyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIG1vZHVsZSwgd2hpY2ggaXMgYSBrZXJuZWwgZmVhdHVyZSBJJ20gZmFtaWxpYXIgd2l0aC4gIFRoZSBxdWVzdGlvbiBpcyAqaG93KiB0aGUgYnVpbGQgc3lzdGVtIGtub3dzIGFib3V0IGl0LlxuXG5NeSBpbml0aWFsIGxpbmUgb2YgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgdHlwaWNhbCBgS2NvbmZpZ2AgaW5jbHVzaW9uIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIGNvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGEgYHNvdXJjZSBcIm1tL2RhbW9uL0tjb25maWdcImAgc3RhdGVtZW50IChvciBzb21ldGhpbmcgc2ltaWxhcikgaW4gb3RoZXIgYEtjb25maWdgIGZpbGVzIGhpZ2hlciB1cCB0aGUgdHJlZS4gIFBlcmhhcHMgaW4gdGhlIG1haW4gYEtjb25maWdgIG9yIHdpdGhpbiB0aGUgYG1tYCBkaXJlY3RvcnkncyBgS2NvbmZpZ2AgZmlsZSwgb3IgcG90ZW50aWFsbHkgdGhyb3VnaCBhIHNlcmllcyBvZiBcImlmXCIgc3RhdGVtZW50cyB0aGF0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZSBpdCBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gSSBtaWdodCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgc29tZSBtYWNyby1saWtlIGRpcmVjdGl2ZXMgaWYgdGhlcmUgYXJlIGFueSB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuXG5cblRoZW4gSSBjb3VsZCB1c2UgYG1ha2UgbWVudWNvbmZpZ2AgKG9yIHdoaWNoZXZlciBjb25maWd1cmF0aW9uIHRvb2wgaXMgcmVsZXZhbnQpIGFuZCwgaWYgcG9zc2libGUsIGxvb2sgZm9yIHRoZSBvcHRpb25zIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtIHRvIHNlZSBob3cgdGhleSBsaW5rIHRvIHRoaXMgZmlsZS4gSSBoYXZlIHNvbWUgdG9vbHMgdG8gaGVscCBtZSB3aXRoIHRoaXMuIEkgY2FuIGFsc28gdHJ5IGEgYGdyZXBgIHNlYXJjaCBmb3IgdGhlIGZpbGUgbmFtZSBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbG9va2luZyBmb3IgbGlrZWx5IGluY2x1c2lvbiBwb2ludHMuIElmIHRoZSBEQU1PTiBmZWF0dXJlIGl0c2VsZiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCB0aGVyZSB3b3VsZCBiZSBzb21lIG1vcmUgd29yayB0byBkbywgYnV0IHRoYXQgaXMgbXkgZ2VuZXJhbCBhcHByb2FjaC5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBkaXJlY3QgcGF0aCBmcm9tIGEgdG9wLWxldmVsIGBLY29uZmlnYCBmaWxlIG9yIGFub3RoZXIgcmVsZXZhbnQgYEtjb25maWdgIGZpbGUgdG8gYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIHNob3VsZCBsZWFkIG1lIHRvIHRoZSBlbnRyeSBwb2ludHMgd2hlcmUgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyNi41MTY0MTkxMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTg1MzAyNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0ODU9Y29uZmlnIExBWllfTU1VX01PREVfS1VOSVRfVEVTVFxcbi0tXFxubW0vS2NvbmZpZy0xNDk2LVxcbm1tL0tjb25maWc6MTQ5Nzpzb3VyY2UgXFxcIm1tL2RhbW9uL0tjb25maWdcXFwiXFxubW0vS2NvbmZpZy0xNDk4LVxcbi0tXFxuc2FtcGxlcy9LY29uZmlnPTMyNT1zb3VyY2UgXFxcInNhbXBsZXMvcnVzdC9LY29uZmlnXFxcIlxcbnNhbXBsZXMvS2NvbmZpZy0zMjYtXFxuc2FtcGxlcy9LY29uZmlnOjMyNzpzb3VyY2UgXFxcInNhbXBsZXMvZGFtb24vS2NvbmZpZ1xcXCJcXG5zYW1wbGVzL0tjb25maWctMzI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODoyOS4yMTQ5NTg0NjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODk3ODU0MzE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFN5c2ZzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gYERBTU9OYCBpdHNlbGYgaXMgcHJldHR5IGNsZWFuIOKAkyBubyBleHRyYSBkZXBlbmRlbmNpZXMgYmV5b25kIE1NIGNvbmZpZ3MsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBEQU1PTl9TWVNGU2AgYnVpbGRzIG9uIHRvcCBvZiBgREFNT05gIGFuZCBgU1lTRlNgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdC5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoaXMgcGF0Y2guIEkgc2VlIHRoZSBjaGFuZ2UgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLiBJdCdzIHJpZ2h0IGhlcmU6XG5gYGBkaWZmXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcbmluZGV4IGUzODU4ZmZhYjRiMjIuLmJlYjRiZGM3NDQ2MDEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMjI4MCw3ICsyMjgwLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuIFx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VkYXRhID0ga2RhbW9uZDtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlcmVwZWF0ID0gdHJ1ZTtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuLVx0aWYgKGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKSlcbitcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcbitcdGlmIChlcnIpXG4gXHRcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5gYGBcblxuQWgsIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZSBpcyBtaW5vci4gVGhleSd2ZSBqdXN0IGFkZGVkIGFuIGBlcnJgIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgYGRhbW9uX2NhbGxgIGJlZm9yZSBjaGVja2luZyBpdC4gVGhlbiBpZiB0aGVyZSdzIGFuIGVycm9yLCB0aGV5IGZyZWUgdGhlIGByZXBlYXRfY2FsbF9jb250cm9sYCBzdHJ1Y3R1cmUuIFNlZW1zIGxpa2UgYSBzaW1wbGUgY2xlYW51cCBvciBtYXliZSBhbiBhdHRlbXB0IHRvIG1ha2UgdGhlIGVycm9yIGhhbmRsaW5nIG1vcmUgcm9idXN0LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGdpdCBsb2cgZm9yIHRoaXMgY29tbWl0IHRvIGdldCBzb21lIGNvbnRleHQuIEkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCB3aGF0IHRoZSBvcmlnaW5hbCBpbnRlbnQgd2FzLCBvciBpZiB0aGVyZSB3YXMgYSBzcGVjaWZpYyBpc3N1ZSB0aGlzIGZpeGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODozOC4xOTM1MDU3MDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODA2NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlYWxsb2Nfb25fY2FuY2VsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zNjc3PXN0YXRpYyB2b2lkIGtkYW1vbmRfY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgY2FuY2VsKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2OTgtXFx0XFx0XFx0Y29tcGxldGUoXFx1MDAyNmNvbnRyb2wtXFx1MDAzZWNvbXBsZXRpb24pO1xcbm1tL2RhbW9uL2NvcmUuYzozNjk5OlxcdFxcdGVsc2UgaWYgKGNvbnRyb2wtXFx1MDAzZWNhbmNlbGVkIFxcdTAwMjZcXHUwMDI2IGNvbnRyb2wtXFx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsKVxcbm1tL2RhbW9uL2NvcmUuYy0zNzAwLVxcdFxcdFxcdGtmcmVlKGNvbnRyb2wpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjQzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI4MS1cXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VyZXBlYXQgPSB0cnVlO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjI4MjpcXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XFxubW0vZGFtb24vc3lzZnMuYy0yMjgzLVxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6MzguMjU2MzE3NTY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNjQ4Nzc4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21taXQgTWVzc2FnZSBhbmQgYGRhbW9uX2NhbGxgKipcblxuSG1tLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IEdpdCBjb21taXQsIGlkZWFsbHkgdGhlIEhFQUQgY29tbWl0LiBJIGRvbid0IGhhdmUgdGhlIHR5cGljYWwgYGdpdCBsb2dgIHRvb2wgYXZhaWxhYmxlLCB3aGljaCBpcyBhIGJpdCBvZiBhIHBhaW4uIEJ1dCBJICpkbyogc2VlIGEgbWVzc2FnZSBpbiB0aGUgcHJvbXB0OiBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiLiBPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHByb3ZpZGluZyAqYSogY29tbWl0IG1lc3NhZ2UsIGJ1dCBpdCBsb29rcyBsaWtlIGl0J3MgYSBkZXJpdmVkIG9uZSwgbm90IHRoZSBvcmlnaW5hbC4gVGhhdCdzIGdvb2QgdG8ga25vdywgYnV0IGl0IGlzbid0IHdoYXQgSSB3YW50ZWQuIEkgbmVlZCBtb3JlIGNvbnRleHQuXG5cbkdpdmVuIHRoYXQgdGhlIHBhdGNoIGludm9sdmVzIFwic3l6LWNsdXN0ZXJcIiwgaXQgbWlnaHQgaW52b2x2ZSB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgb3IgdGhlIFwiZGFtb25cIiBzdWJzeXN0ZW0sIGFzIHRoZSB0b29sIGlzIG9mdGVuIGludm9sdmVkIGluIHRoZXNlIGFyZWFzLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYW1vbl9jYWxsYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHllcywgaXQncyBpbiBgbW0vZGFtb24vY29yZS5jYC4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgdGhhdCBjb21taXQgbWlnaHQgYmUgZG9pbmcgaW4gcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgZGFtb25fY2FsbGAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODEwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NDEuNDIxMTk4ODA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc1NTEzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fY2FsbFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMDA4PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAzNC0gKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jOjEwMzU6ICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbm1tL2RhbW9uL2NvcmUuYy0xMDM2LSAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxcbi0tXFxubW0vZGFtb24vY29yZS5jPTExMzQ9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE1NC0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBwYXJhbWV0ZXJzLXVwZGF0ZSBzYWZlIGNvbnRleHQsIGxpa2VcXG5tbS9kYW1vbi9jb3JlLmM6MTE1NTogKiBkYW1vbl9jYWxsKCkuXFxubW0vZGFtb24vY29yZS5jLTExNTYtICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTgwND1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODMwLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHBhcmFtZXRlcnMtdXBkYXRlIHNhZmUgY29udGV4dCwgbGlrZVxcbm1tL2RhbW9uL2NvcmUuYzoxODMxOiAqIGRhbW9uX2NhbGwoKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTgzMi0gKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjA2MTogKiBkYW1vbl9jYWxsKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbiBvbiBEQU1PTiB3b3JrZXIgdGhyZWFkIChrZGFtb25kKS5cXG5tbS9kYW1vbi9jb3JlLmMtMjA2Mi0gKiBAY3R4OlxcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gZm9yLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwODQtICovXFxubW0vZGFtb24vY29yZS5jOjIwODU6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNjYyPXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjcyLSAqIElmIHRoZXJlIGFyZSBcXHUwMDI2c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXF1ZXN0cyB0aGF0IHJlZ2lzdGVyZWQgdmlhXFxubW0vZGFtb24vY29yZS5jOjM2NzM6ICogXFx1MDAyNmRhbW9uX2NhbGwoKSBvbiBAY3R4LCBkbyBvciBjYW5jZWwgdGhlIGludm9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGRlcGVuZGluZ1xcbm1tL2RhbW9uL2NvcmUuYy0zNjc0LSAqIG9uIEBjYW5jZWwuICBAY2FuY2VsIGlzIHNldCB3aGVuIHRoZSBrZGFtb25kIGlzIGFscmVhZHkgb3V0IG9mIHRoZSBtYWluIGxvb3BcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzYxPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4NDItXFx0XFx0XFx0a2RhbW9uZF91c2xlZXAoY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xcbm1tL2RhbW9uL2NvcmUuYzozODQzOlxcdFxcdFxcdC8qIGFsbG93IGNhbGxlciB1bnNldCBwYXVzZSB2aWEgZGFtb25fY2FsbCgpICovXFxubW0vZGFtb24vY29yZS5jLTM4NDQtXFx0XFx0XFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNTE9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzcwLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzcxOlxcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzcyLVxcdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM3NC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM3NTpcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNvbnRyb2wpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc2LVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyNi1cXHRcXHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0Mjc6XFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyOC19XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9Mjc2PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yOTUtXFxubW0vZGFtb24vcmVjbGFpbS5jOjI5NjpcXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjk3LVxcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yOTktXFxubW0vZGFtb24vcmVjbGFpbS5jOjMwMDpcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXFx1MDAyNmNvbnRyb2wpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMDEtXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzMwPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ3LVxcdFxcdGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDg6XFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ5LX1cXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjIxLVxcdGNhbGxfY29udHJvbC5kYXRhID0gZGFtb25fc3RhdF9jb250ZXh0O1xcbm1tL2RhbW9uL3N0YXQuYzoyMjI6XFx0cmV0dXJuIGRhbW9uX2NhbGwoZGFtb25fc3RhdF9jb250ZXh0LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjIzLX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyODItXFx0cmVwZWF0X2NhbGxfY29udHJvbC1cXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjI4MzpcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjg0LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyODk9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMwMS1cXG5tbS9kYW1vbi9zeXNmcy5jOjIzMDI6c3RhdGljIGludCBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKGludCAoKmZuKSh2b2lkICpkYXRhKSxcXG5tbS9kYW1vbi9zeXNmcy5jLTIzMDMtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzMTEtXFx0Y2FsbF9jb250cm9sLmRhdGEgPSBrZGFtb25kO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjMxMjpcXHRlcnIgPSBkYW1vbl9jYWxsKGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCwgXFx1MDAyNmNhbGxfY29udHJvbCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMzEzLVxcdHJldHVybiBlcnIgPyBlcnIgOiBjYWxsX2NvbnRyb2wucmV0dXJuX2NvZGU7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjU9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3Ni1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVQ6XFxubW0vZGFtb24vc3lzZnMuYzoyMzc3OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3OC1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc19jb21taXRfaW5wdXQsIGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3OS1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DT01NSVRfU0NIRU1FU19RVU9UQV9HT0FMUzpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzODA6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYy0yMzgxLVxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzgzLVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX1NUQVRTOlxcbm1tL2RhbW9uL3N5c2ZzLmM6MjM4NDpcXHRcXHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcXG5tbS9kYW1vbi9zeXNmcy5jLTIzODUtXFx0XFx0XFx0XFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfc3RhdHMsIGtkYW1vbmQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzkzLVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9TQ0hFTUVTX0VGRkVDVElWRV9RVU9UQVM6XFxubW0vZGFtb24vc3lzZnMuYzoyMzk0OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM5NS1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzk3LVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX1VQREFURV9UVU5FRF9JTlRFUlZBTFM6XFxubW0vZGFtb24vc3lzZnMuYzoyMzk4OlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM5OS1cXHRcXHRcXHRcXHRkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzLCBrZGFtb25kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NDEuNTM4NzU3NDYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1OTEyNDkxNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgYGRhbW9uX2NhbGxgIGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBDb3JlOiBUcmFjaW5nIGBkYW1vbl9jYWxsYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGRhbW9uX2NhbGxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yay4gSXQncyBuYW1lZCBcImNhbGwsXCIgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQncyBsaWtlbHkgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgc29tZSBEQU1PTiBmdW5jdGlvbmFsaXR5IGlzIGludm9rZWQuIEkgZXhwZWN0IHRoaXMgdG8gYmUgYSBjcnVjaWFsIGNvbnRyb2wgcG9pbnQuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLCBsb29raW5nIGZvciB0aGUga2V5IGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipXaGF0IHRyaWdnZXJzIHRoaXMgY2FsbD8qKiBJcyBpdCB0aW1lLWJhc2VkLCBldmVudC1kcml2ZW4sIG9yIGEgY29tYmluYXRpb24/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBJcyBpdCBjYWxsZWQgZnJvbSBhIGtlcm5lbCB0aHJlYWQsIGludGVycnVwdCBjb250ZXh0LCBvciB0YXNrIGNvbnRleHQ/XG4qICAgKipXaGF0IGFyZSBpdHMgaW5wdXRzPyoqIEkgbmVlZCB0byBrbm93IHdoYXQgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4uIEFyZSB0aGV5IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgaGFuZGxlcyB0byB0aGUgREFNT04gc3RydWN0dXJlcywgb3IgbWVtb3J5IHJlZ2lvbiBpbmZvcm1hdGlvbj9cbiogICAqKldoYXQgZG9lcyBpdCBkbz8qKiBXaGF0IGlzIHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQncyBnb2luZyB0byBpdGVyYXRlIHRocm91Z2ggc29tZSBkYXRhIHN0cnVjdHVyZXMsIHByb2JhYmx5IERBTU9OJ3MgaW50ZXJuYWwgc3RhdGUsIGFuZCBtYWtlIGRlY2lzaW9ucyBhYm91dCBtZW1vcnkgcmVnaW9ucyBiYXNlZCBvbiB0aGUgREFNT04gYWxnb3JpdGhtIG9yIGFueSBvdGhlciBwb2xpY3kuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBkZWNpc2lvbi1tYWtpbmcgcHJvY2Vzcy4gRG9lcyBpdCBzY2hlZHVsZSBvcGVyYXRpb25zLCBtYWtlIGltbWVkaWF0ZSBjaGFuZ2VzLCBvciB0cmlnZ2VyIGZ1cnRoZXIgYWN0aW9ucz9cbiogICAqKldoYXQgYXJlIGl0cyBvdXRwdXRzL3NpZGUgZWZmZWN0cz8qKiBEb2VzIGl0IG1vZGlmeSBhbnkgbWVtb3J5IHJlZ2lvbnM/IERvZXMgaXQgY2hhbmdlIGFueSBrZXJuZWwgc3RydWN0dXJlcz8gRG9lcyBpdCByZXBvcnQgYW55IG1ldHJpY3Mgb3Igc3RhdGlzdGljcz9cbiogICAqKldoZXJlIGRvZXMgaXQgZml0IGluIHRoZSBvdmVyYWxsIERBTU9OIGV4ZWN1dGlvbiBmbG93PyoqIEhvdyBpcyBpdCByZWxhdGVkIHRvIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBkYW1vbl9pbml0YCBvciBgZGFtb25fdXBkYXRlYD9cblxuSSdtIHByZXBhcmVkIHRvIGZvbGxvdyB0aGUgY29udHJvbCBmbG93LCBwb3RlbnRpYWxseSB1c2luZyBjcm9zcy1yZWZlcmVuY2VzIGFuZCBsb29raW5nIGF0IHdoYXQgdGhpcyBmdW5jdGlvbiBjYWxscy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0cywgaW5wdXRzLCBvcGVyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgcm9sZSB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yayB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIGl0cyBwdXJwb3NlLiBMZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0ODo1Ny40NTEyNTI0MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDgwOlxcdCAqXFxuMjA4MTpcXHQgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgZmFpbGVkLCB0aGUgQGN0eCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0b3BwZWQuXFxuMjA4MjpcXHQgKlxcbjIwODM6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbjIwODQ6XFx0ICovXFxuMjA4NTpcXHRpbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuMjA4NjpcXHR7XFxuMjA4NzpcXHRcXHRpZiAoIWNvbnRyb2wtXFx1MDAzZXJlcGVhdClcXG4yMDg4OlxcdFxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuMjA4OTpcXHRcXHRjb250cm9sLVxcdTAwM2VjYW5jZWxlZCA9IGZhbHNlO1xcbjIwOTA6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmNvbnRyb2wtXFx1MDAzZWxpc3QpO1xcbjIwOTE6XFx0XFxuMjA5MjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XFxuMjA5MzpcXHRcXHRpZiAoY3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlKSB7XFxuMjA5NDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG4yMDk1OlxcdFxcdFxcdGdvdG8gY2FuY2VsZWQ7XFxuMjA5NjpcXHRcXHR9XFxuMjA5NzpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjb250cm9sLVxcdTAwM2VsaXN0LCBcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzKTtcXG4yMDk4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbjIwOTk6XFx0XFx0aWYgKGNvbnRyb2wtXFx1MDAzZXJlcGVhdClcXG4yMTAwOlxcdFxcdFxcdHJldHVybiAwO1xcbjIxMDE6XFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29udHJvbC1cXHUwMDNlY29tcGxldGlvbik7XFxuMjEwMjpcXHRcXHRpZiAoY29udHJvbC1cXHUwMDNlY2FuY2VsZWQpXFxuMjEwMzpcXHRcXHRcXHRnb3RvIGNhbmNlbGVkO1xcbjIxMDQ6XFx0XFx0cmV0dXJuIDA7XFxuMjEwNTpcXHRcXG4yMTA2OlxcdGNhbmNlbGVkOlxcbjIxMDc6XFx0XFx0d2hpbGUgKGRhbW9uX2lzX3J1bm5pbmcoY3R4KSlcXG4yMTA4OlxcdFxcdFxcdHNjaGVkdWxlX3RpbWVvdXRfaWRsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xcbjIxMDk6XFx0XFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XFxuMjExMDpcXHRcXG4yMTExOlxcdH1cXG4yMTEyOlxcdFxcbjIxMTM6XFx0LyoqXFxuMjExNDpcXHQgKiBkYW1vc193YWxrKCkgLSBJbnZva2UgYSBnaXZlbiBmdW5jdGlvbnMgd2hpbGUgREFNT1Mgd2FsayByZWdpb25zLlxcbjIxMTU6XFx0ICogQGN0eDpcXHREQU1PTiBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBmb3IuXFxuMjExNjpcXHQgKiBAY29udHJvbDpcXHRDb250cm9sIHZhcmlhYmxlIG9mIHRoZSB3YWxrIHJlcXVlc3QuXFxuMjExNzpcXHQgKlxcbjIxMTg6XFx0ICogQXNrIERBTU9OIHdvcmtlciB0aHJlYWQgKGtkYW1vbmQpIG9mIEBjdHggdG8gY2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIHJlZ2lvblxcbjIxMTk6XFx0ICogdGhhdCB0aGUga2RhbW9uZCB3aWxsIGFwcGx5IERBTU9TIGFjdGlvbiB0bywgYW5kIHdhaXQgdW50aWwgdGhlIGtkYW1vbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDg6NTcuNDUxNDE1MDEzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3ODQ3NDY0OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIERBTU9OIHN5c2ZzIGVycm9yIGhhbmRsaW5nIGZvciBmdXp6aW5nIHBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGNoYW5nZXMgaG93IGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBoYW5kbGVzIGVycm9ycyB3aGVuIGNhbGxpbmcgYGRhbW9uX2NhbGxgLiBQcmV2aW91c2x5LCBhIGZhaWx1cmUgZnJvbSBgZGFtb25fY2FsbGAgKHNwZWNpZmljYWxseSwgYC1FQ0FOQ0VMRURgKSBjb3VsZCBiZSBtYXNrZWQsIHJldHVybmluZyBzdWNjZXNzIGZyb20gdGhlIHN5c2ZzIGNhbGwuIE5vdywgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZXZlbiByZWFjaGFibGUuICBZZXMsIGl0J3MgdHJpZ2dlcmVkIGJ5IHdyaXRpbmcgXCJvblwiIHRvIHRoZSBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjaWRcdTAwM2Uvc3RhdGVgIHN5c2ZzIGVudHJ5LiBUaGF0J3MgYSBjbGVhciBlbnRyeSBwb2ludC5cblxuTm93LCBpcyB0aGlzIGZ1enphYmxlPyBBY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCB0aGlzICppcyogYSBjYW5kaWRhdGU6IGl0J3MgYSBtb2RpZmljYXRpb24gaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLCB3aGljaCBmYWxscyB1bmRlciB0aGUgXCJjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobW0vKVwiIGFuZCB0aGUgY2hhbmdlIGFmZmVjdHMgZXJyb3IgcHJvcGFnYXRpb24gYW5kIGRhdGEgc3RydWN0dXJlIGludGVyYWN0aW9uLiBEQU1PTiBpcyBhbHNvIGFjdGl2ZWx5IGludGVyYWN0ZWQgd2l0aCBieSBzeXprYWxsZXIgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLlxuXG5UbyBjb25maXJtIGZ1enphYmlsaXR5LCBJJ20gY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3M6IGBDT05GSUdfREFNT05gIGFuZCBgQ09ORklHX0RBTU9OX1NZU0ZTYC4gYERBTU9OX1NZU0ZTYCBkZXBlbmRzIG9uIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIGFyZSBib3RoIHN0YW5kYXJkLCBzbyB0aG9zZSBhcmUgbXkgYEVuYWJsZUNvbmZpZ3NgLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGJlIHByZWNpc2UuICBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLiBJIG11c3QgYWxzbyBpbmNsdWRlIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCAodGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXQpLCBzbyB0aGUgZnV6emVyIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGlubGluaW5nLCBhbmQgYGRhbW9uX2NhbGxgIGl0c2VsZiAodGhlIGZ1bmN0aW9uIHdob3NlIHJldHVybiB2YWx1ZSBpcyBjaGFuZ2VkKS4gIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGV5J3JlIHRoZSBjb3JlIGNvbXBvbmVudHMgb2YgdGhlIHBhdGNoLiBUaGUgbG9naWMgYmVpbmcgbW9kaWZpZWQgaXMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy5cblxuSSdtIGRvdWJsZS1jaGVja2luZyB0aGUgY3JpdGVyaWEgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyB0aGF0IHdvdWxkIG1ha2UgdGhpcyAqbm90KiB3b3J0aCBmdXp6aW5nLiBJdCdzIGEga2VybmVsIGNvZGUgY2hhbmdlLCBleGVjdXRhYmxlLCBhbmQgYSByZWFjaGFibGUgcGF0aCB2aWEgc3lzZnMuIFNvIFdvcnRoRnV6emluZyBtdXN0IGJlIHRydWUuXG5cblNvLCBoZXJlJ3MgbXkgY29uZmlndXJhdGlvbjpcblxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIkRBTU9OXCIsIFwiREFNT05fU1lTRlNcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbiwgZGFtb25fc3lzZnNfaGFuZGxlX2NtZCwgZGFtb25fY2FsbF1gXG5cbkV2ZXJ5dGhpbmcgYWxpZ25zLCB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg5LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OToyNS4yOTg4ODM5OTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE3NDkzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25cIixcbiAgICBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NpZFxcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25cIixcbiAgICBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgICBcImRhbW9uX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBwcm9wYWdhdGlvbiBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgcHJvcGVybHkgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGZyb20gZGFtb25fY2FsbCgpIGluc3RlYWQgb2YgaWdub3JpbmcgaXQgYW5kIHJldHVybmluZyBzdWNjZXNzLiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgKC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NpZFxcdTAwM2Uvc3RhdGUpIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo0OToyNS40NDA2NDEwNzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTYwMzU2MDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjQ5OjI1LjQ0MTExMjQyOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExMTYwMzA4NTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpIGJ5IHN0b3JpbmcgdGhlIHJldHVybiBjb2RlIG9mIGRhbW9uX2NhbGwoKSBpbiB0aGUgZXhpc3RpbmcgbG9jYWwgdmFyaWFibGUgJ2VycicgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIHRoZSBjYWxsZXIsIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcgaXQgYW5kIHJldHVybmluZyAwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRhcmllcyBvciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliMmMyODUyY2VhOTk2YWZiMmY0MjUzMDIzZGNiNDY0ZjdiOTBiYzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMTo0NzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5iZWI0YmRjNzQ0NjAxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIyODAsNyArMjI4MCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZXJlcGVhdCA9IHRydWU7XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRlYWxsb2Nfb25fY2FuY2VsID0gdHJ1ZTtcbi1cdGlmIChkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCkpXG4rXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XG4rXHRpZiAoZXJyKVxuIFx0XHRrZnJlZShyZXBlYXRfY2FsbF9jb250cm9sKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NDk6MjUuNDQxMTE0MTE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc4MjkwMjY5NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gU3lzZnMgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIHRoZSBzdGFuZGFyZCB0b29sczsgbGV0J3MgcHVsbCB1cCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCB0aGVuIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGVudCBvZiBgbW0vZGFtb24vc3lzZnMuY2AgYXJvdW5kIGxpbmUgMjI4MC4gVW5kZXJzdGFuZGluZyB0aGUgaW1tZWRpYXRlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2lsbCBiZSBjcnVjaWFsIGZvciBhIHByb3BlciBldmFsdWF0aW9uLiBHb3R0YSBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgc3Vycm91bmRpbmcgbG9naWMgYmVmb3JlIEkgY2FuIGFuYWx5emUgdGhlIGFjdHVhbCBkaWZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTEyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MDo0My43MzEzODcxMDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI1MDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjIyNTE6XFx0XFx0LyogVE9ETzogc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xcbjIyNTI6XFx0XFx0aWYgKGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2VuciAhPSAxKVxcbjIyNTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjI1NDpcXHRcXG4yMjU1OlxcdFxcdGlmIChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgpXFxuMjI1NjpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgpO1xcbjIyNTc6XFx0XFx0a2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4ID0gTlVMTDtcXG4yMjU4OlxcdFxcbjIyNTk6XFx0XFx0cmVwZWF0X2NhbGxfY29udHJvbCA9IGttYWxsb2Nfb2JqKCpyZXBlYXRfY2FsbF9jb250cm9sKTtcXG4yMjYwOlxcdFxcdGlmICghcmVwZWF0X2NhbGxfY29udHJvbClcXG4yMjYxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIyNjI6XFx0XFxuMjI2MzpcXHRcXHRjdHggPSBkYW1vbl9zeXNmc19idWlsZF9jdHgoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXSk7XFxuMjI2NDpcXHRcXHRpZiAoSVNfRVJSKGN0eCkpIHtcXG4yMjY1OlxcdFxcdFxcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbjIyNjY6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoY3R4KTtcXG4yMjY3OlxcdFxcdH1cXG4yMjY4OlxcdFxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIGZhbHNlKTtcXG4yMjY5OlxcdFxcdGlmIChlcnIpIHtcXG4yMjcwOlxcdFxcdFxcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xcbjIyNzE6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4yMjcyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjI3MzpcXHRcXHR9XFxuMjI3NDpcXHRcXHRrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggPSBjdHg7XFxuMjI3NTpcXHRcXG4yMjc2OlxcdFxcdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxcbjIyNzc6XFx0XFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cXHUwMDNlcmVmcmVzaF9tcyk7XFxuMjI3ODpcXHRcXG4yMjc5OlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47XFxuMjI4MDpcXHRcXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VkYXRhID0ga2RhbW9uZDtcXG4yMjgxOlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZXJlcGVhdCA9IHRydWU7XFxuMjI4MjpcXHRcXHRyZXBlYXRfY2FsbF9jb250cm9sLVxcdTAwM2VkZWFsbG9jX29uX2NhbmNlbCA9IHRydWU7XFxuMjI4MzpcXHRcXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI4NDpcXHRcXHRpZiAoZXJyKVxcbjIyODU6XFx0XFx0XFx0a2ZyZWUocmVwZWF0X2NhbGxfY29udHJvbCk7XFxuMjI4NjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIyODc6XFx0fVxcbjIyODg6XFx0XFxuMjI4OTpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb2ZmKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbjIyOTA6XFx0e1xcbjIyOTE6XFx0XFx0aWYgKCFrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHgpXFxuMjI5MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMjkzOlxcdFxcdGRhbW9uX3N0b3AoXFx1MDAyNmtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCwgMSk7XFxuMjI5NDpcXHRcXHQvKlxcbjIyOTU6XFx0XFx0ICogVG8gYWxsb3cgdXNlcnMgc2hvdyBmaW5hbCBtb25pdG9yaW5nIHJlc3VsdHMgb2YgYWxyZWFkeSB0dXJuZWQtb2ZmXFxuMjI5NjpcXHRcXHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggaW4gbmV4dFxcbjIyOTc6XFx0XFx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXFxuMjI5ODpcXHRcXHQgKi9cXG4yMjk5OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MDo0My43MzE1NzQyNjdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzU1NTM1NTU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBEQU1PTiBwYXRjaC4gQmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgY29kZSBsb29rZWQgbGlrZSB0aGlzIChJIGNhbiBwcmFjdGljYWxseSBzZWUgaXQgaW4gbXkgaGVhZCk6XG5cbmBgYGNcblx0cmVwZWF0X2NhbGxfY29udHJvbC1cdTAwM2VmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuO1xuXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRhdGEgPSBrZGFtb25kO1xuXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZXJlcGVhdCA9IHRydWU7XG5cdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGVhbGxvY19vbl9jYW5jZWwgPSB0cnVlO1xuLVx0aWYgKGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKSlcbitcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCByZXBlYXRfY2FsbF9jb250cm9sKTtcbitcdGlmIChlcnIpXG4gXHRcdGtmcmVlKHJlcGVhdF9jYWxsX2NvbnRyb2wpO1xuIFx0cmV0dXJuIGVycjtcbmBgYFxuXG5SaWdodCwgdGhlIGtleSBoZXJlIGlzIHdoYXQgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgcGF0Y2guIFByZXZpb3VzbHksIGBlcnJgIHdhcyBvbmx5IGluaXRpYWxpemVkIHRvIHRoZSByZXN1bHQgb2YgYGRhbW9uX3N0YXJ0KClgLCB3aGljaCB3b3VsZCBiZSB6ZXJvIGlmIGV4ZWN1dGlvbiBtYWRlIGl0IHRvIGxpbmUgMjI3Ni4gQ3J1Y2lhbGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jYWxsKClgIHdhcyAqaWdub3JlZCouIFRoaXMgaXMgYSBnbGFyaW5nIG9taXNzaW9uLiBUaGF0IG1lYW50IHRoYXQgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIHdvdWxkIHJlcG9ydCBzdWNjZXNzIChyZXR1cm5pbmcgMCkgZXZlbiBpZiBgZGFtb25fY2FsbCgpYCBmYWlsZWQuIFRoYXQncyBhIGNsYXNzaWMgZXJyb3IsIGFuZCBhIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy5cblxuTm93LCB3aXRoIHRoaXMgcGF0Y2gsIGBlcnIgPSBkYW1vbl9jYWxsKGN0eCwgcmVwZWF0X2NhbGxfY29udHJvbCk7YCBwcm9wZXJseSBjYXB0dXJlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLiBUaGVuIHRoZSBgaWYgKGVycilgIGNvbmRpdGlvbmFsIGNvcnJlY3RseSBldmFsdWF0ZXMsIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzLCBhcyBleHBlY3RlZCwgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24uIE11Y2ggYmV0dGVyIVxuXG5JJ20gbWFraW5nIGEgcXVpY2sgbWVudGFsIGNoZWNrIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoYXQgbWlnaHQgYmUgaGlkaW5nLiBUaGUgYGludCBlcnI7YCBkZWNsYXJhdGlvbiBzZWVtcyBmaW5lIGZyb20gYSBxdWljayBnbGFuY2UsIGJ1dCBpdCdzIHdvcnRoIGEgZG91YmxlLWNoZWNrLiBJJ20gZ29pbmcgdG8gcmVhZCBsaW5lcyAyMjQwIHRvIDIyNjAgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6NTEuMjg2OTMzNDQ0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzA6XFx0XFxuMjIzMTpcXHRcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxcbjIyMzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjIzMzpcXHRcXHRpZiAoc3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZW5yICE9IDEpXFxuMjIzNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjM1OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF90dW5lZF9pbnRlcnZhbHMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzNjpcXHRcXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcXG4yMjM3OlxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMoc3lzZnNfa2RhbW9uZCk7XFxuMjIzODpcXHRvdXQ6XFxuMjIzOTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spO1xcbjIyNDA6XFx0XFx0cmV0dXJuIDA7XFxuMjI0MTpcXHR9XFxuMjI0MjpcXHRcXG4yMjQzOlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4yMjQ0OlxcdHtcXG4yMjQ1OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG4yMjQ2OlxcdFxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKnJlcGVhdF9jYWxsX2NvbnRyb2w7XFxuMjI0NzpcXHRcXHRpbnQgZXJyO1xcbjIyNDg6XFx0XFxuMjI0OTpcXHRcXHRpZiAoZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxcbjIyNTA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yMjUxOlxcdFxcdC8qIFRPRE86IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dHMgcGVyIGtkYW1vbmQgKi9cXG4yMjUyOlxcdFxcdGlmIChrZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlbnIgIT0gMSlcXG4yMjUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIyNTQ6XFx0XFxuMjI1NTpcXHRcXHRpZiAoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KVxcbjIyNTY6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4yMjU3OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IE5VTEw7XFxuMjI1ODpcXHRcXG4yMjU5OlxcdFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUwOjUxLjI4NzE5Mjk1NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDc1MjU1MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBBIFF1aWNrIERlYnVnKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiB0aGUgb3JpZ2luYWwgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIGZ1bmN0aW9uLCB0aGUgYGVycmAgdmFyaWFibGUsIHdoaWNoIHN0b3JlcyB0aGUgZXJyb3IgY29kZSwgd2FzIGFzc2lnbmVkIHRoZSByZXN1bHQgb2YgYGRhbW9uX3N0YXJ0YC4gSWYgYGRhbW9uX3N0YXJ0YCB3b3JrZWQsIGBlcnJgIHdhcyB6ZXJvLiBUaGVuLCB0aGVyZSB3YXMgYSBjb25kaXRpb25hbCBjaGVjayB3aXRoIGBkYW1vbl9jYWxsYCwgYW5kIGlmIHRoYXQgd2FzIHRydWUsIGByZXBlYXRfY2FsbF9jb250cm9sYCB3YXMgZnJlZWQuIENydWNpYWxseSwgdGhlIGZ1bmN0aW9uIHRoZW4gcmV0dXJuZWQgYGVycmAuIFRoaXMgc2VlbXMgd3JvbmcsIGJlY2F1c2UgYSBub24temVybyBlcnJvciBmcm9tIGBkYW1vbl9jYWxsYCB3YXMgYmVpbmcgZWZmZWN0aXZlbHkgbWFza2VkLCB0aGUgZnVuY3Rpb24gd2FzIHJldHVybmluZyAwIGV2ZW4gaWYgYGRhbW9uX2NhbGxgIGhhZCBhbiBpc3N1ZS5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgZmlyc3QgY2FsbGluZyBgZGFtb25fY2FsbGAgYW5kIGFzc2lnbmluZyBpdHMgcmV0dXJuIHZhbHVlIHRvIGBlcnJgLiBUaGVuLCBpdCBjaGVja3MgYGVycmAgYW5kIG9ubHkgZnJlZXMgYHJlcGVhdF9jYWxsX2NvbnRyb2xgIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gRmluYWxseSwgaXQgcmV0dXJucyBgZXJyYC4gVGhpcyBmaXhlcyB0aGUgb3JpZ2luYWwgcHJvYmxlbSwgbWFrZXMgaXQgc28gYSBmYWlsZWQgY2FsbCByZXR1cm5zIGFuIGVycm9yLlxuXG5UaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgZXhwb3NlIGEgbmV3IHZ1bG5lcmFiaWxpdHk/IFNwZWNpZmljYWxseSwgYXJlIHdlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHNlbmRpbmcgaXQgdG8gdXNlciBzcGFjZT8gSSBkb24ndCBzZWUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgYGVycmAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgKmJlZm9yZSogaXQncyBjaGVja2VkIG9yIHJldHVybmVkLCBzbyB0aGF0J3Mgc2FmZS4gTG9va2luZyBjbG9zZXIgYXQgYHJlcGVhdF9jYWxsX2NvbnRyb2xgIEkgc2VlIGl0J3MgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCwgYW5kIHRoYXQgaXRzIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoYXQgcHJvY2Vzcy5cblxuTm93IHRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBmaWVsZHMgaW4gYHJlcGVhdF9jYWxsX2NvbnRyb2xgPyBMZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5IGJ5IGxvb2tpbmcgYXQgdGhlIHN0cnVjdCBkZWZpbml0aW9uIG9mIGBkYW1vbl9jYWxsX2NvbnRyb2xgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTA6NTUuMzYyNDUwMjkxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgyODM4NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTY3Nj1zdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjkzLS8qXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY5NDogKiBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIC0gQ29udHJvbCBkYW1vbl9jYWxsKCkuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY5NS0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTcwNC0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NzA1OnN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC03MDYtXFx0aW50ICgqZm4pKHZvaWQgKmRhdGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTg1Nz1zdHJ1Y3QgZGFtb25fY3R4IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04ODItXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjg4MzpcXHQvKiBsaXN0cyBvZiBcXHUwMDI2c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC04ODQtXFx0c3RydWN0IGxpc3RfaGVhZCBjYWxsX2NvbnRyb2xzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTc9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwOTgtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTk6aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTEwMC1pbnQgZGFtb3Nfd2FsayhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vc193YWxrX2NvbnRyb2wgKmNvbnRyb2wpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwNDk9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDg1OmludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzY2Mj1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzY3MS0gKlxcbm1tL2RhbW9uL2NvcmUuYzozNjcyOiAqIElmIHRoZXJlIGFyZSBcXHUwMDI2c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXF1ZXN0cyB0aGF0IHJlZ2lzdGVyZWQgdmlhXFxubW0vZGFtb24vY29yZS5jLTM2NzMtICogXFx1MDAyNmRhbW9uX2NhbGwoKSBvbiBAY3R4LCBkbyBvciBjYW5jZWwgdGhlIGludm9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGRlcGVuZGluZ1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM2Nzc9c3RhdGljIHZvaWQga2RhbW9uZF9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjYW5jZWwpXFxubW0vZGFtb24vY29yZS5jLTM2Nzgte1xcbm1tL2RhbW9uL2NvcmUuYzozNjc5OlxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wsICpuZXh0O1xcbm1tL2RhbW9uL2NvcmUuYy0zNjgwLVxcdExJU1RfSEVBRChjb250cm9scyk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM1MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTUtXFx0aW50IGVycjtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM1NjpcXHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNvbnRyb2wgPSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTctXFx0XFx0LmZuID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbixcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9Mzg4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZGFtb25fY2FsbF9mbih2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQwMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQwNDpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MDUtXFx0LmZuID0gZGFtb25fbHJ1X3NvcnRfZGFtb25fY2FsbF9mbixcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0yNzY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI4MC1cXHRpbnQgZXJyO1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODE6XFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjb250cm9sID0ge1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODItXFx0XFx0LmZuID0gZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuLFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMxMz1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fZGFtb25fY2FsbF9mbih2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzI0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozMjU6c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMjYtXFx0LmZuID0gZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuLFxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0xOTQtXFxubW0vZGFtb24vc3RhdC5jOjE5NTpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XFxubW0vZGFtb24vc3RhdC5jLTE5Ni1cXHQuZm4gPSBkYW1vbl9zdGF0X2RhbW9uX2NhbGxfZm4sXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMjQ1LVxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcXG5tbS9kYW1vbi9zeXNmcy5jOjIyNDY6XFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqcmVwZWF0X2NhbGxfY29udHJvbDtcXG5tbS9kYW1vbi9zeXNmcy5jLTIyNDctXFx0aW50IGVycjtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjMwMj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoaW50ICgqZm4pKHZvaWQgKmRhdGEpLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzA0LXtcXG5tbS9kYW1vbi9zeXNmcy5jOjIzMDU6XFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7fTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIzMDYtXFx0aW50IGVycjtcXG4tLVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jPTM3PXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcXG4tLVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTU0LVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjU1OnN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIHJlcGVhdF9jYWxsX2NvbnRyb2wgPSB7XFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNTYtXFx0LmZuID0gZGFtb25fc2FtcGxlX3ByY2xfcmVwZWF0X2NhbGxfZm4sXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz0zOD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy01NS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYzo1NjpzdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCByZXBlYXRfY2FsbF9jb250cm9sID0ge1xcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTU3LVxcdC5mbiA9IGRhbW9uX3NhbXBsZV93c3NlX3JlcGVhdF9jYWxsX2ZuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MDo1Ny45NDUyOTYzNDJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAyMzMxMjEyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBDYWxsIENvbnRyb2wgU3RydWN0dXJlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGFyb3VuZCBsaW5lIDcwNS4gTXkgaW50ZW50aW9uIGlzIHRvIGZvY3VzIG9uIHRoYXQgYHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2xgIGRlZmluaXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgREFNT04gc3Vic3lzdGVtIG9yY2hlc3RyYXRlcyBpdHMgc2FtcGxpbmcgYW5kIG1vbml0b3JpbmcgY2FsbHMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNvbnRyb2wgZmxvdyBtZWNoYW5pc21zIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIG1hbmFnaW5nIHRob3NlIGNhbGxzIOKAkyBob3cgdGhlIG1vbml0b3JzIGFyZSBjb25maWd1cmVkLCBob3cgdGhlIGNhbGxiYWNrcyBhcmUgdHJpZ2dlcmVkLCBhbmQgaG93IHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBpcyBjb29yZGluYXRlZC4gR2V0dGluZyBhIHNvbGlkIGdyYXNwIG9uIHRoaXMgYGRhbW9uX2NhbGxfY29udHJvbGAgc3RydWN0dXJlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZpbmVyIHBvaW50cyBvZiBEQU1PTidzIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBpZiBJ4oCZbSB0cnlpbmcgdG8gb3B0aW1pemUgb3IgZGVidWcgYW55IERBTU9OLXJlbGF0ZWQgY29kZS4gVGhpcyB3aWxsIGNsYXJpZnkgaG93IHRoZSBzeXN0ZW0gcmVndWxhdGVzIHRoZSBhc3luY2hyb25vdXMgZXhlY3V0aW9uIG9mIHZhcmlvdXMgREFNT04gbW9uaXRvcmluZyBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6MDguMTc4NDIwNDEyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzAwOlxcdCAqIEBkZWFsbG9jX29uX2NhbmNlbDpcXHRJZiBAcmVwZWF0IGlzIHRydWUsIGRlLWFsbG9jYXRlIHdoZW4gY2FuY2VsZWQuXFxuIDcwMTpcXHQgKlxcbiA3MDI6XFx0ICogQ29udHJvbCBkYW1vbl9jYWxsKCksIHdoaWNoIHJlcXVlc3RzIHNwZWNpZmljIGtkYW1vbmQgdG8gaW52b2tlIGEgZ2l2ZW5cXG4gNzAzOlxcdCAqIGZ1bmN0aW9uLiAgUmVmZXIgdG8gZGFtb25fY2FsbCgpIGZvciBtb3JlIGRldGFpbHMuXFxuIDcwNDpcXHQgKi9cXG4gNzA1OlxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wge1xcbiA3MDY6XFx0XFx0aW50ICgqZm4pKHZvaWQgKmRhdGEpO1xcbiA3MDc6XFx0XFx0dm9pZCAqZGF0YTtcXG4gNzA4OlxcdFxcdGJvb2wgcmVwZWF0O1xcbiA3MDk6XFx0XFx0aW50IHJldHVybl9jb2RlO1xcbiA3MTA6XFx0XFx0Ym9vbCBkZWFsbG9jX29uX2NhbmNlbDtcXG4gNzExOlxcdC8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5ICovXFxuIDcxMjpcXHRcXHQvKiBpbmZvcm1zIGlmIHRoZSBrZGFtb25kIGZpbmlzaGVkIGhhbmRsaW5nIG9mIHRoZSByZXF1ZXN0ICovXFxuIDcxMzpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uO1xcbiA3MTQ6XFx0XFx0LyogaW5mb3JtcyBpZiB0aGUga2RhbW9uZCBjYW5jZWxlZCBAZm4gaW5mb2NhdGlvbiAqL1xcbiA3MTU6XFx0XFx0Ym9vbCBjYW5jZWxlZDtcXG4gNzE2OlxcdFxcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIDcxNzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIDcxODpcXHR9O1xcbiA3MTk6XFx0XFxuIDcyMDpcXHQvKipcXG4gNzIxOlxcdCAqIHN0cnVjdCBkYW1vbl9pbnRlcnZhbHNfZ29hbCAtIE1vbml0b3JpbmcgaW50ZXJ2YWxzIGF1dG8tdHVuaW5nIGdvYWwuXFxuIDcyMjpcXHQgKlxcbiA3MjM6XFx0ICogQGFjY2Vzc19icDpcXHRcXHRBY2Nlc3MgZXZlbnRzIG9ic2VydmF0aW9uIHJhdGlvIHRvIGFjaGlldmUgaW4gYnAuXFxuIDcyNDpcXHQgKiBAYWdncnM6XFx0XFx0TnVtYmVyIG9mIGFnZ3JlZ2F0aW9ucyB0byBhY2hpZXZlIEBhY2Nlc3NfYnAgd2l0aGluLlxcbiA3MjU6XFx0ICogQG1pbl9zYW1wbGVfdXM6XFx0TWluaW11bSByZXN1bHRpbmcgc2FtcGxpbmcgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzLlxcbiA3MjY6XFx0ICogQG1heF9zYW1wbGVfdXM6XFx0TWF4aW11bSByZXN1bHRpbmcgc2FtcGxpbmcgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzLlxcbiA3Mjc6XFx0ICpcXG4gNzI4OlxcdCAqIERBTU9OIGF1dG9tYXRpY2FsbHkgdHVuZXMgXFx1MDAyNmRhbW9uX2F0dHJzLVxcdTAwM2VzYW1wbGVfaW50ZXJ2YWwgYW5kXFxuIDcyOTpcXHQgKiBcXHUwMDI2ZGFtb25fYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgYWltaW5nIHRoZSByYXRpbyBpbiBicCAoMS8xMCwwMDApIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjA4LjE3ODYzODE4MloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTMwNzEzNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIENvcmUqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBiZWVuIGV4YW1pbmluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cyBvZiBEQU1PTiwgYW5kIEkgdGhpbmsgaXQncyB0aW1lIHRvIGRpZyBpbnRvIGEgc3BlY2lmaWMgYXJlYS4gSSBuZWVkIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGFsbCAqcmVhbGx5KiB3b3JrcyB1bmRlciB0aGUgaG9vZC4gVGhlcmVmb3JlLCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGBkYW1vbl9jYWxsYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUsIHNvIHRoYXTigJlzIHdoZXJlIEknbGwgc3RhcnQuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIEknbSBiZXR0aW5nIGl0IGdpdmVzIHVzIGEgZ29vZCBncmFzcCBvbiB0aGUgb3ZlcmFsbCBmbG93LCBzcGVjaWZpY2FsbHkgaG93IERBTU9OIGlzICpjYWxsZWQqIGludG8gYWN0aW9uLiBJIHdhbnQgdG8gdW5yYXZlbCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIG1lbW9yeSBtb25pdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24uIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIGluc2lnaHRzIGl0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjUxOjEwLjMwOTM2MTU4NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTc3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwODA6XFx0ICpcXG4yMDgxOlxcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBmYWlsZWQsIHRoZSBAY3R4IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZC5cXG4yMDgyOlxcdCAqXFxuMjA4MzpcXHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuMjA4NDpcXHQgKi9cXG4yMDg1OlxcdGludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcXG4yMDg2OlxcdHtcXG4yMDg3OlxcdFxcdGlmICghY29udHJvbC1cXHUwMDNlcmVwZWF0KVxcbjIwODg6XFx0XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjb250cm9sLVxcdTAwM2Vjb21wbGV0aW9uKTtcXG4yMDg5OlxcdFxcdGNvbnRyb2wtXFx1MDAzZWNhbmNlbGVkID0gZmFsc2U7XFxuMjA5MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29udHJvbC1cXHUwMDNlbGlzdCk7XFxuMjA5MTpcXHRcXG4yMDkyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG4yMDkzOlxcdFxcdGlmIChjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfb2Jzb2xldGUpIHtcXG4yMDk0OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbjIwOTU6XFx0XFx0XFx0Z290byBjYW5jZWxlZDtcXG4yMDk2OlxcdFxcdH1cXG4yMDk3OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNvbnRyb2wtXFx1MDAzZWxpc3QsIFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHMpO1xcbjIwOTg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XFxuMjA5OTpcXHRcXHRpZiAoY29udHJvbC1cXHUwMDNlcmVwZWF0KVxcbjIxMDA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjEwMTpcXHRcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZjb250cm9sLVxcdTAwM2Vjb21wbGV0aW9uKTtcXG4yMTAyOlxcdFxcdGlmIChjb250cm9sLVxcdTAwM2VjYW5jZWxlZClcXG4yMTAzOlxcdFxcdFxcdGdvdG8gY2FuY2VsZWQ7XFxuMjEwNDpcXHRcXHRyZXR1cm4gMDtcXG4yMTA1OlxcdFxcbjIxMDY6XFx0Y2FuY2VsZWQ6XFxuMjEwNzpcXHRcXHR3aGlsZSAoZGFtb25faXNfcnVubmluZyhjdHgpKVxcbjIxMDg6XFx0XFx0XFx0c2NoZWR1bGVfdGltZW91dF9pZGxlKG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuMjEwOTpcXHRcXHRyZXR1cm4gLUVDQU5DRUxFRDtcXG4yMTEwOlxcdFxcbjIxMTE6XFx0fVxcbjIxMTI6XFx0XFxuMjExMzpcXHQvKipcXG4yMTE0OlxcdCAqIGRhbW9zX3dhbGsoKSAtIEludm9rZSBhIGdpdmVuIGZ1bmN0aW9ucyB3aGlsZSBEQU1PUyB3YWxrIHJlZ2lvbnMuXFxuMjExNTpcXHQgKiBAY3R4OlxcdERBTU9OIGNvbnRleHQgdG8gY2FsbCB0aGUgZnVuY3Rpb25zIGZvci5cXG4yMTE2OlxcdCAqIEBjb250cm9sOlxcdENvbnRyb2wgdmFyaWFibGUgb2YgdGhlIHdhbGsgcmVxdWVzdC5cXG4yMTE3OlxcdCAqXFxuMjExODpcXHQgKiBBc2sgREFNT04gd29ya2VyIHRocmVhZCAoa2RhbW9uZCkgb2YgQGN0eCB0byBjYWxsIGEgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaW9uXFxuMjExOTpcXHQgKiB0aGF0IHRoZSBrZGFtb25kIHdpbGwgYXBwbHkgREFNT1MgYWN0aW9uIHRvLCBhbmQgd2FpdCB1bnRpbCB0aGUga2RhbW9uZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTo1MToxMC4zMDk3MjI5OTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjczNDQ0NTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEtNU0FOIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBqdXN0IGNhcHR1cmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jYWxsYCBpbnRvIGBlcnJgIGluIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gRXNzZW50aWFsbHksIGl0J3MgbWFraW5nIHN1cmUgdGhhdCBpZiBgZGFtb25fY2FsbGAgc2lnbmFscyBhbiBlcnJvciwgdGhhdCBlcnJvciBpcyBub3cgY29ycmVjdGx5IHByb3BhZ2F0ZWQgYmFjayB1cCB0aGUgY2FsbCBzdGFjaywgaW5zdGVhZCBvZiBnZXR0aW5nIG1hc2tlZCBieSBhIHJldHVybiBvZiAwLiBCZWZvcmUgdGhlIHBhdGNoLCBhIGZhaWx1cmUgd2FzIGVmZmVjdGl2ZWx5IHRyZWF0ZWQgYXMgYSBzdWNjZXNzOyBub3csIHRoZSBlcnJvciBpcyBoYW5kbGVkIGFzIGl0IHNob3VsZCBiZS5cblxuTm93LCBkb2VzIHRoaXMgaGF2ZSBhbnl0aGluZyBhdCBhbGwgdG8gZG8gd2l0aCBLTVNBTj8gQWJzb2x1dGVseSBub3QuIE15IGNoZWNrbGlzdCBmb3IgS01TQU4gY29uY2VybnM6XG4qICAgRG9lcyBpdCAqcmVhZCogdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLlxuKiAgIERvZXMgaXQgKnBhc3MqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZT8gTm8uXG4qICAgRG9lcyBpdCBsZWF2ZSBhbnkgbWVtb3J5IGZpZWxkIHVuaW5pdGlhbGl6ZWQ/IE5vLlxuKiAgIERvZXMgaXQgYWZmZWN0IG1lbW9yeSBib3VuZHMgb3IgbGVuZ3RocyBpbiBhbnkgd2F5PyBOby5cbiogICBDb3VsZCBpdCBjb25jZWl2YWJseSBpbnRyb2R1Y2UgYW55IEtNU0FOLWRldGVjdGFibGUgYnVncyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uXG5cblRoaXMgcGF0Y2ggaXMgcHVyZWx5IGFib3V0IGVycm9yIGhhbmRsaW5nLiBJdCdzIGFib3V0IGVuc3VyaW5nIHRoZSAqY29ycmVjdCogZXJyb3IgY29kZSBpcyByZXR1cm5lZCwgYW5kIGl0IGNsZWFucyB1cCBhIHBvaW50ZXIgb24gZXJyb3IuIEl0J3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgbWVtb3J5IGFjY2Vzc2VzLCBkYXRhIGNvcHlpbmcsIG9yIGluaXRpYWxpemF0aW9uIHByb2JsZW1zLiBJdCBzaW1wbHkgaW1wcm92ZXMgdGhlIGVycm9yIHByb3BhZ2F0aW9uIGxvZ2ljLiBXZSBhcmUgbm90IHRvdWNoaW5nIG9yIG1vZGlmeWluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kLCBhcyBzdWNoLCB0aGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IEtNU0FOIGNvbmNlcm5zLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCB0ZXN0IHN1aXRlcyB3aWxsIGJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY2hhbmdlLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBoZXJlLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDEsIk91dHB1dFRva2VucyI6MTQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6NTE6MTcuMDQ0MTc3Nzk4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCkgYnkgc3RvcmluZyB0aGUgcmV0dXJuIGNvZGUgb2YgZGFtb25fY2FsbCgpIGluIHRoZSBleGlzdGluZyBsb2NhbCB2YXJpYWJsZSAnZXJyJyBhbmQgcHJvcGFnYXRpbmcgaXQgdG8gdGhlIGNhbGxlciwgcmF0aGVyIHRoYW4gZGlzY2FyZGluZyBpdCBhbmQgcmV0dXJuaW5nIDAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZGFyaWVzIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpIGJ5IHN0b3JpbmcgdGhlIHJldHVybiBjb2RlIG9mIGRhbW9uX2NhbGwoKSBpbiB0aGUgZXhpc3RpbmcgbG9jYWwgdmFyaWFibGUgJ2VycicgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIHRoZSBjYWxsZXIsIHJhdGhlciB0aGFuIGRpc2NhcmRpbmcgaXQgYW5kIHJldHVybmluZyAwLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRhcmllcyBvciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[1] Phase: Succeeded StartedAt: 2026-09-15 11:51:28 +0000 UTC FinishedAt: 2026-09-15 11:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 11:51:28 +0000 UTC FinishedAt: 2026-09-15 11:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2] Phase: Succeeded StartedAt: 2026-09-15 11:51:28 +0000 UTC FinishedAt: 2026-09-15 15:39:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 11:51:28 +0000 UTC FinishedAt: 2026-09-15 15:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 11:51:28 +0000 UTC FinishedAt: 2026-09-15 11:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 11:51:28 +0000 UTC FinishedAt: 2026-09-15 11:51:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"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-workflowz2n2n/series-workflowz2n2n-convert-artifact-455644068/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 11:51:38 +0000 UTC FinishedAt: 2026-09-15 12:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 11:51:38 +0000 UTC FinishedAt: 2026-09-15 12:08:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b68357d4-9a2a-4ad0-a0b0-6f12a7587042,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-workflowz2n2n/series-workflowz2n2n-convert-artifact-455644068/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": "fd8ef78f-6a70-4081-bb03-eadf6d2b7cd4", "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-workflowz2n2n/series-workflowz2n2n-build-action-2477270498/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 11:51:38 +0000 UTC FinishedAt: 2026-09-15 12:08:10 +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:*b68357d4-9a2a-4ad0-a0b0-6f12a7587042,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-workflowz2n2n/series-workflowz2n2n-convert-artifact-455644068/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": "fd8ef78f-6a70-4081-bb03-eadf6d2b7cd4", "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-workflowz2n2n/series-workflowz2n2n-build-action-2477270498/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:08:20 +0000 UTC FinishedAt: 2026-09-15 12:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:08:20 +0000 UTC FinishedAt: 2026-09-15 12:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:08:20 +0000 UTC FinishedAt: 2026-09-15 12:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:08:20 +0000 UTC FinishedAt: 2026-09-15 12:08:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-workflowz2n2n/series-workflowz2n2n-convert-artifact-1664151971/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:08:42 +0000 UTC FinishedAt: 2026-09-15 12:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:08:42 +0000 UTC FinishedAt: 2026-09-15 12:10:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fd8ef78f-6a70-4081-bb03-eadf6d2b7cd4,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-workflowz2n2n/series-workflowz2n2n-build-action-2477270498/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-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:10:10 +0000 UTC FinishedAt: 2026-09-15 12:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:10:10 +0000 UTC FinishedAt: 2026-09-15 12:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:10:10 +0000 UTC FinishedAt: 2026-09-15 12:26:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:10:10 +0000 UTC FinishedAt: 2026-09-15 12:26:29 +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:*b68357d4-9a2a-4ad0-a0b0-6f12a7587042,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-workflowz2n2n/series-workflowz2n2n-convert-artifact-1664151971/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": "5b4758f5-79bc-421f-b4f3-0368a1075598", "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-workflowz2n2n/series-workflowz2n2n-build-action-2334914135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:10:10 +0000 UTC FinishedAt: 2026-09-15 12:26:20 +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:*b68357d4-9a2a-4ad0-a0b0-6f12a7587042,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-workflowz2n2n/series-workflowz2n2n-convert-artifact-1664151971/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": "5b4758f5-79bc-421f-b4f3-0368a1075598", "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-workflowz2n2n/series-workflowz2n2n-build-action-2334914135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:26:29 +0000 UTC FinishedAt: 2026-09-15 12:26:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:26:29 +0000 UTC FinishedAt: 2026-09-15 12:26:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:26:29 +0000 UTC FinishedAt: 2026-09-15 12:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:26:29 +0000 UTC FinishedAt: 2026-09-15 12:28:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b4758f5-79bc-421f-b4f3-0368a1075598,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-workflowz2n2n/series-workflowz2n2n-build-action-2334914135/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-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:25 +0000 UTC FinishedAt: 2026-09-15 15:39:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:25 +0000 UTC FinishedAt: 2026-09-15 15:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"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:*fd8ef78f-6a70-4081-bb03-eadf6d2b7cd4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b4758f5-79bc-421f-b4f3-0368a1075598,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-workflowz2n2n/series-workflowz2n2n-build-action-2477270498/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-workflowz2n2n/series-workflowz2n2n-build-action-2334914135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:25 +0000 UTC FinishedAt: 2026-09-15 12:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:25 +0000 UTC FinishedAt: 2026-09-15 12:28:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"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-workflowz2n2n/series-workflowz2n2n-convert-artifact-3856740796/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:25 +0000 UTC FinishedAt: 2026-09-15 12:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:25 +0000 UTC FinishedAt: 2026-09-15 12:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:25 +0000 UTC FinishedAt: 2026-09-15 12:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:36 +0000 UTC FinishedAt: 2026-09-15 15:39:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz2n2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9bbf9ab98625157430e1dde8fcada034668de7b5","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_sysfs_turn_damon_on","damon_sysfs_handle_cmd","damon_call"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9bbf9ab98625157430e1dde8fcada034668de7b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"76a5be07-5582-40b2-baff-1050c2d183be","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-15 12:28:36 +0000 UTC FinishedAt: 2026-09-15 15:39:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fd8ef78f-6a70-4081-bb03-eadf6d2b7cd4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b4758f5-79bc-421f-b4f3-0368a1075598,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-workflowz2n2n/series-workflowz2n2n-build-action-2477270498/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-workflowz2n2n/series-workflowz2n2n-build-action-2334914135/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-workflowz2n2n/series-workflowz2n2n-convert-artifact-3856740796/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,}