Name: series-workflowvgl5t Phase: Succeeded StartedAt: 2026-06-30 19:39:45 +0000 UTC FinishedAt: 2026-06-30 23:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[0] Phase: Succeeded StartedAt: 2026-06-30 19:39:45 +0000 UTC FinishedAt: 2026-06-30 19:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 19:39:45 +0000 UTC FinishedAt: 2026-06-30 19:55:16 +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": "bfcc55a14179495b0c41408908fd7b9d7785c694", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "bfcc55a14179495b0c41408908fd7b9d7785c694", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS" ], "series_id": "7e52dbf5-9224-4c32-bd97-a69a3add4e96" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__damon_va_three_regions" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kYW1vbl92YV90aHJlZV9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgYGZvcl9lYWNoX3ZtYWAgbG9vcCBpbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZSBSQ1UgbG9jayBkb2VzIG5vdCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIHdoZW4gdHJhdmVyc2luZyBWTUFzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDVkM2U1YjdiODdkOWJlNDFjYmM0NWQ0NWMzMTRkN2UxMWIzMmI3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDE5OjUzOjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBkMjcxNDc2MDM1NjQxYi4uMzQ1Yjg5YjVkNDVmOWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtODQsNyAmIzQzOzg0LDYgQEAgc3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHQgKiBJZiB0aGlzIGlzIHRvbyBzbG93LCBpdCBjYW4gYmUgb3B0aW1pc2VkIHRvIGV4YW1pbmUgdGhlIG1hcGxlXG4gXHQgKiB0cmVlIGdhcHMuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIGdhcDtcbiBcbkBAIC0xMDUsNyAmIzQzOzEwNCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIG5leHQ6XG4gXHRcdHByZXYgPSB2bWE7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghc3pfcmFuZ2UoXHUwMDI2c2Vjb25kX2dhcCkgfHwgIXN6X3JhbmdlKFx1MDAyNmZpcnN0X2dhcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kYW1vbl92YV90aHJlZV9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgYGZvcl9lYWNoX3ZtYWAgbG9vcCBpbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZSBSQ1UgbG9jayBkb2VzIG5vdCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIHdoZW4gdHJhdmVyc2luZyBWTUFzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNWQzZTViN2I4N2Q5YmU0MWNiYzQ1ZDQ1YzMxNGQ3ZTExYjMyYjc4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMTk6NTM6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCBkMjcxNDc2MDM1NjQxYi4uMzQ1Yjg5YjVkNDVmOWQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtODQsNyAmIzQzOzg0LDYgQEAgc3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJICogSWYgdGhpcyBpcyB0b28gc2xvdywgaXQgY2FuIGJlIG9wdGltaXNlZCB0byBleGFtaW5lIHRoZSBtYXBsZQogCSAqIHRyZWUgZ2Fwcy4KIAkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiAJCXVuc2lnbmVkIGxvbmcgZ2FwOwogCkBAIC0xMDUsNyAmIzQzOzEwNCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogbmV4dDoKIAkJcHJldiA9IHZtYTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIXN6X3JhbmdlKCZhbXA7c2Vjb25kX2dhcCkgfHwgIXN6X3JhbmdlKCZhbXA7Zmlyc3RfZ2FwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNwZWNpYWxpc3QgaW4gbWVtb3J5IG1hbmFnZW1lbnQ6CgoqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBSZW1vdmFsIG9mIFJDVSBQcm90ZWN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIERBTU9OIHBhdGNoLCBzcGVjaWZpY2FsbHkgb25lIHRoYXQmIzM5O3MgdG91Y2hlZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIHdpdGhpbiB0aGUgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFdoeSBhcmUgd2UgZHJvcHBpbmcgUkNVIHByb3RlY3Rpb24gaGVyZT8mIzM0OwoKVGhpcyByYWlzZXMgc2V2ZXJhbCBxdWVzdGlvbnMsIGFuZCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIuIFdhcyB0aGlzIGFuIG9wdGltaXphdGlvbj8gQXJlIHRoZXJlIGd1YXJhbnRlZXMgbm93IHRoYXQgbWFrZSBSQ1UgdW5uZWNlc3Nhcnk/IEhhdmUgd2UgbW92ZWQgdG8gYSBkaWZmZXJlbnQgZm9ybSBvZiBsb2NraW5nIG9yIHByb3RlY3Rpb24/IFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGdldCBpbiB0aGVyZSBhbmQgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHB1cnBvc2Ugd2l0aGluIHRoZSBEQU1PTiBjb250ZXh0IGFuZCBob3cgdGhhdCBsb29wIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIHByb3Blcmx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoeS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHQgKiBuZWNlc3NhcnkuXG4gIDcxOlx0ICpcbiAgNzI6XHQgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4gIDczOlx0ICovXG4gIDc0Olx0c3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gIDc1Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcbiAgNzY6XHR7XG4gIDc3Olx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBmaXJzdF9nYXAgPSB7MH0sIHNlY29uZF9nYXAgPSB7MH07XG4gIDc4Olx0XHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7XG4gIDc5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXYgPSBOVUxMO1xuICA4MDpcdFx0dW5zaWduZWQgbG9uZyBzdGFydDtcbiAgODE6XHRcbiAgODI6XHRcdC8qXG4gIDgzOlx0XHQgKiBGaW5kIHRoZSB0d28gYmlnZ2VzdCBnYXBzIHNvIHRoYXQgZmlyc3RfZ2FwIFx1MDAzZSBzZWNvbmRfZ2FwIFx1MDAzZSBvdGhlcnMuXG4gIDg0Olx0XHQgKiBJZiB0aGlzIGlzIHRvbyBzbG93LCBpdCBjYW4gYmUgb3B0aW1pc2VkIHRvIGV4YW1pbmUgdGhlIG1hcGxlXG4gIDg1Olx0XHQgKiB0cmVlIGdhcHMuXG4gIDg2Olx0XHQgKi9cbiAgODc6XHRcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuICA4ODpcdFx0XHR1bnNpZ25lZCBsb25nIGdhcDtcbiAgODk6XHRcbiAgOTA6XHRcdFx0aWYgKCFwcmV2KSB7XG4gIDkxOlx0XHRcdFx0c3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gIDkyOlx0XHRcdFx0Z290byBuZXh0O1xuICA5MzpcdFx0XHR9XG4gIDk0Olx0XHRcdGdhcCA9IHZtYS1cdTAwM2V2bV9zdGFydCAtIHByZXYtXHUwMDNldm1fZW5kO1xuICA5NTpcdFxuICA5NjpcdFx0XHRpZiAoZ2FwIFx1MDAzZSBzel9yYW5nZShcdTAwMjZmaXJzdF9nYXApKSB7XG4gIDk3Olx0XHRcdFx0c2Vjb25kX2dhcCA9IGZpcnN0X2dhcDtcbiAgOTg6XHRcdFx0XHRmaXJzdF9nYXAuc3RhcnQgPSBwcmV2LVx1MDAzZXZtX2VuZDtcbiAgOTk6XHRcdFx0XHRmaXJzdF9nYXAuZW5kID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuIDEwMDpcdFx0XHR9IGVsc2UgaWYgKGdhcCBcdTAwM2Ugc3pfcmFuZ2UoXHUwMDI2c2Vjb25kX2dhcCkpIHtcbiAxMDE6XHRcdFx0XHRzZWNvbmRfZ2FwLnN0YXJ0ID0gcHJldi1cdTAwM2V2bV9lbmQ7XG4gMTAyOlx0XHRcdFx0c2Vjb25kX2dhcC5lbmQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gMTAzOlx0XHRcdH1cbiAxMDQ6XHRuZXh0OlxuIDEwNTpcdFx0XHRwcmV2ID0gdm1hO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFxuIDEwODpcdFx0aWYgKCFzel9yYW5nZShcdTAwMjZzZWNvbmRfZ2FwKSB8fCAhc3pfcmFuZ2UoXHUwMDI2Zmlyc3RfZ2FwKSlcbiAxMDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTEwOlx0XG4gMTExOlx0XHQvKiBTb3J0IHRoZSB0d28gYmlnZ2VzdCBnYXBzIGJ5IGFkZHJlc3MgKi9cbiAxMTI6XHRcdGlmIChmaXJzdF9nYXAuc3RhcnQgXHUwMDNlIHNlY29uZF9nYXAuc3RhcnQpXG4gMTEzOlx0XHRcdHN3YXAoZmlyc3RfZ2FwLCBzZWNvbmRfZ2FwKTtcbiAxMTQ6XHRcbiAxMTU6XHRcdC8qIFN0b3JlIHRoZSByZXN1bHQgKi9cbiAxMTY6XHRcdHJlZ2lvbnNbMF0uc3RhcnQgPSBBTElHTihzdGFydCwgREFNT05fTUlOX1JFR0lPTl9TWik7XG4gMTE3Olx0XHRyZWdpb25zWzBdLmVuZCA9IEFMSUdOKGZpcnN0X2dhcC5zdGFydCwgREFNT05fTUlOX1JFR0lPTl9TWik7XG4gMTE4Olx0XHRyZWdpb25zWzFdLnN0YXJ0ID0gQUxJR04oZmlyc3RfZ2FwLmVuZCwgREFNT05fTUlOX1JFR0lPTl9TWik7XG4gMTE5Olx0XHRyZWdpb25zWzFdLmVuZCA9IEFMSUdOKHNlY29uZF9nYXAuc3RhcnQsIERBTU9OX01JTl9SRUdJT05fU1opO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIEZ1bmN0aW9uOiBGaW5kaW5nIHRoZSBUaHJlZSBCaWdnZXN0IFJlZ2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBjbGVhciDigJMgaXQmIzM5O3MgZGVzaWduZWQgdG8gaWRlbnRpZnkgdGhlIHRocmVlIGxhcmdlc3QgcmVnaW9ucyB3aXRoaW4gYSBwcm9jZXNzJiMzOTtzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBrZXkgY29tcG9uZW50IG9mIERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTU9OaXRvci4gR2l2ZW4gaXRzIHB1cnBvc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gbWVtb3J5IHVzYWdlIGFuYWx5c2lzLCBwZXJoYXBzIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgcHJvZmlsaW5nLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgYW5kIHdoZXJlIGlzIGl0IHVzZWQ/IEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIERBTU9OIGZyYW1ld29yayBhbmQgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIG91dCB3aG8mIzM5O3MgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTE3PXN0YXRpYyBpbnQgX19saW5rX3ZtYXMoc3RydWN0IG1hcGxlX3RyZWUgKm10LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYXMsXG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0zOS0vKlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo0MDogKiBUZXN0IF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucygpIGZ1bmN0aW9uXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTQxLSAqXG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC01MC0gKlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo1MTogKiAmIzM5O19fZGFtb25fdmFfdGhyZWVfcmVnaW9ucygpIHJlY2VpdmVzIGFuIGFkZHJlc3Mgc3BhY2Ugb2YgYSBwcm9jZXNzLiAgSXRcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNTItICogZmlyc3QgaWRlbnRpZmllcyB0aGUgc3RhcnQgb2YgbWFwcGluZ3MsIGVuZCBvZiBtYXBwaW5ncywgYW5kIHRoZSB0d28gYmlnZ2VzdFxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9NjY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF90aHJlZV9yZWdpb25zX2luX3ZtYXMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtODMtXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjg0Olx0X19kYW1vbl92YV90aHJlZV9yZWdpb25zKFx1MDAyNm1tLCByZWdpb25zKTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtODUtXG4tLVxubW0vZGFtb24vdmFkZHIuYz01Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzel9yYW5nZShzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTczLSAqL1xubW0vZGFtb24vdmFkZHIuYzo3NDpzdGF0aWMgaW50IF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2RhbW9uL3ZhZGRyLmMtNzUtXHRcdFx0XHQgICAgICAgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcbi0tXG5tbS9kYW1vbi92YWRkci5jPTEzMT1zdGF0aWMgaW50IGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTE0MS1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbm1tL2RhbW9uL3ZhZGRyLmM6MTQyOlx0cmMgPSBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMobW0sIHJlZ2lvbnMpO1xubW0vZGFtb24vdmFkZHIuYy0xNDMtXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODk5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AsIHdoaWNoIGlzIGFscmVhZHkgaG9sZGluZyBhbiBgbW1hcF9yZWFkX2xvY2sobW0pYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHByb2JhYmx5IGhhZCBhIHJlZHVuZGFudCBvciBtaXNwbGFjZWQgYHJjdV9yZWFkX2xvY2soKWAuIFRoZSBgZm9yX2VhY2hfdm1hYCBtYWNybyB1dGlsaXplcyB0aGUgbWFwbGUgdHJlZSwgd2hpY2ggKmNhbiogcmVxdWlyZSBhbiBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIGJ1dCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIGBtbWFwX3JlYWRfbG9ja2AsIGl0IHNob3VsZCBiZSB1bm5lY2Vzc2FyeS4KCkkgaGFkIGEgbW9tZW50IG9mIGRvdWJ0IHRoZXJlOyBJIGhhZCB0byBjb25zaWRlciBpZiBgZm9yX2VhY2hfdm1hYCB3YXMgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHZtYV9uZXh0YCB3aGljaCBtaWdodCAqc3RpbGwqIG5lZWQgUkNVIGlmIHdlIHdlcmVuJiMzOTt0IGhvbGRpbmcgdGhlIGBtbWFwYCBsb2NrLiBCdXQgYSBxdWljayBjaGVjayByZXZlYWxlZCBgZm9yX2VhY2hfdm1hYCB1c2VzIGBtYXNfZmluZGAgd2hpY2ggKmRvZXNuJiMzOTt0KiByZXF1aXJlIGl0IHdoZW4gdGhlIG1tYXAgbG9jayBpcyBoZWxkLgoKSSBicmllZmx5IGNvbnNpZGVyZWQgaWYgYGZvcl9lYWNoX3ZtYWAgbWlnaHQgcG90ZW50aWFsbHkgc2xlZXAsIGJ1dCB0aGVuIHJlbWVtYmVyZWQgdGhhdCBgcmN1X3JlYWRfbG9ja2AgZGlzYWJsZXMgcHJlZW1wdGlvbi4gSWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nICppbiogYGZvcl9lYWNoX3ZtYWAgdGhhdCBjb3VsZCBzbGVlcCB3aGVuIGhvbGRpbmcgdGhpcyBsb2NrLCBpdCB3b3VsZCBiZSBhIGJ1Zy4KClJpZ2h0LCB0aGUgcGF0Y2ggaXMgcmVtb3ZpbmcgYm90aCB0aGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIHRoZSBgcmN1X3JlYWRfdW5sb2NrKClgLiBTbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQmIzM5O3MgYWN0aXZlbHkgKnJlbW92aW5nKiB0aGUgUkNVIHJlYWQgbG9jay4KCkdpdmVuIHRoaXMgaXMgYSBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBEQU1PTiwgdGhpcyBpcyBhYnNvbHV0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIEl0JiMzOTtzIGltcG9ydGFudCB0byB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBjaGFuZ2UsIGdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbW9uaXRvcmluZyBhc3BlY3RzLgoKTm93LCBsZXQmIzM5O3MgZ28gZmluZCB0aGUgcmVsZXZhbnQgREFNT04gY29uZmlndXJhdGlvbiBvcHRpb25zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDoKCioqRGlnZ2luZyBpbnRvIERBTU9OJiMzOTtzIFZpcnR1YWwgQWRkcmVzcyBIYW5kbGluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBEQU1PTiAoRHluYW1pYyBBZGRyZXNzIE1PTml0b3IpIGNvZGUsIHNwZWNpZmljYWxseSwgYG1tL2RhbW9uL3ZhZGRyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgZW50cnkgcG9pbnQ/IFdoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBlbmFibGVzIHRoaXMgc3BlY2lmaWMgcGllY2U/JiMzNDsgSSBrbm93IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGtlcm5lbCwgc28gdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgS2NvbmZpZyBvcHRpb25zLCBvciBvdGhlciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zLCBhcmUgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiBgdmFkZHIuY2AuIFNvLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIgYWJvdXQgd2hldGhlciB0aGlzIGNvbXBvbmVudCBpcyBjb21waWxlZCBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIGhvdyB0aGF0JiMzOTtzIHRpZWQgaW50byB0aGUgb3ZlcmFsbCBEQU1PTiBidWlsZC4gSSBuZWVkIHRoYXQgY29udGV4dCBiZWZvcmUgSSBjYW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IENoZWNrKioKCk9rYXksIHNvIHRoZSBgQ09ORklHX0RBTU9OX1ZBRERSYCBzZXR0aW5nIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUuIE15IG5leHQgdGhvdWdodCBpcywgZG9lcyBgQ09ORklHX0RBTU9OYCBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYENPTkZJR19EQU1PTl9WQUREUmAgdG8gYmUgcmVsZXZhbnQ/IFNlZW1zIGxvZ2ljYWwsIGJ1dCBsZXQmIzM5O3MganVzdCBjb25maXJtIGl0LiBZZXAsIHRoZSBkZXBlbmRlbmN5IGlzIHJpZ2h0IHRoZXJlIGluIHRoZSBrY29uZmlnIGZpbGUsIGBEQU1PTl9WQUREUmAgZGVwZW5kcyBvbiBgREFNT05gLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSB0byBzZWUgdGhlIGV4cGxpY2l0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBgREFNT05gIGFuZCBgREFNT05fVkFERFJgLiBUaG9zZSBhcmUgY2xlYXJseSB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBEeW5hbWljIEFkZHJlc3MgTW9uaXRvcmluZywgb3IgREFNT04uIFRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpcyBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZT8gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIHRoaXMuIFRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aG8gY2FsbHMgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIEFscmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBieSBgZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIFRoYXQmIzM5O3Mgbm90IHVuZXhwZWN0ZWQsIGJ1dCBnb29kIHRvIGNvbmZpcm0uIE5vdyBJIGNhbiBzdGFydCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xNz1zdGF0aWMgaW50IF9fbGlua192bWFzKHN0cnVjdCBtYXBsZV90cmVlICptdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFzLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMzktLypcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NDA6ICogVGVzdCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoKSBmdW5jdGlvblxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC00MS0gKlxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNTAtICpcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NTE6ICogJiMzOTtfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoKSByZWNlaXZlcyBhbiBhZGRyZXNzIHNwYWNlIG9mIGEgcHJvY2Vzcy4gIEl0XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTUyLSAqIGZpcnN0IGlkZW50aWZpZXMgdGhlIHN0YXJ0IG9mIG1hcHBpbmdzLCBlbmQgb2YgbWFwcGluZ3MsIGFuZCB0aGUgdHdvIGJpZ2dlc3Rcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTY2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdGhyZWVfcmVnaW9uc19pbl92bWFzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTgzLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo4NDpcdF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhcdTAwMjZtbSwgcmVnaW9ucyk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTg1LVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3pfcmFuZ2Uoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnIpXG4tLVxubW0vZGFtb24vdmFkZHIuYy03My0gKi9cbm1tL2RhbW9uL3ZhZGRyLmM6NzQ6c3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9kYW1vbi92YWRkci5jLTc1LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIHJlZ2lvbnNbM10pXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xMzAtICovXG5tbS9kYW1vbi92YWRkci5jOjEzMTpzdGF0aWMgaW50IGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL3ZhZGRyLmMtMTMyLVx0XHRcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcbi0tXG5tbS9kYW1vbi92YWRkci5jLTE0MS1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbm1tL2RhbW9uL3ZhZGRyLmM6MTQyOlx0cmMgPSBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMobW0sIHJlZ2lvbnMpO1xubW0vZGFtb24vdmFkZHIuYy0xNDMtXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTE5MT1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xOTctXG5tbS9kYW1vbi92YWRkci5jOjE5ODpcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKSB7XG5tbS9kYW1vbi92YWRkci5jLTE5OS1cdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTIyNj1zdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjMxLVx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xubW0vZGFtb24vdmFkZHIuYzoyMzI6XHRcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMpKVxubW0vZGFtb24vdmFkZHIuYy0yMzMtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludGVybmFsIERBTU9OIE9wZXJhdGlvbjogQSBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBWYXJpYWJsZSBBZGRyZXNzLWJhc2VkIE1lbW9yeSBNb25pdG9yIChEQU1PTikgaXMgd29ya2luZyBhdCBhIGxvdyBsZXZlbCwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcuIEkgc2VlIHRoYXQgdHdvIGtleSBmdW5jdGlvbnMsIGBfX2RhbW9uX3ZhX2luaXRfcmVnaW9uc2AgYW5kIGBkYW1vbl92YV91cGRhdGVgLCBhcmUgcGl2b3RhbCBoZXJlLiBUaGV5JiMzOTtyZSBjbGVhcmx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlcyB3aXRoaW4gREFNT04mIzM5O3MgdmFkZHIgb3BlcmF0aW9ucyBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgZ29vZCwgc2VlaW5nIHRob3NlIHR3byBmdW5jdGlvbnMgYmVpbmcgZXhwbGljaXRseSBuYW1lZCBpbmRpY2F0ZXMgdG8gbWUgdGhhdCBEQU1PTiBpcyBrZWVwaW5nIGl0cyB2aXJ0dWFsIGFkZHJlc3MgdHJhY2tpbmcgd2VsbC1vcmdhbml6ZWQgYW5kIG1vZHVsYXIuIEl0IHRlbGxzIG1lIGBkYW1vbl92YWRkcl9vcHNgIGlzIHRoZSBsaWtlbHkgaW50ZXJmYWNlIG9yIGNvcmUgc3RydWN0dXJlIGF0IHBsYXkgaGVyZSwgd2hpY2ggaXMgc3RhbmRhcmQgd2hlbiBpbXBsZW1lbnRpbmcgc3VjaCBhIG1vbml0b3IuIEZyb20gdGhlc2UgbmFtZXMgYWxvbmUsIEkmIzM5O20gZXhwZWN0aW5nIGBfX2RhbW9uX3ZhX2luaXRfcmVnaW9uc2AgdG8gYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgcmVnaW9ucyB0byBtb25pdG9yIGFuZCBgZGFtb25fdmFfdXBkYXRlYCB0byBiZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIG5lY2Vzc2FyeSB1cGRhdGVzIHRvIHRoZSB2YWRkciBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaG93IGl0IG1hbmFnZXMgdGhvc2UgcmVnaW9ucy4gVGhpcyBpcyB3aGF0IEkgd2FzIGV4cGVjdGluZyB0byBzZWU6IGEgd2VsbC1kZWZpbmVkIGludGVyYWN0aW9uIGJldHdlZW4gaW5pdGlhbGl6YXRpb24gYW5kIHRoZSB1cGRhdGUgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3ZhZGRyX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqU2VhcmNoaW5nIGZvciBLZXkgREFNT04gQ29tcG9uZW50cyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVmlydHVhbCBBZGRyZXNzIChWQSkgdXBkYXRlIG1lY2hhbmlzbSB3aXRoaW4gREFNT04gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGxpZmVjeWNsZS4gSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0d28gY3JpdGljYWwgZWxlbWVudHM6IGBkYW1vbl92YV91cGRhdGVgIGFuZCBgX19kYW1vbl92YV9pbml0X3JlZ2lvbnNgLiBJJiMzOTttIGdvaW5nIHRvIGJldCB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIG9yIHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MgSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZC4gVGhlIGZpcnN0IGlzIGFsbW9zdCBjZXJ0YWlubHkgaW52b2x2ZWQgaW4gdHJpZ2dlcmluZyBvciBwcm9jZXNzaW5nIFZBIHVwZGF0ZXMsIHdoaWxlIHRoZSBzZWNvbmQgbGlrZWx5IGluaXRpYWxpemVzIHRoZSByZWdpb25zIHRoYXQgREFNT04gaXMgd2F0Y2hpbmcuIEZpbmRpbmcgdGhlc2Ugd2lsbCBnaXZlIG1lIGEgZm9vdGhvbGQgaW50byB0aGUgZGVlcGVyIHdvcmtpbmdzIG9mIHRoaXMgY29kZS4gVGhpcyB3aWxsIGJlIG15IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl92YV91cGRhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYz0yMTI9c3RhdGljIHZvaWQgZGFtb25fdmFfaW5pdChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0yMjUtICovXG5tbS9kYW1vbi92YWRkci5jOjIyNjpzdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vdmFkZHIuYy0yMjcte1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9OTU4PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy05NjItXHRcdC5pbml0ID0gZGFtb25fdmFfaW5pdCxcbm1tL2RhbW9uL3ZhZGRyLmM6OTYzOlx0XHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxubW0vZGFtb24vdmFkZHIuYy05NjQtXHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEQU1PTiBJbXBsZW1lbnRhdGlvbiBKb3VybmV5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGlzIERBTU9OIGltcGxlbWVudGF0aW9uIGtpY2tzIG9mZi4gVGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3RhcnRzIHdpdGggYSByZWdpc3RyYXRpb24gd2l0aGluIGBkYW1vbl92YV9pbml0Y2FsbGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBpdCBzZWVtcy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBvcGVyYXRpb25zIGFyZSBzcGVjaWZpY2FsbHkgcmVnaXN0ZXJlZCB0byBtb25pdG9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYXMgREFNT04gb3BlcmF0aW9ucy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIEkgc2VlIHRoYXQgdXNlcnNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIGFuZCBjb25maWd1cmUgdGhpcyBEQU1PTiBmdW5jdGlvbmFsaXR5IHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcy4gVGhhdCBnaXZlcyB1cyBmbGV4aWJpbGl0eS4gVG8gZGVsdmUgZGVlcGVyIGludG8gdGhpcyBpbml0aWFsIHNldHVwIGFuZCBjb25maXJtIG15IGh5cG90aGVzaXMgYWJvdXQgYGRhbW9uX3ZhX2luaXRjYWxsYCwgSSYjMzk7bGwgY2hlY2sgYG1tL2RhbW9uL3ZhZGRyLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk1MDpcdFx0XHRyZXR1cm4gZGFtb25fY29sZF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xuIDk1MTpcdFx0ZGVmYXVsdDpcbiA5NTI6XHRcdFx0YnJlYWs7XG4gOTUzOlx0XHR9XG4gOTU0Olx0XG4gOTU1Olx0XHRyZXR1cm4gREFNT1NfTUFYX1NDT1JFO1xuIDk1NjpcdH1cbiA5NTc6XHRcbiA5NTg6XHRzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuIDk1OTpcdHtcbiA5NjA6XHRcdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcyA9IHtcbiA5NjE6XHRcdFx0LmlkID0gREFNT05fT1BTX1ZBRERSLFxuIDk2MjpcdFx0XHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXG4gOTYzOlx0XHRcdC51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsXG4gOTY0Olx0XHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG4gOTY1Olx0XHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxuIDk2NjpcdFx0XHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxuIDk2NzpcdFx0XHQuY2xlYW51cF90YXJnZXQgPSBkYW1vbl92YV9jbGVhbnVwX3RhcmdldCxcbiA5Njg6XHRcdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcbiA5Njk6XHRcdFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl92YV9zY2hlbWVfc2NvcmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IGFuZCBUZXN0YWJpbGl0eSBvZiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBpcyByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgdGVzdGFibGUuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBmcm9tIHRoYXQgZnVuY3Rpb24sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgd29ydGggYSBnb29kIGZ1enppbmcgY2FtcGFpZ24uIEkmIzM5O20gZ29pbmcgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy4KCk15IHByaW1hcnkgZm9jdXMgZm9yIHRlc3Rpbmcgd2lsbCBiZSBvbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBpdHNlbGYsIGFuZCBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCBgZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AsIGBkYW1vbl92YV91cGRhdGVgLCBhbmQgYGRhbW9uX3ZhX2luaXRgLiBUaG9zZSBhcmUgdGhlIGNvcmUgc3ltYm9scyB0aGF0IHRoaXMgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMuCgpCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgcGF0aC4gSSBrbm93IGBEQU1PTmAgYW5kIGBEQU1PTl9WQUREUmAgYXJlIGVzc2VudGlhbC4gQnV0IGFyZSB0aGVyZSBvdGhlcnMsIGxpa2UgYERBTU9OX1NZU0ZTYCwgdGhhdCBtaWdodCBiZSBuZWVkZWQgdG8gZXhwb3NlIHRoaXMgZnVuY3Rpb25hbGl0eSBmcm9tIHVzZXIgc3BhY2U/CgpJJiMzOTtsbCBjaGVjayBgbW0vZGFtb24vc3lzZnMuY2Agb3Igc2ltaWxhciBmaWxlcyBpbiB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgZW50aXJlIGNhbGwgc3RhY2sgZnJvbSB1c2Vyc3BhY2UgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEQU1PTl9PUFNfVkFERFImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTM4ND1zdHJ1Y3QgZGFtb3Nfc3RhdCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQxMy0gKiBcdTAwMjZlbnVtIERBTU9OX09QU19QQUREUiBzdXBwb3J0cyBib3RoIGFub24gcGFnZXMgdHlwZSBhbmQgbWVtY2cgdHlwZSBmaWx0ZXJzLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjQxNDogKiB3aGlsZSBcdTAwMjZlbnVtIERBTU9OX09QU19WQUREUiBhbmQgXHUwMDI2ZW51bSBEQU1PTl9PUFNfRlZBRERSIGRvbiYjMzk7dCBzdXBwb3J0IGFueSBvZlxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQxNS0gKiB0aGUgdHdvIHR5cGVzLlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD01NzI9c3RydWN0IGRhbW9zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjExLSAqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjEyOiAqIEBEQU1PTl9PUFNfVkFERFI6XHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MTMtICogQERBTU9OX09QU19GVkFERFI6XHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIG9ubHkgZml4ZWQgcmFuZ2VzIG9mIHZpcnR1YWxcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NjE4PWVudW0gZGFtb25fb3BzX2lkIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTk6XHREQU1PTl9PUFNfVkFERFIsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjIwLVx0REFNT05fT1BTX0ZWQUREUixcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjMte1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjQ6XHRyZXR1cm4gY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfVkFERFIgfHwgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjUtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTM1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xubW0vZGFtb24vc3lzZnMuYy0xMzU3LVx0e1xubW0vZGFtb24vc3lzZnMuYzoxMzU4Olx0XHQub3BzX2lkID0gREFNT05fT1BTX1ZBRERSLFxubW0vZGFtb24vc3lzZnMuYy0xMzU5LVx0XHQubmFtZSA9IFwmIzM0O3ZhZGRyXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTY1Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNjY4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY29udGV4dHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy5jOjE2Njk6XHRcdGNvbnRleHQgPSBkYW1vbl9zeXNmc19jb250ZXh0X2FsbG9jKERBTU9OX09QU19WQUREUik7XG5tbS9kYW1vbi9zeXNmcy5jLTE2NzAtXHRcdGlmICghY29udGV4dCkge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0zNDI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzQ0LVx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNDU6XHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHMgPSB7LmlkID0gREFNT05fT1BTX1ZBRERSfSwgYmFrO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0Ni1cdGJvb2wgbmVlZF9jbGVhbnVwID0gZmFsc2U7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM1MC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTE6XHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkZJR19EQU1PTl9WQUREUiBpcyBzZXQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTI6XHRpZiAoIWRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKERBTU9OX09QU19WQUREUikpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTM6XHRcdGJhay5pZCA9IERBTU9OX09QU19WQUREUjtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTQtXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2YmFrKSwgMCk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM1Ny1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTg6XHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgZW5zdXJlZCB0byBiZSByZWdpc3RlcmVkICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzU5Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NlbGVjdF9vcHMoYywgREFNT05fT1BTX1ZBRERSKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzYwLVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNjgtXHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNjk6XHRiYWsgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM3MDpcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSAoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzcxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzItXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzczOlx0b3BzLmlkID0gREFNT05fT1BTX1ZBRERSO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3NC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2b3BzKSwgMCk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3Ni1cdG11dGV4X2xvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM3NzpcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzg2LVx0XHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozODc6XHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM4OC1cdFx0XHQoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XG4tLVxubW0vZGFtb24vdmFkZHIuYz05NTg9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcbi0tXG5tbS9kYW1vbi92YWRkci5jLTk2MC1cdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcyA9IHtcbm1tL2RhbW9uL3ZhZGRyLmM6OTYxOlx0XHQuaWQgPSBEQU1PTl9PUFNfVkFERFIsXG5tbS9kYW1vbi92YWRkci5jLTk2Mi1cdFx0LmluaXQgPSBkYW1vbl92YV9pbml0LFxuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy03MC1cdFx0cmV0dXJuIC1FTk9NRU07XG5zYW1wbGVzL2RhbW9uL3ByY2wuYzo3MTpcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1ZBRERSKSkge1xuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNzItXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4tLVxuc2FtcGxlcy9kYW1vbi93c3NlLmM9NjE9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxuLS1cbnNhbXBsZXMvZGFtb24vd3NzZS5jLTcwLVx0XHRyZXR1cm4gLUVOT01FTTtcbnNhbXBsZXMvZGFtb24vd3NzZS5jOjcxOlx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfVkFERFIpKSB7XG5zYW1wbGVzL2RhbW9uL3dzc2UuYy03Mi1cdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwODQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEQU1PTiBDb25maWd1cmF0aW9uIE1ldGhvZHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggREFNT04gZnJvbSB1c2Vyc3BhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyBgREFNT05fU1lTRlNgLCB3aGljaCBpcyB0aGUgb2J2aW91cyBjYW5kaWRhdGUgZm9yIGNvbmZpZ3VyYXRpb24uIEJ1dCwgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgc2hvdWxkIGRvIGEgcXVpY2sgc3dlZXAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXZhaWxhYmxlIGludGVyZmFjZXMuCgpIbW0sIHRoZXJlJiMzOTtzIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX0xSVV9TT1JUYCwgYW5kIGBEQU1PTl9TVEFUYCDigJMgYWxsIHNlZW0gcmVsYXRlZCB0byBEQU1PTiYjMzk7cyBvcGVyYXRpb25zLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSB1c2luZyBgREFNT05fT1BTX1BBRERSYCBvciBgREFNT05fT1BTX1ZBRERSYD8gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBkZXRhaWwgSSBuZWVkIHRvIGFzY2VydGFpbi4KClRvIGdldCBhIGNvbmNyZXRlIGFuc3dlciwgSSBzaG91bGQgZGVsdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbW0vZGFtb24vcmVjbGFpbS5jYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoaWNoIHNldCBvZiBEQU1PTiBvcGVyYXRpb25zIHRoZXNlIG90aGVyIGludGVyZmFjZXMgYXJlIGFjdHVhbGx5IGVtcGxveWluZy4gR3JhYmJpbmcgdGhhdCBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBmdWxsIGxhbmRzY2FwZSBvZiBpbnRlcmFjdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEQU1PTl9PUFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTM4ND1zdHJ1Y3QgZGFtb3Nfc3RhdCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQxMi0gKiBvbiB0aGUgcnVubmluZyBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy5cbmluY2x1ZGUvbGludXgvZGFtb24uaDo0MTM6ICogXHUwMDI2ZW51bSBEQU1PTl9PUFNfUEFERFIgc3VwcG9ydHMgYm90aCBhbm9uIHBhZ2VzIHR5cGUgYW5kIG1lbWNnIHR5cGUgZmlsdGVycyxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0MTQ6ICogd2hpbGUgXHUwMDI2ZW51bSBEQU1PTl9PUFNfVkFERFIgYW5kIFx1MDAyNmVudW0gREFNT05fT1BTX0ZWQUREUiBkb24mIzM5O3Qgc3VwcG9ydCBhbnkgb2ZcbmluY2x1ZGUvbGludXgvZGFtb24uaC00MTUtICogdGhlIHR3byB0eXBlcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NTcyPXN0cnVjdCBkYW1vcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxMS0gKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxMjogKiBAREFNT05fT1BTX1ZBRERSOlx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjEzOiAqIEBEQU1PTl9PUFNfRlZBRERSOlx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE0LSAqXHRcdFx0YWRkcmVzcyBzcGFjZXNcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTU6ICogQERBTU9OX09QU19QQUREUjpcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTY6ICogQE5SX0RBTU9OX09QUzpcdE51bWJlciBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25zXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE3LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oPTYxOD1lbnVtIGRhbW9uX29wc19pZCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjE5Olx0REFNT05fT1BTX1ZBRERSLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYyMDpcdERBTU9OX09QU19GVkFERFIsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjIxOlx0REFNT05fT1BTX1BBRERSLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYyMjpcdE5SX0RBTU9OX09QUyxcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MjMtfTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjMte1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjQ6XHRyZXR1cm4gY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfVkFERFIgfHwgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjUtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMT1zdGF0aWMgREVGSU5FX01VVEVYKGRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYzozMjpzdGF0aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05fT1BTXTtcbm1tL2RhbW9uL2NvcmUuYy0zMy1cbm1tL2RhbW9uL2NvcmUuYz0zND1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRhbW9uX3JlZ2lvbl9jYWNoZSBfX3JvX2FmdGVyX2luaXQ7XG5tbS9kYW1vbi9jb3JlLmMtMzUtXG5tbS9kYW1vbi9jb3JlLmM6MzY6LyogU2hvdWxkIGJlIGNhbGxlZCB1bmRlciBkYW1vbl9vcHNfbG9jayB3aXRoIGlkIHNtYWxsZXIgdGhhbiBOUl9EQU1PTl9PUFMgKi9cbm1tL2RhbW9uL2NvcmUuYy0zNy1zdGF0aWMgYm9vbCBfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz01Mj1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01NS1cbm1tL2RhbW9uL2NvcmUuYzo1NjpcdGlmIChpZCBcdTAwM2U9IE5SX0RBTU9OX09QUylcbm1tL2RhbW9uL2NvcmUuYy01Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03Mz1pbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXG4tLVxubW0vZGFtb24vY29yZS5jLTc2LVxubW0vZGFtb24vY29yZS5jOjc3Olx0aWYgKG9wcy1cdTAwM2VpZCBcdTAwM2U9IE5SX0RBTU9OX09QUylcbm1tL2RhbW9uL2NvcmUuYy03OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMD1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDMtXG5tbS9kYW1vbi9jb3JlLmM6MTA0Olx0aWYgKGlkIFx1MDAzZT0gTlJfREFNT05fT1BTKVxubW0vZGFtb24vY29yZS5jLTEwNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vY29yZS5jPTE1NzM9aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1ODMtXHQvKiBub2RlX2VsaWdpYmxlX21lbV9icCBtZXRyaWMgcmVxdWlyZXMgUEFERFIgb3BzICovXG5tbS9kYW1vbi9jb3JlLmM6MTU4NDpcdGlmIChzcmMtXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xubW0vZGFtb24vY29yZS5jLTE1ODUtXHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzM4LVxubW0vZGFtb24vY29yZS5jOjI3Mzk6XHRpZiAoYy1cdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKVxubW0vZGFtb24vY29yZS5jLTI3NDAtXHRcdHJldHVybiAwO1xuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM9MTc9aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yNi1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6Mjc6XHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19QQUREUikpIHtcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjgtXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYz00NDE9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQ0My1cdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcyA9IHtcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0Olx0XHQuaWQgPSBEQU1PTl9PUFNfUEFERFIsXG5tbS9kYW1vbi9wYWRkci5jLTQ0NS1cdFx0LmluaXQgPSBOVUxMLFxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE3OC1cbm1tL2RhbW9uL3N0YXQuYzoxNzk6XHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19QQUREUikpXG5tbS9kYW1vbi9zdGF0LmMtMTgwLVx0XHRnb3RvIGZyZWVfb3V0O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTM1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xubW0vZGFtb24vc3lzZnMuYy0xMzU3LVx0e1xubW0vZGFtb24vc3lzZnMuYzoxMzU4Olx0XHQub3BzX2lkID0gREFNT05fT1BTX1ZBRERSLFxubW0vZGFtb24vc3lzZnMuYy0xMzU5LVx0XHQubmFtZSA9IFwmIzM0O3ZhZGRyXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTM2MS1cdHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTM2MjpcdFx0Lm9wc19pZCA9IERBTU9OX09QU19GVkFERFIsXG5tbS9kYW1vbi9zeXNmcy5jLTEzNjMtXHRcdC5uYW1lID0gXCYjMzQ7ZnZhZGRyXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTM2NS1cdHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTM2NjpcdFx0Lm9wc19pZCA9IERBTU9OX09QU19QQUREUixcbm1tL2RhbW9uL3N5c2ZzLmMtMTM2Ny1cdFx0Lm5hbWUgPSBcJiMzNDtwYWRkclwmIzM0Oyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE2NTI9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb250ZXh0c19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTY2OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2NvbnRleHRzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMuYzoxNjY5Olx0XHRjb250ZXh0ID0gZGFtb25fc3lzZnNfY29udGV4dF9hbGxvYyhEQU1PTl9PUFNfVkFERFIpO1xubW0vZGFtb24vc3lzZnMuYy0xNjcwLVx0XHRpZiAoIWNvbnRleHQpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE5OTg9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDAzLVx0LyogTXVsdGlwbGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIHRhcmdldHMgbWFrZXMgbm8gc2Vuc2UgKi9cbm1tL2RhbW9uL3N5c2ZzLmM6MjAwNDpcdGlmIChjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19QQUREUiBcdTAwMjZcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjAwNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDQ0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTItXHRjdHgtXHUwMDNlYWRkcl91bml0ID0gc3lzX2N0eC1cdTAwM2VhZGRyX3VuaXQ7XG5tbS9kYW1vbi9zeXNmcy5jOjIwNTM6XHQvKiBhZGRyX3VuaXQgaXMgcmVzcGVjdGVkIGJ5IG9ubHkgREFNT05fT1BTX1BBRERSICovXG5tbS9kYW1vbi9zeXNmcy5jOjIwNTQ6XHRpZiAoc3lzX2N0eC1cdTAwM2VvcHNfaWQgPT0gREFNT05fT1BTX1BBRERSKVxubW0vZGFtb24vc3lzZnMuYy0yMDU1LVx0XHRjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzQyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0NC1cdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzQ1Olx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0gey5pZCA9IERBTU9OX09QU19WQUREUn0sIGJhaztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNDYtXHRib29sIG5lZWRfY2xlYW51cCA9IGZhbHNlO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTAtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUxOlx0LyogREFNT05fT1BTX1ZBRERSIGlzIHJlZ2lzdGVyZWQgb25seSBpZiBDT05GSUdfREFNT05fVkFERFIgaXMgc2V0ICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUyOlx0aWYgKCFkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhEQU1PTl9PUFNfVkFERFIpKSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUzOlx0XHRiYWsuaWQgPSBEQU1PTl9PUFNfVkFERFI7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzU0LVx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fcmVnaXN0ZXJfb3BzKFx1MDAyNmJhayksIDApO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTctXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzU4Olx0LyogREFNT05fT1BTX1ZBRERSIGlzIGVuc3VyZWQgdG8gYmUgcmVnaXN0ZXJlZCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1OTpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZWxlY3Rfb3BzKGMsIERBTU9OX09QU19WQUREUiksIDApO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2MC1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzY0LVx0LyogVW5rbm93biBvcHMgaWQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNjU6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2VsZWN0X29wcyhjLCBOUl9EQU1PTl9PUFMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNjYtXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2OC1cdG11dGV4X2xvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM2OTpcdGJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzcwOlx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzEtXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3Mi1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzM6XHRvcHMuaWQgPSBEQU1PTl9PUFNfVkFERFI7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcdTAwMjZvcHMpLCAwKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc2LVx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Mzc3Olx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IGJhaztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzgtXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zODYtXHRcdG11dGV4X2xvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM4NzpcdFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzg4LVx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTk1OD1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtOTYwLVx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0ge1xubW0vZGFtb24vdmFkZHIuYzo5NjE6XHRcdC5pZCA9IERBTU9OX09QU19WQUREUixcbm1tL2RhbW9uL3ZhZGRyLmMtOTYyLVx0XHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy05NzUtXHQvKiBEb24mIzM5O3Qgc2V0IHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIGZvciB0aGUgZW50aXJlIG1hcHBpbmcgKi9cbm1tL2RhbW9uL3ZhZGRyLmM6OTc2Olx0b3BzX2Z2YWRkci5pZCA9IERBTU9OX09QU19GVkFERFI7XG5tbS9kYW1vbi92YWRkci5jLTk3Ny1cdG9wc19mdmFkZHIuaW5pdCA9IE5VTEw7XG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTA1LVx0XHRnb3RvIGZyZWVfb3V0O1xuc2FtcGxlcy9kYW1vbi9tdGllci5jOjEwNjpcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1BBRERSKSlcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMDctXHRcdGdvdG8gZnJlZV9vdXQ7XG4tLVxuc2FtcGxlcy9kYW1vbi9wcmNsLmM9NjA9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jLTcwLVx0XHRyZXR1cm4gLUVOT01FTTtcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjcxOlx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfVkFERFIpKSB7XG5zYW1wbGVzL2RhbW9uL3ByY2wuYy03Mi1cdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz02MT1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3N0YXJ0KHZvaWQpXG4tLVxuc2FtcGxlcy9kYW1vbi93c3NlLmMtNzAtXHRcdHJldHVybiAtRU5PTUVNO1xuc2FtcGxlcy9kYW1vbi93c3NlLmM6NzE6XHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19WQUREUikpIHtcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTcyLVx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3MAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgVmlydHVhbCBBZGRyZXNzIFNwYWNlIFRyYXZlcnNhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHJlbW92aW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzIGZyb20gdGhlIGBmb3JfZWFjaF92bWFgIGxvb3Agd2l0aGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgY29yZSBjaGFuZ2UgdG8gdGhlIERBTU9OIGxvZ2ljIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCwgY3JpdGljYWxseSwgKmlzKiBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgdGhlIGtleS4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBEQU1PTl9TWVNGU2AgaXMgY29ycmVjdGx5IGVuYWJsZWQgd2l0aGluIGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3MgcHJldHR5IGVzc2VudGlhbCwgYXMgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBhdmVudWUgZm9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbi4gV2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgYWxzbyBhZGQgYERBTU9OX1ZBRERSYCBhbmQgdGhlIGJhc2UgYERBTU9OYCBvcHRpb25zLgoKVGhlIGZvY3VzIHN5bWJvbCBoZXJlIGlzIGRlZmluaXRlbHkgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBhbHRlcmluZyB0aGlzIHNlY3Rpb24sIHJlYWNoYWJsZSB0aHJvdWdoIHN5c2ZzLCBkZW1hbmRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBjb25jdXJyZW5jeS4gUmVtb3ZpbmcgdGhlIFJDVSBsb2NrcyBtZWFucyB3ZSAqYWJzb2x1dGVseSogbmVlZCB0byBmdXp6IHRoaXMgdG8gZW5zdXJlIHdlIGRvbiYjMzk7dCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIFZNQSB0cmF2ZXJzYWwuCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgREFNT05fU1lTRlNgIGlzIHRoZSAqb25seSogZW50cnkgcG9pbnQgZm9yIHRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uLiBJIHJlbWVtYmVyIHRoZXJlJiMzOTtzIHRoZSBgc2FtcGxlcy9kYW1vbi9wcmNsLmNgIGV4YW1wbGUsIGJ1dCB0aGF0JiMzOTtzIGp1c3QgYSBzYW1wbGU7IG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24uIEhtbSwgd2FzIHRoZXJlIGFueXRoaW5nIGVsc2U/IEFoIHllcywgYERBTU9OX0RCR0ZTYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzeXNmcywgc28sIGBEQU1PTl9TWVNGU2AgaXQgaXMhCgpTbywgdGhlIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byBsb29rIGZvciBhcmUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBgREFNT05fU1lTRlNgLgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBhIGBmb3JfZWFjaF92bWFgIGxvb3AgaW4gYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhhdCByZW1vdmluZyB0aGUgUkNVIGxvY2sgZG9lcyBub3QgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlIG9yIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlcyB3aGVuIHRyYXZlcnNpbmcgVk1Bcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIFJDVSBsb2NrIGRvZXMgbm90IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiB0cmF2ZXJzaW5nIFZNQXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1MzoyMS4yMDkyMjkyMjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjQ2MDM5NDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kYW1vbl92YV90aHJlZV9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIFJDVSBsb2NrIGRvZXMgbm90IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiB0cmF2ZXJzaW5nIFZNQXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjUzOjIxLjIwOTIzODU0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMDUyMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDVkM2U1YjdiODdkOWJlNDFjYmM0NWQ0NWMzMTRkN2UxMWIzMmI3OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAxOTo1MzoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IGQyNzE0NzYwMzU2NDFiLi4zNDViODliNWQ0NWY5ZCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXFxuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xcbkBAIC04NCw3ICs4NCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHQgKiBJZiB0aGlzIGlzIHRvbyBzbG93LCBpdCBjYW4gYmUgb3B0aW1pc2VkIHRvIGV4YW1pbmUgdGhlIG1hcGxlXFxuIFxcdCAqIHRyZWUgZ2Fwcy5cXG4gXFx0ICovXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZ2FwO1xcbiBcXG5AQCAtMTA1LDcgKzEwNCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBuZXh0OlxcbiBcXHRcXHRwcmV2ID0gdm1hO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKCFzel9yYW5nZShcXHUwMDI2c2Vjb25kX2dhcCkgfHwgIXN6X3JhbmdlKFxcdTAwMjZmaXJzdF9nYXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6MjEuNzkyNDU3NTQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTg3NzE0NjE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kYW1vbl92YV90aHJlZV9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIFJDVSBsb2NrIGRvZXMgbm90IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiB0cmF2ZXJzaW5nIFZNQXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDVkM2U1YjdiODdkOWJlNDFjYmM0NWQ0NWMzMTRkN2UxMWIzMmI3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDE5OjUzOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGQyNzE0NzYwMzU2NDFiLi4zNDViODliNWQ0NWY5ZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC04NCw3ICs4NCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0ICogSWYgdGhpcyBpcyB0b28gc2xvdywgaXQgY2FuIGJlIG9wdGltaXNlZCB0byBleGFtaW5lIHRoZSBtYXBsZVxuIFx0ICogdHJlZSBnYXBzLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBnYXA7XG4gXG5AQCAtMTA1LDcgKzEwNCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIG5leHQ6XG4gXHRcdHByZXYgPSB2bWE7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghc3pfcmFuZ2UoXHUwMDI2c2Vjb25kX2dhcCkgfHwgIXN6X3JhbmdlKFx1MDAyNmZpcnN0X2dhcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6MjEuNzkyNDkwODk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NTYxNTUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc3BlY2lhbGlzdCBpbiBtZW1vcnkgbWFuYWdlbWVudDpcblxuKipBbmFseXppbmcgYSBEQU1PTiBQYXRjaDogUmVtb3ZhbCBvZiBSQ1UgUHJvdGVjdGlvbioqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgREFNT04gcGF0Y2gsIHNwZWNpZmljYWxseSBvbmUgdGhhdCdzIHRvdWNoZWQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlbW92YWwgb2YgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aXRoaW4gdGhlIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgaW50ZXJlc3RpbmcuIFdoeSBhcmUgd2UgZHJvcHBpbmcgUkNVIHByb3RlY3Rpb24gaGVyZT9cIlxuXG5UaGlzIHJhaXNlcyBzZXZlcmFsIHF1ZXN0aW9ucywgYW5kIEkgbmVlZCB0byBkaXZlIGRlZXBlci4gV2FzIHRoaXMgYW4gb3B0aW1pemF0aW9uPyBBcmUgdGhlcmUgZ3VhcmFudGVlcyBub3cgdGhhdCBtYWtlIFJDVSB1bm5lY2Vzc2FyeT8gSGF2ZSB3ZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBmb3JtIG9mIGxvY2tpbmcgb3IgcHJvdGVjdGlvbj8gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBnZXQgaW4gdGhlcmUgYW5kIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoZSBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIHdpdGhpbiB0aGUgREFNT04gY29udGV4dCBhbmQgaG93IHRoYXQgbG9vcCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBwcm9wZXJseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGNoYW5nZWQgYW5kIHdoeS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTkwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6MjUuNzM4MTEyMTM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0ICogbmVjZXNzYXJ5LlxcbiAgNzE6XFx0ICpcXG4gIDcyOlxcdCAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4gIDczOlxcdCAqL1xcbiAgNzQ6XFx0c3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuICA3NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcXG4gIDc2OlxcdHtcXG4gIDc3OlxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGZpcnN0X2dhcCA9IHswfSwgc2Vjb25kX2dhcCA9IHswfTtcXG4gIDc4OlxcdFxcdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcXG4gIDc5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldiA9IE5VTEw7XFxuICA4MDpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0O1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHQvKlxcbiAgODM6XFx0XFx0ICogRmluZCB0aGUgdHdvIGJpZ2dlc3QgZ2FwcyBzbyB0aGF0IGZpcnN0X2dhcCBcXHUwMDNlIHNlY29uZF9nYXAgXFx1MDAzZSBvdGhlcnMuXFxuICA4NDpcXHRcXHQgKiBJZiB0aGlzIGlzIHRvbyBzbG93LCBpdCBjYW4gYmUgb3B0aW1pc2VkIHRvIGV4YW1pbmUgdGhlIG1hcGxlXFxuICA4NTpcXHRcXHQgKiB0cmVlIGdhcHMuXFxuICA4NjpcXHRcXHQgKi9cXG4gIDg3OlxcdFxcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xcbiAgODg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBnYXA7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdFxcdGlmICghcHJldikge1xcbiAgOTE6XFx0XFx0XFx0XFx0c3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiAgOTI6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiAgOTM6XFx0XFx0XFx0fVxcbiAgOTQ6XFx0XFx0XFx0Z2FwID0gdm1hLVxcdTAwM2V2bV9zdGFydCAtIHByZXYtXFx1MDAzZXZtX2VuZDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0XFx0aWYgKGdhcCBcXHUwMDNlIHN6X3JhbmdlKFxcdTAwMjZmaXJzdF9nYXApKSB7XFxuICA5NzpcXHRcXHRcXHRcXHRzZWNvbmRfZ2FwID0gZmlyc3RfZ2FwO1xcbiAgOTg6XFx0XFx0XFx0XFx0Zmlyc3RfZ2FwLnN0YXJ0ID0gcHJldi1cXHUwMDNldm1fZW5kO1xcbiAgOTk6XFx0XFx0XFx0XFx0Zmlyc3RfZ2FwLmVuZCA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuIDEwMDpcXHRcXHRcXHR9IGVsc2UgaWYgKGdhcCBcXHUwMDNlIHN6X3JhbmdlKFxcdTAwMjZzZWNvbmRfZ2FwKSkge1xcbiAxMDE6XFx0XFx0XFx0XFx0c2Vjb25kX2dhcC5zdGFydCA9IHByZXYtXFx1MDAzZXZtX2VuZDtcXG4gMTAyOlxcdFxcdFxcdFxcdHNlY29uZF9nYXAuZW5kID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gMTAzOlxcdFxcdFxcdH1cXG4gMTA0OlxcdG5leHQ6XFxuIDEwNTpcXHRcXHRcXHRwcmV2ID0gdm1hO1xcbiAxMDY6XFx0XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRpZiAoIXN6X3JhbmdlKFxcdTAwMjZzZWNvbmRfZ2FwKSB8fCAhc3pfcmFuZ2UoXFx1MDAyNmZpcnN0X2dhcCkpXFxuIDEwOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0LyogU29ydCB0aGUgdHdvIGJpZ2dlc3QgZ2FwcyBieSBhZGRyZXNzICovXFxuIDExMjpcXHRcXHRpZiAoZmlyc3RfZ2FwLnN0YXJ0IFxcdTAwM2Ugc2Vjb25kX2dhcC5zdGFydClcXG4gMTEzOlxcdFxcdFxcdHN3YXAoZmlyc3RfZ2FwLCBzZWNvbmRfZ2FwKTtcXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0LyogU3RvcmUgdGhlIHJlc3VsdCAqL1xcbiAxMTY6XFx0XFx0cmVnaW9uc1swXS5zdGFydCA9IEFMSUdOKHN0YXJ0LCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG4gMTE3OlxcdFxcdHJlZ2lvbnNbMF0uZW5kID0gQUxJR04oZmlyc3RfZ2FwLnN0YXJ0LCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG4gMTE4OlxcdFxcdHJlZ2lvbnNbMV0uc3RhcnQgPSBBTElHTihmaXJzdF9nYXAuZW5kLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG4gMTE5OlxcdFxcdHJlZ2lvbnNbMV0uZW5kID0gQUxJR04oc2Vjb25kX2dhcC5zdGFydCwgREFNT05fTUlOX1JFR0lPTl9TWik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjUzOjI1LjczODI5MjgyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjYwNDkwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBGdW5jdGlvbjogRmluZGluZyB0aGUgVGhyZWUgQmlnZ2VzdCBSZWdpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGlzIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGNsZWFyIOKAkyBpdCdzIGRlc2lnbmVkIHRvIGlkZW50aWZ5IHRoZSB0aHJlZSBsYXJnZXN0IHJlZ2lvbnMgd2l0aGluIGEgcHJvY2VzcydzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhIGtleSBjb21wb25lbnQgb2YgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yLiBHaXZlbiBpdHMgcHVycG9zZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIG1lbW9yeSB1c2FnZSBhbmFseXNpcywgcGVyaGFwcyBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIHByb2ZpbGluZy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGFuZCB3aGVyZSBpcyBpdCB1c2VkPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBEQU1PTiBmcmFtZXdvcmsgYW5kIGhvdyBpdCBjb250cmlidXRlcyB0byB0aGUgbW9uaXRvcmluZyBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQgd2hvJ3MgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1MzoyOS40MDQzNDU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDMzNDgwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19kYW1vbl92YV90aHJlZV9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9MTc9c3RhdGljIGludCBfX2xpbmtfdm1hcyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hcyxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMzktLypcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjQwOiAqIFRlc3QgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKCkgZnVuY3Rpb25cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTQxLSAqXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTUwLSAqXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo1MTogKiAnX19kYW1vbl92YV90aHJlZV9yZWdpb25zKCkgcmVjZWl2ZXMgYW4gYWRkcmVzcyBzcGFjZSBvZiBhIHByb2Nlc3MuICBJdFxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNTItICogZmlyc3QgaWRlbnRpZmllcyB0aGUgc3RhcnQgb2YgbWFwcGluZ3MsIGVuZCBvZiBtYXBwaW5ncywgYW5kIHRoZSB0d28gYmlnZ2VzdFxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD02Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3RocmVlX3JlZ2lvbnNfaW5fdm1hcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTgzLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6ODQ6XFx0X19kYW1vbl92YV90aHJlZV9yZWdpb25zKFxcdTAwMjZtbSwgcmVnaW9ucyk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC04NS1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3pfcmFuZ2Uoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnIpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTczLSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmM6NzQ6c3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vZGFtb24vdmFkZHIuYy03NS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTMxPXN0YXRpYyBpbnQgZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0xNDEtXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbm1tL2RhbW9uL3ZhZGRyLmM6MTQyOlxcdHJjID0gX19kYW1vbl92YV90aHJlZV9yZWdpb25zKG1tLCByZWdpb25zKTtcXG5tbS9kYW1vbi92YWRkci5jLTE0My1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6MzMuOTQ3NzA1Mjk2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0MzEzMDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIEl0J3MgY2FsbGVkIGZyb20gYGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLCB3aGljaCBpcyBhbHJlYWR5IGhvbGRpbmcgYW4gYG1tYXBfcmVhZF9sb2NrKG1tKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBwcm9iYWJseSBoYWQgYSByZWR1bmRhbnQgb3IgbWlzcGxhY2VkIGByY3VfcmVhZF9sb2NrKClgLiBUaGUgYGZvcl9lYWNoX3ZtYWAgbWFjcm8gdXRpbGl6ZXMgdGhlIG1hcGxlIHRyZWUsIHdoaWNoICpjYW4qIHJlcXVpcmUgYW4gUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5LCBidXQgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBgbW1hcF9yZWFkX2xvY2tgLCBpdCBzaG91bGQgYmUgdW5uZWNlc3NhcnkuXG5cbkkgaGFkIGEgbW9tZW50IG9mIGRvdWJ0IHRoZXJlOyBJIGhhZCB0byBjb25zaWRlciBpZiBgZm9yX2VhY2hfdm1hYCB3YXMgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHZtYV9uZXh0YCB3aGljaCBtaWdodCAqc3RpbGwqIG5lZWQgUkNVIGlmIHdlIHdlcmVuJ3QgaG9sZGluZyB0aGUgYG1tYXBgIGxvY2suIEJ1dCBhIHF1aWNrIGNoZWNrIHJldmVhbGVkIGBmb3JfZWFjaF92bWFgIHVzZXMgYG1hc19maW5kYCB3aGljaCAqZG9lc24ndCogcmVxdWlyZSBpdCB3aGVuIHRoZSBtbWFwIGxvY2sgaXMgaGVsZC5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgaWYgYGZvcl9lYWNoX3ZtYWAgbWlnaHQgcG90ZW50aWFsbHkgc2xlZXAsIGJ1dCB0aGVuIHJlbWVtYmVyZWQgdGhhdCBgcmN1X3JlYWRfbG9ja2AgZGlzYWJsZXMgcHJlZW1wdGlvbi4gSWYgdGhlcmUncyBzb21ldGhpbmcgKmluKiBgZm9yX2VhY2hfdm1hYCB0aGF0IGNvdWxkIHNsZWVwIHdoZW4gaG9sZGluZyB0aGlzIGxvY2ssIGl0IHdvdWxkIGJlIGEgYnVnLlxuXG5SaWdodCwgdGhlIHBhdGNoIGlzIHJlbW92aW5nIGJvdGggdGhlIGByY3VfcmVhZF9sb2NrKClgIGFuZCB0aGUgYHJjdV9yZWFkX3VubG9jaygpYC4gU28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0J3MgYWN0aXZlbHkgKnJlbW92aW5nKiB0aGUgUkNVIHJlYWQgbG9jay5cblxuR2l2ZW4gdGhpcyBpcyBhIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIERBTU9OLCB0aGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gSXQncyBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgY2hhbmdlLCBnaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1vbml0b3JpbmcgYXNwZWN0cy5cblxuTm93LCBsZXQncyBnbyBmaW5kIHRoZSByZWxldmFudCBEQU1PTiBjb25maWd1cmF0aW9uIG9wdGlvbnMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5OSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1MzozOS42OTA4NDAwODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkwOTMyNTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1Mzo0My42MDAxNzUzMDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcwNTE4MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBoYXZpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIERBTU9OJ3MgVmlydHVhbCBBZGRyZXNzIEhhbmRsaW5nKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoZSBEQU1PTiAoRHluYW1pYyBBZGRyZXNzIE1PTml0b3IpIGNvZGUsIHNwZWNpZmljYWxseSwgYG1tL2RhbW9uL3ZhZGRyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCdzIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgZW5hYmxlcyB0aGlzIHNwZWNpZmljIHBpZWNlP1wiIEkga25vdyBJIGNhbid0IGp1c3QgYXNzdW1lIGFueXRoaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGtlcm5lbCwgc28gdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgS2NvbmZpZyBvcHRpb25zLCBvciBvdGhlciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zLCBhcmUgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiBgdmFkZHIuY2AuIFNvLCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBhYm91dCB3aGV0aGVyIHRoaXMgY29tcG9uZW50IGlzIGNvbXBpbGVkIGJhc2VkIG9uIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IHRoYXQncyB0aWVkIGludG8gdGhlIG92ZXJhbGwgREFNT04gYnVpbGQuIEkgbmVlZCB0aGF0IGNvbnRleHQgYmVmb3JlIEkgY2FuIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBpdHNlbGYuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjUzOjQ3LjI3MDY5NzI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6NDcuMjcwODIyMjUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzI3OTc0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gdGhlIGBDT05GSUdfREFNT05fVkFERFJgIHNldHRpbmcgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZS4gTXkgbmV4dCB0aG91Z2h0IGlzLCBkb2VzIGBDT05GSUdfREFNT05gIGFsc28gbmVlZCB0byBiZSBlbmFibGVkIGZvciBgQ09ORklHX0RBTU9OX1ZBRERSYCB0byBiZSByZWxldmFudD8gU2VlbXMgbG9naWNhbCwgYnV0IGxldCdzIGp1c3QgY29uZmlybSBpdC4gWWVwLCB0aGUgZGVwZW5kZW5jeSBpcyByaWdodCB0aGVyZSBpbiB0aGUga2NvbmZpZyBmaWxlLCBgREFNT05fVkFERFJgIGRlcGVuZHMgb24gYERBTU9OYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSB0byBzZWUgdGhlIGV4cGxpY2l0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjUzOjUwLjY0MzYyMzgyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1Mzo1MC42NDM3NTgwNTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5OTc3NTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYERBTU9OYCBhbmQgYERBTU9OX1ZBRERSYC4gVGhvc2UgYXJlIGNsZWFybHkgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgRHluYW1pYyBBZGRyZXNzIE1vbml0b3JpbmcsIG9yIERBTU9OLiBUaGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXMgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2U/IEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGlzLiBUbyB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aG8gY2FsbHMgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIEFscmlnaHQsIGl0J3MgY2FsbGVkIGJ5IGBkYW1vbl92YV90aHJlZV9yZWdpb25zYC4gVGhhdCdzIG5vdCB1bmV4cGVjdGVkLCBidXQgZ29vZCB0byBjb25maXJtLiBOb3cgSSBjYW4gc3RhcnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1Mzo1Ny4wNDM1MzcyNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDUxMjc5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdmFfdGhyZWVfcmVnaW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTE3PXN0YXRpYyBpbnQgX19saW5rX3ZtYXMoc3RydWN0IG1hcGxlX3RyZWUgKm10LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYXMsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTM5LS8qXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo0MDogKiBUZXN0IF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucygpIGZ1bmN0aW9uXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC00MS0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC01MC0gKlxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NTE6ICogJ19fZGFtb25fdmFfdGhyZWVfcmVnaW9ucygpIHJlY2VpdmVzIGFuIGFkZHJlc3Mgc3BhY2Ugb2YgYSBwcm9jZXNzLiAgSXRcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTUyLSAqIGZpcnN0IGlkZW50aWZpZXMgdGhlIHN0YXJ0IG9mIG1hcHBpbmdzLCBlbmQgb2YgbWFwcGluZ3MsIGFuZCB0aGUgdHdvIGJpZ2dlc3RcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9NjY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF90aHJlZV9yZWdpb25zX2luX3ZtYXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC04My1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjg0OlxcdF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhcXHUwMDI2bW0sIHJlZ2lvbnMpO1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtODUtXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTU2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHN6X3JhbmdlKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03My0gKi9cXG5tbS9kYW1vbi92YWRkci5jOjc0OnN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIHJlZ2lvbnNbM10pXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTEzMC0gKi9cXG5tbS9kYW1vbi92YWRkci5jOjEzMTpzdGF0aWMgaW50IGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi92YWRkci5jLTEzMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSByZWdpb25zWzNdKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0xNDEtXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbm1tL2RhbW9uL3ZhZGRyLmM6MTQyOlxcdHJjID0gX19kYW1vbl92YV90aHJlZV9yZWdpb25zKG1tLCByZWdpb25zKTtcXG5tbS9kYW1vbi92YWRkci5jLTE0My1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTkxPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTk3LVxcbm1tL2RhbW9uL3ZhZGRyLmM6MTk4OlxcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKSB7XFxubW0vZGFtb24vdmFkZHIuYy0xOTktXFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjI2PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIzMS1cXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxubW0vZGFtb24vdmFkZHIuYzoyMzI6XFx0XFx0aWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucykpXFxubW0vZGFtb24vdmFkZHIuYy0yMzMtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjU0OjAxLjY4ODY3NDUwNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk5MTU4MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIERBTU9OIE9wZXJhdGlvbjogQSBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgVmFyaWFibGUgQWRkcmVzcy1iYXNlZCBNZW1vcnkgTW9uaXRvciAoREFNT04pIGlzIHdvcmtpbmcgYXQgYSBsb3cgbGV2ZWwsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nLiBJIHNlZSB0aGF0IHR3byBrZXkgZnVuY3Rpb25zLCBgX19kYW1vbl92YV9pbml0X3JlZ2lvbnNgIGFuZCBgZGFtb25fdmFfdXBkYXRlYCwgYXJlIHBpdm90YWwgaGVyZS4gVGhleSdyZSBjbGVhcmx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlcyB3aXRoaW4gREFNT04ncyB2YWRkciBvcGVyYXRpb25zIGZyYW1ld29yay4gVGhhdCdzIGdvb2QsIHNlZWluZyB0aG9zZSB0d28gZnVuY3Rpb25zIGJlaW5nIGV4cGxpY2l0bHkgbmFtZWQgaW5kaWNhdGVzIHRvIG1lIHRoYXQgREFNT04gaXMga2VlcGluZyBpdHMgdmlydHVhbCBhZGRyZXNzIHRyYWNraW5nIHdlbGwtb3JnYW5pemVkIGFuZCBtb2R1bGFyLiBJdCB0ZWxscyBtZSBgZGFtb25fdmFkZHJfb3BzYCBpcyB0aGUgbGlrZWx5IGludGVyZmFjZSBvciBjb3JlIHN0cnVjdHVyZSBhdCBwbGF5IGhlcmUsIHdoaWNoIGlzIHN0YW5kYXJkIHdoZW4gaW1wbGVtZW50aW5nIHN1Y2ggYSBtb25pdG9yLiBGcm9tIHRoZXNlIG5hbWVzIGFsb25lLCBJJ20gZXhwZWN0aW5nIGBfX2RhbW9uX3ZhX2luaXRfcmVnaW9uc2AgdG8gYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgcmVnaW9ucyB0byBtb25pdG9yIGFuZCBgZGFtb25fdmFfdXBkYXRlYCB0byBiZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIG5lY2Vzc2FyeSB1cGRhdGVzIHRvIHRoZSB2YWRkciBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSBob3cgaXQgbWFuYWdlcyB0aG9zZSByZWdpb25zLiBUaGlzIGlzIHdoYXQgSSB3YXMgZXhwZWN0aW5nIHRvIHNlZTogYSB3ZWxsLWRlZmluZWQgaW50ZXJhY3Rpb24gYmV0d2VlbiBpbml0aWFsaXphdGlvbiBhbmQgdGhlIHVwZGF0ZSBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1NDowNS40ODc4MzY1MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTU4MjQ3ODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3ZhZGRyX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTQ6MDkuOTQzNjc0MDU3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MjM0MDM0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTZWFyY2hpbmcgZm9yIEtleSBEQU1PTiBDb21wb25lbnRzKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFZpcnR1YWwgQWRkcmVzcyAoVkEpIHVwZGF0ZSBtZWNoYW5pc20gd2l0aGluIERBTU9OIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBsaWZlY3ljbGUuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0d28gY3JpdGljYWwgZWxlbWVudHM6IGBkYW1vbl92YV91cGRhdGVgIGFuZCBgX19kYW1vbl92YV9pbml0X3JlZ2lvbnNgLiBJJ20gZ29pbmcgdG8gYmV0IHRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgb3Igc3ltYm9scyBpbnZvbHZlZCBpbiB0aGUgcHJvY2VzcyBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQuIFRoZSBmaXJzdCBpcyBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVkIGluIHRyaWdnZXJpbmcgb3IgcHJvY2Vzc2luZyBWQSB1cGRhdGVzLCB3aGlsZSB0aGUgc2Vjb25kIGxpa2VseSBpbml0aWFsaXplcyB0aGUgcmVnaW9ucyB0aGF0IERBTU9OIGlzIHdhdGNoaW5nLiBGaW5kaW5nIHRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGZvb3Rob2xkIGludG8gdGhlIGRlZXBlciB3b3JraW5ncyBvZiB0aGlzIGNvZGUuIFRoaXMgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjU0OjE3LjU2NzA3OTk4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3NTE1OTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl92YV91cGRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vdmFkZHIuYz0yMTI9c3RhdGljIHZvaWQgZGFtb25fdmFfaW5pdChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIyNS0gKi9cXG5tbS9kYW1vbi92YWRkci5jOjIyNjpzdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjI3LXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9OTU4PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTk2Mi1cXHRcXHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXFxubW0vZGFtb24vdmFkZHIuYzo5NjM6XFx0XFx0LnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSxcXG5tbS9kYW1vbi92YWRkci5jLTk2NC1cXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1NDoyMS4xNDIyNDY4NDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyMjA3NTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PTiBJbXBsZW1lbnRhdGlvbiBKb3VybmV5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgdGhpcyBEQU1PTiBpbXBsZW1lbnRhdGlvbiBraWNrcyBvZmYuIFRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHN0YXJ0cyB3aXRoIGEgcmVnaXN0cmF0aW9uIHdpdGhpbiBgZGFtb25fdmFfaW5pdGNhbGxgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCBpdCBzZWVtcy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBvcGVyYXRpb25zIGFyZSBzcGVjaWZpY2FsbHkgcmVnaXN0ZXJlZCB0byBtb25pdG9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYXMgREFNT04gb3BlcmF0aW9ucy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIEkgc2VlIHRoYXQgdXNlcnNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIGFuZCBjb25maWd1cmUgdGhpcyBEQU1PTiBmdW5jdGlvbmFsaXR5IHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcy4gVGhhdCBnaXZlcyB1cyBmbGV4aWJpbGl0eS4gVG8gZGVsdmUgZGVlcGVyIGludG8gdGhpcyBpbml0aWFsIHNldHVwIGFuZCBjb25maXJtIG15IGh5cG90aGVzaXMgYWJvdXQgYGRhbW9uX3ZhX2luaXRjYWxsYCwgSSdsbCBjaGVjayBgbW0vZGFtb24vdmFkZHIuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1NDoyNi4xNjQzMjk1ODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9jb2xkX3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XFxuIDk1MTpcXHRcXHRkZWZhdWx0OlxcbiA5NTI6XFx0XFx0XFx0YnJlYWs7XFxuIDk1MzpcXHRcXHR9XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdHJldHVybiBEQU1PU19NQVhfU0NPUkU7XFxuIDk1NjpcXHR9XFxuIDk1NzpcXHRcXG4gOTU4OlxcdHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuIDk1OTpcXHR7XFxuIDk2MDpcXHRcXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHMgPSB7XFxuIDk2MTpcXHRcXHRcXHQuaWQgPSBEQU1PTl9PUFNfVkFERFIsXFxuIDk2MjpcXHRcXHRcXHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXFxuIDk2MzpcXHRcXHRcXHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxcbiA5NjQ6XFx0XFx0XFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcXG4gOTY1OlxcdFxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxcbiA5NjY6XFx0XFx0XFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcXG4gOTY3OlxcdFxcdFxcdC5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LFxcbiA5Njg6XFx0XFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcXG4gOTY5OlxcdFxcdFxcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fdmFfc2NoZW1lX3Njb3JlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1NDoyNi4xNjQ0OTc4MzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMDk1NzYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFjY2Vzc2liaWxpdHkgYW5kIFRlc3RhYmlsaXR5IG9mIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBpcyByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgdGVzdGFibGUuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBmcm9tIHRoYXQgZnVuY3Rpb24sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQncyB3b3J0aCBhIGdvb2QgZnV6emluZyBjYW1wYWlnbi4gSSdtIGdvaW5nIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMuXG5cbk15IHByaW1hcnkgZm9jdXMgZm9yIHRlc3Rpbmcgd2lsbCBiZSBvbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBpdHNlbGYsIGFuZCBJJ2xsIGFsc28gd2FudCB0byBsb29rIGF0IGBkYW1vbl92YV90aHJlZV9yZWdpb25zYCwgYGRhbW9uX3ZhX3VwZGF0ZWAsIGFuZCBgZGFtb25fdmFfaW5pdGAuIFRob3NlIGFyZSB0aGUgY29yZSBzeW1ib2xzIHRoYXQgdGhpcyBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cy5cblxuQmV5b25kIHRoYXQsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBjb2RlIHBhdGguIEkga25vdyBgREFNT05gIGFuZCBgREFNT05fVkFERFJgIGFyZSBlc3NlbnRpYWwuIEJ1dCBhcmUgdGhlcmUgb3RoZXJzLCBsaWtlIGBEQU1PTl9TWVNGU2AsIHRoYXQgbWlnaHQgYmUgbmVlZGVkIHRvIGV4cG9zZSB0aGlzIGZ1bmN0aW9uYWxpdHkgZnJvbSB1c2VyIHNwYWNlP1xuXG5JJ2xsIGNoZWNrIGBtbS9kYW1vbi9zeXNmcy5jYCBvciBzaW1pbGFyIGZpbGVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0gdG8gYmUgc3VyZS4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIGVudGlyZSBjYWxsIHN0YWNrIGZyb20gdXNlcnNwYWNlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjU0OjMwLjc5NTQ1ODcyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5NzY4MjQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTl9PUFNfVkFERFJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTM4ND1zdHJ1Y3QgZGFtb3Nfc3RhdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDEzLSAqIFxcdTAwMjZlbnVtIERBTU9OX09QU19QQUREUiBzdXBwb3J0cyBib3RoIGFub24gcGFnZXMgdHlwZSBhbmQgbWVtY2cgdHlwZSBmaWx0ZXJzLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0MTQ6ICogd2hpbGUgXFx1MDAyNmVudW0gREFNT05fT1BTX1ZBRERSIGFuZCBcXHUwMDI2ZW51bSBEQU1PTl9PUFNfRlZBRERSIGRvbid0IHN1cHBvcnQgYW55IG9mXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQxNS0gKiB0aGUgdHdvIHR5cGVzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTU3Mj1zdHJ1Y3QgZGFtb3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxMS0gKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTI6ICogQERBTU9OX09QU19WQUREUjpcXHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjEzLSAqIEBEQU1PTl9PUFNfRlZBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3Igb25seSBmaXhlZCByYW5nZXMgb2YgdmlydHVhbFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTYxOD1lbnVtIGRhbW9uX29wc19pZCB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxOTpcXHREQU1PTl9PUFNfVkFERFIsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYyMC1cXHREQU1PTl9PUFNfRlZBRERSLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2My17XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjQ6XFx0cmV0dXJuIGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXFx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTM1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTM1Ny1cXHR7XFxubW0vZGFtb24vc3lzZnMuYzoxMzU4OlxcdFxcdC5vcHNfaWQgPSBEQU1PTl9PUFNfVkFERFIsXFxubW0vZGFtb24vc3lzZnMuYy0xMzU5LVxcdFxcdC5uYW1lID0gXFxcInZhZGRyXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTY1Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE2NjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2NvbnRleHRzOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy5jOjE2Njk6XFx0XFx0Y29udGV4dCA9IGRhbW9uX3N5c2ZzX2NvbnRleHRfYWxsb2MoREFNT05fT1BTX1ZBRERSKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NzAtXFx0XFx0aWYgKCFjb250ZXh0KSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzQyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzQ0LVxcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM0NTpcXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHMgPSB7LmlkID0gREFNT05fT1BTX1ZBRERSfSwgYmFrO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNDYtXFx0Ym9vbCBuZWVkX2NsZWFudXAgPSBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTAtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1MTpcXHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkZJR19EQU1PTl9WQUREUiBpcyBzZXQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUyOlxcdGlmICghZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoREFNT05fT1BTX1ZBRERSKSkge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTM6XFx0XFx0YmFrLmlkID0gREFNT05fT1BTX1ZBRERSO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTQtXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcXHUwMDI2YmFrKSwgMCk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzU3LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTg6XFx0LyogREFNT05fT1BTX1ZBRERSIGlzIGVuc3VyZWQgdG8gYmUgcmVnaXN0ZXJlZCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTk6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NlbGVjdF9vcHMoYywgREFNT05fT1BTX1ZBRERSKSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2MC1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNjgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNjk6XFx0YmFrID0gZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzcwOlxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSAoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3MS1cXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzcyLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzM6XFx0b3BzLmlkID0gREFNT05fT1BTX1ZBRERSO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzQtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcXHUwMDI2b3BzKSwgMCk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc2LVxcdG11dGV4X2xvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Mzc3OlxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3OC1cXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zODYtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozODc6XFx0XFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM4OC1cXHRcXHRcXHQoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTk1OD1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy05NjAtXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0ge1xcbm1tL2RhbW9uL3ZhZGRyLmM6OTYxOlxcdFxcdC5pZCA9IERBTU9OX09QU19WQUREUixcXG5tbS9kYW1vbi92YWRkci5jLTk2Mi1cXHRcXHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz02MD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy03MC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzo3MTpcXHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19WQUREUikpIHtcXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy03Mi1cXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbi0tXFxuc2FtcGxlcy9kYW1vbi93c3NlLmM9NjE9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi93c3NlLmMtNzAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuc2FtcGxlcy9kYW1vbi93c3NlLmM6NzE6XFx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfVkFERFIpKSB7XFxuc2FtcGxlcy9kYW1vbi93c3NlLmMtNzItXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTQ6MzMuNzkzMTUwMjU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDA3NDI5MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgREFNT04gQ29uZmlndXJhdGlvbiBNZXRob2RzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggREFNT04gZnJvbSB1c2Vyc3BhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyBgREFNT05fU1lTRlNgLCB3aGljaCBpcyB0aGUgb2J2aW91cyBjYW5kaWRhdGUgZm9yIGNvbmZpZ3VyYXRpb24uIEJ1dCwgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgc2hvdWxkIGRvIGEgcXVpY2sgc3dlZXAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXZhaWxhYmxlIGludGVyZmFjZXMuXG5cbkhtbSwgdGhlcmUncyBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fU1RBVGAg4oCTIGFsbCBzZWVtIHJlbGF0ZWQgdG8gREFNT04ncyBvcGVyYXRpb25zLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSB1c2luZyBgREFNT05fT1BTX1BBRERSYCBvciBgREFNT05fT1BTX1ZBRERSYD8gVGhhdCdzIHRoZSBjcnVjaWFsIGRldGFpbCBJIG5lZWQgdG8gYXNjZXJ0YWluLlxuXG5UbyBnZXQgYSBjb25jcmV0ZSBhbnN3ZXIsIEkgc2hvdWxkIGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL2RhbW9uL3JlY2xhaW0uY2AuIFRoYXQgc2hvdWxkIHJldmVhbCB3aGljaCBzZXQgb2YgREFNT04gb3BlcmF0aW9ucyB0aGVzZSBvdGhlciBpbnRlcmZhY2VzIGFyZSBhY3R1YWxseSBlbXBsb3lpbmcuIEdyYWJiaW5nIHRoYXQgaW5mb3JtYXRpb24gd2lsbCBoZWxwIGRldGVybWluZSB0aGUgZnVsbCBsYW5kc2NhcGUgb2YgaW50ZXJhY3Rpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTQ6NDMuODAwNTgzMjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU0OTg5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRBTU9OX09QU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mzg0PXN0cnVjdCBkYW1vc19zdGF0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC00MTItICogb24gdGhlIHJ1bm5pbmcgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0MTM6ICogXFx1MDAyNmVudW0gREFNT05fT1BTX1BBRERSIHN1cHBvcnRzIGJvdGggYW5vbiBwYWdlcyB0eXBlIGFuZCBtZW1jZyB0eXBlIGZpbHRlcnMsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjQxNDogKiB3aGlsZSBcXHUwMDI2ZW51bSBEQU1PTl9PUFNfVkFERFIgYW5kIFxcdTAwMjZlbnVtIERBTU9OX09QU19GVkFERFIgZG9uJ3Qgc3VwcG9ydCBhbnkgb2ZcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDE1LSAqIHRoZSB0d28gdHlwZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NTcyPXN0cnVjdCBkYW1vcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjExLSAqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxMjogKiBAREFNT05fT1BTX1ZBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTM6ICogQERBTU9OX09QU19GVkFERFI6XFx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxNC0gKlxcdFxcdFxcdGFkZHJlc3Mgc3BhY2VzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxNTogKiBAREFNT05fT1BTX1BBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjE2OiAqIEBOUl9EQU1PTl9PUFM6XFx0TnVtYmVyIG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBpbXBsZW1lbnRhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE3LSAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaD02MTg9ZW51bSBkYW1vbl9vcHNfaWQge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTk6XFx0REFNT05fT1BTX1ZBRERSLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MjA6XFx0REFNT05fT1BTX0ZWQUREUixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjIxOlxcdERBTU9OX09QU19QQUREUixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjIyOlxcdE5SX0RBTU9OX09QUyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjIzLX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDYzLXtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA2NDpcXHRyZXR1cm4gY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjUtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxPXN0YXRpYyBERUZJTkVfTVVURVgoZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYzozMjpzdGF0aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05fT1BTXTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMtXFxubW0vZGFtb24vY29yZS5jPTM0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGFtb25fcmVnaW9uX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9kYW1vbi9jb3JlLmMtMzUtXFxubW0vZGFtb24vY29yZS5jOjM2Oi8qIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgZGFtb25fb3BzX2xvY2sgd2l0aCBpZCBzbWFsbGVyIHRoYW4gTlJfREFNT05fT1BTICovXFxubW0vZGFtb24vY29yZS5jLTM3LXN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NTI9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01NS1cXG5tbS9kYW1vbi9jb3JlLmM6NTY6XFx0aWYgKGlkIFxcdTAwM2U9IE5SX0RBTU9OX09QUylcXG5tbS9kYW1vbi9jb3JlLmMtNTctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTczPWludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03Ni1cXG5tbS9kYW1vbi9jb3JlLmM6Nzc6XFx0aWYgKG9wcy1cXHUwMDNlaWQgXFx1MDAzZT0gTlJfREFNT05fT1BTKVxcbm1tL2RhbW9uL2NvcmUuYy03OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDA9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDMtXFxubW0vZGFtb24vY29yZS5jOjEwNDpcXHRpZiAoaWQgXFx1MDAzZT0gTlJfREFNT05fT1BTKVxcbm1tL2RhbW9uL2NvcmUuYy0xMDUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU3Mz1pbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTgzLVxcdC8qIG5vZGVfZWxpZ2libGVfbWVtX2JwIG1ldHJpYyByZXF1aXJlcyBQQUREUiBvcHMgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTU4NDpcXHRpZiAoc3JjLVxcdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKSB7XFxubW0vZGFtb24vY29yZS5jLTE1ODUtXFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjczMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzM4LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzM5OlxcdGlmIChjLVxcdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzQwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYz0xNz1pbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjYtXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYzoyNzpcXHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19QQUREUikpIHtcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTI4LVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTQ0MT1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NDMtXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0ge1xcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0OlxcdFxcdC5pZCA9IERBTU9OX09QU19QQUREUixcXG5tbS9kYW1vbi9wYWRkci5jLTQ0NS1cXHRcXHQuaW5pdCA9IE5VTEwsXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MTUxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zdGF0X2J1aWxkX2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE3OC1cXG5tbS9kYW1vbi9zdGF0LmM6MTc5OlxcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1BBRERSKSlcXG5tbS9kYW1vbi9zdGF0LmMtMTgwLVxcdFxcdGdvdG8gZnJlZV9vdXQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEzNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEzNTctXFx0e1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTM1ODpcXHRcXHQub3BzX2lkID0gREFNT05fT1BTX1ZBRERSLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTM1OS1cXHRcXHQubmFtZSA9IFxcXCJ2YWRkclxcXCIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEzNjEtXFx0e1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTM2MjpcXHRcXHQub3BzX2lkID0gREFNT05fT1BTX0ZWQUREUixcXG5tbS9kYW1vbi9zeXNmcy5jLTEzNjMtXFx0XFx0Lm5hbWUgPSBcXFwiZnZhZGRyXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTM2NS1cXHR7XFxubW0vZGFtb24vc3lzZnMuYzoxMzY2OlxcdFxcdC5vcHNfaWQgPSBEQU1PTl9PUFNfUEFERFIsXFxubW0vZGFtb24vc3lzZnMuYy0xMzY3LVxcdFxcdC5uYW1lID0gXFxcInBhZGRyXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTY1Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE2NjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2NvbnRleHRzOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy5jOjE2Njk6XFx0XFx0Y29udGV4dCA9IGRhbW9uX3N5c2ZzX2NvbnRleHRfYWxsb2MoREFNT05fT1BTX1ZBRERSKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NzAtXFx0XFx0aWYgKCFjb250ZXh0KSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE5OTg9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMDMtXFx0LyogTXVsdGlwbGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIHRhcmdldHMgbWFrZXMgbm8gc2Vuc2UgKi9cXG5tbS9kYW1vbi9zeXNmcy5jOjIwMDQ6XFx0aWYgKGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19QQUREUiBcXHUwMDI2XFx1MDAyNiBzeXNmc190YXJnZXRzLVxcdTAwM2VuciBcXHUwMDNlIDEpXFxubW0vZGFtb24vc3lzZnMuYy0yMDA1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDQ0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1Mi1cXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCA9IHN5c19jdHgtXFx1MDAzZWFkZHJfdW5pdDtcXG5tbS9kYW1vbi9zeXNmcy5jOjIwNTM6XFx0LyogYWRkcl91bml0IGlzIHJlc3BlY3RlZCBieSBvbmx5IERBTU9OX09QU19QQUREUiAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjA1NDpcXHRpZiAoc3lzX2N0eC1cXHUwMDNlb3BzX2lkID09IERBTU9OX09QU19QQUREUilcXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTUtXFx0XFx0Y3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gbWF4KFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTM0Mj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0NC1cXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNDU6XFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0gey5pZCA9IERBTU9OX09QU19WQUREUn0sIGJhaztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzQ2LVxcdGJvb2wgbmVlZF9jbGVhbnVwID0gZmFsc2U7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzUwLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTE6XFx0LyogREFNT05fT1BTX1ZBRERSIGlzIHJlZ2lzdGVyZWQgb25seSBpZiBDT05GSUdfREFNT05fVkFERFIgaXMgc2V0ICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1MjpcXHRpZiAoIWRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKERBTU9OX09QU19WQUREUikpIHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUzOlxcdFxcdGJhay5pZCA9IERBTU9OX09QU19WQUREUjtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzU0LVxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXFx1MDAyNmJhayksIDApO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM1Ny1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzU4OlxcdC8qIERBTU9OX09QU19WQUREUiBpcyBlbnN1cmVkIHRvIGJlIHJlZ2lzdGVyZWQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzU5OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZWxlY3Rfb3BzKGMsIERBTU9OX09QU19WQUREUiksIDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNjAtXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzY0LVxcdC8qIFVua25vd24gb3BzIGlkIGNhbm5vdCBiZSByZWdpc3RlcmVkICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM2NTpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2VsZWN0X29wcyhjLCBOUl9EQU1PTl9PUFMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzY2LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2OC1cXHRtdXRleF9sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM2OTpcXHRiYWsgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzA6XFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzcxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzItXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM3MzpcXHRvcHMuaWQgPSBEQU1PTl9PUFNfVkFERFI7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3NC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fcmVnaXN0ZXJfb3BzKFxcdTAwMjZvcHMpLCAwKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzc6XFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IGJhaztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc4LVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM4Ni1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM4NzpcXHRcXHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzg4LVxcdFxcdFxcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9OTU4PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTk2MC1cXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHMgPSB7XFxubW0vZGFtb24vdmFkZHIuYzo5NjE6XFx0XFx0LmlkID0gREFNT05fT1BTX1ZBRERSLFxcbm1tL2RhbW9uL3ZhZGRyLmMtOTYyLVxcdFxcdC5pbml0ID0gZGFtb25fdmFfaW5pdCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtOTc1LVxcdC8qIERvbid0IHNldCB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBmb3IgdGhlIGVudGlyZSBtYXBwaW5nICovXFxubW0vZGFtb24vdmFkZHIuYzo5NzY6XFx0b3BzX2Z2YWRkci5pZCA9IERBTU9OX09QU19GVkFERFI7XFxubW0vZGFtb24vdmFkZHIuYy05NzctXFx0b3BzX2Z2YWRkci5pbml0ID0gTlVMTDtcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYz03Mz1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTA1LVxcdFxcdGdvdG8gZnJlZV9vdXQ7XFxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjEwNjpcXHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19QQUREUikpXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwNy1cXHRcXHRnb3RvIGZyZWVfb3V0O1xcbi0tXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmM9NjA9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNzAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuc2FtcGxlcy9kYW1vbi9wcmNsLmM6NzE6XFx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfVkFERFIpKSB7XFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNzItXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4tLVxcbnNhbXBsZXMvZGFtb24vd3NzZS5jPTYxPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcXG4tLVxcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTcwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbnNhbXBsZXMvZGFtb24vd3NzZS5jOjcxOlxcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1ZBRERSKSkge1xcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTcyLVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjU0OjQ2LjM1NTU3OTU5N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTY5Nzg4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIFZpcnR1YWwgQWRkcmVzcyBTcGFjZSBUcmF2ZXJzYWwqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHJlbW92aW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzIGZyb20gdGhlIGBmb3JfZWFjaF92bWFgIGxvb3Agd2l0aGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgY29yZSBjaGFuZ2UgdG8gdGhlIERBTU9OIGxvZ2ljIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCwgY3JpdGljYWxseSwgKmlzKiBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIFRoYXQncyB0aGUga2V5LlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgREFNT05fU1lTRlNgIGlzIGNvcnJlY3RseSBlbmFibGVkIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIEl0J3MgcHJldHR5IGVzc2VudGlhbCwgYXMgdGhhdCdzIHRoZSBwcmltYXJ5IGF2ZW51ZSBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9uLiBXaGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIGFsc28gYWRkIGBEQU1PTl9WQUREUmAgYW5kIHRoZSBiYXNlIGBEQU1PTmAgb3B0aW9ucy5cblxuVGhlIGZvY3VzIHN5bWJvbCBoZXJlIGlzIGRlZmluaXRlbHkgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBhbHRlcmluZyB0aGlzIHNlY3Rpb24sIHJlYWNoYWJsZSB0aHJvdWdoIHN5c2ZzLCBkZW1hbmRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBjb25jdXJyZW5jeS4gUmVtb3ZpbmcgdGhlIFJDVSBsb2NrcyBtZWFucyB3ZSAqYWJzb2x1dGVseSogbmVlZCB0byBmdXp6IHRoaXMgdG8gZW5zdXJlIHdlIGRvbid0IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIG90aGVyIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgVk1BIHRyYXZlcnNhbC5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYERBTU9OX1NZU0ZTYCBpcyB0aGUgKm9ubHkqIGVudHJ5IHBvaW50IGZvciB0aGlzIGtpbmQgb2YgY29uZmlndXJhdGlvbi4gSSByZW1lbWJlciB0aGVyZSdzIHRoZSBgc2FtcGxlcy9kYW1vbi9wcmNsLmNgIGV4YW1wbGUsIGJ1dCB0aGF0J3MganVzdCBhIHNhbXBsZTsgbm90IHBhcnQgb2YgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gSG1tLCB3YXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gQWggeWVzLCBgREFNT05fREJHRlNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHN5c2ZzLCBzbywgYERBTU9OX1NZU0ZTYCBpdCBpcyFcblxuU28sIHRoZSBjb25maWcgb3B0aW9ucyBJIG5lZWQgdG8gbG9vayBmb3IgYXJlIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgYERBTU9OX1NZU0ZTYC5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3MCwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTQ6NTMuNTI1MzcyMjk1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjIyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kYW1vbl92YV90aHJlZV9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIFJDVSBsb2NrIGRvZXMgbm90IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiB0cmF2ZXJzaW5nIFZNQXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgYGZvcl9lYWNoX3ZtYWAgbG9vcCBpbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZSBSQ1UgbG9jayBkb2VzIG5vdCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIHdoZW4gdHJhdmVyc2luZyBWTUFzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 19:39:45 +0000 UTC FinishedAt: 2026-06-30 19:54:55 +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": "bfcc55a14179495b0c41408908fd7b9d7785c694", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "bfcc55a14179495b0c41408908fd7b9d7785c694", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS" ], "series_id": "7e52dbf5-9224-4c32-bd97-a69a3add4e96" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__damon_va_three_regions" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kYW1vbl92YV90aHJlZV9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgYGZvcl9lYWNoX3ZtYWAgbG9vcCBpbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZSBSQ1UgbG9jayBkb2VzIG5vdCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIHdoZW4gdHJhdmVyc2luZyBWTUFzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDVkM2U1YjdiODdkOWJlNDFjYmM0NWQ0NWMzMTRkN2UxMWIzMmI3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDE5OjUzOjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBkMjcxNDc2MDM1NjQxYi4uMzQ1Yjg5YjVkNDVmOWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtODQsNyAmIzQzOzg0LDYgQEAgc3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHQgKiBJZiB0aGlzIGlzIHRvbyBzbG93LCBpdCBjYW4gYmUgb3B0aW1pc2VkIHRvIGV4YW1pbmUgdGhlIG1hcGxlXG4gXHQgKiB0cmVlIGdhcHMuXG4gXHQgKi9cbi1cdHJjdV9yZWFkX2xvY2soKTtcbiBcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIGdhcDtcbiBcbkBAIC0xMDUsNyAmIzQzOzEwNCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIG5leHQ6XG4gXHRcdHByZXYgPSB2bWE7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghc3pfcmFuZ2UoXHUwMDI2c2Vjb25kX2dhcCkgfHwgIXN6X3JhbmdlKFx1MDAyNmZpcnN0X2dhcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kYW1vbl92YV90aHJlZV9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgYGZvcl9lYWNoX3ZtYWAgbG9vcCBpbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZSBSQ1UgbG9jayBkb2VzIG5vdCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIHdoZW4gdHJhdmVyc2luZyBWTUFzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNWQzZTViN2I4N2Q5YmU0MWNiYzQ1ZDQ1YzMxNGQ3ZTExYjMyYjc4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMTk6NTM6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCBkMjcxNDc2MDM1NjQxYi4uMzQ1Yjg5YjVkNDVmOWQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtODQsNyAmIzQzOzg0LDYgQEAgc3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJICogSWYgdGhpcyBpcyB0b28gc2xvdywgaXQgY2FuIGJlIG9wdGltaXNlZCB0byBleGFtaW5lIHRoZSBtYXBsZQogCSAqIHRyZWUgZ2Fwcy4KIAkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiAJCXVuc2lnbmVkIGxvbmcgZ2FwOwogCkBAIC0xMDUsNyAmIzQzOzEwNCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogbmV4dDoKIAkJcHJldiA9IHZtYTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIXN6X3JhbmdlKCZhbXA7c2Vjb25kX2dhcCkgfHwgIXN6X3JhbmdlKCZhbXA7Zmlyc3RfZ2FwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNwZWNpYWxpc3QgaW4gbWVtb3J5IG1hbmFnZW1lbnQ6CgoqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBSZW1vdmFsIG9mIFJDVSBQcm90ZWN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIERBTU9OIHBhdGNoLCBzcGVjaWZpY2FsbHkgb25lIHRoYXQmIzM5O3MgdG91Y2hlZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIHdpdGhpbiB0aGUgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFdoeSBhcmUgd2UgZHJvcHBpbmcgUkNVIHByb3RlY3Rpb24gaGVyZT8mIzM0OwoKVGhpcyByYWlzZXMgc2V2ZXJhbCBxdWVzdGlvbnMsIGFuZCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIuIFdhcyB0aGlzIGFuIG9wdGltaXphdGlvbj8gQXJlIHRoZXJlIGd1YXJhbnRlZXMgbm93IHRoYXQgbWFrZSBSQ1UgdW5uZWNlc3Nhcnk/IEhhdmUgd2UgbW92ZWQgdG8gYSBkaWZmZXJlbnQgZm9ybSBvZiBsb2NraW5nIG9yIHByb3RlY3Rpb24/IFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGdldCBpbiB0aGVyZSBhbmQgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHB1cnBvc2Ugd2l0aGluIHRoZSBEQU1PTiBjb250ZXh0IGFuZCBob3cgdGhhdCBsb29wIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIHByb3Blcmx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoeS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHQgKiBuZWNlc3NhcnkuXG4gIDcxOlx0ICpcbiAgNzI6XHQgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4gIDczOlx0ICovXG4gIDc0Olx0c3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gIDc1Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcbiAgNzY6XHR7XG4gIDc3Olx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBmaXJzdF9nYXAgPSB7MH0sIHNlY29uZF9nYXAgPSB7MH07XG4gIDc4Olx0XHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7XG4gIDc5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXYgPSBOVUxMO1xuICA4MDpcdFx0dW5zaWduZWQgbG9uZyBzdGFydDtcbiAgODE6XHRcbiAgODI6XHRcdC8qXG4gIDgzOlx0XHQgKiBGaW5kIHRoZSB0d28gYmlnZ2VzdCBnYXBzIHNvIHRoYXQgZmlyc3RfZ2FwIFx1MDAzZSBzZWNvbmRfZ2FwIFx1MDAzZSBvdGhlcnMuXG4gIDg0Olx0XHQgKiBJZiB0aGlzIGlzIHRvbyBzbG93LCBpdCBjYW4gYmUgb3B0aW1pc2VkIHRvIGV4YW1pbmUgdGhlIG1hcGxlXG4gIDg1Olx0XHQgKiB0cmVlIGdhcHMuXG4gIDg2Olx0XHQgKi9cbiAgODc6XHRcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuICA4ODpcdFx0XHR1bnNpZ25lZCBsb25nIGdhcDtcbiAgODk6XHRcbiAgOTA6XHRcdFx0aWYgKCFwcmV2KSB7XG4gIDkxOlx0XHRcdFx0c3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gIDkyOlx0XHRcdFx0Z290byBuZXh0O1xuICA5MzpcdFx0XHR9XG4gIDk0Olx0XHRcdGdhcCA9IHZtYS1cdTAwM2V2bV9zdGFydCAtIHByZXYtXHUwMDNldm1fZW5kO1xuICA5NTpcdFxuICA5NjpcdFx0XHRpZiAoZ2FwIFx1MDAzZSBzel9yYW5nZShcdTAwMjZmaXJzdF9nYXApKSB7XG4gIDk3Olx0XHRcdFx0c2Vjb25kX2dhcCA9IGZpcnN0X2dhcDtcbiAgOTg6XHRcdFx0XHRmaXJzdF9nYXAuc3RhcnQgPSBwcmV2LVx1MDAzZXZtX2VuZDtcbiAgOTk6XHRcdFx0XHRmaXJzdF9nYXAuZW5kID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuIDEwMDpcdFx0XHR9IGVsc2UgaWYgKGdhcCBcdTAwM2Ugc3pfcmFuZ2UoXHUwMDI2c2Vjb25kX2dhcCkpIHtcbiAxMDE6XHRcdFx0XHRzZWNvbmRfZ2FwLnN0YXJ0ID0gcHJldi1cdTAwM2V2bV9lbmQ7XG4gMTAyOlx0XHRcdFx0c2Vjb25kX2dhcC5lbmQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gMTAzOlx0XHRcdH1cbiAxMDQ6XHRuZXh0OlxuIDEwNTpcdFx0XHRwcmV2ID0gdm1hO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFxuIDEwODpcdFx0aWYgKCFzel9yYW5nZShcdTAwMjZzZWNvbmRfZ2FwKSB8fCAhc3pfcmFuZ2UoXHUwMDI2Zmlyc3RfZ2FwKSlcbiAxMDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTEwOlx0XG4gMTExOlx0XHQvKiBTb3J0IHRoZSB0d28gYmlnZ2VzdCBnYXBzIGJ5IGFkZHJlc3MgKi9cbiAxMTI6XHRcdGlmIChmaXJzdF9nYXAuc3RhcnQgXHUwMDNlIHNlY29uZF9nYXAuc3RhcnQpXG4gMTEzOlx0XHRcdHN3YXAoZmlyc3RfZ2FwLCBzZWNvbmRfZ2FwKTtcbiAxMTQ6XHRcbiAxMTU6XHRcdC8qIFN0b3JlIHRoZSByZXN1bHQgKi9cbiAxMTY6XHRcdHJlZ2lvbnNbMF0uc3RhcnQgPSBBTElHTihzdGFydCwgREFNT05fTUlOX1JFR0lPTl9TWik7XG4gMTE3Olx0XHRyZWdpb25zWzBdLmVuZCA9IEFMSUdOKGZpcnN0X2dhcC5zdGFydCwgREFNT05fTUlOX1JFR0lPTl9TWik7XG4gMTE4Olx0XHRyZWdpb25zWzFdLnN0YXJ0ID0gQUxJR04oZmlyc3RfZ2FwLmVuZCwgREFNT05fTUlOX1JFR0lPTl9TWik7XG4gMTE5Olx0XHRyZWdpb25zWzFdLmVuZCA9IEFMSUdOKHNlY29uZF9nYXAuc3RhcnQsIERBTU9OX01JTl9SRUdJT05fU1opO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIEZ1bmN0aW9uOiBGaW5kaW5nIHRoZSBUaHJlZSBCaWdnZXN0IFJlZ2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhpcyBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBjbGVhciDigJMgaXQmIzM5O3MgZGVzaWduZWQgdG8gaWRlbnRpZnkgdGhlIHRocmVlIGxhcmdlc3QgcmVnaW9ucyB3aXRoaW4gYSBwcm9jZXNzJiMzOTtzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBrZXkgY29tcG9uZW50IG9mIERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTU9OaXRvci4gR2l2ZW4gaXRzIHB1cnBvc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gbWVtb3J5IHVzYWdlIGFuYWx5c2lzLCBwZXJoYXBzIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgcHJvZmlsaW5nLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBob3cgYW5kIHdoZXJlIGlzIGl0IHVzZWQ/IEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIERBTU9OIGZyYW1ld29yayBhbmQgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIG91dCB3aG8mIzM5O3MgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTE3PXN0YXRpYyBpbnQgX19saW5rX3ZtYXMoc3RydWN0IG1hcGxlX3RyZWUgKm10LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYXMsXG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0zOS0vKlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo0MDogKiBUZXN0IF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucygpIGZ1bmN0aW9uXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTQxLSAqXG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC01MC0gKlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo1MTogKiAmIzM5O19fZGFtb25fdmFfdGhyZWVfcmVnaW9ucygpIHJlY2VpdmVzIGFuIGFkZHJlc3Mgc3BhY2Ugb2YgYSBwcm9jZXNzLiAgSXRcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNTItICogZmlyc3QgaWRlbnRpZmllcyB0aGUgc3RhcnQgb2YgbWFwcGluZ3MsIGVuZCBvZiBtYXBwaW5ncywgYW5kIHRoZSB0d28gYmlnZ2VzdFxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9NjY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF90aHJlZV9yZWdpb25zX2luX3ZtYXMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtODMtXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjg0Olx0X19kYW1vbl92YV90aHJlZV9yZWdpb25zKFx1MDAyNm1tLCByZWdpb25zKTtcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtODUtXG4tLVxubW0vZGFtb24vdmFkZHIuYz01Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzel9yYW5nZShzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcilcbi0tXG5tbS9kYW1vbi92YWRkci5jLTczLSAqL1xubW0vZGFtb24vdmFkZHIuYzo3NDpzdGF0aWMgaW50IF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2RhbW9uL3ZhZGRyLmMtNzUtXHRcdFx0XHQgICAgICAgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcbi0tXG5tbS9kYW1vbi92YWRkci5jPTEzMT1zdGF0aWMgaW50IGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTE0MS1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbm1tL2RhbW9uL3ZhZGRyLmM6MTQyOlx0cmMgPSBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMobW0sIHJlZ2lvbnMpO1xubW0vZGFtb24vdmFkZHIuYy0xNDMtXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODk5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AsIHdoaWNoIGlzIGFscmVhZHkgaG9sZGluZyBhbiBgbW1hcF9yZWFkX2xvY2sobW0pYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHByb2JhYmx5IGhhZCBhIHJlZHVuZGFudCBvciBtaXNwbGFjZWQgYHJjdV9yZWFkX2xvY2soKWAuIFRoZSBgZm9yX2VhY2hfdm1hYCBtYWNybyB1dGlsaXplcyB0aGUgbWFwbGUgdHJlZSwgd2hpY2ggKmNhbiogcmVxdWlyZSBhbiBSQ1UgcmVhZCBsb2NrIGludGVybmFsbHksIGJ1dCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIGBtbWFwX3JlYWRfbG9ja2AsIGl0IHNob3VsZCBiZSB1bm5lY2Vzc2FyeS4KCkkgaGFkIGEgbW9tZW50IG9mIGRvdWJ0IHRoZXJlOyBJIGhhZCB0byBjb25zaWRlciBpZiBgZm9yX2VhY2hfdm1hYCB3YXMgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHZtYV9uZXh0YCB3aGljaCBtaWdodCAqc3RpbGwqIG5lZWQgUkNVIGlmIHdlIHdlcmVuJiMzOTt0IGhvbGRpbmcgdGhlIGBtbWFwYCBsb2NrLiBCdXQgYSBxdWljayBjaGVjayByZXZlYWxlZCBgZm9yX2VhY2hfdm1hYCB1c2VzIGBtYXNfZmluZGAgd2hpY2ggKmRvZXNuJiMzOTt0KiByZXF1aXJlIGl0IHdoZW4gdGhlIG1tYXAgbG9jayBpcyBoZWxkLgoKSSBicmllZmx5IGNvbnNpZGVyZWQgaWYgYGZvcl9lYWNoX3ZtYWAgbWlnaHQgcG90ZW50aWFsbHkgc2xlZXAsIGJ1dCB0aGVuIHJlbWVtYmVyZWQgdGhhdCBgcmN1X3JlYWRfbG9ja2AgZGlzYWJsZXMgcHJlZW1wdGlvbi4gSWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nICppbiogYGZvcl9lYWNoX3ZtYWAgdGhhdCBjb3VsZCBzbGVlcCB3aGVuIGhvbGRpbmcgdGhpcyBsb2NrLCBpdCB3b3VsZCBiZSBhIGJ1Zy4KClJpZ2h0LCB0aGUgcGF0Y2ggaXMgcmVtb3ZpbmcgYm90aCB0aGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIHRoZSBgcmN1X3JlYWRfdW5sb2NrKClgLiBTbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQmIzM5O3MgYWN0aXZlbHkgKnJlbW92aW5nKiB0aGUgUkNVIHJlYWQgbG9jay4KCkdpdmVuIHRoaXMgaXMgYSBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBEQU1PTiwgdGhpcyBpcyBhYnNvbHV0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmcuIEl0JiMzOTtzIGltcG9ydGFudCB0byB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBjaGFuZ2UsIGdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbW9uaXRvcmluZyBhc3BlY3RzLgoKTm93LCBsZXQmIzM5O3MgZ28gZmluZCB0aGUgcmVsZXZhbnQgREFNT04gY29uZmlndXJhdGlvbiBvcHRpb25zLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDoKCioqRGlnZ2luZyBpbnRvIERBTU9OJiMzOTtzIFZpcnR1YWwgQWRkcmVzcyBIYW5kbGluZyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBEQU1PTiAoRHluYW1pYyBBZGRyZXNzIE1PTml0b3IpIGNvZGUsIHNwZWNpZmljYWxseSwgYG1tL2RhbW9uL3ZhZGRyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgZW50cnkgcG9pbnQ/IFdoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBlbmFibGVzIHRoaXMgc3BlY2lmaWMgcGllY2U/JiMzNDsgSSBrbm93IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGtlcm5lbCwgc28gdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgS2NvbmZpZyBvcHRpb25zLCBvciBvdGhlciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zLCBhcmUgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiBgdmFkZHIuY2AuIFNvLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIgYWJvdXQgd2hldGhlciB0aGlzIGNvbXBvbmVudCBpcyBjb21waWxlZCBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIGhvdyB0aGF0JiMzOTtzIHRpZWQgaW50byB0aGUgb3ZlcmFsbCBEQU1PTiBidWlsZC4gSSBuZWVkIHRoYXQgY29udGV4dCBiZWZvcmUgSSBjYW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IENoZWNrKioKCk9rYXksIHNvIHRoZSBgQ09ORklHX0RBTU9OX1ZBRERSYCBzZXR0aW5nIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUuIE15IG5leHQgdGhvdWdodCBpcywgZG9lcyBgQ09ORklHX0RBTU9OYCBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYENPTkZJR19EQU1PTl9WQUREUmAgdG8gYmUgcmVsZXZhbnQ/IFNlZW1zIGxvZ2ljYWwsIGJ1dCBsZXQmIzM5O3MganVzdCBjb25maXJtIGl0LiBZZXAsIHRoZSBkZXBlbmRlbmN5IGlzIHJpZ2h0IHRoZXJlIGluIHRoZSBrY29uZmlnIGZpbGUsIGBEQU1PTl9WQUREUmAgZGVwZW5kcyBvbiBgREFNT05gLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgdGhvcm91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSB0byBzZWUgdGhlIGV4cGxpY2l0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBgREFNT05gIGFuZCBgREFNT05fVkFERFJgLiBUaG9zZSBhcmUgY2xlYXJseSB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBEeW5hbWljIEFkZHJlc3MgTW9uaXRvcmluZywgb3IgREFNT04uIFRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiBpcyBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZT8gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIHRoaXMuIFRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aG8gY2FsbHMgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIEFscmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBieSBgZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIFRoYXQmIzM5O3Mgbm90IHVuZXhwZWN0ZWQsIGJ1dCBnb29kIHRvIGNvbmZpcm0uIE5vdyBJIGNhbiBzdGFydCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xNz1zdGF0aWMgaW50IF9fbGlua192bWFzKHN0cnVjdCBtYXBsZV90cmVlICptdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFzLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMzktLypcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NDA6ICogVGVzdCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoKSBmdW5jdGlvblxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC00MS0gKlxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNTAtICpcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NTE6ICogJiMzOTtfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoKSByZWNlaXZlcyBhbiBhZGRyZXNzIHNwYWNlIG9mIGEgcHJvY2Vzcy4gIEl0XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTUyLSAqIGZpcnN0IGlkZW50aWZpZXMgdGhlIHN0YXJ0IG9mIG1hcHBpbmdzLCBlbmQgb2YgbWFwcGluZ3MsIGFuZCB0aGUgdHdvIGJpZ2dlc3Rcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTY2PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdGhyZWVfcmVnaW9uc19pbl92bWFzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTgzLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo4NDpcdF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhcdTAwMjZtbSwgcmVnaW9ucyk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTg1LVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3pfcmFuZ2Uoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnIpXG4tLVxubW0vZGFtb24vdmFkZHIuYy03My0gKi9cbm1tL2RhbW9uL3ZhZGRyLmM6NzQ6c3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9kYW1vbi92YWRkci5jLTc1LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIHJlZ2lvbnNbM10pXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xMzAtICovXG5tbS9kYW1vbi92YWRkci5jOjEzMTpzdGF0aWMgaW50IGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL3ZhZGRyLmMtMTMyLVx0XHRcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcbi0tXG5tbS9kYW1vbi92YWRkci5jLTE0MS1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbm1tL2RhbW9uL3ZhZGRyLmM6MTQyOlx0cmMgPSBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMobW0sIHJlZ2lvbnMpO1xubW0vZGFtb24vdmFkZHIuYy0xNDMtXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTE5MT1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xOTctXG5tbS9kYW1vbi92YWRkci5jOjE5ODpcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKSB7XG5tbS9kYW1vbi92YWRkci5jLTE5OS1cdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTIyNj1zdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjMxLVx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xubW0vZGFtb24vdmFkZHIuYzoyMzI6XHRcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMpKVxubW0vZGFtb24vdmFkZHIuYy0yMzMtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkludGVybmFsIERBTU9OIE9wZXJhdGlvbjogQSBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBWYXJpYWJsZSBBZGRyZXNzLWJhc2VkIE1lbW9yeSBNb25pdG9yIChEQU1PTikgaXMgd29ya2luZyBhdCBhIGxvdyBsZXZlbCwgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcuIEkgc2VlIHRoYXQgdHdvIGtleSBmdW5jdGlvbnMsIGBfX2RhbW9uX3ZhX2luaXRfcmVnaW9uc2AgYW5kIGBkYW1vbl92YV91cGRhdGVgLCBhcmUgcGl2b3RhbCBoZXJlLiBUaGV5JiMzOTtyZSBjbGVhcmx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlcyB3aXRoaW4gREFNT04mIzM5O3MgdmFkZHIgb3BlcmF0aW9ucyBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgZ29vZCwgc2VlaW5nIHRob3NlIHR3byBmdW5jdGlvbnMgYmVpbmcgZXhwbGljaXRseSBuYW1lZCBpbmRpY2F0ZXMgdG8gbWUgdGhhdCBEQU1PTiBpcyBrZWVwaW5nIGl0cyB2aXJ0dWFsIGFkZHJlc3MgdHJhY2tpbmcgd2VsbC1vcmdhbml6ZWQgYW5kIG1vZHVsYXIuIEl0IHRlbGxzIG1lIGBkYW1vbl92YWRkcl9vcHNgIGlzIHRoZSBsaWtlbHkgaW50ZXJmYWNlIG9yIGNvcmUgc3RydWN0dXJlIGF0IHBsYXkgaGVyZSwgd2hpY2ggaXMgc3RhbmRhcmQgd2hlbiBpbXBsZW1lbnRpbmcgc3VjaCBhIG1vbml0b3IuIEZyb20gdGhlc2UgbmFtZXMgYWxvbmUsIEkmIzM5O20gZXhwZWN0aW5nIGBfX2RhbW9uX3ZhX2luaXRfcmVnaW9uc2AgdG8gYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgcmVnaW9ucyB0byBtb25pdG9yIGFuZCBgZGFtb25fdmFfdXBkYXRlYCB0byBiZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIG5lY2Vzc2FyeSB1cGRhdGVzIHRvIHRoZSB2YWRkciBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaG93IGl0IG1hbmFnZXMgdGhvc2UgcmVnaW9ucy4gVGhpcyBpcyB3aGF0IEkgd2FzIGV4cGVjdGluZyB0byBzZWU6IGEgd2VsbC1kZWZpbmVkIGludGVyYWN0aW9uIGJldHdlZW4gaW5pdGlhbGl6YXRpb24gYW5kIHRoZSB1cGRhdGUgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3ZhZGRyX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqU2VhcmNoaW5nIGZvciBLZXkgREFNT04gQ29tcG9uZW50cyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVmlydHVhbCBBZGRyZXNzIChWQSkgdXBkYXRlIG1lY2hhbmlzbSB3aXRoaW4gREFNT04gaXMgaGFuZGxlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGxpZmVjeWNsZS4gSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0d28gY3JpdGljYWwgZWxlbWVudHM6IGBkYW1vbl92YV91cGRhdGVgIGFuZCBgX19kYW1vbl92YV9pbml0X3JlZ2lvbnNgLiBJJiMzOTttIGdvaW5nIHRvIGJldCB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIG9yIHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MgSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZC4gVGhlIGZpcnN0IGlzIGFsbW9zdCBjZXJ0YWlubHkgaW52b2x2ZWQgaW4gdHJpZ2dlcmluZyBvciBwcm9jZXNzaW5nIFZBIHVwZGF0ZXMsIHdoaWxlIHRoZSBzZWNvbmQgbGlrZWx5IGluaXRpYWxpemVzIHRoZSByZWdpb25zIHRoYXQgREFNT04gaXMgd2F0Y2hpbmcuIEZpbmRpbmcgdGhlc2Ugd2lsbCBnaXZlIG1lIGEgZm9vdGhvbGQgaW50byB0aGUgZGVlcGVyIHdvcmtpbmdzIG9mIHRoaXMgY29kZS4gVGhpcyB3aWxsIGJlIG15IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl92YV91cGRhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYz0yMTI9c3RhdGljIHZvaWQgZGFtb25fdmFfaW5pdChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0yMjUtICovXG5tbS9kYW1vbi92YWRkci5jOjIyNjpzdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vdmFkZHIuYy0yMjcte1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9OTU4PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy05NjItXHRcdC5pbml0ID0gZGFtb25fdmFfaW5pdCxcbm1tL2RhbW9uL3ZhZGRyLmM6OTYzOlx0XHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxubW0vZGFtb24vdmFkZHIuYy05NjQtXHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEQU1PTiBJbXBsZW1lbnRhdGlvbiBKb3VybmV5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGlzIERBTU9OIGltcGxlbWVudGF0aW9uIGtpY2tzIG9mZi4gVGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3RhcnRzIHdpdGggYSByZWdpc3RyYXRpb24gd2l0aGluIGBkYW1vbl92YV9pbml0Y2FsbGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCBpdCBzZWVtcy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBvcGVyYXRpb25zIGFyZSBzcGVjaWZpY2FsbHkgcmVnaXN0ZXJlZCB0byBtb25pdG9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYXMgREFNT04gb3BlcmF0aW9ucy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIEkgc2VlIHRoYXQgdXNlcnNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIGFuZCBjb25maWd1cmUgdGhpcyBEQU1PTiBmdW5jdGlvbmFsaXR5IHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcy4gVGhhdCBnaXZlcyB1cyBmbGV4aWJpbGl0eS4gVG8gZGVsdmUgZGVlcGVyIGludG8gdGhpcyBpbml0aWFsIHNldHVwIGFuZCBjb25maXJtIG15IGh5cG90aGVzaXMgYWJvdXQgYGRhbW9uX3ZhX2luaXRjYWxsYCwgSSYjMzk7bGwgY2hlY2sgYG1tL2RhbW9uL3ZhZGRyLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3ZhZGRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk1MDpcdFx0XHRyZXR1cm4gZGFtb25fY29sZF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xuIDk1MTpcdFx0ZGVmYXVsdDpcbiA5NTI6XHRcdFx0YnJlYWs7XG4gOTUzOlx0XHR9XG4gOTU0Olx0XG4gOTU1Olx0XHRyZXR1cm4gREFNT1NfTUFYX1NDT1JFO1xuIDk1NjpcdH1cbiA5NTc6XHRcbiA5NTg6XHRzdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuIDk1OTpcdHtcbiA5NjA6XHRcdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcyA9IHtcbiA5NjE6XHRcdFx0LmlkID0gREFNT05fT1BTX1ZBRERSLFxuIDk2MjpcdFx0XHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXG4gOTYzOlx0XHRcdC51cGRhdGUgPSBkYW1vbl92YV91cGRhdGUsXG4gOTY0Olx0XHRcdC5wcmVwYXJlX2FjY2Vzc19jaGVja3MgPSBkYW1vbl92YV9wcmVwYXJlX2FjY2Vzc19jaGVja3MsXG4gOTY1Olx0XHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxuIDk2NjpcdFx0XHQudGFyZ2V0X3ZhbGlkID0gZGFtb25fdmFfdGFyZ2V0X3ZhbGlkLFxuIDk2NzpcdFx0XHQuY2xlYW51cF90YXJnZXQgPSBkYW1vbl92YV9jbGVhbnVwX3RhcmdldCxcbiA5Njg6XHRcdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcbiA5Njk6XHRcdFx0LmdldF9zY2hlbWVfc2NvcmUgPSBkYW1vbl92YV9zY2hlbWVfc2NvcmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IGFuZCBUZXN0YWJpbGl0eSBvZiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBpcyByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgdGVzdGFibGUuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBmcm9tIHRoYXQgZnVuY3Rpb24sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgd29ydGggYSBnb29kIGZ1enppbmcgY2FtcGFpZ24uIEkmIzM5O20gZ29pbmcgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy4KCk15IHByaW1hcnkgZm9jdXMgZm9yIHRlc3Rpbmcgd2lsbCBiZSBvbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBpdHNlbGYsIGFuZCBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCBgZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AsIGBkYW1vbl92YV91cGRhdGVgLCBhbmQgYGRhbW9uX3ZhX2luaXRgLiBUaG9zZSBhcmUgdGhlIGNvcmUgc3ltYm9scyB0aGF0IHRoaXMgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMuCgpCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgcGF0aC4gSSBrbm93IGBEQU1PTmAgYW5kIGBEQU1PTl9WQUREUmAgYXJlIGVzc2VudGlhbC4gQnV0IGFyZSB0aGVyZSBvdGhlcnMsIGxpa2UgYERBTU9OX1NZU0ZTYCwgdGhhdCBtaWdodCBiZSBuZWVkZWQgdG8gZXhwb3NlIHRoaXMgZnVuY3Rpb25hbGl0eSBmcm9tIHVzZXIgc3BhY2U/CgpJJiMzOTtsbCBjaGVjayBgbW0vZGFtb24vc3lzZnMuY2Agb3Igc2ltaWxhciBmaWxlcyBpbiB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgZW50aXJlIGNhbGwgc3RhY2sgZnJvbSB1c2Vyc3BhY2UgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEQU1PTl9PUFNfVkFERFImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTM4ND1zdHJ1Y3QgZGFtb3Nfc3RhdCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQxMy0gKiBcdTAwMjZlbnVtIERBTU9OX09QU19QQUREUiBzdXBwb3J0cyBib3RoIGFub24gcGFnZXMgdHlwZSBhbmQgbWVtY2cgdHlwZSBmaWx0ZXJzLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjQxNDogKiB3aGlsZSBcdTAwMjZlbnVtIERBTU9OX09QU19WQUREUiBhbmQgXHUwMDI2ZW51bSBEQU1PTl9PUFNfRlZBRERSIGRvbiYjMzk7dCBzdXBwb3J0IGFueSBvZlxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQxNS0gKiB0aGUgdHdvIHR5cGVzLlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD01NzI9c3RydWN0IGRhbW9zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjExLSAqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjEyOiAqIEBEQU1PTl9PUFNfVkFERFI6XHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MTMtICogQERBTU9OX09QU19GVkFERFI6XHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIG9ubHkgZml4ZWQgcmFuZ2VzIG9mIHZpcnR1YWxcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NjE4PWVudW0gZGFtb25fb3BzX2lkIHtcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTk6XHREQU1PTl9PUFNfVkFERFIsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjIwLVx0REFNT05fT1BTX0ZWQUREUixcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjMte1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjQ6XHRyZXR1cm4gY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfVkFERFIgfHwgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjUtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTM1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xubW0vZGFtb24vc3lzZnMuYy0xMzU3LVx0e1xubW0vZGFtb24vc3lzZnMuYzoxMzU4Olx0XHQub3BzX2lkID0gREFNT05fT1BTX1ZBRERSLFxubW0vZGFtb24vc3lzZnMuYy0xMzU5LVx0XHQubmFtZSA9IFwmIzM0O3ZhZGRyXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTY1Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNjY4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY29udGV4dHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy5jOjE2Njk6XHRcdGNvbnRleHQgPSBkYW1vbl9zeXNmc19jb250ZXh0X2FsbG9jKERBTU9OX09QU19WQUREUik7XG5tbS9kYW1vbi9zeXNmcy5jLTE2NzAtXHRcdGlmICghY29udGV4dCkge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0zNDI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzQ0LVx0c3RydWN0IGRhbW9uX2N0eCAqYyA9IGRhbW9uX25ld19jdHgoKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNDU6XHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHMgPSB7LmlkID0gREFNT05fT1BTX1ZBRERSfSwgYmFrO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0Ni1cdGJvb2wgbmVlZF9jbGVhbnVwID0gZmFsc2U7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM1MC1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTE6XHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkZJR19EQU1PTl9WQUREUiBpcyBzZXQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTI6XHRpZiAoIWRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKERBTU9OX09QU19WQUREUikpIHtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTM6XHRcdGJhay5pZCA9IERBTU9OX09QU19WQUREUjtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTQtXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2YmFrKSwgMCk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM1Ny1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTg6XHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgZW5zdXJlZCB0byBiZSByZWdpc3RlcmVkICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzU5Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NlbGVjdF9vcHMoYywgREFNT05fT1BTX1ZBRERSKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzYwLVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNjgtXHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNjk6XHRiYWsgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM3MDpcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSAoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzcxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzItXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzczOlx0b3BzLmlkID0gREFNT05fT1BTX1ZBRERSO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3NC1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXHUwMDI2b3BzKSwgMCk7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3Ni1cdG11dGV4X2xvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM3NzpcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzg2LVx0XHRtdXRleF9sb2NrKFx1MDAyNmRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozODc6XHRcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM4OC1cdFx0XHQoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XG4tLVxubW0vZGFtb24vdmFkZHIuYz05NTg9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcbi0tXG5tbS9kYW1vbi92YWRkci5jLTk2MC1cdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcyA9IHtcbm1tL2RhbW9uL3ZhZGRyLmM6OTYxOlx0XHQuaWQgPSBEQU1PTl9PUFNfVkFERFIsXG5tbS9kYW1vbi92YWRkci5jLTk2Mi1cdFx0LmluaXQgPSBkYW1vbl92YV9pbml0LFxuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy03MC1cdFx0cmV0dXJuIC1FTk9NRU07XG5zYW1wbGVzL2RhbW9uL3ByY2wuYzo3MTpcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1ZBRERSKSkge1xuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNzItXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4tLVxuc2FtcGxlcy9kYW1vbi93c3NlLmM9NjE9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxuLS1cbnNhbXBsZXMvZGFtb24vd3NzZS5jLTcwLVx0XHRyZXR1cm4gLUVOT01FTTtcbnNhbXBsZXMvZGFtb24vd3NzZS5jOjcxOlx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfVkFERFIpKSB7XG5zYW1wbGVzL2RhbW9uL3dzc2UuYy03Mi1cdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwODQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEQU1PTiBDb25maWd1cmF0aW9uIE1ldGhvZHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggREFNT04gZnJvbSB1c2Vyc3BhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyBgREFNT05fU1lTRlNgLCB3aGljaCBpcyB0aGUgb2J2aW91cyBjYW5kaWRhdGUgZm9yIGNvbmZpZ3VyYXRpb24uIEJ1dCwgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgc2hvdWxkIGRvIGEgcXVpY2sgc3dlZXAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXZhaWxhYmxlIGludGVyZmFjZXMuCgpIbW0sIHRoZXJlJiMzOTtzIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX0xSVV9TT1JUYCwgYW5kIGBEQU1PTl9TVEFUYCDigJMgYWxsIHNlZW0gcmVsYXRlZCB0byBEQU1PTiYjMzk7cyBvcGVyYXRpb25zLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSB1c2luZyBgREFNT05fT1BTX1BBRERSYCBvciBgREFNT05fT1BTX1ZBRERSYD8gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBkZXRhaWwgSSBuZWVkIHRvIGFzY2VydGFpbi4KClRvIGdldCBhIGNvbmNyZXRlIGFuc3dlciwgSSBzaG91bGQgZGVsdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbW0vZGFtb24vcmVjbGFpbS5jYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoaWNoIHNldCBvZiBEQU1PTiBvcGVyYXRpb25zIHRoZXNlIG90aGVyIGludGVyZmFjZXMgYXJlIGFjdHVhbGx5IGVtcGxveWluZy4gR3JhYmJpbmcgdGhhdCBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBmdWxsIGxhbmRzY2FwZSBvZiBpbnRlcmFjdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEQU1PTl9PUFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTM4ND1zdHJ1Y3QgZGFtb3Nfc3RhdCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQxMi0gKiBvbiB0aGUgcnVubmluZyBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy5cbmluY2x1ZGUvbGludXgvZGFtb24uaDo0MTM6ICogXHUwMDI2ZW51bSBEQU1PTl9PUFNfUEFERFIgc3VwcG9ydHMgYm90aCBhbm9uIHBhZ2VzIHR5cGUgYW5kIG1lbWNnIHR5cGUgZmlsdGVycyxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0MTQ6ICogd2hpbGUgXHUwMDI2ZW51bSBEQU1PTl9PUFNfVkFERFIgYW5kIFx1MDAyNmVudW0gREFNT05fT1BTX0ZWQUREUiBkb24mIzM5O3Qgc3VwcG9ydCBhbnkgb2ZcbmluY2x1ZGUvbGludXgvZGFtb24uaC00MTUtICogdGhlIHR3byB0eXBlcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NTcyPXN0cnVjdCBkYW1vcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxMS0gKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxMjogKiBAREFNT05fT1BTX1ZBRERSOlx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjEzOiAqIEBEQU1PTl9PUFNfRlZBRERSOlx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE0LSAqXHRcdFx0YWRkcmVzcyBzcGFjZXNcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTU6ICogQERBTU9OX09QU19QQUREUjpcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTY6ICogQE5SX0RBTU9OX09QUzpcdE51bWJlciBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25zXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE3LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oPTYxOD1lbnVtIGRhbW9uX29wc19pZCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjE5Olx0REFNT05fT1BTX1ZBRERSLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYyMDpcdERBTU9OX09QU19GVkFERFIsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjIxOlx0REFNT05fT1BTX1BBRERSLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYyMjpcdE5SX0RBTU9OX09QUyxcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MjMtfTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjMte1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjQ6XHRyZXR1cm4gY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfVkFERFIgfHwgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjUtfVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMT1zdGF0aWMgREVGSU5FX01VVEVYKGRhbW9uX29wc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYzozMjpzdGF0aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05fT1BTXTtcbm1tL2RhbW9uL2NvcmUuYy0zMy1cbm1tL2RhbW9uL2NvcmUuYz0zND1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRhbW9uX3JlZ2lvbl9jYWNoZSBfX3JvX2FmdGVyX2luaXQ7XG5tbS9kYW1vbi9jb3JlLmMtMzUtXG5tbS9kYW1vbi9jb3JlLmM6MzY6LyogU2hvdWxkIGJlIGNhbGxlZCB1bmRlciBkYW1vbl9vcHNfbG9jayB3aXRoIGlkIHNtYWxsZXIgdGhhbiBOUl9EQU1PTl9PUFMgKi9cbm1tL2RhbW9uL2NvcmUuYy0zNy1zdGF0aWMgYm9vbCBfX2RhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz01Mj1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy01NS1cbm1tL2RhbW9uL2NvcmUuYzo1NjpcdGlmIChpZCBcdTAwM2U9IE5SX0RBTU9OX09QUylcbm1tL2RhbW9uL2NvcmUuYy01Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03Mz1pbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXG4tLVxubW0vZGFtb24vY29yZS5jLTc2LVxubW0vZGFtb24vY29yZS5jOjc3Olx0aWYgKG9wcy1cdTAwM2VpZCBcdTAwM2U9IE5SX0RBTU9OX09QUylcbm1tL2RhbW9uL2NvcmUuYy03OC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vY29yZS5jPTEwMD1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDMtXG5tbS9kYW1vbi9jb3JlLmM6MTA0Olx0aWYgKGlkIFx1MDAzZT0gTlJfREFNT05fT1BTKVxubW0vZGFtb24vY29yZS5jLTEwNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vY29yZS5jPTE1NzM9aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE1ODMtXHQvKiBub2RlX2VsaWdpYmxlX21lbV9icCBtZXRyaWMgcmVxdWlyZXMgUEFERFIgb3BzICovXG5tbS9kYW1vbi9jb3JlLmM6MTU4NDpcdGlmIChzcmMtXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xubW0vZGFtb24vY29yZS5jLTE1ODUtXHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNzMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX2VsaWdpYmxlX21lbV9icChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzM4LVxubW0vZGFtb24vY29yZS5jOjI3Mzk6XHRpZiAoYy1cdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKVxubW0vZGFtb24vY29yZS5jLTI3NDAtXHRcdHJldHVybiAwO1xuLS1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM9MTc9aW50IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHAsXG4tLVxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYy0yNi1cbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmM6Mjc6XHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19QQUREUikpIHtcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjgtXHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYz00NDE9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQ0My1cdHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wcyA9IHtcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0Olx0XHQuaWQgPSBEQU1PTl9PUFNfUEFERFIsXG5tbS9kYW1vbi9wYWRkci5jLTQ0NS1cdFx0LmluaXQgPSBOVUxMLFxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE3OC1cbm1tL2RhbW9uL3N0YXQuYzoxNzk6XHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19QQUREUikpXG5tbS9kYW1vbi9zdGF0LmMtMTgwLVx0XHRnb3RvIGZyZWVfb3V0O1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTM1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xubW0vZGFtb24vc3lzZnMuYy0xMzU3LVx0e1xubW0vZGFtb24vc3lzZnMuYzoxMzU4Olx0XHQub3BzX2lkID0gREFNT05fT1BTX1ZBRERSLFxubW0vZGFtb24vc3lzZnMuYy0xMzU5LVx0XHQubmFtZSA9IFwmIzM0O3ZhZGRyXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTM2MS1cdHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTM2MjpcdFx0Lm9wc19pZCA9IERBTU9OX09QU19GVkFERFIsXG5tbS9kYW1vbi9zeXNmcy5jLTEzNjMtXHRcdC5uYW1lID0gXCYjMzQ7ZnZhZGRyXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTM2NS1cdHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTM2NjpcdFx0Lm9wc19pZCA9IERBTU9OX09QU19QQUREUixcbm1tL2RhbW9uL3N5c2ZzLmMtMTM2Ny1cdFx0Lm5hbWUgPSBcJiMzNDtwYWRkclwmIzM0Oyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE2NTI9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb250ZXh0c19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTY2OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2NvbnRleHRzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMuYzoxNjY5Olx0XHRjb250ZXh0ID0gZGFtb25fc3lzZnNfY29udGV4dF9hbGxvYyhEQU1PTl9PUFNfVkFERFIpO1xubW0vZGFtb24vc3lzZnMuYy0xNjcwLVx0XHRpZiAoIWNvbnRleHQpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE5OTg9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDAzLVx0LyogTXVsdGlwbGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIHRhcmdldHMgbWFrZXMgbm8gc2Vuc2UgKi9cbm1tL2RhbW9uL3N5c2ZzLmM6MjAwNDpcdGlmIChjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19QQUREUiBcdTAwMjZcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjAwNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDQ0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTItXHRjdHgtXHUwMDNlYWRkcl91bml0ID0gc3lzX2N0eC1cdTAwM2VhZGRyX3VuaXQ7XG5tbS9kYW1vbi9zeXNmcy5jOjIwNTM6XHQvKiBhZGRyX3VuaXQgaXMgcmVzcGVjdGVkIGJ5IG9ubHkgREFNT05fT1BTX1BBRERSICovXG5tbS9kYW1vbi9zeXNmcy5jOjIwNTQ6XHRpZiAoc3lzX2N0eC1cdTAwM2VvcHNfaWQgPT0gREFNT05fT1BTX1BBRERSKVxubW0vZGFtb24vc3lzZnMuYy0yMDU1LVx0XHRjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzQyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0NC1cdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzQ1Olx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0gey5pZCA9IERBTU9OX09QU19WQUREUn0sIGJhaztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNDYtXHRib29sIG5lZWRfY2xlYW51cCA9IGZhbHNlO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTAtXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUxOlx0LyogREFNT05fT1BTX1ZBRERSIGlzIHJlZ2lzdGVyZWQgb25seSBpZiBDT05GSUdfREFNT05fVkFERFIgaXMgc2V0ICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUyOlx0aWYgKCFkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhEQU1PTl9PUFNfVkFERFIpKSB7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUzOlx0XHRiYWsuaWQgPSBEQU1PTl9PUFNfVkFERFI7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzU0LVx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fcmVnaXN0ZXJfb3BzKFx1MDAyNmJhayksIDApO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTctXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzU4Olx0LyogREFNT05fT1BTX1ZBRERSIGlzIGVuc3VyZWQgdG8gYmUgcmVnaXN0ZXJlZCAqL1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1OTpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZWxlY3Rfb3BzKGMsIERBTU9OX09QU19WQUREUiksIDApO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2MC1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzY0LVx0LyogVW5rbm93biBvcHMgaWQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNjU6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2VsZWN0X29wcyhjLCBOUl9EQU1PTl9PUFMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNjYtXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2OC1cdG11dGV4X2xvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM2OTpcdGJhayA9IGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzcwOlx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzEtXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3Mi1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzM6XHRvcHMuaWQgPSBEQU1PTl9PUFNfVkFERFI7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc0LVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcdTAwMjZvcHMpLCAwKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc2LVx0bXV0ZXhfbG9jayhcdTAwMjZkYW1vbl9vcHNfbG9jayk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Mzc3Olx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IGJhaztcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzgtXHRtdXRleF91bmxvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zODYtXHRcdG11dGV4X2xvY2soXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM4NzpcdFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzg4LVx0XHRcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTk1OD1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtOTYwLVx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0ge1xubW0vZGFtb24vdmFkZHIuYzo5NjE6XHRcdC5pZCA9IERBTU9OX09QU19WQUREUixcbm1tL2RhbW9uL3ZhZGRyLmMtOTYyLVx0XHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy05NzUtXHQvKiBEb24mIzM5O3Qgc2V0IHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIGZvciB0aGUgZW50aXJlIG1hcHBpbmcgKi9cbm1tL2RhbW9uL3ZhZGRyLmM6OTc2Olx0b3BzX2Z2YWRkci5pZCA9IERBTU9OX09QU19GVkFERFI7XG5tbS9kYW1vbi92YWRkci5jLTk3Ny1cdG9wc19mdmFkZHIuaW5pdCA9IE5VTEw7XG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTA1LVx0XHRnb3RvIGZyZWVfb3V0O1xuc2FtcGxlcy9kYW1vbi9tdGllci5jOjEwNjpcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1BBRERSKSlcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMDctXHRcdGdvdG8gZnJlZV9vdXQ7XG4tLVxuc2FtcGxlcy9kYW1vbi9wcmNsLmM9NjA9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jLTcwLVx0XHRyZXR1cm4gLUVOT01FTTtcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjcxOlx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfVkFERFIpKSB7XG5zYW1wbGVzL2RhbW9uL3ByY2wuYy03Mi1cdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz02MT1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3N0YXJ0KHZvaWQpXG4tLVxuc2FtcGxlcy9kYW1vbi93c3NlLmMtNzAtXHRcdHJldHVybiAtRU5PTUVNO1xuc2FtcGxlcy9kYW1vbi93c3NlLmM6NzE6XHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19WQUREUikpIHtcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTcyLVx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3MAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgVmlydHVhbCBBZGRyZXNzIFNwYWNlIFRyYXZlcnNhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHJlbW92aW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzIGZyb20gdGhlIGBmb3JfZWFjaF92bWFgIGxvb3Agd2l0aGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgY29yZSBjaGFuZ2UgdG8gdGhlIERBTU9OIGxvZ2ljIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCwgY3JpdGljYWxseSwgKmlzKiBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgdGhlIGtleS4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBEQU1PTl9TWVNGU2AgaXMgY29ycmVjdGx5IGVuYWJsZWQgd2l0aGluIGBFbmFibGVDb25maWdzYC4gSXQmIzM5O3MgcHJldHR5IGVzc2VudGlhbCwgYXMgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBhdmVudWUgZm9yIHVzZXJzcGFjZSBpbnRlcmFjdGlvbi4gV2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgYWxzbyBhZGQgYERBTU9OX1ZBRERSYCBhbmQgdGhlIGJhc2UgYERBTU9OYCBvcHRpb25zLgoKVGhlIGZvY3VzIHN5bWJvbCBoZXJlIGlzIGRlZmluaXRlbHkgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBhbHRlcmluZyB0aGlzIHNlY3Rpb24sIHJlYWNoYWJsZSB0aHJvdWdoIHN5c2ZzLCBkZW1hbmRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBjb25jdXJyZW5jeS4gUmVtb3ZpbmcgdGhlIFJDVSBsb2NrcyBtZWFucyB3ZSAqYWJzb2x1dGVseSogbmVlZCB0byBmdXp6IHRoaXMgdG8gZW5zdXJlIHdlIGRvbiYjMzk7dCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIFZNQSB0cmF2ZXJzYWwuCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgREFNT05fU1lTRlNgIGlzIHRoZSAqb25seSogZW50cnkgcG9pbnQgZm9yIHRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uLiBJIHJlbWVtYmVyIHRoZXJlJiMzOTtzIHRoZSBgc2FtcGxlcy9kYW1vbi9wcmNsLmNgIGV4YW1wbGUsIGJ1dCB0aGF0JiMzOTtzIGp1c3QgYSBzYW1wbGU7IG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24uIEhtbSwgd2FzIHRoZXJlIGFueXRoaW5nIGVsc2U/IEFoIHllcywgYERBTU9OX0RCR0ZTYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzeXNmcywgc28sIGBEQU1PTl9TWVNGU2AgaXQgaXMhCgpTbywgdGhlIGNvbmZpZyBvcHRpb25zIEkgbmVlZCB0byBsb29rIGZvciBhcmUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBgREFNT05fU1lTRlNgLgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBhIGBmb3JfZWFjaF92bWFgIGxvb3AgaW4gYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBEQU1PTiBsb2dpYyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiBGdXp6aW5nIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhhdCByZW1vdmluZyB0aGUgUkNVIGxvY2sgZG9lcyBub3QgaW50cm9kdWNlIHVzZS1hZnRlci1mcmVlIG9yIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlcyB3aGVuIHRyYXZlcnNpbmcgVk1Bcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIFJDVSBsb2NrIGRvZXMgbm90IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiB0cmF2ZXJzaW5nIFZNQXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1MzoyMS4yMDkyMjkyMjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjQ2MDM5NDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kYW1vbl92YV90aHJlZV9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIFJDVSBsb2NrIGRvZXMgbm90IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiB0cmF2ZXJzaW5nIFZNQXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjUzOjIxLjIwOTIzODU0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMDUyMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDVkM2U1YjdiODdkOWJlNDFjYmM0NWQ0NWMzMTRkN2UxMWIzMmI3OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAxOTo1MzoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xcbmluZGV4IGQyNzE0NzYwMzU2NDFiLi4zNDViODliNWQ0NWY5ZCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXFxuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xcbkBAIC04NCw3ICs4NCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHQgKiBJZiB0aGlzIGlzIHRvbyBzbG93LCBpdCBjYW4gYmUgb3B0aW1pc2VkIHRvIGV4YW1pbmUgdGhlIG1hcGxlXFxuIFxcdCAqIHRyZWUgZ2Fwcy5cXG4gXFx0ICovXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZ2FwO1xcbiBcXG5AQCAtMTA1LDcgKzEwNCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBuZXh0OlxcbiBcXHRcXHRwcmV2ID0gdm1hO1xcbiBcXHR9XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKCFzel9yYW5nZShcXHUwMDI2c2Vjb25kX2dhcCkgfHwgIXN6X3JhbmdlKFxcdTAwMjZmaXJzdF9nYXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6MjEuNzkyNDU3NTQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTg3NzE0NjE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kYW1vbl92YV90aHJlZV9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIFJDVSBsb2NrIGRvZXMgbm90IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiB0cmF2ZXJzaW5nIFZNQXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDVkM2U1YjdiODdkOWJlNDFjYmM0NWQ0NWMzMTRkN2UxMWIzMmI3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDE5OjUzOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcbmluZGV4IGQyNzE0NzYwMzU2NDFiLi4zNDViODliNWQ0NWY5ZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC04NCw3ICs4NCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0ICogSWYgdGhpcyBpcyB0b28gc2xvdywgaXQgY2FuIGJlIG9wdGltaXNlZCB0byBleGFtaW5lIHRoZSBtYXBsZVxuIFx0ICogdHJlZSBnYXBzLlxuIFx0ICovXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBnYXA7XG4gXG5AQCAtMTA1LDcgKzEwNCw2IEBAIHN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIG5leHQ6XG4gXHRcdHByZXYgPSB2bWE7XG4gXHR9XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghc3pfcmFuZ2UoXHUwMDI2c2Vjb25kX2dhcCkgfHwgIXN6X3JhbmdlKFx1MDAyNmZpcnN0X2dhcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6MjEuNzkyNDkwODk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NTYxNTUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc3BlY2lhbGlzdCBpbiBtZW1vcnkgbWFuYWdlbWVudDpcblxuKipBbmFseXppbmcgYSBEQU1PTiBQYXRjaDogUmVtb3ZhbCBvZiBSQ1UgUHJvdGVjdGlvbioqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgREFNT04gcGF0Y2gsIHNwZWNpZmljYWxseSBvbmUgdGhhdCdzIHRvdWNoZWQgYG1tL2RhbW9uL3ZhZGRyLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlbW92YWwgb2YgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgYGZvcl9lYWNoX3ZtYWAgbG9vcCB3aXRoaW4gdGhlIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgaW50ZXJlc3RpbmcuIFdoeSBhcmUgd2UgZHJvcHBpbmcgUkNVIHByb3RlY3Rpb24gaGVyZT9cIlxuXG5UaGlzIHJhaXNlcyBzZXZlcmFsIHF1ZXN0aW9ucywgYW5kIEkgbmVlZCB0byBkaXZlIGRlZXBlci4gV2FzIHRoaXMgYW4gb3B0aW1pemF0aW9uPyBBcmUgdGhlcmUgZ3VhcmFudGVlcyBub3cgdGhhdCBtYWtlIFJDVSB1bm5lY2Vzc2FyeT8gSGF2ZSB3ZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBmb3JtIG9mIGxvY2tpbmcgb3IgcHJvdGVjdGlvbj8gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBnZXQgaW4gdGhlcmUgYW5kIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoZSBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIHdpdGhpbiB0aGUgREFNT04gY29udGV4dCBhbmQgaG93IHRoYXQgbG9vcCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBwcm9wZXJseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGNoYW5nZWQgYW5kIHdoeS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTkwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6MjUuNzM4MTEyMTM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0ICogbmVjZXNzYXJ5LlxcbiAgNzE6XFx0ICpcXG4gIDcyOlxcdCAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4gIDczOlxcdCAqL1xcbiAgNzQ6XFx0c3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuICA3NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcXG4gIDc2OlxcdHtcXG4gIDc3OlxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGZpcnN0X2dhcCA9IHswfSwgc2Vjb25kX2dhcCA9IHswfTtcXG4gIDc4OlxcdFxcdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcXG4gIDc5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldiA9IE5VTEw7XFxuICA4MDpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0O1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHQvKlxcbiAgODM6XFx0XFx0ICogRmluZCB0aGUgdHdvIGJpZ2dlc3QgZ2FwcyBzbyB0aGF0IGZpcnN0X2dhcCBcXHUwMDNlIHNlY29uZF9nYXAgXFx1MDAzZSBvdGhlcnMuXFxuICA4NDpcXHRcXHQgKiBJZiB0aGlzIGlzIHRvbyBzbG93LCBpdCBjYW4gYmUgb3B0aW1pc2VkIHRvIGV4YW1pbmUgdGhlIG1hcGxlXFxuICA4NTpcXHRcXHQgKiB0cmVlIGdhcHMuXFxuICA4NjpcXHRcXHQgKi9cXG4gIDg3OlxcdFxcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xcbiAgODg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBnYXA7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdFxcdGlmICghcHJldikge1xcbiAgOTE6XFx0XFx0XFx0XFx0c3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiAgOTI6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiAgOTM6XFx0XFx0XFx0fVxcbiAgOTQ6XFx0XFx0XFx0Z2FwID0gdm1hLVxcdTAwM2V2bV9zdGFydCAtIHByZXYtXFx1MDAzZXZtX2VuZDtcXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0XFx0aWYgKGdhcCBcXHUwMDNlIHN6X3JhbmdlKFxcdTAwMjZmaXJzdF9nYXApKSB7XFxuICA5NzpcXHRcXHRcXHRcXHRzZWNvbmRfZ2FwID0gZmlyc3RfZ2FwO1xcbiAgOTg6XFx0XFx0XFx0XFx0Zmlyc3RfZ2FwLnN0YXJ0ID0gcHJldi1cXHUwMDNldm1fZW5kO1xcbiAgOTk6XFx0XFx0XFx0XFx0Zmlyc3RfZ2FwLmVuZCA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuIDEwMDpcXHRcXHRcXHR9IGVsc2UgaWYgKGdhcCBcXHUwMDNlIHN6X3JhbmdlKFxcdTAwMjZzZWNvbmRfZ2FwKSkge1xcbiAxMDE6XFx0XFx0XFx0XFx0c2Vjb25kX2dhcC5zdGFydCA9IHByZXYtXFx1MDAzZXZtX2VuZDtcXG4gMTAyOlxcdFxcdFxcdFxcdHNlY29uZF9nYXAuZW5kID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gMTAzOlxcdFxcdFxcdH1cXG4gMTA0OlxcdG5leHQ6XFxuIDEwNTpcXHRcXHRcXHRwcmV2ID0gdm1hO1xcbiAxMDY6XFx0XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRpZiAoIXN6X3JhbmdlKFxcdTAwMjZzZWNvbmRfZ2FwKSB8fCAhc3pfcmFuZ2UoXFx1MDAyNmZpcnN0X2dhcCkpXFxuIDEwOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0LyogU29ydCB0aGUgdHdvIGJpZ2dlc3QgZ2FwcyBieSBhZGRyZXNzICovXFxuIDExMjpcXHRcXHRpZiAoZmlyc3RfZ2FwLnN0YXJ0IFxcdTAwM2Ugc2Vjb25kX2dhcC5zdGFydClcXG4gMTEzOlxcdFxcdFxcdHN3YXAoZmlyc3RfZ2FwLCBzZWNvbmRfZ2FwKTtcXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0LyogU3RvcmUgdGhlIHJlc3VsdCAqL1xcbiAxMTY6XFx0XFx0cmVnaW9uc1swXS5zdGFydCA9IEFMSUdOKHN0YXJ0LCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG4gMTE3OlxcdFxcdHJlZ2lvbnNbMF0uZW5kID0gQUxJR04oZmlyc3RfZ2FwLnN0YXJ0LCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG4gMTE4OlxcdFxcdHJlZ2lvbnNbMV0uc3RhcnQgPSBBTElHTihmaXJzdF9nYXAuZW5kLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG4gMTE5OlxcdFxcdHJlZ2lvbnNbMV0uZW5kID0gQUxJR04oc2Vjb25kX2dhcC5zdGFydCwgREFNT05fTUlOX1JFR0lPTl9TWik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjUzOjI1LjczODI5MjgyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjYwNDkwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBGdW5jdGlvbjogRmluZGluZyB0aGUgVGhyZWUgQmlnZ2VzdCBSZWdpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGlzIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGNsZWFyIOKAkyBpdCdzIGRlc2lnbmVkIHRvIGlkZW50aWZ5IHRoZSB0aHJlZSBsYXJnZXN0IHJlZ2lvbnMgd2l0aGluIGEgcHJvY2VzcydzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhIGtleSBjb21wb25lbnQgb2YgREFNT04sIHRoZSBEYXRhIEFjY2VzcyBNT05pdG9yLiBHaXZlbiBpdHMgcHVycG9zZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIG1lbW9yeSB1c2FnZSBhbmFseXNpcywgcGVyaGFwcyBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIHByb2ZpbGluZy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGFuZCB3aGVyZSBpcyBpdCB1c2VkPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBEQU1PTiBmcmFtZXdvcmsgYW5kIGhvdyBpdCBjb250cmlidXRlcyB0byB0aGUgbW9uaXRvcmluZyBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQgd2hvJ3MgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1MzoyOS40MDQzNDU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDMzNDgwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19kYW1vbl92YV90aHJlZV9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9MTc9c3RhdGljIGludCBfX2xpbmtfdm1hcyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hcyxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMzktLypcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjQwOiAqIFRlc3QgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKCkgZnVuY3Rpb25cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTQxLSAqXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTUwLSAqXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo1MTogKiAnX19kYW1vbl92YV90aHJlZV9yZWdpb25zKCkgcmVjZWl2ZXMgYW4gYWRkcmVzcyBzcGFjZSBvZiBhIHByb2Nlc3MuICBJdFxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtNTItICogZmlyc3QgaWRlbnRpZmllcyB0aGUgc3RhcnQgb2YgbWFwcGluZ3MsIGVuZCBvZiBtYXBwaW5ncywgYW5kIHRoZSB0d28gYmlnZ2VzdFxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD02Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3RocmVlX3JlZ2lvbnNfaW5fdm1hcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTgzLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6ODQ6XFx0X19kYW1vbl92YV90aHJlZV9yZWdpb25zKFxcdTAwMjZtbSwgcmVnaW9ucyk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC04NS1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3pfcmFuZ2Uoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnIpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTczLSAqL1xcbm1tL2RhbW9uL3ZhZGRyLmM6NzQ6c3RhdGljIGludCBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vZGFtb24vdmFkZHIuYy03NS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXSlcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTMxPXN0YXRpYyBpbnQgZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0xNDEtXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbm1tL2RhbW9uL3ZhZGRyLmM6MTQyOlxcdHJjID0gX19kYW1vbl92YV90aHJlZV9yZWdpb25zKG1tLCByZWdpb25zKTtcXG5tbS9kYW1vbi92YWRkci5jLTE0My1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6MzMuOTQ3NzA1Mjk2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0MzEzMDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIEl0J3MgY2FsbGVkIGZyb20gYGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLCB3aGljaCBpcyBhbHJlYWR5IGhvbGRpbmcgYW4gYG1tYXBfcmVhZF9sb2NrKG1tKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBwcm9iYWJseSBoYWQgYSByZWR1bmRhbnQgb3IgbWlzcGxhY2VkIGByY3VfcmVhZF9sb2NrKClgLiBUaGUgYGZvcl9lYWNoX3ZtYWAgbWFjcm8gdXRpbGl6ZXMgdGhlIG1hcGxlIHRyZWUsIHdoaWNoICpjYW4qIHJlcXVpcmUgYW4gUkNVIHJlYWQgbG9jayBpbnRlcm5hbGx5LCBidXQgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBgbW1hcF9yZWFkX2xvY2tgLCBpdCBzaG91bGQgYmUgdW5uZWNlc3NhcnkuXG5cbkkgaGFkIGEgbW9tZW50IG9mIGRvdWJ0IHRoZXJlOyBJIGhhZCB0byBjb25zaWRlciBpZiBgZm9yX2VhY2hfdm1hYCB3YXMgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHZtYV9uZXh0YCB3aGljaCBtaWdodCAqc3RpbGwqIG5lZWQgUkNVIGlmIHdlIHdlcmVuJ3QgaG9sZGluZyB0aGUgYG1tYXBgIGxvY2suIEJ1dCBhIHF1aWNrIGNoZWNrIHJldmVhbGVkIGBmb3JfZWFjaF92bWFgIHVzZXMgYG1hc19maW5kYCB3aGljaCAqZG9lc24ndCogcmVxdWlyZSBpdCB3aGVuIHRoZSBtbWFwIGxvY2sgaXMgaGVsZC5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgaWYgYGZvcl9lYWNoX3ZtYWAgbWlnaHQgcG90ZW50aWFsbHkgc2xlZXAsIGJ1dCB0aGVuIHJlbWVtYmVyZWQgdGhhdCBgcmN1X3JlYWRfbG9ja2AgZGlzYWJsZXMgcHJlZW1wdGlvbi4gSWYgdGhlcmUncyBzb21ldGhpbmcgKmluKiBgZm9yX2VhY2hfdm1hYCB0aGF0IGNvdWxkIHNsZWVwIHdoZW4gaG9sZGluZyB0aGlzIGxvY2ssIGl0IHdvdWxkIGJlIGEgYnVnLlxuXG5SaWdodCwgdGhlIHBhdGNoIGlzIHJlbW92aW5nIGJvdGggdGhlIGByY3VfcmVhZF9sb2NrKClgIGFuZCB0aGUgYHJjdV9yZWFkX3VubG9jaygpYC4gU28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0J3MgYWN0aXZlbHkgKnJlbW92aW5nKiB0aGUgUkNVIHJlYWQgbG9jay5cblxuR2l2ZW4gdGhpcyBpcyBhIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIERBTU9OLCB0aGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gSXQncyBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgY2hhbmdlLCBnaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1vbml0b3JpbmcgYXNwZWN0cy5cblxuTm93LCBsZXQncyBnbyBmaW5kIHRoZSByZWxldmFudCBEQU1PTiBjb25maWd1cmF0aW9uIG9wdGlvbnMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5OSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1MzozOS42OTA4NDAwODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkwOTMyNTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1Mzo0My42MDAxNzUzMDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcwNTE4MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBoYXZpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIERBTU9OJ3MgVmlydHVhbCBBZGRyZXNzIEhhbmRsaW5nKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoZSBEQU1PTiAoRHluYW1pYyBBZGRyZXNzIE1PTml0b3IpIGNvZGUsIHNwZWNpZmljYWxseSwgYG1tL2RhbW9uL3ZhZGRyLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCdzIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgZW5hYmxlcyB0aGlzIHNwZWNpZmljIHBpZWNlP1wiIEkga25vdyBJIGNhbid0IGp1c3QgYXNzdW1lIGFueXRoaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGtlcm5lbCwgc28gdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgS2NvbmZpZyBvcHRpb25zLCBvciBvdGhlciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zLCBhcmUgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiBgdmFkZHIuY2AuIFNvLCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBhYm91dCB3aGV0aGVyIHRoaXMgY29tcG9uZW50IGlzIGNvbXBpbGVkIGJhc2VkIG9uIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgaG93IHRoYXQncyB0aWVkIGludG8gdGhlIG92ZXJhbGwgREFNT04gYnVpbGQuIEkgbmVlZCB0aGF0IGNvbnRleHQgYmVmb3JlIEkgY2FuIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBpdHNlbGYuIFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjUzOjQ3LjI3MDY5NzI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTM6NDcuMjcwODIyMjUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzI3OTc0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IENoZWNrKipcblxuT2theSwgc28gdGhlIGBDT05GSUdfREFNT05fVkFERFJgIHNldHRpbmcgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZS4gTXkgbmV4dCB0aG91Z2h0IGlzLCBkb2VzIGBDT05GSUdfREFNT05gIGFsc28gbmVlZCB0byBiZSBlbmFibGVkIGZvciBgQ09ORklHX0RBTU9OX1ZBRERSYCB0byBiZSByZWxldmFudD8gU2VlbXMgbG9naWNhbCwgYnV0IGxldCdzIGp1c3QgY29uZmlybSBpdC4gWWVwLCB0aGUgZGVwZW5kZW5jeSBpcyByaWdodCB0aGVyZSBpbiB0aGUga2NvbmZpZyBmaWxlLCBgREFNT05fVkFERFJgIGRlcGVuZHMgb24gYERBTU9OYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSB0byBzZWUgdGhlIGV4cGxpY2l0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjUzOjUwLjY0MzYyMzgyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1Mzo1MC42NDM3NTgwNTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5OTc3NTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYERBTU9OYCBhbmQgYERBTU9OX1ZBRERSYC4gVGhvc2UgYXJlIGNsZWFybHkgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgRHluYW1pYyBBZGRyZXNzIE1vbml0b3JpbmcsIG9yIERBTU9OLiBUaGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gaXMgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2U/IEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGlzLiBUbyB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aG8gY2FsbHMgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIEFscmlnaHQsIGl0J3MgY2FsbGVkIGJ5IGBkYW1vbl92YV90aHJlZV9yZWdpb25zYC4gVGhhdCdzIG5vdCB1bmV4cGVjdGVkLCBidXQgZ29vZCB0byBjb25maXJtLiBOb3cgSSBjYW4gc3RhcnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1Mzo1Ny4wNDM1MzcyNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDUxMjc5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdmFfdGhyZWVfcmVnaW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTE3PXN0YXRpYyBpbnQgX19saW5rX3ZtYXMoc3RydWN0IG1hcGxlX3RyZWUgKm10LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYXMsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTM5LS8qXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDo0MDogKiBUZXN0IF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucygpIGZ1bmN0aW9uXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC00MS0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC01MC0gKlxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6NTE6ICogJ19fZGFtb25fdmFfdGhyZWVfcmVnaW9ucygpIHJlY2VpdmVzIGFuIGFkZHJlc3Mgc3BhY2Ugb2YgYSBwcm9jZXNzLiAgSXRcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTUyLSAqIGZpcnN0IGlkZW50aWZpZXMgdGhlIHN0YXJ0IG9mIG1hcHBpbmdzLCBlbmQgb2YgbWFwcGluZ3MsIGFuZCB0aGUgdHdvIGJpZ2dlc3RcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9NjY9c3RhdGljIHZvaWQgZGFtb25fdGVzdF90aHJlZV9yZWdpb25zX2luX3ZtYXMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC04My1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjg0OlxcdF9fZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhcXHUwMDI2bW0sIHJlZ2lvbnMpO1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtODUtXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTU2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHN6X3JhbmdlKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03My0gKi9cXG5tbS9kYW1vbi92YWRkci5jOjc0OnN0YXRpYyBpbnQgX19kYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2RhbW9uL3ZhZGRyLmMtNzUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIHJlZ2lvbnNbM10pXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTEzMC0gKi9cXG5tbS9kYW1vbi92YWRkci5jOjEzMTpzdGF0aWMgaW50IGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi92YWRkci5jLTEzMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSByZWdpb25zWzNdKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0xNDEtXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbm1tL2RhbW9uL3ZhZGRyLmM6MTQyOlxcdHJjID0gX19kYW1vbl92YV90aHJlZV9yZWdpb25zKG1tLCByZWdpb25zKTtcXG5tbS9kYW1vbi92YWRkci5jLTE0My1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTkxPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTk3LVxcbm1tL2RhbW9uL3ZhZGRyLmM6MTk4OlxcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKSB7XFxubW0vZGFtb24vdmFkZHIuYy0xOTktXFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjI2PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIzMS1cXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxubW0vZGFtb24vdmFkZHIuYzoyMzI6XFx0XFx0aWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucykpXFxubW0vZGFtb24vdmFkZHIuYy0yMzMtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjU0OjAxLjY4ODY3NDUwNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk5MTU4MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkludGVybmFsIERBTU9OIE9wZXJhdGlvbjogQSBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgVmFyaWFibGUgQWRkcmVzcy1iYXNlZCBNZW1vcnkgTW9uaXRvciAoREFNT04pIGlzIHdvcmtpbmcgYXQgYSBsb3cgbGV2ZWwsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nLiBJIHNlZSB0aGF0IHR3byBrZXkgZnVuY3Rpb25zLCBgX19kYW1vbl92YV9pbml0X3JlZ2lvbnNgIGFuZCBgZGFtb25fdmFfdXBkYXRlYCwgYXJlIHBpdm90YWwgaGVyZS4gVGhleSdyZSBjbGVhcmx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlcyB3aXRoaW4gREFNT04ncyB2YWRkciBvcGVyYXRpb25zIGZyYW1ld29yay4gVGhhdCdzIGdvb2QsIHNlZWluZyB0aG9zZSB0d28gZnVuY3Rpb25zIGJlaW5nIGV4cGxpY2l0bHkgbmFtZWQgaW5kaWNhdGVzIHRvIG1lIHRoYXQgREFNT04gaXMga2VlcGluZyBpdHMgdmlydHVhbCBhZGRyZXNzIHRyYWNraW5nIHdlbGwtb3JnYW5pemVkIGFuZCBtb2R1bGFyLiBJdCB0ZWxscyBtZSBgZGFtb25fdmFkZHJfb3BzYCBpcyB0aGUgbGlrZWx5IGludGVyZmFjZSBvciBjb3JlIHN0cnVjdHVyZSBhdCBwbGF5IGhlcmUsIHdoaWNoIGlzIHN0YW5kYXJkIHdoZW4gaW1wbGVtZW50aW5nIHN1Y2ggYSBtb25pdG9yLiBGcm9tIHRoZXNlIG5hbWVzIGFsb25lLCBJJ20gZXhwZWN0aW5nIGBfX2RhbW9uX3ZhX2luaXRfcmVnaW9uc2AgdG8gYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgcmVnaW9ucyB0byBtb25pdG9yIGFuZCBgZGFtb25fdmFfdXBkYXRlYCB0byBiZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIG5lY2Vzc2FyeSB1cGRhdGVzIHRvIHRoZSB2YWRkciBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHNlZSBob3cgaXQgbWFuYWdlcyB0aG9zZSByZWdpb25zLiBUaGlzIGlzIHdoYXQgSSB3YXMgZXhwZWN0aW5nIHRvIHNlZTogYSB3ZWxsLWRlZmluZWQgaW50ZXJhY3Rpb24gYmV0d2VlbiBpbml0aWFsaXphdGlvbiBhbmQgdGhlIHVwZGF0ZSBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1NDowNS40ODc4MzY1MDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTU4MjQ3ODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3ZhZGRyX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTQ6MDkuOTQzNjc0MDU3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MjM0MDM0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTZWFyY2hpbmcgZm9yIEtleSBEQU1PTiBDb21wb25lbnRzKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFZpcnR1YWwgQWRkcmVzcyAoVkEpIHVwZGF0ZSBtZWNoYW5pc20gd2l0aGluIERBTU9OIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBsaWZlY3ljbGUuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0d28gY3JpdGljYWwgZWxlbWVudHM6IGBkYW1vbl92YV91cGRhdGVgIGFuZCBgX19kYW1vbl92YV9pbml0X3JlZ2lvbnNgLiBJJ20gZ29pbmcgdG8gYmV0IHRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgb3Igc3ltYm9scyBpbnZvbHZlZCBpbiB0aGUgcHJvY2VzcyBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQuIFRoZSBmaXJzdCBpcyBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVkIGluIHRyaWdnZXJpbmcgb3IgcHJvY2Vzc2luZyBWQSB1cGRhdGVzLCB3aGlsZSB0aGUgc2Vjb25kIGxpa2VseSBpbml0aWFsaXplcyB0aGUgcmVnaW9ucyB0aGF0IERBTU9OIGlzIHdhdGNoaW5nLiBGaW5kaW5nIHRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGZvb3Rob2xkIGludG8gdGhlIGRlZXBlciB3b3JraW5ncyBvZiB0aGlzIGNvZGUuIFRoaXMgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjU0OjE3LjU2NzA3OTk4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3NTE1OTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl92YV91cGRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vdmFkZHIuYz0yMTI9c3RhdGljIHZvaWQgZGFtb25fdmFfaW5pdChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIyNS0gKi9cXG5tbS9kYW1vbi92YWRkci5jOjIyNjpzdGF0aWMgdm9pZCBkYW1vbl92YV91cGRhdGUoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjI3LXtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9OTU4PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTk2Mi1cXHRcXHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXFxubW0vZGFtb24vdmFkZHIuYzo5NjM6XFx0XFx0LnVwZGF0ZSA9IGRhbW9uX3ZhX3VwZGF0ZSxcXG5tbS9kYW1vbi92YWRkci5jLTk2NC1cXHRcXHQucHJlcGFyZV9hY2Nlc3NfY2hlY2tzID0gZGFtb25fdmFfcHJlcGFyZV9hY2Nlc3NfY2hlY2tzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1NDoyMS4xNDIyNDY4NDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyMjA3NTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEQU1PTiBJbXBsZW1lbnRhdGlvbiBKb3VybmV5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgdGhpcyBEQU1PTiBpbXBsZW1lbnRhdGlvbiBraWNrcyBvZmYuIFRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHN0YXJ0cyB3aXRoIGEgcmVnaXN0cmF0aW9uIHdpdGhpbiBgZGFtb25fdmFfaW5pdGNhbGxgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCBpdCBzZWVtcy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBvcGVyYXRpb25zIGFyZSBzcGVjaWZpY2FsbHkgcmVnaXN0ZXJlZCB0byBtb25pdG9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYXMgREFNT04gb3BlcmF0aW9ucy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIEkgc2VlIHRoYXQgdXNlcnNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIGFuZCBjb25maWd1cmUgdGhpcyBEQU1PTiBmdW5jdGlvbmFsaXR5IHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcy4gVGhhdCBnaXZlcyB1cyBmbGV4aWJpbGl0eS4gVG8gZGVsdmUgZGVlcGVyIGludG8gdGhpcyBpbml0aWFsIHNldHVwIGFuZCBjb25maXJtIG15IGh5cG90aGVzaXMgYWJvdXQgYGRhbW9uX3ZhX2luaXRjYWxsYCwgSSdsbCBjaGVjayBgbW0vZGFtb24vdmFkZHIuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1NDoyNi4xNjQzMjk1ODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL3ZhZGRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdFxcdFxcdHJldHVybiBkYW1vbl9jb2xkX3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XFxuIDk1MTpcXHRcXHRkZWZhdWx0OlxcbiA5NTI6XFx0XFx0XFx0YnJlYWs7XFxuIDk1MzpcXHRcXHR9XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdHJldHVybiBEQU1PU19NQVhfU0NPUkU7XFxuIDk1NjpcXHR9XFxuIDk1NzpcXHRcXG4gOTU4OlxcdHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuIDk1OTpcXHR7XFxuIDk2MDpcXHRcXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHMgPSB7XFxuIDk2MTpcXHRcXHRcXHQuaWQgPSBEQU1PTl9PUFNfVkFERFIsXFxuIDk2MjpcXHRcXHRcXHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXFxuIDk2MzpcXHRcXHRcXHQudXBkYXRlID0gZGFtb25fdmFfdXBkYXRlLFxcbiA5NjQ6XFx0XFx0XFx0LnByZXBhcmVfYWNjZXNzX2NoZWNrcyA9IGRhbW9uX3ZhX3ByZXBhcmVfYWNjZXNzX2NoZWNrcyxcXG4gOTY1OlxcdFxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxcbiA5NjY6XFx0XFx0XFx0LnRhcmdldF92YWxpZCA9IGRhbW9uX3ZhX3RhcmdldF92YWxpZCxcXG4gOTY3OlxcdFxcdFxcdC5jbGVhbnVwX3RhcmdldCA9IGRhbW9uX3ZhX2NsZWFudXBfdGFyZ2V0LFxcbiA5Njg6XFx0XFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3ZhX2FwcGx5X3NjaGVtZSxcXG4gOTY5OlxcdFxcdFxcdC5nZXRfc2NoZW1lX3Njb3JlID0gZGFtb25fdmFfc2NoZW1lX3Njb3JlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxOTo1NDoyNi4xNjQ0OTc4MzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMDk1NzYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFjY2Vzc2liaWxpdHkgYW5kIFRlc3RhYmlsaXR5IG9mIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBpcyByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgdGVzdGFibGUuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxscyBmcm9tIHRoYXQgZnVuY3Rpb24sIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQncyB3b3J0aCBhIGdvb2QgZnV6emluZyBjYW1wYWlnbi4gSSdtIGdvaW5nIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMuXG5cbk15IHByaW1hcnkgZm9jdXMgZm9yIHRlc3Rpbmcgd2lsbCBiZSBvbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYCBpdHNlbGYsIGFuZCBJJ2xsIGFsc28gd2FudCB0byBsb29rIGF0IGBkYW1vbl92YV90aHJlZV9yZWdpb25zYCwgYGRhbW9uX3ZhX3VwZGF0ZWAsIGFuZCBgZGFtb25fdmFfaW5pdGAuIFRob3NlIGFyZSB0aGUgY29yZSBzeW1ib2xzIHRoYXQgdGhpcyBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cy5cblxuQmV5b25kIHRoYXQsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBjb2RlIHBhdGguIEkga25vdyBgREFNT05gIGFuZCBgREFNT05fVkFERFJgIGFyZSBlc3NlbnRpYWwuIEJ1dCBhcmUgdGhlcmUgb3RoZXJzLCBsaWtlIGBEQU1PTl9TWVNGU2AsIHRoYXQgbWlnaHQgYmUgbmVlZGVkIHRvIGV4cG9zZSB0aGlzIGZ1bmN0aW9uYWxpdHkgZnJvbSB1c2VyIHNwYWNlP1xuXG5JJ2xsIGNoZWNrIGBtbS9kYW1vbi9zeXNmcy5jYCBvciBzaW1pbGFyIGZpbGVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0gdG8gYmUgc3VyZS4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIGVudGlyZSBjYWxsIHN0YWNrIGZyb20gdXNlcnNwYWNlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxNiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjU0OjMwLjc5NTQ1ODcyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5NzY4MjQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTl9PUFNfVkFERFJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTM4ND1zdHJ1Y3QgZGFtb3Nfc3RhdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDEzLSAqIFxcdTAwMjZlbnVtIERBTU9OX09QU19QQUREUiBzdXBwb3J0cyBib3RoIGFub24gcGFnZXMgdHlwZSBhbmQgbWVtY2cgdHlwZSBmaWx0ZXJzLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0MTQ6ICogd2hpbGUgXFx1MDAyNmVudW0gREFNT05fT1BTX1ZBRERSIGFuZCBcXHUwMDI2ZW51bSBEQU1PTl9PUFNfRlZBRERSIGRvbid0IHN1cHBvcnQgYW55IG9mXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTQxNS0gKiB0aGUgdHdvIHR5cGVzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTU3Mj1zdHJ1Y3QgZGFtb3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxMS0gKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTI6ICogQERBTU9OX09QU19WQUREUjpcXHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjEzLSAqIEBEQU1PTl9PUFNfRlZBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3Igb25seSBmaXhlZCByYW5nZXMgb2YgdmlydHVhbFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTYxOD1lbnVtIGRhbW9uX29wc19pZCB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxOTpcXHREQU1PTl9PUFNfVkFERFIsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYyMC1cXHREQU1PTl9PUFNfRlZBRERSLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA2My17XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjQ6XFx0cmV0dXJuIGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXFx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTM1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIGRhbW9uX3N5c2ZzX29wc19uYW1lc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTM1Ny1cXHR7XFxubW0vZGFtb24vc3lzZnMuYzoxMzU4OlxcdFxcdC5vcHNfaWQgPSBEQU1PTl9PUFNfVkFERFIsXFxubW0vZGFtb24vc3lzZnMuYy0xMzU5LVxcdFxcdC5uYW1lID0gXFxcInZhZGRyXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTY1Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE2NjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2NvbnRleHRzOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy5jOjE2Njk6XFx0XFx0Y29udGV4dCA9IGRhbW9uX3N5c2ZzX2NvbnRleHRfYWxsb2MoREFNT05fT1BTX1ZBRERSKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NzAtXFx0XFx0aWYgKCFjb250ZXh0KSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MzQyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzQ0LVxcdHN0cnVjdCBkYW1vbl9jdHggKmMgPSBkYW1vbl9uZXdfY3R4KCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM0NTpcXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHMgPSB7LmlkID0gREFNT05fT1BTX1ZBRERSfSwgYmFrO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNDYtXFx0Ym9vbCBuZWVkX2NsZWFudXAgPSBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTAtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1MTpcXHQvKiBEQU1PTl9PUFNfVkFERFIgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkZJR19EQU1PTl9WQUREUiBpcyBzZXQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUyOlxcdGlmICghZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoREFNT05fT1BTX1ZBRERSKSkge1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTM6XFx0XFx0YmFrLmlkID0gREFNT05fT1BTX1ZBRERSO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTQtXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcXHUwMDI2YmFrKSwgMCk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzU3LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTg6XFx0LyogREFNT05fT1BTX1ZBRERSIGlzIGVuc3VyZWQgdG8gYmUgcmVnaXN0ZXJlZCAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTk6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NlbGVjdF9vcHMoYywgREFNT05fT1BTX1ZBRERSKSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2MC1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNjgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNjk6XFx0YmFrID0gZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzcwOlxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSAoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3MS1cXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzcyLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzM6XFx0b3BzLmlkID0gREFNT05fT1BTX1ZBRERSO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzQtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3JlZ2lzdGVyX29wcyhcXHUwMDI2b3BzKSwgMCk7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc2LVxcdG11dGV4X2xvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Mzc3OlxcdGRhbW9uX3JlZ2lzdGVyZWRfb3BzW0RBTU9OX09QU19WQUREUl0gPSBiYWs7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3OC1cXHRtdXRleF91bmxvY2soXFx1MDAyNmRhbW9uX29wc19sb2NrKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zODYtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozODc6XFx0XFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM4OC1cXHRcXHRcXHQoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMpe307XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTk1OD1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl92YV9pbml0Y2FsbCh2b2lkKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy05NjAtXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0ge1xcbm1tL2RhbW9uL3ZhZGRyLmM6OTYxOlxcdFxcdC5pZCA9IERBTU9OX09QU19WQUREUixcXG5tbS9kYW1vbi92YWRkci5jLTk2Mi1cXHRcXHQuaW5pdCA9IGRhbW9uX3ZhX2luaXQsXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz02MD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy03MC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzo3MTpcXHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19WQUREUikpIHtcXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy03Mi1cXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbi0tXFxuc2FtcGxlcy9kYW1vbi93c3NlLmM9NjE9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi93c3NlLmMtNzAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuc2FtcGxlcy9kYW1vbi93c3NlLmM6NzE6XFx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfVkFERFIpKSB7XFxuc2FtcGxlcy9kYW1vbi93c3NlLmMtNzItXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTQ6MzMuNzkzMTUwMjU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDA3NDI5MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgREFNT04gQ29uZmlndXJhdGlvbiBNZXRob2RzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggREFNT04gZnJvbSB1c2Vyc3BhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyBgREFNT05fU1lTRlNgLCB3aGljaCBpcyB0aGUgb2J2aW91cyBjYW5kaWRhdGUgZm9yIGNvbmZpZ3VyYXRpb24uIEJ1dCwgYmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgc2hvdWxkIGRvIGEgcXVpY2sgc3dlZXAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXZhaWxhYmxlIGludGVyZmFjZXMuXG5cbkhtbSwgdGhlcmUncyBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fU1RBVGAg4oCTIGFsbCBzZWVtIHJlbGF0ZWQgdG8gREFNT04ncyBvcGVyYXRpb25zLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSB1c2luZyBgREFNT05fT1BTX1BBRERSYCBvciBgREFNT05fT1BTX1ZBRERSYD8gVGhhdCdzIHRoZSBjcnVjaWFsIGRldGFpbCBJIG5lZWQgdG8gYXNjZXJ0YWluLlxuXG5UbyBnZXQgYSBjb25jcmV0ZSBhbnN3ZXIsIEkgc2hvdWxkIGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL2RhbW9uL3JlY2xhaW0uY2AuIFRoYXQgc2hvdWxkIHJldmVhbCB3aGljaCBzZXQgb2YgREFNT04gb3BlcmF0aW9ucyB0aGVzZSBvdGhlciBpbnRlcmZhY2VzIGFyZSBhY3R1YWxseSBlbXBsb3lpbmcuIEdyYWJiaW5nIHRoYXQgaW5mb3JtYXRpb24gd2lsbCBoZWxwIGRldGVybWluZSB0aGUgZnVsbCBsYW5kc2NhcGUgb2YgaW50ZXJhY3Rpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTQ6NDMuODAwNTgzMjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU0OTg5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRBTU9OX09QU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mzg0PXN0cnVjdCBkYW1vc19zdGF0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC00MTItICogb24gdGhlIHJ1bm5pbmcgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo0MTM6ICogXFx1MDAyNmVudW0gREFNT05fT1BTX1BBRERSIHN1cHBvcnRzIGJvdGggYW5vbiBwYWdlcyB0eXBlIGFuZCBtZW1jZyB0eXBlIGZpbHRlcnMsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjQxNDogKiB3aGlsZSBcXHUwMDI2ZW51bSBEQU1PTl9PUFNfVkFERFIgYW5kIFxcdTAwMjZlbnVtIERBTU9OX09QU19GVkFERFIgZG9uJ3Qgc3VwcG9ydCBhbnkgb2ZcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNDE1LSAqIHRoZSB0d28gdHlwZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NTcyPXN0cnVjdCBkYW1vcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjExLSAqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxMjogKiBAREFNT05fT1BTX1ZBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTM6ICogQERBTU9OX09QU19GVkFERFI6XFx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxNC0gKlxcdFxcdFxcdGFkZHJlc3Mgc3BhY2VzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxNTogKiBAREFNT05fT1BTX1BBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjE2OiAqIEBOUl9EQU1PTl9PUFM6XFx0TnVtYmVyIG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBpbXBsZW1lbnRhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE3LSAqL1xcbmluY2x1ZGUvbGludXgvZGFtb24uaD02MTg9ZW51bSBkYW1vbl9vcHNfaWQge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MTk6XFx0REFNT05fT1BTX1ZBRERSLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2MjA6XFx0REFNT05fT1BTX0ZWQUREUixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjIxOlxcdERBTU9OX09QU19QQUREUixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjIyOlxcdE5SX0RBTU9OX09QUyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjIzLX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDYzLXtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA2NDpcXHRyZXR1cm4gY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNjUtfVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxPXN0YXRpYyBERUZJTkVfTVVURVgoZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYzozMjpzdGF0aWMgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgZGFtb25fcmVnaXN0ZXJlZF9vcHNbTlJfREFNT05fT1BTXTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMtXFxubW0vZGFtb24vY29yZS5jPTM0PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGFtb25fcmVnaW9uX2NhY2hlIF9fcm9fYWZ0ZXJfaW5pdDtcXG5tbS9kYW1vbi9jb3JlLmMtMzUtXFxubW0vZGFtb24vY29yZS5jOjM2Oi8qIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgZGFtb25fb3BzX2xvY2sgd2l0aCBpZCBzbWFsbGVyIHRoYW4gTlJfREFNT05fT1BTICovXFxubW0vZGFtb24vY29yZS5jLTM3LXN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NTI9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy01NS1cXG5tbS9kYW1vbi9jb3JlLmM6NTY6XFx0aWYgKGlkIFxcdTAwM2U9IE5SX0RBTU9OX09QUylcXG5tbS9kYW1vbi9jb3JlLmMtNTctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTczPWludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03Ni1cXG5tbS9kYW1vbi9jb3JlLmM6Nzc6XFx0aWYgKG9wcy1cXHUwMDNlaWQgXFx1MDAzZT0gTlJfREFNT05fT1BTKVxcbm1tL2RhbW9uL2NvcmUuYy03OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDA9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDMtXFxubW0vZGFtb24vY29yZS5jOjEwNDpcXHRpZiAoaWQgXFx1MDAzZT0gTlJfREFNT05fT1BTKVxcbm1tL2RhbW9uL2NvcmUuYy0xMDUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU3Mz1pbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTgzLVxcdC8qIG5vZGVfZWxpZ2libGVfbWVtX2JwIG1ldHJpYyByZXF1aXJlcyBQQUREUiBvcHMgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTU4NDpcXHRpZiAoc3JjLVxcdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKSB7XFxubW0vZGFtb24vY29yZS5jLTE1ODUtXFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjczMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzM4LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzM5OlxcdGlmIChjLVxcdTAwM2VvcHMuaWQgIT0gREFNT05fT1BTX1BBRERSKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzQwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYz0xNz1pbnQgZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cCxcXG4tLVxcbm1tL2RhbW9uL21vZHVsZXMtY29tbW9uLmMtMjYtXFxubW0vZGFtb24vbW9kdWxlcy1jb21tb24uYzoyNzpcXHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19QQUREUikpIHtcXG5tbS9kYW1vbi9tb2R1bGVzLWNvbW1vbi5jLTI4LVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTQ0MT1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy00NDMtXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0ge1xcbm1tL2RhbW9uL3BhZGRyLmM6NDQ0OlxcdFxcdC5pZCA9IERBTU9OX09QU19QQUREUixcXG5tbS9kYW1vbi9wYWRkci5jLTQ0NS1cXHRcXHQuaW5pdCA9IE5VTEwsXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MTUxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zdGF0X2J1aWxkX2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE3OC1cXG5tbS9kYW1vbi9zdGF0LmM6MTc5OlxcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1BBRERSKSlcXG5tbS9kYW1vbi9zdGF0LmMtMTgwLVxcdFxcdGdvdG8gZnJlZV9vdXQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTEzNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEzNTctXFx0e1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTM1ODpcXHRcXHQub3BzX2lkID0gREFNT05fT1BTX1ZBRERSLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTM1OS1cXHRcXHQubmFtZSA9IFxcXCJ2YWRkclxcXCIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEzNjEtXFx0e1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTM2MjpcXHRcXHQub3BzX2lkID0gREFNT05fT1BTX0ZWQUREUixcXG5tbS9kYW1vbi9zeXNmcy5jLTEzNjMtXFx0XFx0Lm5hbWUgPSBcXFwiZnZhZGRyXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTM2NS1cXHR7XFxubW0vZGFtb24vc3lzZnMuYzoxMzY2OlxcdFxcdC5vcHNfaWQgPSBEQU1PTl9PUFNfUEFERFIsXFxubW0vZGFtb24vc3lzZnMuYy0xMzY3LVxcdFxcdC5uYW1lID0gXFxcInBhZGRyXFxcIixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTY1Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE2NjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2NvbnRleHRzOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy5jOjE2Njk6XFx0XFx0Y29udGV4dCA9IGRhbW9uX3N5c2ZzX2NvbnRleHRfYWxsb2MoREFNT05fT1BTX1ZBRERSKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NzAtXFx0XFx0aWYgKCFjb250ZXh0KSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE5OTg9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMDMtXFx0LyogTXVsdGlwbGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIHRhcmdldHMgbWFrZXMgbm8gc2Vuc2UgKi9cXG5tbS9kYW1vbi9zeXNmcy5jOjIwMDQ6XFx0aWYgKGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19QQUREUiBcXHUwMDI2XFx1MDAyNiBzeXNmc190YXJnZXRzLVxcdTAwM2VuciBcXHUwMDNlIDEpXFxubW0vZGFtb24vc3lzZnMuYy0yMDA1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDQ0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1Mi1cXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCA9IHN5c19jdHgtXFx1MDAzZWFkZHJfdW5pdDtcXG5tbS9kYW1vbi9zeXNmcy5jOjIwNTM6XFx0LyogYWRkcl91bml0IGlzIHJlc3BlY3RlZCBieSBvbmx5IERBTU9OX09QU19QQUREUiAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjA1NDpcXHRpZiAoc3lzX2N0eC1cXHUwMDNlb3BzX2lkID09IERBTU9OX09QU19QQUREUilcXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTUtXFx0XFx0Y3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gbWF4KFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTM0Mj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM0NC1cXHRzdHJ1Y3QgZGFtb25fY3R4ICpjID0gZGFtb25fbmV3X2N0eCgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNDU6XFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzID0gey5pZCA9IERBTU9OX09QU19WQUREUn0sIGJhaztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzQ2LVxcdGJvb2wgbmVlZF9jbGVhbnVwID0gZmFsc2U7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzUwLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNTE6XFx0LyogREFNT05fT1BTX1ZBRERSIGlzIHJlZ2lzdGVyZWQgb25seSBpZiBDT05GSUdfREFNT05fVkFERFIgaXMgc2V0ICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1MjpcXHRpZiAoIWRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKERBTU9OX09QU19WQUREUikpIHtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzUzOlxcdFxcdGJhay5pZCA9IERBTU9OX09QU19WQUREUjtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzU0LVxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9yZWdpc3Rlcl9vcHMoXFx1MDAyNmJhayksIDApO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM1Ny1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzU4OlxcdC8qIERBTU9OX09QU19WQUREUiBpcyBlbnN1cmVkIHRvIGJlIHJlZ2lzdGVyZWQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MzU5OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZWxlY3Rfb3BzKGMsIERBTU9OX09QU19WQUREUiksIDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNjAtXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzY0LVxcdC8qIFVua25vd24gb3BzIGlkIGNhbm5vdCBiZSByZWdpc3RlcmVkICovXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM2NTpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2VsZWN0X29wcyhjLCBOUl9EQU1PTl9PUFMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzY2LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM2OC1cXHRtdXRleF9sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM2OTpcXHRiYWsgPSBkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzA6XFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzcxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzItXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM3MzpcXHRvcHMuaWQgPSBEQU1PTl9PUFNfVkFERFI7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM3NC1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fcmVnaXN0ZXJfb3BzKFxcdTAwMjZvcHMpLCAwKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNzYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDozNzc6XFx0ZGFtb25fcmVnaXN0ZXJlZF9vcHNbREFNT05fT1BTX1ZBRERSXSA9IGJhaztcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzc4LVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGFtb25fb3BzX2xvY2spO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM4Ni1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkYW1vbl9vcHNfbG9jayk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM4NzpcXHRcXHRkYW1vbl9yZWdpc3RlcmVkX29wc1tEQU1PTl9PUFNfVkFERFJdID1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzg4LVxcdFxcdFxcdChzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyl7fTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9OTU4PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTk2MC1cXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHMgPSB7XFxubW0vZGFtb24vdmFkZHIuYzo5NjE6XFx0XFx0LmlkID0gREFNT05fT1BTX1ZBRERSLFxcbm1tL2RhbW9uL3ZhZGRyLmMtOTYyLVxcdFxcdC5pbml0ID0gZGFtb25fdmFfaW5pdCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtOTc1LVxcdC8qIERvbid0IHNldCB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBmb3IgdGhlIGVudGlyZSBtYXBwaW5nICovXFxubW0vZGFtb24vdmFkZHIuYzo5NzY6XFx0b3BzX2Z2YWRkci5pZCA9IERBTU9OX09QU19GVkFERFI7XFxubW0vZGFtb24vdmFkZHIuYy05NzctXFx0b3BzX2Z2YWRkci5pbml0ID0gTlVMTDtcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYz03Mz1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTA1LVxcdFxcdGdvdG8gZnJlZV9vdXQ7XFxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjEwNjpcXHRpZiAoZGFtb25fc2VsZWN0X29wcyhjdHgsIERBTU9OX09QU19QQUREUikpXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwNy1cXHRcXHRnb3RvIGZyZWVfb3V0O1xcbi0tXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmM9NjA9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNzAtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuc2FtcGxlcy9kYW1vbi9wcmNsLmM6NzE6XFx0aWYgKGRhbW9uX3NlbGVjdF9vcHMoY3R4LCBEQU1PTl9PUFNfVkFERFIpKSB7XFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtNzItXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4tLVxcbnNhbXBsZXMvZGFtb24vd3NzZS5jPTYxPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcXG4tLVxcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTcwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbnNhbXBsZXMvZGFtb24vd3NzZS5jOjcxOlxcdGlmIChkYW1vbl9zZWxlY3Rfb3BzKGN0eCwgREFNT05fT1BTX1ZBRERSKSkge1xcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTcyLVxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE5OjU0OjQ2LjM1NTU3OTU5N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTY5Nzg4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIFZpcnR1YWwgQWRkcmVzcyBTcGFjZSBUcmF2ZXJzYWwqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHJlbW92aW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGxzIGZyb20gdGhlIGBmb3JfZWFjaF92bWFgIGxvb3Agd2l0aGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgY29yZSBjaGFuZ2UgdG8gdGhlIERBTU9OIGxvZ2ljIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCwgY3JpdGljYWxseSwgKmlzKiBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIFRoYXQncyB0aGUga2V5LlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgREFNT05fU1lTRlNgIGlzIGNvcnJlY3RseSBlbmFibGVkIHdpdGhpbiBgRW5hYmxlQ29uZmlnc2AuIEl0J3MgcHJldHR5IGVzc2VudGlhbCwgYXMgdGhhdCdzIHRoZSBwcmltYXJ5IGF2ZW51ZSBmb3IgdXNlcnNwYWNlIGludGVyYWN0aW9uLiBXaGlsZSBJJ20gYXQgaXQsIEkgc2hvdWxkIGFsc28gYWRkIGBEQU1PTl9WQUREUmAgYW5kIHRoZSBiYXNlIGBEQU1PTmAgb3B0aW9ucy5cblxuVGhlIGZvY3VzIHN5bWJvbCBoZXJlIGlzIGRlZmluaXRlbHkgYF9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc2AuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBhbHRlcmluZyB0aGlzIHNlY3Rpb24sIHJlYWNoYWJsZSB0aHJvdWdoIHN5c2ZzLCBkZW1hbmRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBjb25jdXJyZW5jeS4gUmVtb3ZpbmcgdGhlIFJDVSBsb2NrcyBtZWFucyB3ZSAqYWJzb2x1dGVseSogbmVlZCB0byBmdXp6IHRoaXMgdG8gZW5zdXJlIHdlIGRvbid0IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIG90aGVyIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgVk1BIHRyYXZlcnNhbC5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYERBTU9OX1NZU0ZTYCBpcyB0aGUgKm9ubHkqIGVudHJ5IHBvaW50IGZvciB0aGlzIGtpbmQgb2YgY29uZmlndXJhdGlvbi4gSSByZW1lbWJlciB0aGVyZSdzIHRoZSBgc2FtcGxlcy9kYW1vbi9wcmNsLmNgIGV4YW1wbGUsIGJ1dCB0aGF0J3MganVzdCBhIHNhbXBsZTsgbm90IHBhcnQgb2YgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gSG1tLCB3YXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gQWggeWVzLCBgREFNT05fREJHRlNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHN5c2ZzLCBzbywgYERBTU9OX1NZU0ZTYCBpdCBpcyFcblxuU28sIHRoZSBjb25maWcgb3B0aW9ucyBJIG5lZWQgdG8gbG9vayBmb3IgYXJlIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgYERBTU9OX1NZU0ZTYC5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3MCwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTk6NTQ6NTMuNTI1MzcyMjk1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjIyMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kYW1vbl92YV90aHJlZV9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYSBgZm9yX2VhY2hfdm1hYCBsb29wIGluIGBfX2RhbW9uX3ZhX3RocmVlX3JlZ2lvbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgREFNT04gbG9naWMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlIFJDVSBsb2NrIGRvZXMgbm90IGludHJvZHVjZSB1c2UtYWZ0ZXItZnJlZSBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiB0cmF2ZXJzaW5nIFZNQXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZGFtb25fdmFfdGhyZWVfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIGEgYGZvcl9lYWNoX3ZtYWAgbG9vcCBpbiBgX19kYW1vbl92YV90aHJlZV9yZWdpb25zYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZSBSQ1UgbG9jayBkb2VzIG5vdCBpbnRyb2R1Y2UgdXNlLWFmdGVyLWZyZWUgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIHdoZW4gdHJhdmVyc2luZyBWTUFzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[1] Phase: Succeeded StartedAt: 2026-06-30 19:55:16 +0000 UTC FinishedAt: 2026-06-30 19:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 19:55:16 +0000 UTC FinishedAt: 2026-06-30 19:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2] Phase: Succeeded StartedAt: 2026-06-30 19:55:16 +0000 UTC FinishedAt: 2026-06-30 23:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 19:55:16 +0000 UTC FinishedAt: 2026-06-30 23:45:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 19:55:16 +0000 UTC FinishedAt: 2026-06-30 19:55:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 19:55:16 +0000 UTC FinishedAt: 2026-06-30 19:55:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvgl5t/series-workflowvgl5t-convert-artifact-2908281321/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 19:55:26 +0000 UTC FinishedAt: 2026-06-30 20:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 19:55:26 +0000 UTC FinishedAt: 2026-06-30 20:18:08 +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:*8964bf97-ec8e-4519-9d4a-ce939bee0e33,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-workflowvgl5t/series-workflowvgl5t-convert-artifact-2908281321/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": "44a06231-4adf-4cfe-b278-dec756558988", "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-workflowvgl5t/series-workflowvgl5t-build-action-1312599367/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 19:55:26 +0000 UTC FinishedAt: 2026-06-30 20:17: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:*8964bf97-ec8e-4519-9d4a-ce939bee0e33,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-workflowvgl5t/series-workflowvgl5t-convert-artifact-2908281321/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": "44a06231-4adf-4cfe-b278-dec756558988", "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-workflowvgl5t/series-workflowvgl5t-build-action-1312599367/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:18:08 +0000 UTC FinishedAt: 2026-06-30 20:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:18:08 +0000 UTC FinishedAt: 2026-06-30 20:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:18:08 +0000 UTC FinishedAt: 2026-06-30 20:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:18:08 +0000 UTC FinishedAt: 2026-06-30 20:18:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-workflowvgl5t/series-workflowvgl5t-convert-artifact-2618359420/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:18:29 +0000 UTC FinishedAt: 2026-06-30 20:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:18:29 +0000 UTC FinishedAt: 2026-06-30 20:20:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*44a06231-4adf-4cfe-b278-dec756558988,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-workflowvgl5t/series-workflowvgl5t-build-action-1312599367/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-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:20:40 +0000 UTC FinishedAt: 2026-06-30 20:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:20:40 +0000 UTC FinishedAt: 2026-06-30 20:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:20:40 +0000 UTC FinishedAt: 2026-06-30 20:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:20:40 +0000 UTC FinishedAt: 2026-06-30 20:42:04 +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:*8964bf97-ec8e-4519-9d4a-ce939bee0e33,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-workflowvgl5t/series-workflowvgl5t-convert-artifact-2618359420/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": "ed128167-5220-4c06-8dcc-b1cb9d2e047f", "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-workflowvgl5t/series-workflowvgl5t-build-action-3927407320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:20:40 +0000 UTC FinishedAt: 2026-06-30 20:41:54 +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:*8964bf97-ec8e-4519-9d4a-ce939bee0e33,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-workflowvgl5t/series-workflowvgl5t-convert-artifact-2618359420/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": "ed128167-5220-4c06-8dcc-b1cb9d2e047f", "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-workflowvgl5t/series-workflowvgl5t-build-action-3927407320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:42:04 +0000 UTC FinishedAt: 2026-06-30 20:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:42:04 +0000 UTC FinishedAt: 2026-06-30 20:42:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:42:04 +0000 UTC FinishedAt: 2026-06-30 20:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:42:04 +0000 UTC FinishedAt: 2026-06-30 20:43:49 +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:*ed128167-5220-4c06-8dcc-b1cb9d2e047f,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-workflowvgl5t/series-workflowvgl5t-build-action-3927407320/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-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:43:58 +0000 UTC FinishedAt: 2026-06-30 23:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:43:58 +0000 UTC FinishedAt: 2026-06-30 23:45:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__damon_va_three_regions"],"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:*44a06231-4adf-4cfe-b278-dec756558988,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed128167-5220-4c06-8dcc-b1cb9d2e047f,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-workflowvgl5t/series-workflowvgl5t-build-action-1312599367/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-workflowvgl5t/series-workflowvgl5t-build-action-3927407320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:43:58 +0000 UTC FinishedAt: 2026-06-30 20:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:43:58 +0000 UTC FinishedAt: 2026-06-30 20:44:05 +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":["__damon_va_three_regions"],"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-workflowvgl5t/series-workflowvgl5t-convert-artifact-2007139909/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:43:58 +0000 UTC FinishedAt: 2026-06-30 20:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:43:58 +0000 UTC FinishedAt: 2026-06-30 20:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:43:58 +0000 UTC FinishedAt: 2026-06-30 20:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:44:08 +0000 UTC FinishedAt: 2026-06-30 23:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvgl5t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"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":["__damon_va_three_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bfcc55a14179495b0c41408908fd7b9d7785c694","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"7e52dbf5-9224-4c32-bd97-a69a3add4e96","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-30 20:44:08 +0000 UTC FinishedAt: 2026-06-30 23:45:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*44a06231-4adf-4cfe-b278-dec756558988,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed128167-5220-4c06-8dcc-b1cb9d2e047f,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-workflowvgl5t/series-workflowvgl5t-build-action-1312599367/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-workflowvgl5t/series-workflowvgl5t-build-action-3927407320/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-workflowvgl5t/series-workflowvgl5t-convert-artifact-2007139909/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,}