Name: series-workflow5tjfc Phase: Succeeded StartedAt: 2026-06-26 08:20:57 +0000 UTC FinishedAt: 2026-06-26 12:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[0] Phase: Succeeded StartedAt: 2026-06-26 08:20:57 +0000 UTC FinishedAt: 2026-06-26 08:33:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 08:20:57 +0000 UTC FinishedAt: 2026-06-26 08:33:31 +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": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_RECLAIM" ], "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": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_RECLAIM" ], "series_id": "e4978ed9-e221-415f-b204-63a2a140fab3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_get_wmark_metric_value", "damon_reclaim_memrate_type_store", "metric_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlJiMzNDssCiAgICAmIzM0O21ldHJpY19zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IHdhdGVybWFyayBtZXRyaWMgKERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURSkgdG8gdGhlIERBTU9OIGNvcmUsIHN5c2ZzIGludGVyZmFjZSwgYW5kIERBTU9OX1JFQ0xBSU0gbW9kdWxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBEQU1PTiBjYWxjdWxhdGVzIG1lbW9yeSByYXRlcyBhbmQgdHJpZ2dlcnMgc2NoZW1lcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIHN5c2ZzL21vZHVsZSBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgdGhlIGNvcmUgbWV0cmljIGNhbGN1bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGEyN2RjYTAxNThhZGIxZjJmOWE1ZjJlMjBlNjRjMTNkMTZlNjRkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDA4OjMyOjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggNmY3ZWRiMzU5MGVmOTcuLjAwMDZlM2EyNTMxNzZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zMTQsMTMgJiM0MzszMTQsMTYgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiAvKipcbiAgKiBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyAtIFJlcHJlc2VudHMgdGhlIHdhdGVybWFyayBtZXRyaWMuXG4gICpcbi0gKiBAREFNT1NfV01BUktfTk9ORTpcdFx0SWdub3JlIHRoZSB3YXRlcm1hcmtzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXG4tICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XHRGcmVlIG1lbW9yeSByYXRlIG9mIHRoZSBzeXN0ZW0gaW4gWzAsMTAwMF0uXG4tICogQE5SX0RBTU9TX1dNQVJLX01FVFJJQ1M6XHRUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3NcbiYjNDM7ICogQERBTU9TX1dNQVJLX05PTkU6XHRcdCAgICBJZ25vcmUgdGhlIHdhdGVybWFya3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cbiYjNDM7ICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XHQgICAgRnJlZSBtZW1vcnkgcmF0ZSBvZiB0aGUgc3lzdGVtIGluIFswLDEwMDBdLlxuJiM0MzsgKiBAREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOiBBdmFpbGFibGUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpblxuJiM0MzsgKlx0XHRcdFx0ICAgIFswLDEwMDBdLlxuJiM0MzsgKiBATlJfREFNT1NfV01BUktfTUVUUklDUzpcdCAgICBUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3NcbiAgKi9cbiBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyB7XG4gXHREQU1PU19XTUFSS19OT05FLFxuIFx0REFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcbiYjNDM7XHREQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsXG4gXHROUl9EQU1PU19XTUFSS19NRVRSSUNTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA3ZTRiOWFmZmM1YjA2MC4uZjEyZDA2MDgxZDcwZjggMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMzMDAsMTEgJiM0MzszMzAwLDE3IEBAIHN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBzdGF0aWMgaW50IGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUoZW51bSBkYW1vc193bWFya19tZXRyaWMgbWV0cmljLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICptZXRyaWNfdmFsdWUpXG4ge1xuJiM0MztcdGxvbmcgYXZhaWxhYmxlX3BhZ2VzO1xuJiM0MztcbiBcdHN3aXRjaCAobWV0cmljKSB7XG4gXHRjYXNlIERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XG4gXHRcdCptZXRyaWNfdmFsdWUgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICogMTAwMCAvXG4gXHRcdCAgICAgICB0b3RhbHJhbV9wYWdlcygpO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURTpcbiYjNDM7XHRcdGF2YWlsYWJsZV9wYWdlcyA9IHNpX21lbV9hdmFpbGFibGUoKTtcbiYjNDM7XHRcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5pbmRleCBjZTQ0OTljZjRiOGIwNS4uMjI5YmM2OGJiMWFkNDMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuQEAgLTE1OSw2ICYjNDM7MTU5LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCBfX3JlYWRfbW9zdGx5ID0gMTtcbiBzdGF0aWMgYm9vbCBza2lwX2Fub24gX19yZWFkX21vc3RseTtcbiBtb2R1bGVfcGFyYW0oc2tpcF9hbm9uLCBib29sLCAwNjAwKTtcbiBcbiYjNDM7LypcbiYjNDM7ICogV2F0ZXJtYXJrcyBtZXRyaWMgb3B0aW9ucy5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgZnJlZWBgLCBEQU1PTl9SRUNMQUlNIGNhbGN1bGF0ZXMgdGhlIHdhdGVybWFya1xuJiM0MzsgKiBtZXRyaWMgYmFzZWQgb24gdGhlIHN5c3RlbSYjMzk7cyBmcmVlIG1lbW9yeSByYXRlLiBJZiBzZXQgYXMgYGBhdmFpbGFibGVgYCwgaXRcbiYjNDM7ICogY2FsY3VsYXRlcyB0aGUgbWV0cmljIGJhc2VkIG9uIHRoZSBzeXN0ZW0mIzM5O3MgYXZhaWxhYmxlIG1lbW9yeSByYXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBEZWZhdWx0IGlzIGBgZnJlZWBgLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1lbXJhdGVfdHlwZSA9IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU7XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9yZWNsYWltX3N0YXQ7XG4gREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcbiBcdFx0cmVjbGFpbV90cmllZF9yZWdpb25zLCByZWNsYWltZWRfcmVnaW9ucywgcXVvdGFfZXhjZWVkcyk7XG5AQCAtMjIwLDYgJiM0MzsyMzEsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHRkYW1vbl9yZWNsYWltX3dtYXJrcy5tZXRyaWMgPSBtZW1yYXRlX3R5cGU7XG4mIzQzO1xuIFx0YXR0cnMgPSBkYW1vbl9yZWNsYWltX21vbl9hdHRycztcbiBcdGlmIChhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscykge1xuIFx0XHRhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwO1xuQEAgLTM3Niw2ICYjNDM7Mzg5LDQ5IEBAIG1vZHVsZV9wYXJhbV9jYihhZGRyX3VuaXQsIFx1MDAyNmFkZHJfdW5pdF9wYXJhbV9vcHMsIFx1MDAyNmFkZHJfdW5pdCwgMDYwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXG4gXHRcJiMzNDtTY2FsZSBmYWN0b3IgZm9yIERBTU9OX1JFQ0xBSU0gdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbiAoZGVmYXVsdDogMSlcJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiYjNDM7e1xuJiM0MztcdGlmIChzeXNmc19zdHJlcSh2YWwsIFwmIzM0O2ZyZWVcJiMzNDspKVxuJiM0MztcdFx0bWVtcmF0ZV90eXBlID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURTtcbiYjNDM7XHRlbHNlIGlmIChzeXNmc19zdHJlcSh2YWwsIFwmIzM0O2F2YWlsYWJsZVwmIzM0OykpXG4mIzQzO1x0XHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX2xvYWQoY2hhciAqYnVmZmVyLFxuJiM0MztcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4mIzQzO3tcbiYjNDM7XHRpbnQgdHlwZSA9IFJFQURfT05DRShtZW1yYXRlX3R5cGUpO1xuJiM0MztcdGludCBsZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAodHlwZSA9PSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFKVxuJiM0MztcdFx0bGVuICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcJiMzNDtbZnJlZV0gXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sIFwmIzM0O2ZyZWUgXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHR5cGUgPT0gREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFKVxuJiM0MztcdFx0bGVuICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcJiMzNDtbYXZhaWxhYmxlXSBcJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxlbiAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCYjMzQ7YXZhaWxhYmxlIFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGxlbiAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIG1lbXJhdGVfdHlwZV9wYXJhbV9vcHMgPSB7XG4mIzQzO1x0LnNldCA9IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlLFxuJiM0MztcdC5nZXQgPSBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9sb2FkLFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfcGFyYW1fY2IobWVtcmF0ZV90eXBlLCBcdTAwMjZtZW1yYXRlX3R5cGVfcGFyYW1fb3BzLCBcdTAwMjZtZW1yYXRlX3R5cGUsIDA2MDApO1xuJiM0MztNT0RVTEVfUEFSTV9ERVNDKG1lbXJhdGVfdHlwZSxcbiYjNDM7XHRcdCBcJiMzNDtNZW1vcnkgcmF0ZSB0eXBlIGZvciB3YXRlcm1hcmtzIG1ldHJpYyBcJiMzNDtcbiYjNDM7XHRcdCBcJiMzNDsoZnJlZSBvciBhdmFpbGFibGUsIGRlZmF1bHQ6IGZyZWUpXCYjMzQ7KTtcbiYjNDM7XG4gc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9lbmFibGVkKHZvaWQpXG4ge1xuIFx0aWYgKCFjdHgpXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMjljZmQwYmJlOWYzMi4uNWQ2NjM2NDMzYmQ2NjIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTEwNTYsNiAmIzQzOzEwNTYsMTAgQEAgZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzW10gPSB7XG4gXHRcdC5tZXRyaWMgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFLFxuIFx0XHQubmFtZSA9IFwmIzM0O2ZyZWVfbWVtX3JhdGVcJiMzNDssXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5tZXRyaWMgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O2F2YWlsYWJsZV9tZW1fcmF0ZVwmIzM0OyxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZSYjMzQ7LAogICAgJiMzNDttZXRyaWNfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGEyN2RjYTAxNThhZGIxZjJmOWE1ZjJlMjBlNjRjMTNkMTZlNjRkNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDA4OjMyOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDZmN2VkYjM1OTBlZjk3Li4wMDA2ZTNhMjUzMTc2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtMzE0LDEzICYjNDM7MzE0LDE2IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7CiAvKioKICAqIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIC0gUmVwcmVzZW50cyB0aGUgd2F0ZXJtYXJrIG1ldHJpYy4KICAqCi0gKiBAREFNT1NfV01BUktfTk9ORToJCUlnbm9yZSB0aGUgd2F0ZXJtYXJrcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLgotICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6CUZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS4KLSAqIEBOUl9EQU1PU19XTUFSS19NRVRSSUNTOglUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3MKJiM0MzsgKiBAREFNT1NfV01BUktfTk9ORToJCSAgICBJZ25vcmUgdGhlIHdhdGVybWFya3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS4KJiM0MzsgKiBAREFNT1NfV01BUktfRlJFRV9NRU1fUkFURToJICAgIEZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS4KJiM0MzsgKiBAREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOiBBdmFpbGFibGUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbgomIzQzOyAqCQkJCSAgICBbMCwxMDAwXS4KJiM0MzsgKiBATlJfREFNT1NfV01BUktfTUVUUklDUzoJICAgIFRvdGFsIG51bWJlciBvZiBEQU1PUyB3YXRlcm1hcmsgbWV0cmljcwogICovCiBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyB7CiAJREFNT1NfV01BUktfTk9ORSwKIAlEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFLAomIzQzOwlEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsCiAJTlJfREFNT1NfV01BUktfTUVUUklDUywKIH07CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA3ZTRiOWFmZmM1YjA2MC4uZjEyZDA2MDgxZDcwZjggMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMzMDAsMTEgJiM0MzszMzAwLDE3IEBAIHN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIHN0YXRpYyBpbnQgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZShlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWMsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKm1ldHJpY192YWx1ZSkKIHsKJiM0MzsJbG9uZyBhdmFpbGFibGVfcGFnZXM7CiYjNDM7CiAJc3dpdGNoIChtZXRyaWMpIHsKIAljYXNlIERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6CiAJCSptZXRyaWNfdmFsdWUgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICogMTAwMCAvCiAJCSAgICAgICB0b3RhbHJhbV9wYWdlcygpOwogCQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU6CiYjNDM7CQlhdmFpbGFibGVfcGFnZXMgPSBzaV9tZW1fYXZhaWxhYmxlKCk7CiYjNDM7CQkqbWV0cmljX3ZhbHVlID0gYXZhaWxhYmxlX3BhZ2VzICogMTAwMCAvIHRvdGFscmFtX3BhZ2VzKCk7CiYjNDM7CQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmMKaW5kZXggY2U0NDk5Y2Y0YjhiMDUuLjIyOWJjNjhiYjFhZDQzIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9yZWNsYWltLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcmVjbGFpbS5jCkBAIC0xNTksNiAmIzQzOzE1OSwxNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQgX19yZWFkX21vc3RseSA9IDE7CiBzdGF0aWMgYm9vbCBza2lwX2Fub24gX19yZWFkX21vc3RseTsKIG1vZHVsZV9wYXJhbShza2lwX2Fub24sIGJvb2wsIDA2MDApOwogCiYjNDM7LyoKJiM0MzsgKiBXYXRlcm1hcmtzIG1ldHJpYyBvcHRpb25zLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgZnJlZWBgLCBEQU1PTl9SRUNMQUlNIGNhbGN1bGF0ZXMgdGhlIHdhdGVybWFyawomIzQzOyAqIG1ldHJpYyBiYXNlZCBvbiB0aGUgc3lzdGVtJiMzOTtzIGZyZWUgbWVtb3J5IHJhdGUuIElmIHNldCBhcyBgYGF2YWlsYWJsZWBgLCBpdAomIzQzOyAqIGNhbGN1bGF0ZXMgdGhlIG1ldHJpYyBiYXNlZCBvbiB0aGUgc3lzdGVtJiMzOTtzIGF2YWlsYWJsZSBtZW1vcnkgcmF0ZS4KJiM0MzsgKgomIzQzOyAqIERlZmF1bHQgaXMgYGBmcmVlYGAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1lbXJhdGVfdHlwZSA9IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU7CiYjNDM7CiBzdGF0aWMgc3RydWN0IGRhbW9zX3N0YXQgZGFtb25fcmVjbGFpbV9zdGF0OwogREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCwKIAkJcmVjbGFpbV90cmllZF9yZWdpb25zLCByZWNsYWltZWRfcmVnaW9ucywgcXVvdGFfZXhjZWVkcyk7CkBAIC0yMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwlkYW1vbl9yZWNsYWltX3dtYXJrcy5tZXRyaWMgPSBtZW1yYXRlX3R5cGU7CiYjNDM7CiAJYXR0cnMgPSBkYW1vbl9yZWNsYWltX21vbl9hdHRyczsKIAlpZiAoYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMpIHsKIAkJYXR0cnMuc2FtcGxlX2ludGVydmFsID0gNTAwMDsKQEAgLTM3Niw2ICYjNDM7Mzg5LDQ5IEBAIG1vZHVsZV9wYXJhbV9jYihhZGRyX3VuaXQsICZhbXA7YWRkcl91bml0X3BhcmFtX29wcywgJmFtcDthZGRyX3VuaXQsIDA2MDApOwogTU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsCiAJJiMzNDtTY2FsZSBmYWN0b3IgZm9yIERBTU9OX1JFQ0xBSU0gdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbiAoZGVmYXVsdDogMSkmIzM0Oyk7CiAKJiM0MztzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCwKJiM0MzsJCQkJCSAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKJiM0Mzt7CiYjNDM7CWlmIChzeXNmc19zdHJlcSh2YWwsICYjMzQ7ZnJlZSYjMzQ7KSkKJiM0MzsJCW1lbXJhdGVfdHlwZSA9IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU7CiYjNDM7CWVsc2UgaWYgKHN5c2ZzX3N0cmVxKHZhbCwgJiMzNDthdmFpbGFibGUmIzM0OykpCiYjNDM7CQltZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9sb2FkKGNoYXIgKmJ1ZmZlciwKJiM0MzsJCQkJCSAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJaW50IHR5cGUgPSBSRUFEX09OQ0UobWVtcmF0ZV90eXBlKTsKJiM0MzsJaW50IGxlbiA9IDA7CiYjNDM7CiYjNDM7CWlmICh0eXBlID09IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEUpCiYjNDM7CQlsZW4gJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sICYjMzQ7W2ZyZWVdICYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJbGVuICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCAmIzM0O2ZyZWUgJiMzNDspOwomIzQzOwomIzQzOwlpZiAodHlwZSA9PSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpCiYjNDM7CQlsZW4gJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sICYjMzQ7W2F2YWlsYWJsZV0gJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlsZW4gJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sICYjMzQ7YXZhaWxhYmxlICYjMzQ7KTsKJiM0MzsKJiM0MzsJbGVuICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCAmIzM0O1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgbWVtcmF0ZV90eXBlX3BhcmFtX29wcyA9IHsKJiM0MzsJLnNldCA9IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlLAomIzQzOwkuZ2V0ID0gZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZCwKJiM0Mzt9OwomIzQzO21vZHVsZV9wYXJhbV9jYihtZW1yYXRlX3R5cGUsICZhbXA7bWVtcmF0ZV90eXBlX3BhcmFtX29wcywgJmFtcDttZW1yYXRlX3R5cGUsIDA2MDApOwomIzQzO01PRFVMRV9QQVJNX0RFU0MobWVtcmF0ZV90eXBlLAomIzQzOwkJICYjMzQ7TWVtb3J5IHJhdGUgdHlwZSBmb3Igd2F0ZXJtYXJrcyBtZXRyaWMgJiMzNDsKJiM0MzsJCSAmIzM0OyhmcmVlIG9yIGF2YWlsYWJsZSwgZGVmYXVsdDogZnJlZSkmIzM0Oyk7CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2VuYWJsZWQodm9pZCkKIHsKIAlpZiAoIWN0eCkKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwppbmRleCAzMjljZmQwYmJlOWYzMi4uNWQ2NjM2NDMzYmQ2NjIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKQEAgLTEwNTYsNiAmIzQzOzEwNTYsMTAgQEAgZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzW10gPSB7CiAJCS5tZXRyaWMgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFLAogCQkubmFtZSA9ICYjMzQ7ZnJlZV9tZW1fcmF0ZSYjMzQ7LAogCX0sCiYjNDM7CXsKJiM0MzsJCS5tZXRyaWMgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsCiYjNDM7CQkubmFtZSA9ICYjMzQ7YXZhaWxhYmxlX21lbV9yYXRlJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCBtZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoOiBBIE5ldyBXYXRlcm1hcmsgTWV0cmljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBEQU1PTiBpbiB0aGUgTGludXgga2VybmVsLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBmdW5jdGlvbmFsbHkuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBuZXcgd2F0ZXJtYXJrIG1ldHJpYywgYERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURWAsIHRvIERBTU9OIHNjaGVtZXMuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgbWVtb3J5IG1hbmFnZW1lbnQuCgpJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcy4gRmlyc3QsIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGdldHMgdXBkYXRlZCB0byBkZWZpbmUgdGhlIG5ldyBtZXRyaWMgd2l0aGluIHRoZSBgZW51bSBkYW1vc193bWFya19tZXRyaWNgLiBUaGVuLCBpbiBgbW0vZGFtb24vY29yZS5jYCwgd2Ugc2VlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1ldHJpYyBjYWxjdWxhdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUoKWAgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNhbGN1bGF0aW9uIGxvZ2ljIGFuZCBpdHMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KClRoZSBgbW0vZGFtb24vcmVjbGFpbS5jYCBmaWxlIGlzIG1vZGlmaWVkIHRvIGludHJvZHVjZSBhIG1vZHVsZSBwYXJhbWV0ZXIsIGBtZW1yYXRlX3R5cGVgLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgREFNT05fUkVDTEFJTWAgc2NoZW1lLiBUaGlzIHNlZW1zIHRvIGFsbG93IHNlbGVjdGluZyB0aGUgbWV0cmljIHVzZWQgZm9yIHdhdGVybWFyayBjYWxjdWxhdGlvbnMsIHdoaWNoIGlzIGdvb2QgZm9yIGZsZXhpYmlsaXR5LiBGaW5hbGx5LCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBoYXMgdGhlIG1ldHJpYyYjMzk7cyBuYW1lIGFkZGVkIHRvIGBkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZXNgLCBlbnN1cmluZyBpdCYjMzk7cyBleHBvc2VkIGNvcnJlY3RseSB0aHJvdWdoIHN5c2ZzLgoKQWxyaWdodCwgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3aGF0IEkgY2FyZSBhYm91dC4gVGhpcyBzZWVtcyBmb2N1c2VkLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgbWV0cmljIHNvdW5kcyB1c2VmdWwuIFRpbWUgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgYERBTU9OYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX1NZU0ZTYCBhcmUgYWxsIGVuYWJsZWQsIGFzIHRoZXNlIGFyZSB0aGUgbWFpbiBEQU1PTiBjb21wb25lbnRzIHRoYXQgdGhpcyBjaGFuZ2UgaW50ZXJhY3RzIHdpdGguIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY29uZmlncyBhcmUgc2V0IGNvcnJlY3RseSwgcGVyaGFwcyB3aXRoaW4gYSBgZGVmY29uZmlnYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIG1ha2Ugc3VyZSB0aGF0IGFueSBkZXBlbmRlbmNpZXMgYXJlIGFsc28gc2F0aXNmaWVkLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzLgoKKipGdXp6aW5nIEZvY3VzOiBEQU1PTiBDb25maWd1cmF0aW9uICZhbXA7IEtleSBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvci4gTXkgYnJhaW4mIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdlIGhhdmUgYXQgcGxheSBoZXJlOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiBUaGVzZSBhcmUgdGhlIGluaXRpYWwgZmxhZ3MgdGhhdCBkZXRlcm1pbmUgaXRzIG92ZXJhbGwgYmVoYXZpb3IgYW5kIHdoZXRoZXIgaXQgaXMgZXZlbiBlbmFibGVkLCBpZiBzeXNmcyBpbnRlZ3JhdGlvbiBpcyBhdmFpbGFibGUsIGFuZCBpZiByZWNsYWltIGlzIGVuYWJsZWQuIEdvdHRhIGtlZXAgdGhvc2Ugc3RyYWlnaHQgaW4gbXkgaGVhZC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHZ1bG5lcmFiaWxpdGllcyB3b3VsZCBtb3N0IGxpa2VseSBhcmlzZToKKiAgIGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlYDogU291bmRzIGxpa2UgYSBkYXRhIHJldHJpZXZhbCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGRhdGEgdHlwZSBpc3N1ZXMgaWYgaW1wcm9wZXJseSBoYW5kbGVkLgoqICAgYGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlYCwgYGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX2xvYWRgOiBUaGVzZSBzZWVtIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhaW0gcmF0ZXM7IHN0b3JpbmcgYW5kIGxvYWRpbmcgY29uZmlnIHZhbHVlcyBhcmUgcG90ZW50aWFsIGF2ZW51ZXMgZm9yIGZ1enppbmcgZGF0YSBtYW5pcHVsYXRpb24sIHJhY2UgY29uZGl0aW9ucywgb3IgaW50ZWdlciBvdmVyZmxvd3MuCiogICBgbWV0cmljX3Nob3dgLCBgbWV0cmljX3N0b3JlYDogVGhlc2UgbG9vayBsaWtlIGdlbmVyYWwgc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gRGVmaW5pdGVseSByaXBlIGZvciBwcm9iaW5nIGJlY2F1c2Ugb2YgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGlucHV0LgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG1ldHJpY19zdG9yZWAgZnVydGhlciBhbmQgc2VlIHdoZXJlIHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHN5c2ZzIGludGVyYWN0aW9uIHByb2JhYmx5IGxpdmVzLCB3aGVyZSBkYXRhIHZhbGlkYXRpb24gYW5kIHByb2Nlc3NpbmcgaGFwcGVucy4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhlIGlucHV0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWV0cmljX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMDY1PXN0YXRpYyBzc2l6ZV90IG1ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwODEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA4MjpzdGF0aWMgc3NpemVfdCBtZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDgzLVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI3Nj1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI5MzpzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTQtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLCBgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZWAuIFNpbmNlIHRoaXMgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIERhbW9uLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbjogYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgRGFtb24mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMsIGluY2x1ZGluZyBhbnl0aGluZyByZWxhdGVkIHRvIHdhdGVybWFyayBtZXRyaWNzLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGludG8gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyODI9c3RhdGljIGJvb2wga2RhbW9uZF9uZWVkX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjk5LVxubW0vZGFtb24vY29yZS5jOjMzMDA6c3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcbm1tL2RhbW9uL2NvcmUuYy0zMzAxLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICptZXRyaWNfdmFsdWUpXG4tLVxubW0vZGFtb24vY29yZS5jPTMzMjQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3Nfd21hcmtfd2FpdF91cyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMyNy1cbm1tL2RhbW9uL2NvcmUuYzozMzI4Olx0aWYgKGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUoc2NoZW1lLVx1MDAzZXdtYXJrcy5tZXRyaWMsIFx1MDAyNm1ldHJpYykpXG5tbS9kYW1vbi9jb3JlLmMtMzMyOS1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgREFNT1MgU3Vic3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UgY2FuIGJlc3QgbGV2ZXJhZ2UgU3l6a2FsbGVyIHRvIHRlc3QgdGhlIERBTU9TIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIGRpcmVjdGx5IGNhbGxlZCBieSBgZGFtb3Nfd21hcmtfd2FpdF91c2AuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGVudHJ5IHBvaW50LiBUaGVuIEkmIzM5O3ZlIGdvdCBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgLCB3aGljaCBsb29rcyBsaWtlIGEgbW9kdWxlIHBhcmFtZXRlciBzdG9yZS4gS25vd2luZyBTeXprYWxsZXIsIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGhhbmRsZSBzeXNmcyBhbmQgbW9kdWxlIHBhcmFtcywgZXNwZWNpYWxseSBpZiBkZXNjcmlwdGlvbnMgYXJlIGF2YWlsYWJsZS4gQnV0LCBsZXQmIzM5O3Mgbm90IGxlYXZlIHRoaW5ncyB0byBjaGFuY2U7IHdlIGNhbiBhbHdheXMgcHJpb3JpdGl6ZSBzcGVjaWZpYyBmdW5jdGlvbnMuCgpHaXZlbiB0aGlzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBmb2N1c2luZyBteSBpbml0aWFsIGZ1enppbmcgZWZmb3J0cyBvbiBgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZWAgYWxvbmcgd2l0aCB0aGUgcmVsYXRlZCBgbWV0cmljX3N0b3JlYCBpbnRlcmFjdGlvbi4gSXQgc2VlbXMgbGlrZSBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2ggd291bGQgYmUgYmVuZWZpY2lhbCwgYXQgbGVhc3QgdG8gc3RhcnQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgZXhhbWluZSBgZGFtb3Nfd21hcmtfd2FpdF91c2AgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3dtYXJrX3dhaXRfdXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMzMDA9c3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMyMy0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzI0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXG5tbS9kYW1vbi9jb3JlLmMtMzMyNS17XG4tLVxubW0vZGFtb24vY29yZS5jPTM0MzU9c3RhdGljIGludCBrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0NDMtXHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzozNDQ0Olx0XHRcdHdhaXRfdGltZSA9IGRhbW9zX3dtYXJrX3dhaXRfdXMocyk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ0NS1cdFx0XHRpZiAoIWluaXRfd2FpdF90aW1lIHx8IHdhaXRfdGltZSBcdTAwM2MgbWluX3dhaXRfdGltZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgdGhlIERBTU9OIFRocmVhZCBFeGVjdXRpb24gRmxvdyoqCgpSaWdodCwgc28gYGRhbW9zX3dtYXJrX3dhaXRfdXNgLCB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgYGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uYCwgaXNuJiMzOTt0IGl0PyBBbmQgYGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uYCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gd2l0aGluIGBrZGFtb25kX2ZuYC4gIFRoYXQgYGtkYW1vbmRfZm5gLCB0aGF0JiMzOTtzIHRoZSBjb3JlIERBTU9OIHRocmVhZCAtIHRoZSBoZWFydCBvZiB0aGUgREFNT04gc3Vic3lzdGVtLiBTbywgYGRhbW9zX3dtYXJrX3dhaXRfdXNgIGlzIGVzc2VudGlhbGx5IGF0IHRoZSBib3R0b20gb2YgYSBjcml0aWNhbCBleGVjdXRpb24gY2hhaW4uCgpOb3csIHdoZXJlIGFyZSB0aGUgaW1wb3J0YW50IG1ldHJpY3Mgc3RvcmVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtZXRyaWNfc3RvcmVgIHN0cnVjdHVyZS4uLiB0aGF0JiMzOTtsbCBiZSBkZWZpbmVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IHBlcmZvcm1hbmNlIGRhdGEgaXMgYmVpbmcga2VwdCwgYW5kIHRoYXQmIzM5O3MgdGhlIG5leHQgcGxhY2UgSSBuZWVkIHRvIGRpZyBpbnRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXRyaWNfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwNjU9c3RhdGljIHNzaXplX3QgbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDgyOnN0YXRpYyBzc2l6ZV90IG1ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwODMtXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc2PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI5Mi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjkzOnN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI5NC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ2NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGFjcm9zcyBEQU1PTiYjMzk7cyBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCByZWNsYWltIGNvbXBvbmVudHMuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIEFueSBtb2RpZmljYXRpb24gdG91Y2hpbmcgdGhvc2UgYXJlYXMgaXMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGZpbmRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQg4oCTIGxvb2tzIGxpa2UgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC4KClNwZWNpZmljYWxseSwgSSBzaG91bGQgZm9jdXMgbXkgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgLCBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgLCBhbmQgYG1ldHJpY19zdG9yZWAuIFRoZXNlIGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGRhdGEgaGFuZGxpbmcgZnVuY3Rpb25zIHRoYXQgd291bGQgYmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHRhcmdldCBzZWxlY3Rpb24uCgpXYWl0LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLi4uSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoYXQgYERBTU9OX1JFQ0xBSU1gIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IHdhc3RpbmcgdGltZSBjaGFzaW5nIGEgcGhhbnRvbS4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9SRUNMQUlNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhhdCBpbml0aWFsIGFzc2Vzc21lbnQgb2YgYERBTU9OX1JFQ0xBSU1gIGxvb2tzIHNwb3Qtb24sIHNvIEkmIzM5O2xsIGdpdmUgdGhhdCBhIGNoZWNrLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBEQU1PTl9TWVNGU2AgYW5kIHNlZSB3aGVyZSB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSYjMzk7dmUgZ290IGEgY29uc2lzdGVudCBhc3Nlc3NtZW50IGJldHdlZW4gdGhvc2UgdHdvIG9yIGlmIHRoZXJlIGFyZSBhbnkgYXJlYXMgb2YgZnJpY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9TWVNGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkFzc2Vzc21lbnQgb2YgREFNT04tUmVsYXRlZCBWYWxpZGF0aW9uKioKCkFscmlnaHQsIHllcCwgdGhhdCYjMzk7cyByaWdodC4gYERBTU9OX1NZU0ZTYCBpcyBkZWZpbml0ZWx5IG9uIHRoZSBtb25leS4gV2UmIzM5O3JlIGdvb2QgdGhlcmUuIE5vdywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZSBvdmVyYXJjaGluZyBgREFNT05gIGNvbmNlcHQgaXRzZWxmIGlzbiYjMzk7dCBhIHJlZCBoZXJyaW5nLiBJdCYjMzk7cyBhbHdheXMgd2lzZSB0byByZS12YWxpZGF0ZSB0aGUgZm91bmRhdGlvbiwgZXZlbiB3aGVuIHRoZSBpbW1lZGlhdGUgY29tcG9uZW50IHNlZW1zIHNvdW5kLiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBjb3JlIGFzc3VtcHRpb25zIGFib3V0IGBEQU1PTmAmIzM5O3MgYmVoYXZpb3IgYW5kIGFwcGxpY2FiaWxpdHkgYXJlIHN0aWxsIGhvbGRpbmcgdHJ1ZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgREFNT04gSW50ZWdyYXRpb24gaW4gdGhlIE1ldHJpYyBTdG9yZSoqCgpZZXMsIGBEQU1PTmAgc2VlbXMgdG8gYmUgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaGVyZS4gVGhlIGxvZ2ljIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJiMzOTtyZSBhcmNoaXRlY3RpbmcgdGhpcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtZXRyaWNfc3RvcmVgIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgZmlsZS4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtZXRyaWNzIHJlbGF0ZWQgdG8gREFNT04gd2lsbCByZXNpZGUsIGFuZCB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBzcGVjaWZpYyBtZWNoYW5pc21zIHVzZWQgdG8gc3RvcmUgYW5kIGV4cG9zZSB0aGUgcmVsZXZhbnQgcGVyZm9ybWFuY2UgZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBjb2xsZWN0aW9uIGFuZCBzdG9yYWdlIGFyZSBhbGlnbmVkIHdpdGggdGhlIGV4aXN0aW5nIGZyYW1ld29yayBhbmQgcGVyZm9ybWFuY2UgZ29hbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgyOlx0c3RhdGljIHNzaXplX3QgbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4xMDgzOlx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMTA4NDpcdHtcbjEwODU6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICp3YXRlcm1hcmtzID0gY29udGFpbmVyX29mKGtvYmosXG4xMDg2Olx0XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3dhdGVybWFya3MsIGtvYmopO1xuMTA4NzpcdFx0aW50IGk7XG4xMDg4Olx0XG4xMDg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9zX3N5c2ZzX3dtYXJrX21ldHJpY19uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG4xMDkwOlx0XHRcdGNvbnN0IHN0cnVjdCBkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XG4xMDkxOlx0XG4xMDkyOlx0XHRcdG1ldHJpY19uYW1lID0gXHUwMDI2ZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzW2ldO1xuMTA5MzpcdFx0XHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBtZXRyaWNfbmFtZS1cdTAwM2VuYW1lKSkge1xuMTA5NDpcdFx0XHRcdHdhdGVybWFya3MtXHUwMDNlbWV0cmljID0gbWV0cmljX25hbWUtXHUwMDNlbWV0cmljO1xuMTA5NTpcdFx0XHRcdHJldHVybiBjb3VudDtcbjEwOTY6XHRcdFx0fVxuMTA5NzpcdFx0fVxuMTA5ODpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDk5Olx0fVxuMTEwMDpcdFxuMTEwMTpcdHN0YXRpYyBzc2l6ZV90IGludGVydmFsX3VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipGb2N1c2luZyB0aGUgRnV6emluZyBFZmZvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYSBnb29kIGZ1enppbmcgdGFyZ2V0IGZvciB0aGlzIHN5c2ZzIGludGVyYWN0aW9uLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBgbWV0cmljX3N0b3JlYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlIHN5c2ZzIGlucHV0IGFuZCBzdWJzZXF1ZW50bHkgc2V0dGluZyBgd2F0ZXJtYXJrcy0mZ3Q7bWV0cmljYC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZzsgdGhlIGlucHV0IHBhcnNpbmcgaXMgd2hlcmUgd2UmIzM5O3JlIG1vc3QgbGlrZWx5IHRvIHVuY292ZXIgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBtYWxmb3JtZWQgb3IgdW51c3VhbCBkYXRhLiBJdCYjMzk7cyBvZnRlbiB0aGUgd2Vha2VzdCBsaW5rIGluIHRoZXNlIGtpbmRzIG9mIEkvTyBpbnRlcmFjdGlvbnMuCgpNeSBpbnN0aW5jdCBpcyB0byBzdGFydCB0aGVyZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBxdWljayBsb29rIGF0IGBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZWAgaW4gYG1tL2RhbW9uL3JlY2xhaW0uY2AsIHRvIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vdCBhbnkgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4OTpcdE1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxuIDM5MDpcdFx0XCYjMzQ7U2NhbGUgZmFjdG9yIGZvciBEQU1PTl9SRUNMQUlNIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24gKGRlZmF1bHQ6IDEpXCYjMzQ7KTtcbiAzOTE6XHRcbiAzOTI6XHRzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbiAzOTM6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIDM5NDpcdHtcbiAzOTU6XHRcdGlmIChzeXNmc19zdHJlcSh2YWwsIFwmIzM0O2ZyZWVcJiMzNDspKVxuIDM5NjpcdFx0XHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFO1xuIDM5NzpcdFx0ZWxzZSBpZiAoc3lzZnNfc3RyZXEodmFsLCBcJiMzNDthdmFpbGFibGVcJiMzNDspKVxuIDM5ODpcdFx0XHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU7XG4gMzk5Olx0XHRlbHNlXG4gNDAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQwMTpcdFxuIDQwMjpcdFx0cmV0dXJuIDA7XG4gNDAzOlx0fVxuIDQwNDpcdFxuIDQwNTpcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZChjaGFyICpidWZmZXIsXG4gNDA2Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIDQwNzpcdHtcbiA0MDg6XHRcdGludCB0eXBlID0gUkVBRF9PTkNFKG1lbXJhdGVfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBGdW5jdGlvbiYjMzk7cyBRdWFsaXR5KioKCkFscmlnaHQsIHRoaXMgZnVuY3Rpb24gc2VlbXMgcHJvbWlzaW5nLCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgYW5hbHlzaXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGl0cyB3b3JraW5ncy4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGlzIGtleSB0byBmb3JtaW5nIGEgY29tcHJlaGVuc2l2ZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMwMDpcdHN0YXRpYyBpbnQgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZShlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWMsXG4zMzAxOlx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm1ldHJpY192YWx1ZSlcbjMzMDI6XHR7XG4zMzAzOlx0XHRsb25nIGF2YWlsYWJsZV9wYWdlcztcbjMzMDQ6XHRcbjMzMDU6XHRcdHN3aXRjaCAobWV0cmljKSB7XG4zMzA2Olx0XHRjYXNlIERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XG4zMzA3Olx0XHRcdCptZXRyaWNfdmFsdWUgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICogMTAwMCAvXG4zMzA4Olx0XHRcdCAgICAgICB0b3RhbHJhbV9wYWdlcygpO1xuMzMwOTpcdFx0XHRyZXR1cm4gMDtcbjMzMTA6XHRcdGNhc2UgREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOlxuMzMxMTpcdFx0XHRhdmFpbGFibGVfcGFnZXMgPSBzaV9tZW1fYXZhaWxhYmxlKCk7XG4zMzEyOlx0XHRcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcbjMzMTM6XHRcdFx0cmV0dXJuIDA7XG4zMzE0Olx0XHRkZWZhdWx0OlxuMzMxNTpcdFx0XHRicmVhaztcbjMzMTY6XHRcdH1cbjMzMTc6XHRcdHJldHVybiAtRUlOVkFMO1xuMzMxODpcdH1cbjMzMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4ODUKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkFkZGluZyBhIE5ldyBEQU1PTiBNZXRyaWM6IEtleSBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbmV3IG1ldHJpYyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gREFNT04uIFRoZSBjZW50cmFsIHBpZWNlLCB0aGUgaGVhcnQgb2YgdGhlIGNhbGN1bGF0aW9uLCBoaW5nZXMgb24gdGhlIGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgY29yZSBjYWxjdWxhdGlvbiBlbmdpbmUsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgYGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlYCBhbmQgdGhlIGBtZXRyaWNfc3RvcmVgIGludGVyYWN0IHdpdGggaXQuIFRob3NlIGFyZSBnb2luZyB0byBiZSBjcnVjaWFsIGZvciB0cmFja2luZyB0aGUgbWV0cmljIHZhbHVlIGFuZCB3aGVyZSBpdCYjMzk7cyBzdG9yZWQgZm9yIGxhdGVyIHVzZS4KCk9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLCBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGhvdyBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGFyZSBzZXQuIFRoZXNlIHdpbGwgdW5kb3VidGVkbHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGlzIG5ldyBtZXRyaWMgYW5kIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCwgaG93IGl0JiMzOTtzIGV4cG9zZWQsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVjbGFpbSBtZWNoYW5pc21zLiBDb25maWd1cmF0aW9uIGlzIG9mdGVuIHdoZXJlIHN1YnRsZSBidWdzIGx1cmssIHNvIGEgY2FyZWZ1bCByZXZpZXcgb2YgdGhlc2Ugb3B0aW9ucyB3aWxsIGJlIGltcG9ydGFudC4KClNpbmNlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBnZXQgdGhpcyBhZGRlZCB0byB0aGUgZnV6emluZyBjYW1wYWlnbiBhcyBzb29uIGFzIEkgY2FuIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHdpdGhpbiB0aGUgbWV0cmljIGNhbGN1bGF0aW9uLCBtZW1vcnkgcmVjbGFpbSwgb3IgZGF0YSBzdG9yYWdlLiBUaGF0JiMzOTtzIG15IHRvcCBwcmlvcml0eSBhZnRlciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZSYjMzQ7LAogICAgJiMzNDttZXRyaWNfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUmIzM0OywKICAgICYjMzQ7bWV0cmljX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgd2F0ZXJtYXJrIG1ldHJpYyAoREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFKSB0byB0aGUgREFNT04gY29yZSwgc3lzZnMgaW50ZXJmYWNlLCBhbmQgREFNT05fUkVDTEFJTSBtb2R1bGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IERBTU9OIGNhbGN1bGF0ZXMgbWVtb3J5IHJhdGVzIGFuZCB0cmlnZ2VycyBzY2hlbWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgc3lzZnMvbW9kdWxlIHBhcmFtZXRlciBwYXJzaW5nIGFuZCB0aGUgY29yZSBtZXRyaWMgY2FsY3VsYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMjoyOS4yNTMxODk3NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzMDUwMjY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZVwiLFxuICAgIFwibWV0cmljX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6MjkuMjUzMTk3MzQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIwNTE5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYTI3ZGNhMDE1OGFkYjFmMmY5YTVmMmUyMGU2NGMxM2QxNmU2NGQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDA4OjMyOjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IDZmN2VkYjM1OTBlZjk3Li4wMDA2ZTNhMjUzMTc2YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtMzE0LDEzICszMTQsMTYgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcXG4gLyoqXFxuICAqIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIC0gUmVwcmVzZW50cyB0aGUgd2F0ZXJtYXJrIG1ldHJpYy5cXG4gICpcXG4tICogQERBTU9TX1dNQVJLX05PTkU6XFx0XFx0SWdub3JlIHRoZSB3YXRlcm1hcmtzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXFxuLSAqIEBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFOlxcdEZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS5cXG4tICogQE5SX0RBTU9TX1dNQVJLX01FVFJJQ1M6XFx0VG90YWwgbnVtYmVyIG9mIERBTU9TIHdhdGVybWFyayBtZXRyaWNzXFxuKyAqIEBEQU1PU19XTUFSS19OT05FOlxcdFxcdCAgICBJZ25vcmUgdGhlIHdhdGVybWFya3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cXG4rICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XFx0ICAgIEZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS5cXG4rICogQERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURTogQXZhaWxhYmxlIG1lbW9yeSByYXRlIG9mIHRoZSBzeXN0ZW0gaW5cXG4rICpcXHRcXHRcXHRcXHQgICAgWzAsMTAwMF0uXFxuKyAqIEBOUl9EQU1PU19XTUFSS19NRVRSSUNTOlxcdCAgICBUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3NcXG4gICovXFxuIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIHtcXG4gXFx0REFNT1NfV01BUktfTk9ORSxcXG4gXFx0REFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcXG4rXFx0REFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFLFxcbiBcXHROUl9EQU1PU19XTUFSS19NRVRSSUNTLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggN2U0YjlhZmZjNWIwNjAuLmYxMmQwNjA4MWQ3MGY4IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0zMzAwLDExICszMzAwLDE3IEBAIHN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gc3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqbWV0cmljX3ZhbHVlKVxcbiB7XFxuK1xcdGxvbmcgYXZhaWxhYmxlX3BhZ2VzO1xcbitcXG4gXFx0c3dpdGNoIChtZXRyaWMpIHtcXG4gXFx0Y2FzZSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFOlxcbiBcXHRcXHQqbWV0cmljX3ZhbHVlID0gZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSAqIDEwMDAgL1xcbiBcXHRcXHQgICAgICAgdG90YWxyYW1fcGFnZXMoKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOlxcbitcXHRcXHRhdmFpbGFibGVfcGFnZXMgPSBzaV9tZW1fYXZhaWxhYmxlKCk7XFxuK1xcdFxcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li4yMjliYzY4YmIxYWQ0MyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5AQCAtMTU5LDYgKzE1OSwxNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQgX19yZWFkX21vc3RseSA9IDE7XFxuIHN0YXRpYyBib29sIHNraXBfYW5vbiBfX3JlYWRfbW9zdGx5O1xcbiBtb2R1bGVfcGFyYW0oc2tpcF9hbm9uLCBib29sLCAwNjAwKTtcXG4gXFxuKy8qXFxuKyAqIFdhdGVybWFya3MgbWV0cmljIG9wdGlvbnMuXFxuKyAqXFxuKyAqIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCBhcyBgYGZyZWVgYCwgREFNT05fUkVDTEFJTSBjYWxjdWxhdGVzIHRoZSB3YXRlcm1hcmtcXG4rICogbWV0cmljIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBmcmVlIG1lbW9yeSByYXRlLiBJZiBzZXQgYXMgYGBhdmFpbGFibGVgYCwgaXRcXG4rICogY2FsY3VsYXRlcyB0aGUgbWV0cmljIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBhdmFpbGFibGUgbWVtb3J5IHJhdGUuXFxuKyAqXFxuKyAqIERlZmF1bHQgaXMgYGBmcmVlYGAuXFxuKyAqL1xcbitzdGF0aWMgZW51bSBkYW1vc193bWFya19tZXRyaWMgbWVtcmF0ZV90eXBlID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURTtcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9yZWNsYWltX3N0YXQ7XFxuIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9yZWNsYWltX3N0YXQsXFxuIFxcdFxcdHJlY2xhaW1fdHJpZWRfcmVnaW9ucywgcmVjbGFpbWVkX3JlZ2lvbnMsIHF1b3RhX2V4Y2VlZHMpO1xcbkBAIC0yMjAsNiArMjMxLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGRhbW9uX3JlY2xhaW1fd21hcmtzLm1ldHJpYyA9IG1lbXJhdGVfdHlwZTtcXG4rXFxuIFxcdGF0dHJzID0gZGFtb25fcmVjbGFpbV9tb25fYXR0cnM7XFxuIFxcdGlmIChhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscykge1xcbiBcXHRcXHRhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwO1xcbkBAIC0zNzYsNiArMzg5LDQ5IEBAIG1vZHVsZV9wYXJhbV9jYihhZGRyX3VuaXQsIFxcdTAwMjZhZGRyX3VuaXRfcGFyYW1fb3BzLCBcXHUwMDI2YWRkcl91bml0LCAwNjAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXFxuIFxcdFxcXCJTY2FsZSBmYWN0b3IgZm9yIERBTU9OX1JFQ0xBSU0gdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbiAoZGVmYXVsdDogMSlcXFwiKTtcXG4gXFxuK3N0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuK3tcXG4rXFx0aWYgKHN5c2ZzX3N0cmVxKHZhbCwgXFxcImZyZWVcXFwiKSlcXG4rXFx0XFx0bWVtcmF0ZV90eXBlID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURTtcXG4rXFx0ZWxzZSBpZiAoc3lzZnNfc3RyZXEodmFsLCBcXFwiYXZhaWxhYmxlXFxcIikpXFxuK1xcdFxcdG1lbXJhdGVfdHlwZSA9IERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX2xvYWQoY2hhciAqYnVmZmVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4re1xcbitcXHRpbnQgdHlwZSA9IFJFQURfT05DRShtZW1yYXRlX3R5cGUpO1xcbitcXHRpbnQgbGVuID0gMDtcXG4rXFxuK1xcdGlmICh0eXBlID09IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEUpXFxuK1xcdFxcdGxlbiArPSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcXFwiW2ZyZWVdIFxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGxlbiArPSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcXFwiZnJlZSBcXFwiKTtcXG4rXFxuK1xcdGlmICh0eXBlID09IERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURSlcXG4rXFx0XFx0bGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sIFxcXCJbYXZhaWxhYmxlXSBcXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsZW4gKz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXFxcImF2YWlsYWJsZSBcXFwiKTtcXG4rXFxuK1xcdGxlbiArPSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcXFwiXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiBsZW47XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBtZW1yYXRlX3R5cGVfcGFyYW1fb3BzID0ge1xcbitcXHQuc2V0ID0gZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUsXFxuK1xcdC5nZXQgPSBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9sb2FkLFxcbit9O1xcbittb2R1bGVfcGFyYW1fY2IobWVtcmF0ZV90eXBlLCBcXHUwMDI2bWVtcmF0ZV90eXBlX3BhcmFtX29wcywgXFx1MDAyNm1lbXJhdGVfdHlwZSwgMDYwMCk7XFxuK01PRFVMRV9QQVJNX0RFU0MobWVtcmF0ZV90eXBlLFxcbitcXHRcXHQgXFxcIk1lbW9yeSByYXRlIHR5cGUgZm9yIHdhdGVybWFya3MgbWV0cmljIFxcXCJcXG4rXFx0XFx0IFxcXCIoZnJlZSBvciBhdmFpbGFibGUsIGRlZmF1bHQ6IGZyZWUpXFxcIik7XFxuK1xcbiBzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2VuYWJsZWQodm9pZClcXG4ge1xcbiBcXHRpZiAoIWN0eClcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuaW5kZXggMzI5Y2ZkMGJiZTlmMzIuLjVkNjYzNjQzM2JkNjYyIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbkBAIC0xMDU2LDYgKzEwNTYsMTAgQEAgZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzW10gPSB7XFxuIFxcdFxcdC5tZXRyaWMgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFLFxcbiBcXHRcXHQubmFtZSA9IFxcXCJmcmVlX21lbV9yYXRlXFxcIixcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQubWV0cmljID0gREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFLFxcbitcXHRcXHQubmFtZSA9IFxcXCJhdmFpbGFibGVfbWVtX3JhdGVcXFwiLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIHNzaXplX3QgbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6MjkuODI3ODUyOTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc1NTgyNzc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZVwiLFxuICAgIFwibWV0cmljX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYTI3ZGNhMDE1OGFkYjFmMmY5YTVmMmUyMGU2NGMxM2QxNmU2NGQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDg6MzI6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDZmN2VkYjM1OTBlZjk3Li4wMDA2ZTNhMjUzMTc2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMzE0LDEzICszMTQsMTYgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiAvKipcbiAgKiBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyAtIFJlcHJlc2VudHMgdGhlIHdhdGVybWFyayBtZXRyaWMuXG4gICpcbi0gKiBAREFNT1NfV01BUktfTk9ORTpcdFx0SWdub3JlIHRoZSB3YXRlcm1hcmtzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXG4tICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XHRGcmVlIG1lbW9yeSByYXRlIG9mIHRoZSBzeXN0ZW0gaW4gWzAsMTAwMF0uXG4tICogQE5SX0RBTU9TX1dNQVJLX01FVFJJQ1M6XHRUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3NcbisgKiBAREFNT1NfV01BUktfTk9ORTpcdFx0ICAgIElnbm9yZSB0aGUgd2F0ZXJtYXJrcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLlxuKyAqIEBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFOlx0ICAgIEZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS5cbisgKiBAREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOiBBdmFpbGFibGUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpblxuKyAqXHRcdFx0XHQgICAgWzAsMTAwMF0uXG4rICogQE5SX0RBTU9TX1dNQVJLX01FVFJJQ1M6XHQgICAgVG90YWwgbnVtYmVyIG9mIERBTU9TIHdhdGVybWFyayBtZXRyaWNzXG4gICovXG4gZW51bSBkYW1vc193bWFya19tZXRyaWMge1xuIFx0REFNT1NfV01BUktfTk9ORSxcbiBcdERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEUsXG4rXHREQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsXG4gXHROUl9EQU1PU19XTUFSS19NRVRSSUNTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA3ZTRiOWFmZmM1YjA2MC4uZjEyZDA2MDgxZDcwZjggMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMzMDAsMTEgKzMzMDAsMTcgQEAgc3RhdGljIGJvb2wga2RhbW9uZF9uZWVkX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHN0YXRpYyBpbnQgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZShlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWMsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm1ldHJpY192YWx1ZSlcbiB7XG4rXHRsb25nIGF2YWlsYWJsZV9wYWdlcztcbitcbiBcdHN3aXRjaCAobWV0cmljKSB7XG4gXHRjYXNlIERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XG4gXHRcdCptZXRyaWNfdmFsdWUgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICogMTAwMCAvXG4gXHRcdCAgICAgICB0b3RhbHJhbV9wYWdlcygpO1xuIFx0XHRyZXR1cm4gMDtcbitcdGNhc2UgREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOlxuK1x0XHRhdmFpbGFibGVfcGFnZXMgPSBzaV9tZW1fYXZhaWxhYmxlKCk7XG4rXHRcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li4yMjliYzY4YmIxYWQ0MyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMTU5LDYgKzE1OSwxNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQgX19yZWFkX21vc3RseSA9IDE7XG4gc3RhdGljIGJvb2wgc2tpcF9hbm9uIF9fcmVhZF9tb3N0bHk7XG4gbW9kdWxlX3BhcmFtKHNraXBfYW5vbiwgYm9vbCwgMDYwMCk7XG4gXG4rLypcbisgKiBXYXRlcm1hcmtzIG1ldHJpYyBvcHRpb25zLlxuKyAqXG4rICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgZnJlZWBgLCBEQU1PTl9SRUNMQUlNIGNhbGN1bGF0ZXMgdGhlIHdhdGVybWFya1xuKyAqIG1ldHJpYyBiYXNlZCBvbiB0aGUgc3lzdGVtJ3MgZnJlZSBtZW1vcnkgcmF0ZS4gSWYgc2V0IGFzIGBgYXZhaWxhYmxlYGAsIGl0XG4rICogY2FsY3VsYXRlcyB0aGUgbWV0cmljIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBhdmFpbGFibGUgbWVtb3J5IHJhdGUuXG4rICpcbisgKiBEZWZhdWx0IGlzIGBgZnJlZWBgLlxuKyAqL1xuK3N0YXRpYyBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFO1xuK1xuIHN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9yZWNsYWltX3N0YXQ7XG4gREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcbiBcdFx0cmVjbGFpbV90cmllZF9yZWdpb25zLCByZWNsYWltZWRfcmVnaW9ucywgcXVvdGFfZXhjZWVkcyk7XG5AQCAtMjIwLDYgKzIzMSw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0ZGFtb25fcmVjbGFpbV93bWFya3MubWV0cmljID0gbWVtcmF0ZV90eXBlO1xuK1xuIFx0YXR0cnMgPSBkYW1vbl9yZWNsYWltX21vbl9hdHRycztcbiBcdGlmIChhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscykge1xuIFx0XHRhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwO1xuQEAgLTM3Niw2ICszODksNDkgQEAgbW9kdWxlX3BhcmFtX2NiKGFkZHJfdW5pdCwgXHUwMDI2YWRkcl91bml0X3BhcmFtX29wcywgXHUwMDI2YWRkcl91bml0LCAwNjAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKGFkZHJfdW5pdCxcbiBcdFwiU2NhbGUgZmFjdG9yIGZvciBEQU1PTl9SRUNMQUlNIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24gKGRlZmF1bHQ6IDEpXCIpO1xuIFxuK3N0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuK1x0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4re1xuK1x0aWYgKHN5c2ZzX3N0cmVxKHZhbCwgXCJmcmVlXCIpKVxuK1x0XHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFO1xuK1x0ZWxzZSBpZiAoc3lzZnNfc3RyZXEodmFsLCBcImF2YWlsYWJsZVwiKSlcbitcdFx0bWVtcmF0ZV90eXBlID0gREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX2xvYWQoY2hhciAqYnVmZmVyLFxuK1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbit7XG4rXHRpbnQgdHlwZSA9IFJFQURfT05DRShtZW1yYXRlX3R5cGUpO1xuK1x0aW50IGxlbiA9IDA7XG4rXG4rXHRpZiAodHlwZSA9PSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFKVxuK1x0XHRsZW4gKz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCJbZnJlZV0gXCIpO1xuK1x0ZWxzZVxuK1x0XHRsZW4gKz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCJmcmVlIFwiKTtcbitcbitcdGlmICh0eXBlID09IERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURSlcbitcdFx0bGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sIFwiW2F2YWlsYWJsZV0gXCIpO1xuK1x0ZWxzZVxuK1x0XHRsZW4gKz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCJhdmFpbGFibGUgXCIpO1xuK1xuK1x0bGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sIFwiXFxuXCIpO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIG1lbXJhdGVfdHlwZV9wYXJhbV9vcHMgPSB7XG4rXHQuc2V0ID0gZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUsXG4rXHQuZ2V0ID0gZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZCxcbit9O1xuK21vZHVsZV9wYXJhbV9jYihtZW1yYXRlX3R5cGUsIFx1MDAyNm1lbXJhdGVfdHlwZV9wYXJhbV9vcHMsIFx1MDAyNm1lbXJhdGVfdHlwZSwgMDYwMCk7XG4rTU9EVUxFX1BBUk1fREVTQyhtZW1yYXRlX3R5cGUsXG4rXHRcdCBcIk1lbW9yeSByYXRlIHR5cGUgZm9yIHdhdGVybWFya3MgbWV0cmljIFwiXG4rXHRcdCBcIihmcmVlIG9yIGF2YWlsYWJsZSwgZGVmYXVsdDogZnJlZSlcIik7XG4rXG4gc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9lbmFibGVkKHZvaWQpXG4ge1xuIFx0aWYgKCFjdHgpXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMjljZmQwYmJlOWYzMi4uNWQ2NjM2NDMzYmQ2NjIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTEwNTYsNiArMTA1NiwxMCBAQCBkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZXNbXSA9IHtcbiBcdFx0Lm1ldHJpYyA9IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEUsXG4gXHRcdC5uYW1lID0gXCJmcmVlX21lbV9yYXRlXCIsXG4gXHR9LFxuK1x0e1xuK1x0XHQubWV0cmljID0gREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFLFxuK1x0XHQubmFtZSA9IFwiYXZhaWxhYmxlX21lbV9yYXRlXCIsXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMyOjI5LjgyNzg1NTE5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTU4MTY4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2g6IEEgTmV3IFdhdGVybWFyayBNZXRyaWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBEQU1PTiBpbiB0aGUgTGludXgga2VybmVsLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBmdW5jdGlvbmFsbHkuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBuZXcgd2F0ZXJtYXJrIG1ldHJpYywgYERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURWAsIHRvIERBTU9OIHNjaGVtZXMuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0J3MgYWx3YXlzIGdvb2QgdG8gaGF2ZSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciBtZW1vcnkgbWFuYWdlbWVudC5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMuIEZpcnN0LCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBnZXRzIHVwZGF0ZWQgdG8gZGVmaW5lIHRoZSBuZXcgbWV0cmljIHdpdGhpbiB0aGUgYGVudW0gZGFtb3Nfd21hcmtfbWV0cmljYC4gVGhlbiwgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHdlIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRyaWMgY2FsY3VsYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKClgIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNhbGN1bGF0aW9uIGxvZ2ljIGFuZCBpdHMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuVGhlIGBtbS9kYW1vbi9yZWNsYWltLmNgIGZpbGUgaXMgbW9kaWZpZWQgdG8gaW50cm9kdWNlIGEgbW9kdWxlIHBhcmFtZXRlciwgYG1lbXJhdGVfdHlwZWAsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBEQU1PTl9SRUNMQUlNYCBzY2hlbWUuIFRoaXMgc2VlbXMgdG8gYWxsb3cgc2VsZWN0aW5nIHRoZSBtZXRyaWMgdXNlZCBmb3Igd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucywgd2hpY2ggaXMgZ29vZCBmb3IgZmxleGliaWxpdHkuIEZpbmFsbHksIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGhhcyB0aGUgbWV0cmljJ3MgbmFtZSBhZGRlZCB0byBgZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzYCwgZW5zdXJpbmcgaXQncyBleHBvc2VkIGNvcnJlY3RseSB0aHJvdWdoIHN5c2ZzLlxuXG5BbHJpZ2h0LCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHdoYXQgSSBjYXJlIGFib3V0LiBUaGlzIHNlZW1zIGZvY3VzZWQsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBtZXRyaWMgc291bmRzIHVzZWZ1bC4gVGltZSB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgREFNT05gLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fU1lTRlNgIGFyZSBhbGwgZW5hYmxlZCwgYXMgdGhlc2UgYXJlIHRoZSBtYWluIERBTU9OIGNvbXBvbmVudHMgdGhhdCB0aGlzIGNoYW5nZSBpbnRlcmFjdHMgd2l0aC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGNvbmZpZ3MgYXJlIHNldCBjb3JyZWN0bHksIHBlcmhhcHMgd2l0aGluIGEgYGRlZmNvbmZpZ2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIGFyZSBhbHNvIHNhdGlzZmllZC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMjozNS45MjM2NzQ3NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NTUyOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6MzYuMDc4MjM1MTY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4OTgzODY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzLlxuXG4qKkZ1enppbmcgRm9jdXM6IERBTU9OIENvbmZpZ3VyYXRpb24gXHUwMDI2IEtleSBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB3ZSdyZSB0YWxraW5nIGFib3V0IERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvci4gTXkgYnJhaW4ncyBpbW1lZGlhdGVseSBqdW1waW5nIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UgaGF2ZSBhdCBwbGF5IGhlcmU6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUkVDTEFJTWAuIFRoZXNlIGFyZSB0aGUgaW5pdGlhbCBmbGFncyB0aGF0IGRldGVybWluZSBpdHMgb3ZlcmFsbCBiZWhhdmlvciBhbmQgd2hldGhlciBpdCBpcyBldmVuIGVuYWJsZWQsIGlmIHN5c2ZzIGludGVncmF0aW9uIGlzIGF2YWlsYWJsZSwgYW5kIGlmIHJlY2xhaW0gaXMgZW5hYmxlZC4gR290dGEga2VlcCB0aG9zZSBzdHJhaWdodCBpbiBteSBoZWFkLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHZ1bG5lcmFiaWxpdGllcyB3b3VsZCBtb3N0IGxpa2VseSBhcmlzZTpcbiogICBgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZWA6IFNvdW5kcyBsaWtlIGEgZGF0YSByZXRyaWV2YWwgZnVuY3Rpb24sIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYnVmZmVyIG92ZXJmbG93cyBvciBkYXRhIHR5cGUgaXNzdWVzIGlmIGltcHJvcGVybHkgaGFuZGxlZC5cbiogICBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgLCBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZGA6IFRoZXNlIHNlZW0gcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbSByYXRlczsgc3RvcmluZyBhbmQgbG9hZGluZyBjb25maWcgdmFsdWVzIGFyZSBwb3RlbnRpYWwgYXZlbnVlcyBmb3IgZnV6emluZyBkYXRhIG1hbmlwdWxhdGlvbiwgcmFjZSBjb25kaXRpb25zLCBvciBpbnRlZ2VyIG92ZXJmbG93cy5cbiogICBgbWV0cmljX3Nob3dgLCBgbWV0cmljX3N0b3JlYDogVGhlc2UgbG9vayBsaWtlIGdlbmVyYWwgc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gRGVmaW5pdGVseSByaXBlIGZvciBwcm9iaW5nIGJlY2F1c2Ugb2YgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGlucHV0LlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBtZXRyaWNfc3RvcmVgIGZ1cnRoZXIgYW5kIHNlZSB3aGVyZSB0aGF0J3MgaW1wbGVtZW50ZWQuIEknbSBnb2luZyB0byBjaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBzeXNmcyBpbnRlcmFjdGlvbiBwcm9iYWJseSBsaXZlcywgd2hlcmUgZGF0YSB2YWxpZGF0aW9uIGFuZCBwcm9jZXNzaW5nIGhhcHBlbnMuIEdvdHRhIHVuZGVyc3RhbmQgaG93IHRoZSBpbnB1dCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NDEuMTY4MDc4Njg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjQ5NTA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZXRyaWNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMDY1PXN0YXRpYyBzc2l6ZV90IG1ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA4MjpzdGF0aWMgc3NpemVfdCBtZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4My1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc2PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjkyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjkzOnN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTQtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NDEuNDE0NTc5NDk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2NDIyNzEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiwgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgLiBTaW5jZSB0aGlzIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBEYW1vbiwgSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbjogYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBEYW1vbidzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBpbmNsdWRpbmcgYW55dGhpbmcgcmVsYXRlZCB0byB3YXRlcm1hcmsgbWV0cmljcy4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGludG8gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMyOjQ0LjE3ODgwODg5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczMjY2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyODI9c3RhdGljIGJvb2wga2RhbW9uZF9uZWVkX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyOTktXFxubW0vZGFtb24vY29yZS5jOjMzMDA6c3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcXG5tbS9kYW1vbi9jb3JlLmMtMzMwMS1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICptZXRyaWNfdmFsdWUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMyND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMjctXFxubW0vZGFtb24vY29yZS5jOjMzMjg6XFx0aWYgKGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUoc2NoZW1lLVxcdTAwM2V3bWFya3MubWV0cmljLCBcXHUwMDI2bWV0cmljKSlcXG5tbS9kYW1vbi9jb3JlLmMtMzMyOS1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NDQuMzQ2MTQwNzA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNjM3MjcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgREFNT1MgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlIGNhbiBiZXN0IGxldmVyYWdlIFN5emthbGxlciB0byB0ZXN0IHRoZSBEQU1PUyBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLCBhcyBpdCdzIGRpcmVjdGx5IGNhbGxlZCBieSBgZGFtb3Nfd21hcmtfd2FpdF91c2AuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGVudHJ5IHBvaW50LiBUaGVuIEkndmUgZ290IGBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZWAsIHdoaWNoIGxvb2tzIGxpa2UgYSBtb2R1bGUgcGFyYW1ldGVyIHN0b3JlLiBLbm93aW5nIFN5emthbGxlciwgSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgc3lzZnMgYW5kIG1vZHVsZSBwYXJhbXMsIGVzcGVjaWFsbHkgaWYgZGVzY3JpcHRpb25zIGFyZSBhdmFpbGFibGUuIEJ1dCwgbGV0J3Mgbm90IGxlYXZlIHRoaW5ncyB0byBjaGFuY2U7IHdlIGNhbiBhbHdheXMgcHJpb3JpdGl6ZSBzcGVjaWZpYyBmdW5jdGlvbnMuXG5cbkdpdmVuIHRoaXMsIEknbSBsZWFuaW5nIHRvd2FyZHMgZm9jdXNpbmcgbXkgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMgb24gYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIGFsb25nIHdpdGggdGhlIHJlbGF0ZWQgYG1ldHJpY19zdG9yZWAgaW50ZXJhY3Rpb24uIEl0IHNlZW1zIGxpa2UgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoIHdvdWxkIGJlIGJlbmVmaWNpYWwsIGF0IGxlYXN0IHRvIHN0YXJ0LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgYGRhbW9zX3dtYXJrX3dhaXRfdXNgIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMyOjQ4LjY2MjUxNjEyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNTI0MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3dtYXJrX3dhaXRfdXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMzAwPXN0YXRpYyBpbnQgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZShlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMyMy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzMyNDpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzI1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDM1PXN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NDMtXFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzozNDQ0OlxcdFxcdFxcdHdhaXRfdGltZSA9IGRhbW9zX3dtYXJrX3dhaXRfdXMocyk7XFxubW0vZGFtb24vY29yZS5jLTM0NDUtXFx0XFx0XFx0aWYgKCFpbml0X3dhaXRfdGltZSB8fCB3YWl0X3RpbWUgXFx1MDAzYyBtaW5fd2FpdF90aW1lKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMyOjQ4LjgyNTA0ODY3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY0NjkxODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgREFNT04gVGhyZWFkIEV4ZWN1dGlvbiBGbG93KipcblxuUmlnaHQsIHNvIGBkYW1vc193bWFya193YWl0X3VzYCwgdGhhdCdzIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgYGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uYCwgaXNuJ3QgaXQ/IEFuZCBga2RhbW9uZF93YWl0X2FjdGl2YXRpb25gIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSB3aXRoaW4gYGtkYW1vbmRfZm5gLiAgVGhhdCBga2RhbW9uZF9mbmAsIHRoYXQncyB0aGUgY29yZSBEQU1PTiB0aHJlYWQgLSB0aGUgaGVhcnQgb2YgdGhlIERBTU9OIHN1YnN5c3RlbS4gU28sIGBkYW1vc193bWFya193YWl0X3VzYCBpcyBlc3NlbnRpYWxseSBhdCB0aGUgYm90dG9tIG9mIGEgY3JpdGljYWwgZXhlY3V0aW9uIGNoYWluLlxuXG5Ob3csIHdoZXJlIGFyZSB0aGUgaW1wb3J0YW50IG1ldHJpY3Mgc3RvcmVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtZXRyaWNfc3RvcmVgIHN0cnVjdHVyZS4uLiB0aGF0J2xsIGJlIGRlZmluZWQgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IHBlcmZvcm1hbmNlIGRhdGEgaXMgYmVpbmcga2VwdCwgYW5kIHRoYXQncyB0aGUgbmV4dCBwbGFjZSBJIG5lZWQgdG8gZGlnIGludG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMjo1Mi4xODk3NDMwNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTcxNDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZXRyaWNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMDY1PXN0YXRpYyBzc2l6ZV90IG1ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA4MjpzdGF0aWMgc3NpemVfdCBtZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4My1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc2PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjkyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjkzOnN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTQtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NTIuMjkxNDYzNTE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzkyOTg2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGFjcm9zcyBEQU1PTidzIGNvcmUsIHN5c2ZzIGludGVyZmFjZSwgYW5kIHJlY2xhaW0gY29tcG9uZW50cy4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gQW55IG1vZGlmaWNhdGlvbiB0b3VjaGluZyB0aG9zZSBhcmVhcyBpcyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZmluZGluZyBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIOKAkyBsb29rcyBsaWtlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUkVDTEFJTWAuXG5cblNwZWNpZmljYWxseSwgSSBzaG91bGQgZm9jdXMgbXkgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgLCBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgLCBhbmQgYG1ldHJpY19zdG9yZWAuIFRoZXNlIGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGRhdGEgaGFuZGxpbmcgZnVuY3Rpb25zIHRoYXQgd291bGQgYmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHRhcmdldCBzZWxlY3Rpb24uXG5cbldhaXQsIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2suLi5JIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdCBgREFNT05fUkVDTEFJTWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCB3YXN0aW5nIHRpbWUgY2hhc2luZyBhIHBoYW50b20uIEknbGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NTYuOTMwNzY1MTEyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3NzAxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OX1JFQ0xBSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMjo1Ny4wMzk1NDUwMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTQ5NTY2MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoYXQgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIGBEQU1PTl9SRUNMQUlNYCBsb29rcyBzcG90LW9uLCBzbyBJJ2xsIGdpdmUgdGhhdCBhIGNoZWNrLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBEQU1PTl9TWVNGU2AgYW5kIHNlZSB3aGVyZSB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4gTGV0J3Mgc2VlIGlmIHdlJ3ZlIGdvdCBhIGNvbnNpc3RlbnQgYXNzZXNzbWVudCBiZXR3ZWVuIHRob3NlIHR3byBvciBpZiB0aGVyZSBhcmUgYW55IGFyZWFzIG9mIGZyaWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NTkuNTg5MTE0Nzc4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1OTcyMzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9TWVNGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMzOjAxLjQ2NTA5NjQ3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM5NTI1MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQXNzZXNzbWVudCBvZiBEQU1PTi1SZWxhdGVkIFZhbGlkYXRpb24qKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQncyByaWdodC4gYERBTU9OX1NZU0ZTYCBpcyBkZWZpbml0ZWx5IG9uIHRoZSBtb25leS4gV2UncmUgZ29vZCB0aGVyZS4gTm93LCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGUgb3ZlcmFyY2hpbmcgYERBTU9OYCBjb25jZXB0IGl0c2VsZiBpc24ndCBhIHJlZCBoZXJyaW5nLiBJdCdzIGFsd2F5cyB3aXNlIHRvIHJlLXZhbGlkYXRlIHRoZSBmb3VuZGF0aW9uLCBldmVuIHdoZW4gdGhlIGltbWVkaWF0ZSBjb21wb25lbnQgc2VlbXMgc291bmQuIExldCdzIG1ha2Ugc3VyZSBvdXIgY29yZSBhc3N1bXB0aW9ucyBhYm91dCBgREFNT05gJ3MgYmVoYXZpb3IgYW5kIGFwcGxpY2FiaWxpdHkgYXJlIHN0aWxsIGhvbGRpbmcgdHJ1ZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMzowNC40MDQ2MjQyNzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDQ4MzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMzOjA1LjAxNTExNjAzN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1ODIxMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgYXJlYSBvZiBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgREFNT04gSW50ZWdyYXRpb24gaW4gdGhlIE1ldHJpYyBTdG9yZSoqXG5cblllcywgYERBTU9OYCBzZWVtcyB0byBiZSB0aGUgY29ycmVjdCBhcHByb2FjaCBoZXJlLiBUaGUgbG9naWMgYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2UncmUgYXJjaGl0ZWN0aW5nIHRoaXMuIExldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtZXRyaWNfc3RvcmVgIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgZmlsZS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG1ldHJpY3MgcmVsYXRlZCB0byBEQU1PTiB3aWxsIHJlc2lkZSwgYW5kIHdoZXJlIEknbGwgZmluZCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyB1c2VkIHRvIHN0b3JlIGFuZCBleHBvc2UgdGhlIHJlbGV2YW50IHBlcmZvcm1hbmNlIGRhdGEuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgY29sbGVjdGlvbiBhbmQgc3RvcmFnZSBhcmUgYWxpZ25lZCB3aXRoIHRoZSBleGlzdGluZyBmcmFtZXdvcmsgYW5kIHBlcmZvcm1hbmNlIGdvYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTgxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzM6MDguMTMwOTQwMDYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MjpcXHRzdGF0aWMgc3NpemVfdCBtZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4xMDgzOlxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjEwODQ6XFx0e1xcbjEwODU6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3dhdGVybWFya3MgKndhdGVybWFya3MgPSBjb250YWluZXJfb2Yoa29iaixcXG4xMDg2OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzLCBrb2JqKTtcXG4xMDg3OlxcdFxcdGludCBpO1xcbjEwODg6XFx0XFxuMTA4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZXMpOyBpKyspIHtcXG4xMDkwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XFxuMTA5MTpcXHRcXG4xMDkyOlxcdFxcdFxcdG1ldHJpY19uYW1lID0gXFx1MDAyNmRhbW9zX3N5c2ZzX3dtYXJrX21ldHJpY19uYW1lc1tpXTtcXG4xMDkzOlxcdFxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIG1ldHJpY19uYW1lLVxcdTAwM2VuYW1lKSkge1xcbjEwOTQ6XFx0XFx0XFx0XFx0d2F0ZXJtYXJrcy1cXHUwMDNlbWV0cmljID0gbWV0cmljX25hbWUtXFx1MDAzZW1ldHJpYztcXG4xMDk1OlxcdFxcdFxcdFxcdHJldHVybiBjb3VudDtcXG4xMDk2OlxcdFxcdFxcdH1cXG4xMDk3OlxcdFxcdH1cXG4xMDk4OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwOTk6XFx0fVxcbjExMDA6XFx0XFxuMTEwMTpcXHRzdGF0aWMgc3NpemVfdCBpbnRlcnZhbF91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMzowOC4xMzExMjk1OTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NzMxNTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRm9jdXNpbmcgdGhlIEZ1enppbmcgRWZmb3J0KipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBhIGdvb2QgZnV6emluZyB0YXJnZXQgZm9yIHRoaXMgc3lzZnMgaW50ZXJhY3Rpb24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGBtZXRyaWNfc3RvcmVgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbi4gSXQncyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIHRoZSBzeXNmcyBpbnB1dCBhbmQgc3Vic2VxdWVudGx5IHNldHRpbmcgYHdhdGVybWFya3MtXHUwMDNlbWV0cmljYC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZzsgdGhlIGlucHV0IHBhcnNpbmcgaXMgd2hlcmUgd2UncmUgbW9zdCBsaWtlbHkgdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoIG1hbGZvcm1lZCBvciB1bnVzdWFsIGRhdGEuIEl0J3Mgb2Z0ZW4gdGhlIHdlYWtlc3QgbGluayBpbiB0aGVzZSBraW5kcyBvZiBJL08gaW50ZXJhY3Rpb25zLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBzdGFydCB0aGVyZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBxdWljayBsb29rIGF0IGBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZWAgaW4gYG1tL2RhbW9uL3JlY2xhaW0uY2AsIHRvIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vdCBhbnkgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzM6MTEuMjA4NDQ3NzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg5OlxcdE1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxcbiAzOTA6XFx0XFx0XFxcIlNjYWxlIGZhY3RvciBmb3IgREFNT05fUkVDTEFJTSB0byBvcHMgYWRkcmVzcyBjb252ZXJzaW9uIChkZWZhdWx0OiAxKVxcXCIpO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG4gMzkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4gMzk0OlxcdHtcXG4gMzk1OlxcdFxcdGlmIChzeXNmc19zdHJlcSh2YWwsIFxcXCJmcmVlXFxcIikpXFxuIDM5NjpcXHRcXHRcXHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFO1xcbiAzOTc6XFx0XFx0ZWxzZSBpZiAoc3lzZnNfc3RyZXEodmFsLCBcXFwiYXZhaWxhYmxlXFxcIikpXFxuIDM5ODpcXHRcXHRcXHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU7XFxuIDM5OTpcXHRcXHRlbHNlXFxuIDQwMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0cmV0dXJuIDA7XFxuIDQwMzpcXHR9XFxuIDQwNDpcXHRcXG4gNDA1OlxcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZChjaGFyICpidWZmZXIsXFxuIDQwNjpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4gNDA3OlxcdHtcXG4gNDA4OlxcdFxcdGludCB0eXBlID0gUkVBRF9PTkNFKG1lbXJhdGVfdHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMzOjExLjIwODU4ODE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NjMzOTYwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBGdW5jdGlvbidzIFF1YWxpdHkqKlxuXG5BbHJpZ2h0LCB0aGlzIGZ1bmN0aW9uIHNlZW1zIHByb21pc2luZywgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGVlcGVyIGFuYWx5c2lzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgd29ya2luZ3MuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuIExldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyBgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZWAgd2l0aGluIHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpcyBrZXkgdG8gZm9ybWluZyBhIGNvbXByZWhlbnNpdmUgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMzOjEzLjk3MTk4NzI5NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMDA6XFx0c3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcXG4zMzAxOlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKm1ldHJpY192YWx1ZSlcXG4zMzAyOlxcdHtcXG4zMzAzOlxcdFxcdGxvbmcgYXZhaWxhYmxlX3BhZ2VzO1xcbjMzMDQ6XFx0XFxuMzMwNTpcXHRcXHRzd2l0Y2ggKG1ldHJpYykge1xcbjMzMDY6XFx0XFx0Y2FzZSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFOlxcbjMzMDc6XFx0XFx0XFx0Km1ldHJpY192YWx1ZSA9IGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUykgKiAxMDAwIC9cXG4zMzA4OlxcdFxcdFxcdCAgICAgICB0b3RhbHJhbV9wYWdlcygpO1xcbjMzMDk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzMxMDpcXHRcXHRjYXNlIERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURTpcXG4zMzExOlxcdFxcdFxcdGF2YWlsYWJsZV9wYWdlcyA9IHNpX21lbV9hdmFpbGFibGUoKTtcXG4zMzEyOlxcdFxcdFxcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcXG4zMzEzOlxcdFxcdFxcdHJldHVybiAwO1xcbjMzMTQ6XFx0XFx0ZGVmYXVsdDpcXG4zMzE1OlxcdFxcdFxcdGJyZWFrO1xcbjMzMTY6XFx0XFx0fVxcbjMzMTc6XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzMxODpcXHR9XFxuMzMxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzM6MTMuOTcyMjM5NjY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzAxOTA2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFkZGluZyBhIE5ldyBEQU1PTiBNZXRyaWM6IEtleSBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggYSBuZXcgbWV0cmljIGltcGxlbWVudGF0aW9uIHdpdGhpbiBEQU1PTi4gVGhlIGNlbnRyYWwgcGllY2UsIHRoZSBoZWFydCBvZiB0aGUgY2FsY3VsYXRpb24sIGhpbmdlcyBvbiB0aGUgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGNvcmUgY2FsY3VsYXRpb24gZW5naW5lLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgIGFuZCB0aGUgYG1ldHJpY19zdG9yZWAgaW50ZXJhY3Qgd2l0aCBpdC4gVGhvc2UgYXJlIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHRyYWNraW5nIHRoZSBtZXRyaWMgdmFsdWUgYW5kIHdoZXJlIGl0J3Mgc3RvcmVkIGZvciBsYXRlciB1c2UuXG5cbk9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLCBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gaG93IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUkVDTEFJTWAgYXJlIHNldC4gVGhlc2Ugd2lsbCB1bmRvdWJ0ZWRseSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgbmV3IG1ldHJpYyBhbmQgd2hldGhlciBpdCdzIGVuYWJsZWQsIGhvdyBpdCdzIGV4cG9zZWQsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVjbGFpbSBtZWNoYW5pc21zLiBDb25maWd1cmF0aW9uIGlzIG9mdGVuIHdoZXJlIHN1YnRsZSBidWdzIGx1cmssIHNvIGEgY2FyZWZ1bCByZXZpZXcgb2YgdGhlc2Ugb3B0aW9ucyB3aWxsIGJlIGltcG9ydGFudC5cblxuU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ2xsIG1ha2Ugc3VyZSB0byBnZXQgdGhpcyBhZGRlZCB0byB0aGUgZnV6emluZyBjYW1wYWlnbiBhcyBzb29uIGFzIEkgY2FuIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHdpdGhpbiB0aGUgbWV0cmljIGNhbGN1bGF0aW9uLCBtZW1vcnkgcmVjbGFpbSwgb3IgZGF0YSBzdG9yYWdlLiBUaGF0J3MgbXkgdG9wIHByaW9yaXR5IGFmdGVyIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODUsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzM6MTkuMzQyNDMzMjc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMjM4NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZVwiLFxuICAgIFwibWV0cmljX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZVwiLFxuICAgIFwibWV0cmljX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 08:20:57 +0000 UTC FinishedAt: 2026-06-26 08:33:21 +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": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_RECLAIM" ], "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": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_RECLAIM" ], "series_id": "e4978ed9-e221-415f-b204-63a2a140fab3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_get_wmark_metric_value", "damon_reclaim_memrate_type_store", "metric_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlJiMzNDssCiAgICAmIzM0O21ldHJpY19zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IHdhdGVybWFyayBtZXRyaWMgKERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURSkgdG8gdGhlIERBTU9OIGNvcmUsIHN5c2ZzIGludGVyZmFjZSwgYW5kIERBTU9OX1JFQ0xBSU0gbW9kdWxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBEQU1PTiBjYWxjdWxhdGVzIG1lbW9yeSByYXRlcyBhbmQgdHJpZ2dlcnMgc2NoZW1lcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIHN5c2ZzL21vZHVsZSBwYXJhbWV0ZXIgcGFyc2luZyBhbmQgdGhlIGNvcmUgbWV0cmljIGNhbGN1bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGEyN2RjYTAxNThhZGIxZjJmOWE1ZjJlMjBlNjRjMTNkMTZlNjRkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDA4OjMyOjI3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggNmY3ZWRiMzU5MGVmOTcuLjAwMDZlM2EyNTMxNzZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0zMTQsMTMgJiM0MzszMTQsMTYgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiAvKipcbiAgKiBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyAtIFJlcHJlc2VudHMgdGhlIHdhdGVybWFyayBtZXRyaWMuXG4gICpcbi0gKiBAREFNT1NfV01BUktfTk9ORTpcdFx0SWdub3JlIHRoZSB3YXRlcm1hcmtzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXG4tICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XHRGcmVlIG1lbW9yeSByYXRlIG9mIHRoZSBzeXN0ZW0gaW4gWzAsMTAwMF0uXG4tICogQE5SX0RBTU9TX1dNQVJLX01FVFJJQ1M6XHRUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3NcbiYjNDM7ICogQERBTU9TX1dNQVJLX05PTkU6XHRcdCAgICBJZ25vcmUgdGhlIHdhdGVybWFya3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cbiYjNDM7ICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XHQgICAgRnJlZSBtZW1vcnkgcmF0ZSBvZiB0aGUgc3lzdGVtIGluIFswLDEwMDBdLlxuJiM0MzsgKiBAREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOiBBdmFpbGFibGUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpblxuJiM0MzsgKlx0XHRcdFx0ICAgIFswLDEwMDBdLlxuJiM0MzsgKiBATlJfREFNT1NfV01BUktfTUVUUklDUzpcdCAgICBUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3NcbiAgKi9cbiBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyB7XG4gXHREQU1PU19XTUFSS19OT05FLFxuIFx0REFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcbiYjNDM7XHREQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsXG4gXHROUl9EQU1PU19XTUFSS19NRVRSSUNTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA3ZTRiOWFmZmM1YjA2MC4uZjEyZDA2MDgxZDcwZjggMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMzMDAsMTEgJiM0MzszMzAwLDE3IEBAIHN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBzdGF0aWMgaW50IGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUoZW51bSBkYW1vc193bWFya19tZXRyaWMgbWV0cmljLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICptZXRyaWNfdmFsdWUpXG4ge1xuJiM0MztcdGxvbmcgYXZhaWxhYmxlX3BhZ2VzO1xuJiM0MztcbiBcdHN3aXRjaCAobWV0cmljKSB7XG4gXHRjYXNlIERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XG4gXHRcdCptZXRyaWNfdmFsdWUgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICogMTAwMCAvXG4gXHRcdCAgICAgICB0b3RhbHJhbV9wYWdlcygpO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURTpcbiYjNDM7XHRcdGF2YWlsYWJsZV9wYWdlcyA9IHNpX21lbV9hdmFpbGFibGUoKTtcbiYjNDM7XHRcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5pbmRleCBjZTQ0OTljZjRiOGIwNS4uMjI5YmM2OGJiMWFkNDMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuQEAgLTE1OSw2ICYjNDM7MTU5LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCBfX3JlYWRfbW9zdGx5ID0gMTtcbiBzdGF0aWMgYm9vbCBza2lwX2Fub24gX19yZWFkX21vc3RseTtcbiBtb2R1bGVfcGFyYW0oc2tpcF9hbm9uLCBib29sLCAwNjAwKTtcbiBcbiYjNDM7LypcbiYjNDM7ICogV2F0ZXJtYXJrcyBtZXRyaWMgb3B0aW9ucy5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgZnJlZWBgLCBEQU1PTl9SRUNMQUlNIGNhbGN1bGF0ZXMgdGhlIHdhdGVybWFya1xuJiM0MzsgKiBtZXRyaWMgYmFzZWQgb24gdGhlIHN5c3RlbSYjMzk7cyBmcmVlIG1lbW9yeSByYXRlLiBJZiBzZXQgYXMgYGBhdmFpbGFibGVgYCwgaXRcbiYjNDM7ICogY2FsY3VsYXRlcyB0aGUgbWV0cmljIGJhc2VkIG9uIHRoZSBzeXN0ZW0mIzM5O3MgYXZhaWxhYmxlIG1lbW9yeSByYXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBEZWZhdWx0IGlzIGBgZnJlZWBgLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1lbXJhdGVfdHlwZSA9IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU7XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9yZWNsYWltX3N0YXQ7XG4gREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcbiBcdFx0cmVjbGFpbV90cmllZF9yZWdpb25zLCByZWNsYWltZWRfcmVnaW9ucywgcXVvdGFfZXhjZWVkcyk7XG5AQCAtMjIwLDYgJiM0MzsyMzEsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHRkYW1vbl9yZWNsYWltX3dtYXJrcy5tZXRyaWMgPSBtZW1yYXRlX3R5cGU7XG4mIzQzO1xuIFx0YXR0cnMgPSBkYW1vbl9yZWNsYWltX21vbl9hdHRycztcbiBcdGlmIChhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscykge1xuIFx0XHRhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwO1xuQEAgLTM3Niw2ICYjNDM7Mzg5LDQ5IEBAIG1vZHVsZV9wYXJhbV9jYihhZGRyX3VuaXQsIFx1MDAyNmFkZHJfdW5pdF9wYXJhbV9vcHMsIFx1MDAyNmFkZHJfdW5pdCwgMDYwMCk7XG4gTU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXG4gXHRcJiMzNDtTY2FsZSBmYWN0b3IgZm9yIERBTU9OX1JFQ0xBSU0gdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbiAoZGVmYXVsdDogMSlcJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiYjNDM7e1xuJiM0MztcdGlmIChzeXNmc19zdHJlcSh2YWwsIFwmIzM0O2ZyZWVcJiMzNDspKVxuJiM0MztcdFx0bWVtcmF0ZV90eXBlID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURTtcbiYjNDM7XHRlbHNlIGlmIChzeXNmc19zdHJlcSh2YWwsIFwmIzM0O2F2YWlsYWJsZVwmIzM0OykpXG4mIzQzO1x0XHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX2xvYWQoY2hhciAqYnVmZmVyLFxuJiM0MztcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4mIzQzO3tcbiYjNDM7XHRpbnQgdHlwZSA9IFJFQURfT05DRShtZW1yYXRlX3R5cGUpO1xuJiM0MztcdGludCBsZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAodHlwZSA9PSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFKVxuJiM0MztcdFx0bGVuICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcJiMzNDtbZnJlZV0gXCYjMzQ7KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sIFwmIzM0O2ZyZWUgXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHR5cGUgPT0gREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFKVxuJiM0MztcdFx0bGVuICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcJiMzNDtbYXZhaWxhYmxlXSBcJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxlbiAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCYjMzQ7YXZhaWxhYmxlIFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGxlbiAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIG1lbXJhdGVfdHlwZV9wYXJhbV9vcHMgPSB7XG4mIzQzO1x0LnNldCA9IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlLFxuJiM0MztcdC5nZXQgPSBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9sb2FkLFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfcGFyYW1fY2IobWVtcmF0ZV90eXBlLCBcdTAwMjZtZW1yYXRlX3R5cGVfcGFyYW1fb3BzLCBcdTAwMjZtZW1yYXRlX3R5cGUsIDA2MDApO1xuJiM0MztNT0RVTEVfUEFSTV9ERVNDKG1lbXJhdGVfdHlwZSxcbiYjNDM7XHRcdCBcJiMzNDtNZW1vcnkgcmF0ZSB0eXBlIGZvciB3YXRlcm1hcmtzIG1ldHJpYyBcJiMzNDtcbiYjNDM7XHRcdCBcJiMzNDsoZnJlZSBvciBhdmFpbGFibGUsIGRlZmF1bHQ6IGZyZWUpXCYjMzQ7KTtcbiYjNDM7XG4gc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9lbmFibGVkKHZvaWQpXG4ge1xuIFx0aWYgKCFjdHgpXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMjljZmQwYmJlOWYzMi4uNWQ2NjM2NDMzYmQ2NjIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTEwNTYsNiAmIzQzOzEwNTYsMTAgQEAgZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzW10gPSB7XG4gXHRcdC5tZXRyaWMgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFLFxuIFx0XHQubmFtZSA9IFwmIzM0O2ZyZWVfbWVtX3JhdGVcJiMzNDssXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5tZXRyaWMgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O2F2YWlsYWJsZV9tZW1fcmF0ZVwmIzM0OyxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZSYjMzQ7LAogICAgJiMzNDttZXRyaWNfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGEyN2RjYTAxNThhZGIxZjJmOWE1ZjJlMjBlNjRjMTNkMTZlNjRkNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDA4OjMyOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDZmN2VkYjM1OTBlZjk3Li4wMDA2ZTNhMjUzMTc2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtMzE0LDEzICYjNDM7MzE0LDE2IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7CiAvKioKICAqIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIC0gUmVwcmVzZW50cyB0aGUgd2F0ZXJtYXJrIG1ldHJpYy4KICAqCi0gKiBAREFNT1NfV01BUktfTk9ORToJCUlnbm9yZSB0aGUgd2F0ZXJtYXJrcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLgotICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6CUZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS4KLSAqIEBOUl9EQU1PU19XTUFSS19NRVRSSUNTOglUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3MKJiM0MzsgKiBAREFNT1NfV01BUktfTk9ORToJCSAgICBJZ25vcmUgdGhlIHdhdGVybWFya3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS4KJiM0MzsgKiBAREFNT1NfV01BUktfRlJFRV9NRU1fUkFURToJICAgIEZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS4KJiM0MzsgKiBAREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOiBBdmFpbGFibGUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbgomIzQzOyAqCQkJCSAgICBbMCwxMDAwXS4KJiM0MzsgKiBATlJfREFNT1NfV01BUktfTUVUUklDUzoJICAgIFRvdGFsIG51bWJlciBvZiBEQU1PUyB3YXRlcm1hcmsgbWV0cmljcwogICovCiBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyB7CiAJREFNT1NfV01BUktfTk9ORSwKIAlEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFLAomIzQzOwlEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsCiAJTlJfREFNT1NfV01BUktfTUVUUklDUywKIH07CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA3ZTRiOWFmZmM1YjA2MC4uZjEyZDA2MDgxZDcwZjggMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMzMDAsMTEgJiM0MzszMzAwLDE3IEBAIHN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIHN0YXRpYyBpbnQgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZShlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWMsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKm1ldHJpY192YWx1ZSkKIHsKJiM0MzsJbG9uZyBhdmFpbGFibGVfcGFnZXM7CiYjNDM7CiAJc3dpdGNoIChtZXRyaWMpIHsKIAljYXNlIERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6CiAJCSptZXRyaWNfdmFsdWUgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICogMTAwMCAvCiAJCSAgICAgICB0b3RhbHJhbV9wYWdlcygpOwogCQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU6CiYjNDM7CQlhdmFpbGFibGVfcGFnZXMgPSBzaV9tZW1fYXZhaWxhYmxlKCk7CiYjNDM7CQkqbWV0cmljX3ZhbHVlID0gYXZhaWxhYmxlX3BhZ2VzICogMTAwMCAvIHRvdGFscmFtX3BhZ2VzKCk7CiYjNDM7CQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmMKaW5kZXggY2U0NDk5Y2Y0YjhiMDUuLjIyOWJjNjhiYjFhZDQzIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9yZWNsYWltLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcmVjbGFpbS5jCkBAIC0xNTksNiAmIzQzOzE1OSwxNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQgX19yZWFkX21vc3RseSA9IDE7CiBzdGF0aWMgYm9vbCBza2lwX2Fub24gX19yZWFkX21vc3RseTsKIG1vZHVsZV9wYXJhbShza2lwX2Fub24sIGJvb2wsIDA2MDApOwogCiYjNDM7LyoKJiM0MzsgKiBXYXRlcm1hcmtzIG1ldHJpYyBvcHRpb25zLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgZnJlZWBgLCBEQU1PTl9SRUNMQUlNIGNhbGN1bGF0ZXMgdGhlIHdhdGVybWFyawomIzQzOyAqIG1ldHJpYyBiYXNlZCBvbiB0aGUgc3lzdGVtJiMzOTtzIGZyZWUgbWVtb3J5IHJhdGUuIElmIHNldCBhcyBgYGF2YWlsYWJsZWBgLCBpdAomIzQzOyAqIGNhbGN1bGF0ZXMgdGhlIG1ldHJpYyBiYXNlZCBvbiB0aGUgc3lzdGVtJiMzOTtzIGF2YWlsYWJsZSBtZW1vcnkgcmF0ZS4KJiM0MzsgKgomIzQzOyAqIERlZmF1bHQgaXMgYGBmcmVlYGAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1lbXJhdGVfdHlwZSA9IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU7CiYjNDM7CiBzdGF0aWMgc3RydWN0IGRhbW9zX3N0YXQgZGFtb25fcmVjbGFpbV9zdGF0OwogREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCwKIAkJcmVjbGFpbV90cmllZF9yZWdpb25zLCByZWNsYWltZWRfcmVnaW9ucywgcXVvdGFfZXhjZWVkcyk7CkBAIC0yMjAsNiAmIzQzOzIzMSw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwlkYW1vbl9yZWNsYWltX3dtYXJrcy5tZXRyaWMgPSBtZW1yYXRlX3R5cGU7CiYjNDM7CiAJYXR0cnMgPSBkYW1vbl9yZWNsYWltX21vbl9hdHRyczsKIAlpZiAoYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMpIHsKIAkJYXR0cnMuc2FtcGxlX2ludGVydmFsID0gNTAwMDsKQEAgLTM3Niw2ICYjNDM7Mzg5LDQ5IEBAIG1vZHVsZV9wYXJhbV9jYihhZGRyX3VuaXQsICZhbXA7YWRkcl91bml0X3BhcmFtX29wcywgJmFtcDthZGRyX3VuaXQsIDA2MDApOwogTU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsCiAJJiMzNDtTY2FsZSBmYWN0b3IgZm9yIERBTU9OX1JFQ0xBSU0gdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbiAoZGVmYXVsdDogMSkmIzM0Oyk7CiAKJiM0MztzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCwKJiM0MzsJCQkJCSAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKJiM0Mzt7CiYjNDM7CWlmIChzeXNmc19zdHJlcSh2YWwsICYjMzQ7ZnJlZSYjMzQ7KSkKJiM0MzsJCW1lbXJhdGVfdHlwZSA9IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU7CiYjNDM7CWVsc2UgaWYgKHN5c2ZzX3N0cmVxKHZhbCwgJiMzNDthdmFpbGFibGUmIzM0OykpCiYjNDM7CQltZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9sb2FkKGNoYXIgKmJ1ZmZlciwKJiM0MzsJCQkJCSAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJaW50IHR5cGUgPSBSRUFEX09OQ0UobWVtcmF0ZV90eXBlKTsKJiM0MzsJaW50IGxlbiA9IDA7CiYjNDM7CiYjNDM7CWlmICh0eXBlID09IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEUpCiYjNDM7CQlsZW4gJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sICYjMzQ7W2ZyZWVdICYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJbGVuICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCAmIzM0O2ZyZWUgJiMzNDspOwomIzQzOwomIzQzOwlpZiAodHlwZSA9PSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpCiYjNDM7CQlsZW4gJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sICYjMzQ7W2F2YWlsYWJsZV0gJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlsZW4gJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sICYjMzQ7YXZhaWxhYmxlICYjMzQ7KTsKJiM0MzsKJiM0MzsJbGVuICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCAmIzM0O1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgbWVtcmF0ZV90eXBlX3BhcmFtX29wcyA9IHsKJiM0MzsJLnNldCA9IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlLAomIzQzOwkuZ2V0ID0gZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZCwKJiM0Mzt9OwomIzQzO21vZHVsZV9wYXJhbV9jYihtZW1yYXRlX3R5cGUsICZhbXA7bWVtcmF0ZV90eXBlX3BhcmFtX29wcywgJmFtcDttZW1yYXRlX3R5cGUsIDA2MDApOwomIzQzO01PRFVMRV9QQVJNX0RFU0MobWVtcmF0ZV90eXBlLAomIzQzOwkJICYjMzQ7TWVtb3J5IHJhdGUgdHlwZSBmb3Igd2F0ZXJtYXJrcyBtZXRyaWMgJiMzNDsKJiM0MzsJCSAmIzM0OyhmcmVlIG9yIGF2YWlsYWJsZSwgZGVmYXVsdDogZnJlZSkmIzM0Oyk7CiYjNDM7CiBzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2VuYWJsZWQodm9pZCkKIHsKIAlpZiAoIWN0eCkKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwppbmRleCAzMjljZmQwYmJlOWYzMi4uNWQ2NjM2NDMzYmQ2NjIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKQEAgLTEwNTYsNiAmIzQzOzEwNTYsMTAgQEAgZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzW10gPSB7CiAJCS5tZXRyaWMgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFLAogCQkubmFtZSA9ICYjMzQ7ZnJlZV9tZW1fcmF0ZSYjMzQ7LAogCX0sCiYjNDM7CXsKJiM0MzsJCS5tZXRyaWMgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsCiYjNDM7CQkubmFtZSA9ICYjMzQ7YXZhaWxhYmxlX21lbV9yYXRlJiMzNDssCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgc3NpemVfdCBtZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoOiBBIE5ldyBXYXRlcm1hcmsgTWV0cmljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBEQU1PTiBpbiB0aGUgTGludXgga2VybmVsLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBmdW5jdGlvbmFsbHkuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBuZXcgd2F0ZXJtYXJrIG1ldHJpYywgYERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURWAsIHRvIERBTU9OIHNjaGVtZXMuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgbWVtb3J5IG1hbmFnZW1lbnQuCgpJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcy4gRmlyc3QsIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGdldHMgdXBkYXRlZCB0byBkZWZpbmUgdGhlIG5ldyBtZXRyaWMgd2l0aGluIHRoZSBgZW51bSBkYW1vc193bWFya19tZXRyaWNgLiBUaGVuLCBpbiBgbW0vZGFtb24vY29yZS5jYCwgd2Ugc2VlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1ldHJpYyBjYWxjdWxhdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUoKWAgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNhbGN1bGF0aW9uIGxvZ2ljIGFuZCBpdHMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KClRoZSBgbW0vZGFtb24vcmVjbGFpbS5jYCBmaWxlIGlzIG1vZGlmaWVkIHRvIGludHJvZHVjZSBhIG1vZHVsZSBwYXJhbWV0ZXIsIGBtZW1yYXRlX3R5cGVgLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgREFNT05fUkVDTEFJTWAgc2NoZW1lLiBUaGlzIHNlZW1zIHRvIGFsbG93IHNlbGVjdGluZyB0aGUgbWV0cmljIHVzZWQgZm9yIHdhdGVybWFyayBjYWxjdWxhdGlvbnMsIHdoaWNoIGlzIGdvb2QgZm9yIGZsZXhpYmlsaXR5LiBGaW5hbGx5LCBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCBoYXMgdGhlIG1ldHJpYyYjMzk7cyBuYW1lIGFkZGVkIHRvIGBkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZXNgLCBlbnN1cmluZyBpdCYjMzk7cyBleHBvc2VkIGNvcnJlY3RseSB0aHJvdWdoIHN5c2ZzLgoKQWxyaWdodCwgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSB3aGF0IEkgY2FyZSBhYm91dC4gVGhpcyBzZWVtcyBmb2N1c2VkLCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgbWV0cmljIHNvdW5kcyB1c2VmdWwuIFRpbWUgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgYERBTU9OYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX1NZU0ZTYCBhcmUgYWxsIGVuYWJsZWQsIGFzIHRoZXNlIGFyZSB0aGUgbWFpbiBEQU1PTiBjb21wb25lbnRzIHRoYXQgdGhpcyBjaGFuZ2UgaW50ZXJhY3RzIHdpdGguIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgY29uZmlncyBhcmUgc2V0IGNvcnJlY3RseSwgcGVyaGFwcyB3aXRoaW4gYSBgZGVmY29uZmlnYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIG1ha2Ugc3VyZSB0aGF0IGFueSBkZXBlbmRlbmNpZXMgYXJlIGFsc28gc2F0aXNmaWVkLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzLgoKKipGdXp6aW5nIEZvY3VzOiBEQU1PTiBDb25maWd1cmF0aW9uICZhbXA7IEtleSBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvci4gTXkgYnJhaW4mIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyB0byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdlIGhhdmUgYXQgcGxheSBoZXJlOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiBUaGVzZSBhcmUgdGhlIGluaXRpYWwgZmxhZ3MgdGhhdCBkZXRlcm1pbmUgaXRzIG92ZXJhbGwgYmVoYXZpb3IgYW5kIHdoZXRoZXIgaXQgaXMgZXZlbiBlbmFibGVkLCBpZiBzeXNmcyBpbnRlZ3JhdGlvbiBpcyBhdmFpbGFibGUsIGFuZCBpZiByZWNsYWltIGlzIGVuYWJsZWQuIEdvdHRhIGtlZXAgdGhvc2Ugc3RyYWlnaHQgaW4gbXkgaGVhZC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHZ1bG5lcmFiaWxpdGllcyB3b3VsZCBtb3N0IGxpa2VseSBhcmlzZToKKiAgIGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlYDogU291bmRzIGxpa2UgYSBkYXRhIHJldHJpZXZhbCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIGRhdGEgdHlwZSBpc3N1ZXMgaWYgaW1wcm9wZXJseSBoYW5kbGVkLgoqICAgYGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlYCwgYGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX2xvYWRgOiBUaGVzZSBzZWVtIHJlbGF0ZWQgdG8gbWVtb3J5IHJlY2xhaW0gcmF0ZXM7IHN0b3JpbmcgYW5kIGxvYWRpbmcgY29uZmlnIHZhbHVlcyBhcmUgcG90ZW50aWFsIGF2ZW51ZXMgZm9yIGZ1enppbmcgZGF0YSBtYW5pcHVsYXRpb24sIHJhY2UgY29uZGl0aW9ucywgb3IgaW50ZWdlciBvdmVyZmxvd3MuCiogICBgbWV0cmljX3Nob3dgLCBgbWV0cmljX3N0b3JlYDogVGhlc2UgbG9vayBsaWtlIGdlbmVyYWwgc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gRGVmaW5pdGVseSByaXBlIGZvciBwcm9iaW5nIGJlY2F1c2Ugb2YgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGlucHV0LgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG1ldHJpY19zdG9yZWAgZnVydGhlciBhbmQgc2VlIHdoZXJlIHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHN5c2ZzIGludGVyYWN0aW9uIHByb2JhYmx5IGxpdmVzLCB3aGVyZSBkYXRhIHZhbGlkYXRpb24gYW5kIHByb2Nlc3NpbmcgaGFwcGVucy4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhlIGlucHV0IGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWV0cmljX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMDY1PXN0YXRpYyBzc2l6ZV90IG1ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwODEtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA4MjpzdGF0aWMgc3NpemVfdCBtZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDgzLVx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTI3Nj1zdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTI5MzpzdGF0aWMgc3NpemVfdCB0YXJnZXRfbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTQtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLCBgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZWAuIFNpbmNlIHRoaXMgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIERhbW9uLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbjogYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgRGFtb24mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMsIGluY2x1ZGluZyBhbnl0aGluZyByZWxhdGVkIHRvIHdhdGVybWFyayBtZXRyaWNzLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGludG8gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMyODI9c3RhdGljIGJvb2wga2RhbW9uZF9uZWVkX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjk5LVxubW0vZGFtb24vY29yZS5jOjMzMDA6c3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcbm1tL2RhbW9uL2NvcmUuYy0zMzAxLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICptZXRyaWNfdmFsdWUpXG4tLVxubW0vZGFtb24vY29yZS5jPTMzMjQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3Nfd21hcmtfd2FpdF91cyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMyNy1cbm1tL2RhbW9uL2NvcmUuYzozMzI4Olx0aWYgKGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUoc2NoZW1lLVx1MDAzZXdtYXJrcy5tZXRyaWMsIFx1MDAyNm1ldHJpYykpXG5tbS9kYW1vbi9jb3JlLmMtMzMyOS1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgREFNT1MgU3Vic3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UgY2FuIGJlc3QgbGV2ZXJhZ2UgU3l6a2FsbGVyIHRvIHRlc3QgdGhlIERBTU9TIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIGRpcmVjdGx5IGNhbGxlZCBieSBgZGFtb3Nfd21hcmtfd2FpdF91c2AuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGVudHJ5IHBvaW50LiBUaGVuIEkmIzM5O3ZlIGdvdCBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgLCB3aGljaCBsb29rcyBsaWtlIGEgbW9kdWxlIHBhcmFtZXRlciBzdG9yZS4gS25vd2luZyBTeXprYWxsZXIsIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGhhbmRsZSBzeXNmcyBhbmQgbW9kdWxlIHBhcmFtcywgZXNwZWNpYWxseSBpZiBkZXNjcmlwdGlvbnMgYXJlIGF2YWlsYWJsZS4gQnV0LCBsZXQmIzM5O3Mgbm90IGxlYXZlIHRoaW5ncyB0byBjaGFuY2U7IHdlIGNhbiBhbHdheXMgcHJpb3JpdGl6ZSBzcGVjaWZpYyBmdW5jdGlvbnMuCgpHaXZlbiB0aGlzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBmb2N1c2luZyBteSBpbml0aWFsIGZ1enppbmcgZWZmb3J0cyBvbiBgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZWAgYWxvbmcgd2l0aCB0aGUgcmVsYXRlZCBgbWV0cmljX3N0b3JlYCBpbnRlcmFjdGlvbi4gSXQgc2VlbXMgbGlrZSBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2ggd291bGQgYmUgYmVuZWZpY2lhbCwgYXQgbGVhc3QgdG8gc3RhcnQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgZXhhbWluZSBgZGFtb3Nfd21hcmtfd2FpdF91c2AgYW5kIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3dtYXJrX3dhaXRfdXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMzMDA9c3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMyMy0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzI0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXG5tbS9kYW1vbi9jb3JlLmMtMzMyNS17XG4tLVxubW0vZGFtb24vY29yZS5jPTM0MzU9c3RhdGljIGludCBrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0NDMtXHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjdHgpIHtcbm1tL2RhbW9uL2NvcmUuYzozNDQ0Olx0XHRcdHdhaXRfdGltZSA9IGRhbW9zX3dtYXJrX3dhaXRfdXMocyk7XG5tbS9kYW1vbi9jb3JlLmMtMzQ0NS1cdFx0XHRpZiAoIWluaXRfd2FpdF90aW1lIHx8IHdhaXRfdGltZSBcdTAwM2MgbWluX3dhaXRfdGltZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgdGhlIERBTU9OIFRocmVhZCBFeGVjdXRpb24gRmxvdyoqCgpSaWdodCwgc28gYGRhbW9zX3dtYXJrX3dhaXRfdXNgLCB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgYGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uYCwgaXNuJiMzOTt0IGl0PyBBbmQgYGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uYCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gd2l0aGluIGBrZGFtb25kX2ZuYC4gIFRoYXQgYGtkYW1vbmRfZm5gLCB0aGF0JiMzOTtzIHRoZSBjb3JlIERBTU9OIHRocmVhZCAtIHRoZSBoZWFydCBvZiB0aGUgREFNT04gc3Vic3lzdGVtLiBTbywgYGRhbW9zX3dtYXJrX3dhaXRfdXNgIGlzIGVzc2VudGlhbGx5IGF0IHRoZSBib3R0b20gb2YgYSBjcml0aWNhbCBleGVjdXRpb24gY2hhaW4uCgpOb3csIHdoZXJlIGFyZSB0aGUgaW1wb3J0YW50IG1ldHJpY3Mgc3RvcmVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtZXRyaWNfc3RvcmVgIHN0cnVjdHVyZS4uLiB0aGF0JiMzOTtsbCBiZSBkZWZpbmVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IHBlcmZvcm1hbmNlIGRhdGEgaXMgYmVpbmcga2VwdCwgYW5kIHRoYXQmIzM5O3MgdGhlIG5leHQgcGxhY2UgSSBuZWVkIHRvIGRpZyBpbnRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXRyaWNfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEwNjU9c3RhdGljIHNzaXplX3QgbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4MS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDgyOnN0YXRpYyBzc2l6ZV90IG1ldHJpY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwODMtXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc2PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI5Mi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjkzOnN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTI5NC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ2NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGFjcm9zcyBEQU1PTiYjMzk7cyBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCByZWNsYWltIGNvbXBvbmVudHMuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIEFueSBtb2RpZmljYXRpb24gdG91Y2hpbmcgdGhvc2UgYXJlYXMgaXMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGZpbmRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQg4oCTIGxvb2tzIGxpa2UgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC4KClNwZWNpZmljYWxseSwgSSBzaG91bGQgZm9jdXMgbXkgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgLCBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgLCBhbmQgYG1ldHJpY19zdG9yZWAuIFRoZXNlIGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGRhdGEgaGFuZGxpbmcgZnVuY3Rpb25zIHRoYXQgd291bGQgYmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHRhcmdldCBzZWxlY3Rpb24uCgpXYWl0LCBqdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLi4uSSBzaG91bGQgcHJvYmFibHkgdmVyaWZ5IHRoYXQgYERBTU9OX1JFQ0xBSU1gIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IHdhc3RpbmcgdGltZSBjaGFzaW5nIGEgcGhhbnRvbS4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9SRUNMQUlNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGhhdCBpbml0aWFsIGFzc2Vzc21lbnQgb2YgYERBTU9OX1JFQ0xBSU1gIGxvb2tzIHNwb3Qtb24sIHNvIEkmIzM5O2xsIGdpdmUgdGhhdCBhIGNoZWNrLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBEQU1PTl9TWVNGU2AgYW5kIHNlZSB3aGVyZSB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSYjMzk7dmUgZ290IGEgY29uc2lzdGVudCBhc3Nlc3NtZW50IGJldHdlZW4gdGhvc2UgdHdvIG9yIGlmIHRoZXJlIGFyZSBhbnkgYXJlYXMgb2YgZnJpY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9TWVNGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkFzc2Vzc21lbnQgb2YgREFNT04tUmVsYXRlZCBWYWxpZGF0aW9uKioKCkFscmlnaHQsIHllcCwgdGhhdCYjMzk7cyByaWdodC4gYERBTU9OX1NZU0ZTYCBpcyBkZWZpbml0ZWx5IG9uIHRoZSBtb25leS4gV2UmIzM5O3JlIGdvb2QgdGhlcmUuIE5vdywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZSBvdmVyYXJjaGluZyBgREFNT05gIGNvbmNlcHQgaXRzZWxmIGlzbiYjMzk7dCBhIHJlZCBoZXJyaW5nLiBJdCYjMzk7cyBhbHdheXMgd2lzZSB0byByZS12YWxpZGF0ZSB0aGUgZm91bmRhdGlvbiwgZXZlbiB3aGVuIHRoZSBpbW1lZGlhdGUgY29tcG9uZW50IHNlZW1zIHNvdW5kLiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBjb3JlIGFzc3VtcHRpb25zIGFib3V0IGBEQU1PTmAmIzM5O3MgYmVoYXZpb3IgYW5kIGFwcGxpY2FiaWxpdHkgYXJlIHN0aWxsIGhvbGRpbmcgdHJ1ZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgREFNT04gSW50ZWdyYXRpb24gaW4gdGhlIE1ldHJpYyBTdG9yZSoqCgpZZXMsIGBEQU1PTmAgc2VlbXMgdG8gYmUgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaGVyZS4gVGhlIGxvZ2ljIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJiMzOTtyZSBhcmNoaXRlY3RpbmcgdGhpcy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtZXRyaWNfc3RvcmVgIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgZmlsZS4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBtZXRyaWNzIHJlbGF0ZWQgdG8gREFNT04gd2lsbCByZXNpZGUsIGFuZCB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBzcGVjaWZpYyBtZWNoYW5pc21zIHVzZWQgdG8gc3RvcmUgYW5kIGV4cG9zZSB0aGUgcmVsZXZhbnQgcGVyZm9ybWFuY2UgZGF0YS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBjb2xsZWN0aW9uIGFuZCBzdG9yYWdlIGFyZSBhbGlnbmVkIHdpdGggdGhlIGV4aXN0aW5nIGZyYW1ld29yayBhbmQgcGVyZm9ybWFuY2UgZ29hbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgyOlx0c3RhdGljIHNzaXplX3QgbWV0cmljX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4xMDgzOlx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuMTA4NDpcdHtcbjEwODU6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzICp3YXRlcm1hcmtzID0gY29udGFpbmVyX29mKGtvYmosXG4xMDg2Olx0XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3dhdGVybWFya3MsIGtvYmopO1xuMTA4NzpcdFx0aW50IGk7XG4xMDg4Olx0XG4xMDg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRhbW9zX3N5c2ZzX3dtYXJrX21ldHJpY19uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG4xMDkwOlx0XHRcdGNvbnN0IHN0cnVjdCBkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XG4xMDkxOlx0XG4xMDkyOlx0XHRcdG1ldHJpY19uYW1lID0gXHUwMDI2ZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzW2ldO1xuMTA5MzpcdFx0XHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBtZXRyaWNfbmFtZS1cdTAwM2VuYW1lKSkge1xuMTA5NDpcdFx0XHRcdHdhdGVybWFya3MtXHUwMDNlbWV0cmljID0gbWV0cmljX25hbWUtXHUwMDNlbWV0cmljO1xuMTA5NTpcdFx0XHRcdHJldHVybiBjb3VudDtcbjEwOTY6XHRcdFx0fVxuMTA5NzpcdFx0fVxuMTA5ODpcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDk5Olx0fVxuMTEwMDpcdFxuMTEwMTpcdHN0YXRpYyBzc2l6ZV90IGludGVydmFsX3VzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipGb2N1c2luZyB0aGUgRnV6emluZyBFZmZvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYSBnb29kIGZ1enppbmcgdGFyZ2V0IGZvciB0aGlzIHN5c2ZzIGludGVyYWN0aW9uLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBgbWV0cmljX3N0b3JlYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlIHN5c2ZzIGlucHV0IGFuZCBzdWJzZXF1ZW50bHkgc2V0dGluZyBgd2F0ZXJtYXJrcy0mZ3Q7bWV0cmljYC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZzsgdGhlIGlucHV0IHBhcnNpbmcgaXMgd2hlcmUgd2UmIzM5O3JlIG1vc3QgbGlrZWx5IHRvIHVuY292ZXIgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2l0aCBtYWxmb3JtZWQgb3IgdW51c3VhbCBkYXRhLiBJdCYjMzk7cyBvZnRlbiB0aGUgd2Vha2VzdCBsaW5rIGluIHRoZXNlIGtpbmRzIG9mIEkvTyBpbnRlcmFjdGlvbnMuCgpNeSBpbnN0aW5jdCBpcyB0byBzdGFydCB0aGVyZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBxdWljayBsb29rIGF0IGBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZWAgaW4gYG1tL2RhbW9uL3JlY2xhaW0uY2AsIHRvIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vdCBhbnkgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4OTpcdE1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxuIDM5MDpcdFx0XCYjMzQ7U2NhbGUgZmFjdG9yIGZvciBEQU1PTl9SRUNMQUlNIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24gKGRlZmF1bHQ6IDEpXCYjMzQ7KTtcbiAzOTE6XHRcbiAzOTI6XHRzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbiAzOTM6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIDM5NDpcdHtcbiAzOTU6XHRcdGlmIChzeXNmc19zdHJlcSh2YWwsIFwmIzM0O2ZyZWVcJiMzNDspKVxuIDM5NjpcdFx0XHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFO1xuIDM5NzpcdFx0ZWxzZSBpZiAoc3lzZnNfc3RyZXEodmFsLCBcJiMzNDthdmFpbGFibGVcJiMzNDspKVxuIDM5ODpcdFx0XHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU7XG4gMzk5Olx0XHRlbHNlXG4gNDAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQwMTpcdFxuIDQwMjpcdFx0cmV0dXJuIDA7XG4gNDAzOlx0fVxuIDQwNDpcdFxuIDQwNTpcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZChjaGFyICpidWZmZXIsXG4gNDA2Olx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIDQwNzpcdHtcbiA0MDg6XHRcdGludCB0eXBlID0gUkVBRF9PTkNFKG1lbXJhdGVfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBGdW5jdGlvbiYjMzk7cyBRdWFsaXR5KioKCkFscmlnaHQsIHRoaXMgZnVuY3Rpb24gc2VlbXMgcHJvbWlzaW5nLCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgYW5hbHlzaXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGl0cyB3b3JraW5ncy4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGlzIGtleSB0byBmb3JtaW5nIGEgY29tcHJlaGVuc2l2ZSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMwMDpcdHN0YXRpYyBpbnQgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZShlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWMsXG4zMzAxOlx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm1ldHJpY192YWx1ZSlcbjMzMDI6XHR7XG4zMzAzOlx0XHRsb25nIGF2YWlsYWJsZV9wYWdlcztcbjMzMDQ6XHRcbjMzMDU6XHRcdHN3aXRjaCAobWV0cmljKSB7XG4zMzA2Olx0XHRjYXNlIERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XG4zMzA3Olx0XHRcdCptZXRyaWNfdmFsdWUgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICogMTAwMCAvXG4zMzA4Olx0XHRcdCAgICAgICB0b3RhbHJhbV9wYWdlcygpO1xuMzMwOTpcdFx0XHRyZXR1cm4gMDtcbjMzMTA6XHRcdGNhc2UgREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOlxuMzMxMTpcdFx0XHRhdmFpbGFibGVfcGFnZXMgPSBzaV9tZW1fYXZhaWxhYmxlKCk7XG4zMzEyOlx0XHRcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcbjMzMTM6XHRcdFx0cmV0dXJuIDA7XG4zMzE0Olx0XHRkZWZhdWx0OlxuMzMxNTpcdFx0XHRicmVhaztcbjMzMTY6XHRcdH1cbjMzMTc6XHRcdHJldHVybiAtRUlOVkFMO1xuMzMxODpcdH1cbjMzMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4ODUKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkFkZGluZyBhIE5ldyBEQU1PTiBNZXRyaWM6IEtleSBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyBjbGVhciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbmV3IG1ldHJpYyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gREFNT04uIFRoZSBjZW50cmFsIHBpZWNlLCB0aGUgaGVhcnQgb2YgdGhlIGNhbGN1bGF0aW9uLCBoaW5nZXMgb24gdGhlIGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgY29yZSBjYWxjdWxhdGlvbiBlbmdpbmUsIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgYGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlYCBhbmQgdGhlIGBtZXRyaWNfc3RvcmVgIGludGVyYWN0IHdpdGggaXQuIFRob3NlIGFyZSBnb2luZyB0byBiZSBjcnVjaWFsIGZvciB0cmFja2luZyB0aGUgbWV0cmljIHZhbHVlIGFuZCB3aGVyZSBpdCYjMzk7cyBzdG9yZWQgZm9yIGxhdGVyIHVzZS4KCk9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLCBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGhvdyBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGFyZSBzZXQuIFRoZXNlIHdpbGwgdW5kb3VidGVkbHkgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGlzIG5ldyBtZXRyaWMgYW5kIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCwgaG93IGl0JiMzOTtzIGV4cG9zZWQsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVjbGFpbSBtZWNoYW5pc21zLiBDb25maWd1cmF0aW9uIGlzIG9mdGVuIHdoZXJlIHN1YnRsZSBidWdzIGx1cmssIHNvIGEgY2FyZWZ1bCByZXZpZXcgb2YgdGhlc2Ugb3B0aW9ucyB3aWxsIGJlIGltcG9ydGFudC4KClNpbmNlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBnZXQgdGhpcyBhZGRlZCB0byB0aGUgZnV6emluZyBjYW1wYWlnbiBhcyBzb29uIGFzIEkgY2FuIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHdpdGhpbiB0aGUgbWV0cmljIGNhbGN1bGF0aW9uLCBtZW1vcnkgcmVjbGFpbSwgb3IgZGF0YSBzdG9yYWdlLiBUaGF0JiMzOTtzIG15IHRvcCBwcmlvcml0eSBhZnRlciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZSYjMzQ7LAogICAgJiMzNDttZXRyaWNfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUmIzM0OywKICAgICYjMzQ7bWV0cmljX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgd2F0ZXJtYXJrIG1ldHJpYyAoREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFKSB0byB0aGUgREFNT04gY29yZSwgc3lzZnMgaW50ZXJmYWNlLCBhbmQgREFNT05fUkVDTEFJTSBtb2R1bGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IERBTU9OIGNhbGN1bGF0ZXMgbWVtb3J5IHJhdGVzIGFuZCB0cmlnZ2VycyBzY2hlbWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgc3lzZnMvbW9kdWxlIHBhcmFtZXRlciBwYXJzaW5nIGFuZCB0aGUgY29yZSBtZXRyaWMgY2FsY3VsYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMjoyOS4yNTMxODk3NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMzMDUwMjY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZVwiLFxuICAgIFwibWV0cmljX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6MjkuMjUzMTk3MzQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIwNTE5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYTI3ZGNhMDE1OGFkYjFmMmY5YTVmMmUyMGU2NGMxM2QxNmU2NGQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDA4OjMyOjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IDZmN2VkYjM1OTBlZjk3Li4wMDA2ZTNhMjUzMTc2YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtMzE0LDEzICszMTQsMTYgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcXG4gLyoqXFxuICAqIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIC0gUmVwcmVzZW50cyB0aGUgd2F0ZXJtYXJrIG1ldHJpYy5cXG4gICpcXG4tICogQERBTU9TX1dNQVJLX05PTkU6XFx0XFx0SWdub3JlIHRoZSB3YXRlcm1hcmtzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXFxuLSAqIEBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFOlxcdEZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS5cXG4tICogQE5SX0RBTU9TX1dNQVJLX01FVFJJQ1M6XFx0VG90YWwgbnVtYmVyIG9mIERBTU9TIHdhdGVybWFyayBtZXRyaWNzXFxuKyAqIEBEQU1PU19XTUFSS19OT05FOlxcdFxcdCAgICBJZ25vcmUgdGhlIHdhdGVybWFya3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cXG4rICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XFx0ICAgIEZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS5cXG4rICogQERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURTogQXZhaWxhYmxlIG1lbW9yeSByYXRlIG9mIHRoZSBzeXN0ZW0gaW5cXG4rICpcXHRcXHRcXHRcXHQgICAgWzAsMTAwMF0uXFxuKyAqIEBOUl9EQU1PU19XTUFSS19NRVRSSUNTOlxcdCAgICBUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3NcXG4gICovXFxuIGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIHtcXG4gXFx0REFNT1NfV01BUktfTk9ORSxcXG4gXFx0REFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcXG4rXFx0REFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFLFxcbiBcXHROUl9EQU1PU19XTUFSS19NRVRSSUNTLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggN2U0YjlhZmZjNWIwNjAuLmYxMmQwNjA4MWQ3MGY4IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0zMzAwLDExICszMzAwLDE3IEBAIHN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gc3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqbWV0cmljX3ZhbHVlKVxcbiB7XFxuK1xcdGxvbmcgYXZhaWxhYmxlX3BhZ2VzO1xcbitcXG4gXFx0c3dpdGNoIChtZXRyaWMpIHtcXG4gXFx0Y2FzZSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFOlxcbiBcXHRcXHQqbWV0cmljX3ZhbHVlID0gZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSAqIDEwMDAgL1xcbiBcXHRcXHQgICAgICAgdG90YWxyYW1fcGFnZXMoKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOlxcbitcXHRcXHRhdmFpbGFibGVfcGFnZXMgPSBzaV9tZW1fYXZhaWxhYmxlKCk7XFxuK1xcdFxcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li4yMjliYzY4YmIxYWQ0MyAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5AQCAtMTU5LDYgKzE1OSwxNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQgX19yZWFkX21vc3RseSA9IDE7XFxuIHN0YXRpYyBib29sIHNraXBfYW5vbiBfX3JlYWRfbW9zdGx5O1xcbiBtb2R1bGVfcGFyYW0oc2tpcF9hbm9uLCBib29sLCAwNjAwKTtcXG4gXFxuKy8qXFxuKyAqIFdhdGVybWFya3MgbWV0cmljIG9wdGlvbnMuXFxuKyAqXFxuKyAqIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCBhcyBgYGZyZWVgYCwgREFNT05fUkVDTEFJTSBjYWxjdWxhdGVzIHRoZSB3YXRlcm1hcmtcXG4rICogbWV0cmljIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBmcmVlIG1lbW9yeSByYXRlLiBJZiBzZXQgYXMgYGBhdmFpbGFibGVgYCwgaXRcXG4rICogY2FsY3VsYXRlcyB0aGUgbWV0cmljIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBhdmFpbGFibGUgbWVtb3J5IHJhdGUuXFxuKyAqXFxuKyAqIERlZmF1bHQgaXMgYGBmcmVlYGAuXFxuKyAqL1xcbitzdGF0aWMgZW51bSBkYW1vc193bWFya19tZXRyaWMgbWVtcmF0ZV90eXBlID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURTtcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9yZWNsYWltX3N0YXQ7XFxuIERFRklORV9EQU1PTl9NT0RVTEVTX0RBTU9TX1NUQVRTX1BBUkFNUyhkYW1vbl9yZWNsYWltX3N0YXQsXFxuIFxcdFxcdHJlY2xhaW1fdHJpZWRfcmVnaW9ucywgcmVjbGFpbWVkX3JlZ2lvbnMsIHF1b3RhX2V4Y2VlZHMpO1xcbkBAIC0yMjAsNiArMjMxLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGRhbW9uX3JlY2xhaW1fd21hcmtzLm1ldHJpYyA9IG1lbXJhdGVfdHlwZTtcXG4rXFxuIFxcdGF0dHJzID0gZGFtb25fcmVjbGFpbV9tb25fYXR0cnM7XFxuIFxcdGlmIChhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscykge1xcbiBcXHRcXHRhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwO1xcbkBAIC0zNzYsNiArMzg5LDQ5IEBAIG1vZHVsZV9wYXJhbV9jYihhZGRyX3VuaXQsIFxcdTAwMjZhZGRyX3VuaXRfcGFyYW1fb3BzLCBcXHUwMDI2YWRkcl91bml0LCAwNjAwKTtcXG4gTU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXFxuIFxcdFxcXCJTY2FsZSBmYWN0b3IgZm9yIERBTU9OX1JFQ0xBSU0gdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbiAoZGVmYXVsdDogMSlcXFwiKTtcXG4gXFxuK3N0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuK3tcXG4rXFx0aWYgKHN5c2ZzX3N0cmVxKHZhbCwgXFxcImZyZWVcXFwiKSlcXG4rXFx0XFx0bWVtcmF0ZV90eXBlID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURTtcXG4rXFx0ZWxzZSBpZiAoc3lzZnNfc3RyZXEodmFsLCBcXFwiYXZhaWxhYmxlXFxcIikpXFxuK1xcdFxcdG1lbXJhdGVfdHlwZSA9IERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX2xvYWQoY2hhciAqYnVmZmVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4re1xcbitcXHRpbnQgdHlwZSA9IFJFQURfT05DRShtZW1yYXRlX3R5cGUpO1xcbitcXHRpbnQgbGVuID0gMDtcXG4rXFxuK1xcdGlmICh0eXBlID09IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEUpXFxuK1xcdFxcdGxlbiArPSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcXFwiW2ZyZWVdIFxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGxlbiArPSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcXFwiZnJlZSBcXFwiKTtcXG4rXFxuK1xcdGlmICh0eXBlID09IERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURSlcXG4rXFx0XFx0bGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sIFxcXCJbYXZhaWxhYmxlXSBcXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsZW4gKz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXFxcImF2YWlsYWJsZSBcXFwiKTtcXG4rXFxuK1xcdGxlbiArPSBzeXNmc19lbWl0X2F0KGJ1ZmZlciwgbGVuLCBcXFwiXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiBsZW47XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBtZW1yYXRlX3R5cGVfcGFyYW1fb3BzID0ge1xcbitcXHQuc2V0ID0gZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUsXFxuK1xcdC5nZXQgPSBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9sb2FkLFxcbit9O1xcbittb2R1bGVfcGFyYW1fY2IobWVtcmF0ZV90eXBlLCBcXHUwMDI2bWVtcmF0ZV90eXBlX3BhcmFtX29wcywgXFx1MDAyNm1lbXJhdGVfdHlwZSwgMDYwMCk7XFxuK01PRFVMRV9QQVJNX0RFU0MobWVtcmF0ZV90eXBlLFxcbitcXHRcXHQgXFxcIk1lbW9yeSByYXRlIHR5cGUgZm9yIHdhdGVybWFya3MgbWV0cmljIFxcXCJcXG4rXFx0XFx0IFxcXCIoZnJlZSBvciBhdmFpbGFibGUsIGRlZmF1bHQ6IGZyZWUpXFxcIik7XFxuK1xcbiBzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2VuYWJsZWQodm9pZClcXG4ge1xcbiBcXHRpZiAoIWN0eClcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuaW5kZXggMzI5Y2ZkMGJiZTlmMzIuLjVkNjYzNjQzM2JkNjYyIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbkBAIC0xMDU2LDYgKzEwNTYsMTAgQEAgZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzW10gPSB7XFxuIFxcdFxcdC5tZXRyaWMgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFLFxcbiBcXHRcXHQubmFtZSA9IFxcXCJmcmVlX21lbV9yYXRlXFxcIixcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQubWV0cmljID0gREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFLFxcbitcXHRcXHQubmFtZSA9IFxcXCJhdmFpbGFibGVfbWVtX3JhdGVcXFwiLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIHNzaXplX3QgbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6MjkuODI3ODUyOTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc1NTgyNzc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZVwiLFxuICAgIFwibWV0cmljX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYTI3ZGNhMDE1OGFkYjFmMmY5YTVmMmUyMGU2NGMxM2QxNmU2NGQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDg6MzI6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbmluZGV4IDZmN2VkYjM1OTBlZjk3Li4wMDA2ZTNhMjUzMTc2YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5AQCAtMzE0LDEzICszMTQsMTYgQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiAvKipcbiAgKiBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyAtIFJlcHJlc2VudHMgdGhlIHdhdGVybWFyayBtZXRyaWMuXG4gICpcbi0gKiBAREFNT1NfV01BUktfTk9ORTpcdFx0SWdub3JlIHRoZSB3YXRlcm1hcmtzIG9mIHRoZSBnaXZlbiBzY2hlbWUuXG4tICogQERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XHRGcmVlIG1lbW9yeSByYXRlIG9mIHRoZSBzeXN0ZW0gaW4gWzAsMTAwMF0uXG4tICogQE5SX0RBTU9TX1dNQVJLX01FVFJJQ1M6XHRUb3RhbCBudW1iZXIgb2YgREFNT1Mgd2F0ZXJtYXJrIG1ldHJpY3NcbisgKiBAREFNT1NfV01BUktfTk9ORTpcdFx0ICAgIElnbm9yZSB0aGUgd2F0ZXJtYXJrcyBvZiB0aGUgZ2l2ZW4gc2NoZW1lLlxuKyAqIEBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFOlx0ICAgIEZyZWUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpbiBbMCwxMDAwXS5cbisgKiBAREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOiBBdmFpbGFibGUgbWVtb3J5IHJhdGUgb2YgdGhlIHN5c3RlbSBpblxuKyAqXHRcdFx0XHQgICAgWzAsMTAwMF0uXG4rICogQE5SX0RBTU9TX1dNQVJLX01FVFJJQ1M6XHQgICAgVG90YWwgbnVtYmVyIG9mIERBTU9TIHdhdGVybWFyayBtZXRyaWNzXG4gICovXG4gZW51bSBkYW1vc193bWFya19tZXRyaWMge1xuIFx0REFNT1NfV01BUktfTk9ORSxcbiBcdERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEUsXG4rXHREQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUsXG4gXHROUl9EQU1PU19XTUFSS19NRVRSSUNTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA3ZTRiOWFmZmM1YjA2MC4uZjEyZDA2MDgxZDcwZjggMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMzMDAsMTEgKzMzMDAsMTcgQEAgc3RhdGljIGJvb2wga2RhbW9uZF9uZWVkX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHN0YXRpYyBpbnQgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZShlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWMsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm1ldHJpY192YWx1ZSlcbiB7XG4rXHRsb25nIGF2YWlsYWJsZV9wYWdlcztcbitcbiBcdHN3aXRjaCAobWV0cmljKSB7XG4gXHRjYXNlIERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEU6XG4gXHRcdCptZXRyaWNfdmFsdWUgPSBnbG9iYWxfem9uZV9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpICogMTAwMCAvXG4gXHRcdCAgICAgICB0b3RhbHJhbV9wYWdlcygpO1xuIFx0XHRyZXR1cm4gMDtcbitcdGNhc2UgREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFOlxuK1x0XHRhdmFpbGFibGVfcGFnZXMgPSBzaV9tZW1fYXZhaWxhYmxlKCk7XG4rXHRcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcbitcdFx0cmV0dXJuIDA7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li4yMjliYzY4YmIxYWQ0MyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMTU5LDYgKzE1OSwxNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQgX19yZWFkX21vc3RseSA9IDE7XG4gc3RhdGljIGJvb2wgc2tpcF9hbm9uIF9fcmVhZF9tb3N0bHk7XG4gbW9kdWxlX3BhcmFtKHNraXBfYW5vbiwgYm9vbCwgMDYwMCk7XG4gXG4rLypcbisgKiBXYXRlcm1hcmtzIG1ldHJpYyBvcHRpb25zLlxuKyAqXG4rICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGFzIGBgZnJlZWBgLCBEQU1PTl9SRUNMQUlNIGNhbGN1bGF0ZXMgdGhlIHdhdGVybWFya1xuKyAqIG1ldHJpYyBiYXNlZCBvbiB0aGUgc3lzdGVtJ3MgZnJlZSBtZW1vcnkgcmF0ZS4gSWYgc2V0IGFzIGBgYXZhaWxhYmxlYGAsIGl0XG4rICogY2FsY3VsYXRlcyB0aGUgbWV0cmljIGJhc2VkIG9uIHRoZSBzeXN0ZW0ncyBhdmFpbGFibGUgbWVtb3J5IHJhdGUuXG4rICpcbisgKiBEZWZhdWx0IGlzIGBgZnJlZWBgLlxuKyAqL1xuK3N0YXRpYyBlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFO1xuK1xuIHN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3RhdCBkYW1vbl9yZWNsYWltX3N0YXQ7XG4gREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcbiBcdFx0cmVjbGFpbV90cmllZF9yZWdpb25zLCByZWNsYWltZWRfcmVnaW9ucywgcXVvdGFfZXhjZWVkcyk7XG5AQCAtMjIwLDYgKzIzMSw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0ZGFtb25fcmVjbGFpbV93bWFya3MubWV0cmljID0gbWVtcmF0ZV90eXBlO1xuK1xuIFx0YXR0cnMgPSBkYW1vbl9yZWNsYWltX21vbl9hdHRycztcbiBcdGlmIChhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscykge1xuIFx0XHRhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwO1xuQEAgLTM3Niw2ICszODksNDkgQEAgbW9kdWxlX3BhcmFtX2NiKGFkZHJfdW5pdCwgXHUwMDI2YWRkcl91bml0X3BhcmFtX29wcywgXHUwMDI2YWRkcl91bml0LCAwNjAwKTtcbiBNT0RVTEVfUEFSTV9ERVNDKGFkZHJfdW5pdCxcbiBcdFwiU2NhbGUgZmFjdG9yIGZvciBEQU1PTl9SRUNMQUlNIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24gKGRlZmF1bHQ6IDEpXCIpO1xuIFxuK3N0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuK1x0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4re1xuK1x0aWYgKHN5c2ZzX3N0cmVxKHZhbCwgXCJmcmVlXCIpKVxuK1x0XHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFO1xuK1x0ZWxzZSBpZiAoc3lzZnNfc3RyZXEodmFsLCBcImF2YWlsYWJsZVwiKSlcbitcdFx0bWVtcmF0ZV90eXBlID0gREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX2xvYWQoY2hhciAqYnVmZmVyLFxuK1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbit7XG4rXHRpbnQgdHlwZSA9IFJFQURfT05DRShtZW1yYXRlX3R5cGUpO1xuK1x0aW50IGxlbiA9IDA7XG4rXG4rXHRpZiAodHlwZSA9PSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFKVxuK1x0XHRsZW4gKz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCJbZnJlZV0gXCIpO1xuK1x0ZWxzZVxuK1x0XHRsZW4gKz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCJmcmVlIFwiKTtcbitcbitcdGlmICh0eXBlID09IERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURSlcbitcdFx0bGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sIFwiW2F2YWlsYWJsZV0gXCIpO1xuK1x0ZWxzZVxuK1x0XHRsZW4gKz0gc3lzZnNfZW1pdF9hdChidWZmZXIsIGxlbiwgXCJhdmFpbGFibGUgXCIpO1xuK1xuK1x0bGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmZmVyLCBsZW4sIFwiXFxuXCIpO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIG1lbXJhdGVfdHlwZV9wYXJhbV9vcHMgPSB7XG4rXHQuc2V0ID0gZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmUsXG4rXHQuZ2V0ID0gZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZCxcbit9O1xuK21vZHVsZV9wYXJhbV9jYihtZW1yYXRlX3R5cGUsIFx1MDAyNm1lbXJhdGVfdHlwZV9wYXJhbV9vcHMsIFx1MDAyNm1lbXJhdGVfdHlwZSwgMDYwMCk7XG4rTU9EVUxFX1BBUk1fREVTQyhtZW1yYXRlX3R5cGUsXG4rXHRcdCBcIk1lbW9yeSByYXRlIHR5cGUgZm9yIHdhdGVybWFya3MgbWV0cmljIFwiXG4rXHRcdCBcIihmcmVlIG9yIGF2YWlsYWJsZSwgZGVmYXVsdDogZnJlZSlcIik7XG4rXG4gc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9lbmFibGVkKHZvaWQpXG4ge1xuIFx0aWYgKCFjdHgpXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMjljZmQwYmJlOWYzMi4uNWQ2NjM2NDMzYmQ2NjIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTEwNTYsNiArMTA1NiwxMCBAQCBkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZXNbXSA9IHtcbiBcdFx0Lm1ldHJpYyA9IERBTU9TX1dNQVJLX0ZSRUVfTUVNX1JBVEUsXG4gXHRcdC5uYW1lID0gXCJmcmVlX21lbV9yYXRlXCIsXG4gXHR9LFxuK1x0e1xuK1x0XHQubWV0cmljID0gREFNT1NfV01BUktfQVZBSUxBQkxFX01FTV9SQVRFLFxuK1x0XHQubmFtZSA9IFwiYXZhaWxhYmxlX21lbV9yYXRlXCIsXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIHNzaXplX3QgbWV0cmljX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMyOjI5LjgyNzg1NTE5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTU4MTY4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2g6IEEgTmV3IFdhdGVybWFyayBNZXRyaWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBEQU1PTiBpbiB0aGUgTGludXgga2VybmVsLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBmdW5jdGlvbmFsbHkuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBuZXcgd2F0ZXJtYXJrIG1ldHJpYywgYERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURWAsIHRvIERBTU9OIHNjaGVtZXMuIFRoaXMgaXMgaW50ZXJlc3Rpbmcg4oCTIGl0J3MgYWx3YXlzIGdvb2QgdG8gaGF2ZSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciBtZW1vcnkgbWFuYWdlbWVudC5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMuIEZpcnN0LCBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBnZXRzIHVwZGF0ZWQgdG8gZGVmaW5lIHRoZSBuZXcgbWV0cmljIHdpdGhpbiB0aGUgYGVudW0gZGFtb3Nfd21hcmtfbWV0cmljYC4gVGhlbiwgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHdlIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRyaWMgY2FsY3VsYXRpb24sIGxpa2VseSB3aXRoaW4gdGhlIGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKClgIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNhbGN1bGF0aW9uIGxvZ2ljIGFuZCBpdHMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuVGhlIGBtbS9kYW1vbi9yZWNsYWltLmNgIGZpbGUgaXMgbW9kaWZpZWQgdG8gaW50cm9kdWNlIGEgbW9kdWxlIHBhcmFtZXRlciwgYG1lbXJhdGVfdHlwZWAsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBEQU1PTl9SRUNMQUlNYCBzY2hlbWUuIFRoaXMgc2VlbXMgdG8gYWxsb3cgc2VsZWN0aW5nIHRoZSBtZXRyaWMgdXNlZCBmb3Igd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucywgd2hpY2ggaXMgZ29vZCBmb3IgZmxleGliaWxpdHkuIEZpbmFsbHksIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgIGhhcyB0aGUgbWV0cmljJ3MgbmFtZSBhZGRlZCB0byBgZGFtb3Nfc3lzZnNfd21hcmtfbWV0cmljX25hbWVzYCwgZW5zdXJpbmcgaXQncyBleHBvc2VkIGNvcnJlY3RseSB0aHJvdWdoIHN5c2ZzLlxuXG5BbHJpZ2h0LCBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIHdoYXQgSSBjYXJlIGFib3V0LiBUaGlzIHNlZW1zIGZvY3VzZWQsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBtZXRyaWMgc291bmRzIHVzZWZ1bC4gVGltZSB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgREFNT05gLCBgREFNT05fUkVDTEFJTWAsIGFuZCBgREFNT05fU1lTRlNgIGFyZSBhbGwgZW5hYmxlZCwgYXMgdGhlc2UgYXJlIHRoZSBtYWluIERBTU9OIGNvbXBvbmVudHMgdGhhdCB0aGlzIGNoYW5nZSBpbnRlcmFjdHMgd2l0aC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGNvbmZpZ3MgYXJlIHNldCBjb3JyZWN0bHksIHBlcmhhcHMgd2l0aGluIGEgYGRlZmNvbmZpZ2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIGFyZSBhbHNvIHNhdGlzZmllZC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMjozNS45MjM2NzQ3NDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NTUyOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6MzYuMDc4MjM1MTY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4OTgzODY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzLlxuXG4qKkZ1enppbmcgRm9jdXM6IERBTU9OIENvbmZpZ3VyYXRpb24gXHUwMDI2IEtleSBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB3ZSdyZSB0YWxraW5nIGFib3V0IERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvci4gTXkgYnJhaW4ncyBpbW1lZGlhdGVseSBqdW1waW5nIHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UgaGF2ZSBhdCBwbGF5IGhlcmU6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUkVDTEFJTWAuIFRoZXNlIGFyZSB0aGUgaW5pdGlhbCBmbGFncyB0aGF0IGRldGVybWluZSBpdHMgb3ZlcmFsbCBiZWhhdmlvciBhbmQgd2hldGhlciBpdCBpcyBldmVuIGVuYWJsZWQsIGlmIHN5c2ZzIGludGVncmF0aW9uIGlzIGF2YWlsYWJsZSwgYW5kIGlmIHJlY2xhaW0gaXMgZW5hYmxlZC4gR290dGEga2VlcCB0aG9zZSBzdHJhaWdodCBpbiBteSBoZWFkLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHZ1bG5lcmFiaWxpdGllcyB3b3VsZCBtb3N0IGxpa2VseSBhcmlzZTpcbiogICBgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZWA6IFNvdW5kcyBsaWtlIGEgZGF0YSByZXRyaWV2YWwgZnVuY3Rpb24sIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYnVmZmVyIG92ZXJmbG93cyBvciBkYXRhIHR5cGUgaXNzdWVzIGlmIGltcHJvcGVybHkgaGFuZGxlZC5cbiogICBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgLCBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZGA6IFRoZXNlIHNlZW0gcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbSByYXRlczsgc3RvcmluZyBhbmQgbG9hZGluZyBjb25maWcgdmFsdWVzIGFyZSBwb3RlbnRpYWwgYXZlbnVlcyBmb3IgZnV6emluZyBkYXRhIG1hbmlwdWxhdGlvbiwgcmFjZSBjb25kaXRpb25zLCBvciBpbnRlZ2VyIG92ZXJmbG93cy5cbiogICBgbWV0cmljX3Nob3dgLCBgbWV0cmljX3N0b3JlYDogVGhlc2UgbG9vayBsaWtlIGdlbmVyYWwgc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gRGVmaW5pdGVseSByaXBlIGZvciBwcm9iaW5nIGJlY2F1c2Ugb2YgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB1c2VyLXNwYWNlIGlucHV0LlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBtZXRyaWNfc3RvcmVgIGZ1cnRoZXIgYW5kIHNlZSB3aGVyZSB0aGF0J3MgaW1wbGVtZW50ZWQuIEknbSBnb2luZyB0byBjaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBzeXNmcyBpbnRlcmFjdGlvbiBwcm9iYWJseSBsaXZlcywgd2hlcmUgZGF0YSB2YWxpZGF0aW9uIGFuZCBwcm9jZXNzaW5nIGhhcHBlbnMuIEdvdHRhIHVuZGVyc3RhbmQgaG93IHRoZSBpbnB1dCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NDEuMTY4MDc4Njg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjQ5NTA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZXRyaWNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMDY1PXN0YXRpYyBzc2l6ZV90IG1ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA4MjpzdGF0aWMgc3NpemVfdCBtZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4My1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc2PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjkyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjkzOnN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTQtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NDEuNDE0NTc5NDk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2NDIyNzEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiwgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgLiBTaW5jZSB0aGlzIGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBEYW1vbiwgSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbjogYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBEYW1vbidzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBpbmNsdWRpbmcgYW55dGhpbmcgcmVsYXRlZCB0byB3YXRlcm1hcmsgbWV0cmljcy4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGludG8gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMyOjQ0LjE3ODgwODg5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczMjY2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyODI9c3RhdGljIGJvb2wga2RhbW9uZF9uZWVkX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyOTktXFxubW0vZGFtb24vY29yZS5jOjMzMDA6c3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcXG5tbS9kYW1vbi9jb3JlLmMtMzMwMS1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICptZXRyaWNfdmFsdWUpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMyND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMjctXFxubW0vZGFtb24vY29yZS5jOjMzMjg6XFx0aWYgKGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWUoc2NoZW1lLVxcdTAwM2V3bWFya3MubWV0cmljLCBcXHUwMDI2bWV0cmljKSlcXG5tbS9kYW1vbi9jb3JlLmMtMzMyOS1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NDQuMzQ2MTQwNzA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNjM3MjcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgREFNT1MgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlIGNhbiBiZXN0IGxldmVyYWdlIFN5emthbGxlciB0byB0ZXN0IHRoZSBEQU1PUyBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLCBhcyBpdCdzIGRpcmVjdGx5IGNhbGxlZCBieSBgZGFtb3Nfd21hcmtfd2FpdF91c2AuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGVudHJ5IHBvaW50LiBUaGVuIEkndmUgZ290IGBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZWAsIHdoaWNoIGxvb2tzIGxpa2UgYSBtb2R1bGUgcGFyYW1ldGVyIHN0b3JlLiBLbm93aW5nIFN5emthbGxlciwgSSdkIGV4cGVjdCBpdCB0byBoYW5kbGUgc3lzZnMgYW5kIG1vZHVsZSBwYXJhbXMsIGVzcGVjaWFsbHkgaWYgZGVzY3JpcHRpb25zIGFyZSBhdmFpbGFibGUuIEJ1dCwgbGV0J3Mgbm90IGxlYXZlIHRoaW5ncyB0byBjaGFuY2U7IHdlIGNhbiBhbHdheXMgcHJpb3JpdGl6ZSBzcGVjaWZpYyBmdW5jdGlvbnMuXG5cbkdpdmVuIHRoaXMsIEknbSBsZWFuaW5nIHRvd2FyZHMgZm9jdXNpbmcgbXkgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMgb24gYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIGFsb25nIHdpdGggdGhlIHJlbGF0ZWQgYG1ldHJpY19zdG9yZWAgaW50ZXJhY3Rpb24uIEl0IHNlZW1zIGxpa2UgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoIHdvdWxkIGJlIGJlbmVmaWNpYWwsIGF0IGxlYXN0IHRvIHN0YXJ0LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgYGRhbW9zX3dtYXJrX3dhaXRfdXNgIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjMzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMyOjQ4LjY2MjUxNjEyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNTI0MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3dtYXJrX3dhaXRfdXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMzAwPXN0YXRpYyBpbnQgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZShlbnVtIGRhbW9zX3dtYXJrX21ldHJpYyBtZXRyaWMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMyMy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzMyNDpzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzI1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDM1PXN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0NDMtXFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzozNDQ0OlxcdFxcdFxcdHdhaXRfdGltZSA9IGRhbW9zX3dtYXJrX3dhaXRfdXMocyk7XFxubW0vZGFtb24vY29yZS5jLTM0NDUtXFx0XFx0XFx0aWYgKCFpbml0X3dhaXRfdGltZSB8fCB3YWl0X3RpbWUgXFx1MDAzYyBtaW5fd2FpdF90aW1lKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMyOjQ4LjgyNTA0ODY3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY0NjkxODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgREFNT04gVGhyZWFkIEV4ZWN1dGlvbiBGbG93KipcblxuUmlnaHQsIHNvIGBkYW1vc193bWFya193YWl0X3VzYCwgdGhhdCdzIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgYGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uYCwgaXNuJ3QgaXQ/IEFuZCBga2RhbW9uZF93YWl0X2FjdGl2YXRpb25gIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSB3aXRoaW4gYGtkYW1vbmRfZm5gLiAgVGhhdCBga2RhbW9uZF9mbmAsIHRoYXQncyB0aGUgY29yZSBEQU1PTiB0aHJlYWQgLSB0aGUgaGVhcnQgb2YgdGhlIERBTU9OIHN1YnN5c3RlbS4gU28sIGBkYW1vc193bWFya193YWl0X3VzYCBpcyBlc3NlbnRpYWxseSBhdCB0aGUgYm90dG9tIG9mIGEgY3JpdGljYWwgZXhlY3V0aW9uIGNoYWluLlxuXG5Ob3csIHdoZXJlIGFyZSB0aGUgaW1wb3J0YW50IG1ldHJpY3Mgc3RvcmVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtZXRyaWNfc3RvcmVgIHN0cnVjdHVyZS4uLiB0aGF0J2xsIGJlIGRlZmluZWQgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IHBlcmZvcm1hbmNlIGRhdGEgaXMgYmVpbmcga2VwdCwgYW5kIHRoYXQncyB0aGUgbmV4dCBwbGFjZSBJIG5lZWQgdG8gZGlnIGludG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMjo1Mi4xODk3NDMwNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTcxNDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZXRyaWNfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMDY1PXN0YXRpYyBzc2l6ZV90IG1ldHJpY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4MS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTA4MjpzdGF0aWMgc3NpemVfdCBtZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTA4My1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjc2PXN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjkyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjkzOnN0YXRpYyBzc2l6ZV90IHRhcmdldF9tZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyOTQtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NTIuMjkxNDYzNTE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzkyOTg2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGFjcm9zcyBEQU1PTidzIGNvcmUsIHN5c2ZzIGludGVyZmFjZSwgYW5kIHJlY2xhaW0gY29tcG9uZW50cy4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gQW55IG1vZGlmaWNhdGlvbiB0b3VjaGluZyB0aG9zZSBhcmVhcyBpcyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZmluZGluZyBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIOKAkyBsb29rcyBsaWtlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUkVDTEFJTWAuXG5cblNwZWNpZmljYWxseSwgSSBzaG91bGQgZm9jdXMgbXkgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2Ugc3ltYm9sczogYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgLCBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgLCBhbmQgYG1ldHJpY19zdG9yZWAuIFRoZXNlIGFyZSBsaWtlbHkgZW50cnkgcG9pbnRzIG9yIGRhdGEgaGFuZGxpbmcgZnVuY3Rpb25zIHRoYXQgd291bGQgYmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHRhcmdldCBzZWxlY3Rpb24uXG5cbldhaXQsIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2suLi5JIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdCBgREFNT05fUkVDTEFJTWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCB3YXN0aW5nIHRpbWUgY2hhc2luZyBhIHBoYW50b20uIEknbGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGRvY3VtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NTYuOTMwNzY1MTEyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg3NzAxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OX1JFQ0xBSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMjo1Ny4wMzk1NDUwMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTQ5NTY2MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoYXQgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIGBEQU1PTl9SRUNMQUlNYCBsb29rcyBzcG90LW9uLCBzbyBJJ2xsIGdpdmUgdGhhdCBhIGNoZWNrLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBEQU1PTl9TWVNGU2AgYW5kIHNlZSB3aGVyZSB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4gTGV0J3Mgc2VlIGlmIHdlJ3ZlIGdvdCBhIGNvbnNpc3RlbnQgYXNzZXNzbWVudCBiZXR3ZWVuIHRob3NlIHR3byBvciBpZiB0aGVyZSBhcmUgYW55IGFyZWFzIG9mIGZyaWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzI6NTkuNTg5MTE0Nzc4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1OTcyMzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9TWVNGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMzOjAxLjQ2NTA5NjQ3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM5NTI1MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqQXNzZXNzbWVudCBvZiBEQU1PTi1SZWxhdGVkIFZhbGlkYXRpb24qKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQncyByaWdodC4gYERBTU9OX1NZU0ZTYCBpcyBkZWZpbml0ZWx5IG9uIHRoZSBtb25leS4gV2UncmUgZ29vZCB0aGVyZS4gTm93LCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGUgb3ZlcmFyY2hpbmcgYERBTU9OYCBjb25jZXB0IGl0c2VsZiBpc24ndCBhIHJlZCBoZXJyaW5nLiBJdCdzIGFsd2F5cyB3aXNlIHRvIHJlLXZhbGlkYXRlIHRoZSBmb3VuZGF0aW9uLCBldmVuIHdoZW4gdGhlIGltbWVkaWF0ZSBjb21wb25lbnQgc2VlbXMgc291bmQuIExldCdzIG1ha2Ugc3VyZSBvdXIgY29yZSBhc3N1bXB0aW9ucyBhYm91dCBgREFNT05gJ3MgYmVoYXZpb3IgYW5kIGFwcGxpY2FiaWxpdHkgYXJlIHN0aWxsIGhvbGRpbmcgdHJ1ZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMzowNC40MDQ2MjQyNzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDQ4MzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMzOjA1LjAxNTExNjAzN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1ODIxMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgYXJlYSBvZiBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgREFNT04gSW50ZWdyYXRpb24gaW4gdGhlIE1ldHJpYyBTdG9yZSoqXG5cblllcywgYERBTU9OYCBzZWVtcyB0byBiZSB0aGUgY29ycmVjdCBhcHByb2FjaCBoZXJlLiBUaGUgbG9naWMgYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgd2UncmUgYXJjaGl0ZWN0aW5nIHRoaXMuIExldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBtZXRyaWNfc3RvcmVgIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AgZmlsZS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG1ldHJpY3MgcmVsYXRlZCB0byBEQU1PTiB3aWxsIHJlc2lkZSwgYW5kIHdoZXJlIEknbGwgZmluZCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyB1c2VkIHRvIHN0b3JlIGFuZCBleHBvc2UgdGhlIHJlbGV2YW50IHBlcmZvcm1hbmNlIGRhdGEuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgY29sbGVjdGlvbiBhbmQgc3RvcmFnZSBhcmUgYWxpZ25lZCB3aXRoIHRoZSBleGlzdGluZyBmcmFtZXdvcmsgYW5kIHBlcmZvcm1hbmNlIGdvYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTgxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzM6MDguMTMwOTQwMDYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MjpcXHRzdGF0aWMgc3NpemVfdCBtZXRyaWNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4xMDgzOlxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjEwODQ6XFx0e1xcbjEwODU6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3dhdGVybWFya3MgKndhdGVybWFya3MgPSBjb250YWluZXJfb2Yoa29iaixcXG4xMDg2OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc193YXRlcm1hcmtzLCBrb2JqKTtcXG4xMDg3OlxcdFxcdGludCBpO1xcbjEwODg6XFx0XFxuMTA4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZXMpOyBpKyspIHtcXG4xMDkwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkYW1vc19zeXNmc193bWFya19tZXRyaWNfbmFtZSAqbWV0cmljX25hbWU7XFxuMTA5MTpcXHRcXG4xMDkyOlxcdFxcdFxcdG1ldHJpY19uYW1lID0gXFx1MDAyNmRhbW9zX3N5c2ZzX3dtYXJrX21ldHJpY19uYW1lc1tpXTtcXG4xMDkzOlxcdFxcdFxcdGlmIChzeXNmc19zdHJlcShidWYsIG1ldHJpY19uYW1lLVxcdTAwM2VuYW1lKSkge1xcbjEwOTQ6XFx0XFx0XFx0XFx0d2F0ZXJtYXJrcy1cXHUwMDNlbWV0cmljID0gbWV0cmljX25hbWUtXFx1MDAzZW1ldHJpYztcXG4xMDk1OlxcdFxcdFxcdFxcdHJldHVybiBjb3VudDtcXG4xMDk2OlxcdFxcdFxcdH1cXG4xMDk3OlxcdFxcdH1cXG4xMDk4OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwOTk6XFx0fVxcbjExMDA6XFx0XFxuMTEwMTpcXHRzdGF0aWMgc3NpemVfdCBpbnRlcnZhbF91c19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwODozMzowOC4xMzExMjk1OTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NzMxNTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRm9jdXNpbmcgdGhlIEZ1enppbmcgRWZmb3J0KipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBhIGdvb2QgZnV6emluZyB0YXJnZXQgZm9yIHRoaXMgc3lzZnMgaW50ZXJhY3Rpb24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGBtZXRyaWNfc3RvcmVgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbi4gSXQncyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIHRoZSBzeXNmcyBpbnB1dCBhbmQgc3Vic2VxdWVudGx5IHNldHRpbmcgYHdhdGVybWFya3MtXHUwMDNlbWV0cmljYC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZzsgdGhlIGlucHV0IHBhcnNpbmcgaXMgd2hlcmUgd2UncmUgbW9zdCBsaWtlbHkgdG8gdW5jb3ZlciB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB3aXRoIG1hbGZvcm1lZCBvciB1bnVzdWFsIGRhdGEuIEl0J3Mgb2Z0ZW4gdGhlIHdlYWtlc3QgbGluayBpbiB0aGVzZSBraW5kcyBvZiBJL08gaW50ZXJhY3Rpb25zLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBzdGFydCB0aGVyZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBxdWljayBsb29rIGF0IGBkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZWAgaW4gYG1tL2RhbW9uL3JlY2xhaW0uY2AsIHRvIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vdCBhbnkgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzM6MTEuMjA4NDQ3NzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg5OlxcdE1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxcbiAzOTA6XFx0XFx0XFxcIlNjYWxlIGZhY3RvciBmb3IgREFNT05fUkVDTEFJTSB0byBvcHMgYWRkcmVzcyBjb252ZXJzaW9uIChkZWZhdWx0OiAxKVxcXCIpO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fbWVtcmF0ZV90eXBlX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG4gMzkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4gMzk0OlxcdHtcXG4gMzk1OlxcdFxcdGlmIChzeXNmc19zdHJlcSh2YWwsIFxcXCJmcmVlXFxcIikpXFxuIDM5NjpcXHRcXHRcXHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFO1xcbiAzOTc6XFx0XFx0ZWxzZSBpZiAoc3lzZnNfc3RyZXEodmFsLCBcXFwiYXZhaWxhYmxlXFxcIikpXFxuIDM5ODpcXHRcXHRcXHRtZW1yYXRlX3R5cGUgPSBEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEU7XFxuIDM5OTpcXHRcXHRlbHNlXFxuIDQwMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0cmV0dXJuIDA7XFxuIDQwMzpcXHR9XFxuIDQwNDpcXHRcXG4gNDA1OlxcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfbG9hZChjaGFyICpidWZmZXIsXFxuIDQwNjpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4gNDA3OlxcdHtcXG4gNDA4OlxcdFxcdGludCB0eXBlID0gUkVBRF9PTkNFKG1lbXJhdGVfdHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMzOjExLjIwODU4ODE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NjMzOTYwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBGdW5jdGlvbidzIFF1YWxpdHkqKlxuXG5BbHJpZ2h0LCB0aGlzIGZ1bmN0aW9uIHNlZW1zIHByb21pc2luZywgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGVlcGVyIGFuYWx5c2lzLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgd29ya2luZ3MuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuIExldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyBgZGFtb3NfZ2V0X3dtYXJrX21ldHJpY192YWx1ZWAgd2l0aGluIHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpcyBrZXkgdG8gZm9ybWluZyBhIGNvbXByZWhlbnNpdmUgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA4OjMzOjEzLjk3MTk4NzI5NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMDA6XFx0c3RhdGljIGludCBkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlKGVudW0gZGFtb3Nfd21hcmtfbWV0cmljIG1ldHJpYyxcXG4zMzAxOlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKm1ldHJpY192YWx1ZSlcXG4zMzAyOlxcdHtcXG4zMzAzOlxcdFxcdGxvbmcgYXZhaWxhYmxlX3BhZ2VzO1xcbjMzMDQ6XFx0XFxuMzMwNTpcXHRcXHRzd2l0Y2ggKG1ldHJpYykge1xcbjMzMDY6XFx0XFx0Y2FzZSBEQU1PU19XTUFSS19GUkVFX01FTV9SQVRFOlxcbjMzMDc6XFx0XFx0XFx0Km1ldHJpY192YWx1ZSA9IGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUykgKiAxMDAwIC9cXG4zMzA4OlxcdFxcdFxcdCAgICAgICB0b3RhbHJhbV9wYWdlcygpO1xcbjMzMDk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzMxMDpcXHRcXHRjYXNlIERBTU9TX1dNQVJLX0FWQUlMQUJMRV9NRU1fUkFURTpcXG4zMzExOlxcdFxcdFxcdGF2YWlsYWJsZV9wYWdlcyA9IHNpX21lbV9hdmFpbGFibGUoKTtcXG4zMzEyOlxcdFxcdFxcdCptZXRyaWNfdmFsdWUgPSBhdmFpbGFibGVfcGFnZXMgKiAxMDAwIC8gdG90YWxyYW1fcGFnZXMoKTtcXG4zMzEzOlxcdFxcdFxcdHJldHVybiAwO1xcbjMzMTQ6XFx0XFx0ZGVmYXVsdDpcXG4zMzE1OlxcdFxcdFxcdGJyZWFrO1xcbjMzMTY6XFx0XFx0fVxcbjMzMTc6XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzMxODpcXHR9XFxuMzMxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzM6MTMuOTcyMjM5NjY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzAxOTA2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFkZGluZyBhIE5ldyBEQU1PTiBNZXRyaWM6IEtleSBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggYSBuZXcgbWV0cmljIGltcGxlbWVudGF0aW9uIHdpdGhpbiBEQU1PTi4gVGhlIGNlbnRyYWwgcGllY2UsIHRoZSBoZWFydCBvZiB0aGUgY2FsY3VsYXRpb24sIGhpbmdlcyBvbiB0aGUgYGRhbW9zX2dldF93bWFya19tZXRyaWNfdmFsdWVgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGNvcmUgY2FsY3VsYXRpb24gZW5naW5lLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyBgZGFtb25fcmVjbGFpbV9tZW1yYXRlX3R5cGVfc3RvcmVgIGFuZCB0aGUgYG1ldHJpY19zdG9yZWAgaW50ZXJhY3Qgd2l0aCBpdC4gVGhvc2UgYXJlIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHRyYWNraW5nIHRoZSBtZXRyaWMgdmFsdWUgYW5kIHdoZXJlIGl0J3Mgc3RvcmVkIGZvciBsYXRlciB1c2UuXG5cbk9uIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLCBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gaG93IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUkVDTEFJTWAgYXJlIHNldC4gVGhlc2Ugd2lsbCB1bmRvdWJ0ZWRseSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgbmV3IG1ldHJpYyBhbmQgd2hldGhlciBpdCdzIGVuYWJsZWQsIGhvdyBpdCdzIGV4cG9zZWQsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVjbGFpbSBtZWNoYW5pc21zLiBDb25maWd1cmF0aW9uIGlzIG9mdGVuIHdoZXJlIHN1YnRsZSBidWdzIGx1cmssIHNvIGEgY2FyZWZ1bCByZXZpZXcgb2YgdGhlc2Ugb3B0aW9ucyB3aWxsIGJlIGltcG9ydGFudC5cblxuU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ2xsIG1ha2Ugc3VyZSB0byBnZXQgdGhpcyBhZGRlZCB0byB0aGUgZnV6emluZyBjYW1wYWlnbiBhcyBzb29uIGFzIEkgY2FuIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHdpdGhpbiB0aGUgbWV0cmljIGNhbGN1bGF0aW9uLCBtZW1vcnkgcmVjbGFpbSwgb3IgZGF0YSBzdG9yYWdlLiBUaGF0J3MgbXkgdG9wIHByaW9yaXR5IGFmdGVyIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODUsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDg6MzM6MTkuMzQyNDMzMjc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMjM4NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZVwiLFxuICAgIFwibWV0cmljX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19nZXRfd21hcmtfbWV0cmljX3ZhbHVlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX21lbXJhdGVfdHlwZV9zdG9yZVwiLFxuICAgIFwibWV0cmljX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyB3YXRlcm1hcmsgbWV0cmljIChEQU1PU19XTUFSS19BVkFJTEFCTEVfTUVNX1JBVEUpIHRvIHRoZSBEQU1PTiBjb3JlLCBzeXNmcyBpbnRlcmZhY2UsIGFuZCBEQU1PTl9SRUNMQUlNIG1vZHVsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgREFNT04gY2FsY3VsYXRlcyBtZW1vcnkgcmF0ZXMgYW5kIHRyaWdnZXJzIHNjaGVtZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHBhcnNpbmcgYW5kIHRoZSBjb3JlIG1ldHJpYyBjYWxjdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[1] Phase: Succeeded StartedAt: 2026-06-26 08:33:31 +0000 UTC FinishedAt: 2026-06-26 08:33:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 08:33:31 +0000 UTC FinishedAt: 2026-06-26 08:33:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2] Phase: Succeeded StartedAt: 2026-06-26 08:33:31 +0000 UTC FinishedAt: 2026-06-26 12:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:33:31 +0000 UTC FinishedAt: 2026-06-26 12:38:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:33:31 +0000 UTC FinishedAt: 2026-06-26 08:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:33:31 +0000 UTC FinishedAt: 2026-06-26 08:33:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"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-workflow5tjfc/series-workflow5tjfc-convert-artifact-4114782433/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:33:53 +0000 UTC FinishedAt: 2026-06-26 08:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:33:53 +0000 UTC FinishedAt: 2026-06-26 08:56:58 +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:*6f9ff572-dea1-4eb4-8029-33a4ae540a34,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-workflow5tjfc/series-workflow5tjfc-convert-artifact-4114782433/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": "87f9b758-2181-4d9a-8fc7-47e2d4713afe", "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-workflow5tjfc/series-workflow5tjfc-build-action-906126863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:33:53 +0000 UTC FinishedAt: 2026-06-26 08:56:24 +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:*6f9ff572-dea1-4eb4-8029-33a4ae540a34,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-workflow5tjfc/series-workflow5tjfc-convert-artifact-4114782433/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": "87f9b758-2181-4d9a-8fc7-47e2d4713afe", "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-workflow5tjfc/series-workflow5tjfc-build-action-906126863/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:56:58 +0000 UTC FinishedAt: 2026-06-26 08:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:56:58 +0000 UTC FinishedAt: 2026-06-26 08:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:56:58 +0000 UTC FinishedAt: 2026-06-26 08:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:56:58 +0000 UTC FinishedAt: 2026-06-26 08:57:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-workflow5tjfc/series-workflow5tjfc-convert-artifact-3523834164/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:58:34 +0000 UTC FinishedAt: 2026-06-26 09:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 08:58:34 +0000 UTC FinishedAt: 2026-06-26 09:00:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87f9b758-2181-4d9a-8fc7-47e2d4713afe,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-workflow5tjfc/series-workflow5tjfc-build-action-906126863/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-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:00:28 +0000 UTC FinishedAt: 2026-06-26 09:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:00:28 +0000 UTC FinishedAt: 2026-06-26 09:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:00:28 +0000 UTC FinishedAt: 2026-06-26 09:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:00:28 +0000 UTC FinishedAt: 2026-06-26 09:32:39 +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:*6f9ff572-dea1-4eb4-8029-33a4ae540a34,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-workflow5tjfc/series-workflow5tjfc-convert-artifact-3523834164/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": "2511881d-fdb8-4c29-bb80-4ff6be0b0a52", "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-workflow5tjfc/series-workflow5tjfc-build-action-1112789760/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:00:28 +0000 UTC FinishedAt: 2026-06-26 09:30:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6f9ff572-dea1-4eb4-8029-33a4ae540a34,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-workflow5tjfc/series-workflow5tjfc-convert-artifact-3523834164/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": "2511881d-fdb8-4c29-bb80-4ff6be0b0a52", "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-workflow5tjfc/series-workflow5tjfc-build-action-1112789760/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:32:39 +0000 UTC FinishedAt: 2026-06-26 09:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:32:39 +0000 UTC FinishedAt: 2026-06-26 09:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:32:39 +0000 UTC FinishedAt: 2026-06-26 09:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:32:39 +0000 UTC FinishedAt: 2026-06-26 09:34:44 +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:*2511881d-fdb8-4c29-bb80-4ff6be0b0a52,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-workflow5tjfc/series-workflow5tjfc-build-action-1112789760/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-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:34:54 +0000 UTC FinishedAt: 2026-06-26 12:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:34:54 +0000 UTC FinishedAt: 2026-06-26 12:38:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"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:*87f9b758-2181-4d9a-8fc7-47e2d4713afe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2511881d-fdb8-4c29-bb80-4ff6be0b0a52,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-workflow5tjfc/series-workflow5tjfc-build-action-906126863/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-workflow5tjfc/series-workflow5tjfc-build-action-1112789760/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:34:54 +0000 UTC FinishedAt: 2026-06-26 09:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:34:54 +0000 UTC FinishedAt: 2026-06-26 09:35:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"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-workflow5tjfc/series-workflow5tjfc-convert-artifact-1719530333/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:34:54 +0000 UTC FinishedAt: 2026-06-26 09:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:34:54 +0000 UTC FinishedAt: 2026-06-26 09:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:34:54 +0000 UTC FinishedAt: 2026-06-26 09:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:35:25 +0000 UTC FinishedAt: 2026-06-26 12:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_get_wmark_metric_value","damon_reclaim_memrate_type_store","metric_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_RECLAIM"],"series_id":"e4978ed9-e221-415f-b204-63a2a140fab3","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-06-26 09:35:25 +0000 UTC FinishedAt: 2026-06-26 12:38:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87f9b758-2181-4d9a-8fc7-47e2d4713afe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2511881d-fdb8-4c29-bb80-4ff6be0b0a52,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-workflow5tjfc/series-workflow5tjfc-build-action-906126863/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-workflow5tjfc/series-workflow5tjfc-build-action-1112789760/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-workflow5tjfc/series-workflow5tjfc-convert-artifact-1719530333/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,}